|  |  |  | <?php
 | 
					
						
							|  |  |  | namespace backend\controllers;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use core\entities\Search;
 | 
					
						
							|  |  |  | use core\forms\SearchForm;
 | 
					
						
							|  |  |  | use core\helpers\LanguageHelper;
 | 
					
						
							|  |  |  | use core\services\user\UserManageService;
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | use yii\data\ActiveDataProvider;
 | 
					
						
							|  |  |  | use yii\web\Controller;
 | 
					
						
							|  |  |  | use yii\filters\VerbFilter;
 | 
					
						
							|  |  |  | use yii\filters\AccessControl;
 | 
					
						
							|  |  |  | use common\models\LoginForm;
 | 
					
						
							|  |  |  | use yii\web\NotFoundHttpException;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * 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);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |