<?php /** * Created by Error202 * Date: 17.08.2018 */ namespace backend\controllers; use core\entities\ModuleRecord; use core\services\ModuleService; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessControl; use yii\web\NotFoundHttpException; /** * Modules Management * Class ModuleController * @package backend\controllers */ class ModuleController extends Controller { /** * @var ModuleService Modules management service */ private $_service; public function __construct(string $id, $module, ModuleService $service, array $config = []) { parent::__construct($id, $module, $config); $this->_service = $service; } public function behaviors(): array { return [ 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'actions' => ['list', 'disable', 'enable', 'delete'], 'allow' => true, 'roles' => ['ModuleManagement'], ], [ // all the action are accessible to admin 'allow' => true, 'roles' => ['admin'], ], ], ], 'verbs' => [ 'class' => VerbFilter::class, 'actions' => [ 'delete' => ['POST'], 'disable' => ['POST'], 'enable' => ['POST'], ], ], ]; } /** * List of modules * @return string */ public function actionList() { $modules = \Yii::$app->moduleManager->getModules(); return $this->render('list', [ 'modules' => $modules, ]); } public function actionDelete($id) { $module = $this->findModel($id); $this->_service->delete($module); return $this->redirect(['module/list']); } public function actionDisable($id) { $module = $this->findModel($id); $this->_service->disable($module); return $this->redirect(['module/list']); } public function actionEnable($id) { $module = $this->findModel($id); $this->_service->enable($module); return $this->redirect(['module/list']); } protected function findModel($id): ModuleRecord { if (($model = ModuleRecord::findOne($id)) !== null) { return $model; } throw new NotFoundHttpException('The requested module does not exist.'); } }