|  |  |  | <?php
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace backend\controllers;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use core\entities\Search;
 | 
					
						
							|  |  |  | use core\forms\SearchForm;
 | 
					
						
							|  |  |  | use core\services\user\UserManageService;
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | use yii\data\ActiveDataProvider;
 | 
					
						
							|  |  |  | use yii\web\Controller;
 | 
					
						
							|  |  |  | use yii\filters\VerbFilter;
 | 
					
						
							|  |  |  | use yii\filters\AccessControl;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Site controller
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | class SiteController extends Controller
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  |     private $_service;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function __construct(string $id, $module, UserManageService $service, array $config = [])
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         parent::__construct($id, $module, $config);
 | 
					
						
							|  |  |  |         $this->_service = $service;
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @inheritdoc
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function behaviors()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         return [
 | 
					
						
							|  |  |  |             'access' => [
 | 
					
						
							|  |  |  |                 'class' => AccessControl::class,
 | 
					
						
							|  |  |  |                 'rules' => [
 | 
					
						
							|  |  |  |                     [
 | 
					
						
							|  |  |  |                         'actions' => ['error'],
 | 
					
						
							|  |  |  |                         'allow'   => true,
 | 
					
						
							|  |  |  |                     ],
 | 
					
						
							|  |  |  |                     [
 | 
					
						
							|  |  |  |                         'actions' => ['index', 'search', 'language'],
 | 
					
						
							|  |  |  |                         'allow'   => true,
 | 
					
						
							|  |  |  |                         'roles'   => ['Dashboard'],
 | 
					
						
							|  |  |  |                     ],
 | 
					
						
							|  |  |  |                     [    // all the action are accessible to admin
 | 
					
						
							|  |  |  |                         'allow' => true,
 | 
					
						
							|  |  |  |                         'roles' => ['admin'],
 | 
					
						
							|  |  |  |                     ],
 | 
					
						
							|  |  |  |                 ],
 | 
					
						
							|  |  |  |             ],
 | 
					
						
							|  |  |  |             'verbs'  => [
 | 
					
						
							|  |  |  |                 'class'   => VerbFilter::class,
 | 
					
						
							|  |  |  |                 'actions' => [
 | 
					
						
							|  |  |  |                     'logout'   => ['post'],
 | 
					
						
							|  |  |  |                     'language' => ['post'],
 | 
					
						
							|  |  |  |                 ],
 | 
					
						
							|  |  |  |             ],
 | 
					
						
							|  |  |  |         ];
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @inheritdoc
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function actions()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         return [
 | 
					
						
							|  |  |  |             'error' => [
 | 
					
						
							|  |  |  |                 'class' => 'yii\web\ErrorAction',
 | 
					
						
							|  |  |  |             ],
 | 
					
						
							|  |  |  |         ];
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Displays homepage.
 | 
					
						
							|  |  |  |      *
 | 
					
						
							|  |  |  |      * @return string
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function actionIndex()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         return $this->render('index');
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function actionSearch()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $form = new SearchForm();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($form->load(Yii::$app->request->post()) && $form->validate()) {
 | 
					
						
							|  |  |  |             try {
 | 
					
						
							|  |  |  |                 $query = Search::find()
 | 
					
						
							|  |  |  |                                ->andWhere(['LIKE', 'title', $form->query])
 | 
					
						
							|  |  |  |                                ->orWhere(['LIKE', 'content', $form->query]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $provider = new ActiveDataProvider([
 | 
					
						
							|  |  |  |                     'query'      => $query,
 | 
					
						
							|  |  |  |                     'pagination' => [
 | 
					
						
							|  |  |  |                         'pageSize' => 10,
 | 
					
						
							|  |  |  |                     ],
 | 
					
						
							|  |  |  |                     'sort'       => [],
 | 
					
						
							|  |  |  |                 ]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return $this->render('search', [
 | 
					
						
							|  |  |  |                     'provider' => $provider,
 | 
					
						
							|  |  |  |                     'form'     => $form
 | 
					
						
							|  |  |  |                 ]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 //$page = $this->service->create($form);
 | 
					
						
							|  |  |  |                 //return $this->redirect(['view', 'id' => $page->id]);
 | 
					
						
							|  |  |  |             } catch (\DomainException $e) {
 | 
					
						
							|  |  |  |                 //Yii::$app->errorHandler->logException($e);
 | 
					
						
							|  |  |  |                 //Yii::$app->session->setFlash('error', $e->getMessage());
 | 
					
						
							|  |  |  |             }
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return '';
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function actionLanguage($language)
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         if ($language && in_array($language, array_keys(Yii::$app->params['backendTranslatedLanguages']))) {
 | 
					
						
							|  |  |  |             $this->_service->setBackendLanguage($language);
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->redirect(Yii::$app->request->referrer);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function beforeAction($action)
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         if ($action->id === 'error') {
 | 
					
						
							|  |  |  |             $this->layout = 'error';
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return parent::beforeAction($action);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |