userQuery = $userQuery; parent::__construct($id, $module, $config); } /** * @param \yii\base\Action $action * * @return bool */ public function beforeAction($action) { if (in_array($action->id, ['index', 'update', 'update-profile', 'info', 'assingments'])) { Url::remember('', 'actions-redirect'); } return parent::beforeAction($action); } /** * @inheritdoc */ public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], 'confirm' => ['post'], 'block' => ['post'], ], ], 'access' => [ 'class' => AccessControl::className(), 'ruleConfig' => [ 'class' => AccessRuleFilter::className(), ], 'rules' => [ [ 'allow' => true, 'roles' => ['admin'], ], ], ], ]; } public function actionIndex() { $searchModel = $this->make(UserSearch::class); $dataProvider = $searchModel->search(Yii::$app->request->get()); return $this->render( 'index', [ 'dataProvider' => $dataProvider, 'searchModel' => $searchModel ] ); } public function actionCreate() { /** @var User $user */ $user = $this->make(User::class, ['scenario' => 'create']); /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); $this->make(AjaxRequestModelValidator::class, [$user])->validate(); $this->trigger(UserEvent::EVENT_BEFORE_CREATE, $event); if ($user->load(Yii::$app->request->post())) { $mailService = MailFactory::makeWelcomeMailerService($user); $this->make(UserCreateService::class, [$user, $mailService])->run(); $this->trigger(UserEvent::EVENT_AFTER_CREATE, $event); return $this->redirect(['update', 'id' => $user->id]); } return $this->render('create', ['user' => $user]); } public function actionUpdate($id) { $user = $this->userQuery->where(['id' => $id])->one(); $user->setScenario('update'); /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); $this->make(AjaxRequestModelValidator::class, [$user])->validate(); $this->trigger(ActiveRecord::EVENT_BEFORE_UPDATE, $event); if ($user->load(Yii::$app->request->post()) && $user->save()) { Yii::$app->getSession()->setFlash('success', Yii::t('user', 'Account details have been updated')); $this->trigger(ActiveRecord::EVENT_AFTER_UPDATE, $event); return $this->refresh(); } return $this->render('_account', ['user' => $user]); } public function actionUpdateProfile($id) { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); $profile = $user->profile; if ($profile === null) { $profile = $this->make(Profile::class); $profile->link($user); } /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); $this->make(AjaxRequestModelValidator::class, [$user])->validate(); $this->trigger(UserEvent::EVENT_BEFORE_PROFILE_UPDATE, $event); if ($profile->load(Yii::$app->request->post()) && $profile->save()) { Yii::$app->getSession()->setFlash('success', Yii::t('user', 'Profile details have been updated')); $this->trigger(UserEvent::EVENT_AFTER_PROFILE_UPDATE, $event); return $this->refresh(); } return $this->render( '_profile', [ 'user' => $user, 'profile' => $profile ] ); } public function actionInfo($id) { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); return $this->render( '_info', [ 'user' => $user, ] ); } public function actionAssignments($id) { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); return $this->render( '_assignments', [ 'user' => $user, ] ); } public function actionConfirm($id) { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); $this->trigger(UserEvent::EVENT_BEFORE_CONFIRMATION, $event); if ($this->make(UserConfirmationService::class, [$user])->run()) { Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User has been confirmed')); $this->trigger(UserEvent::EVENT_AFTER_CONFIRMATION, $event); } else { Yii::$app->getSession()->setFlash('warning', Yii::t('user', 'Unable to confirm user. Please, try again.')); } return $this->redirect(Url::previous('actions-redirect')); } public function actionDelete($id) { if ($id === Yii::$app->user->getId()) { Yii::$app->getSession()->setFlash('danger', Yii::t('user', 'You cannot remove your own account')); } else { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); $this->trigger(ActiveRecord::EVENT_BEFORE_DELETE, $event); if ($user->delete()) { Yii::$app->getSession()->setFlash('success', \Yii::t('user', 'User has been deleted')); $this->trigger(ActiveRecord::EVENT_AFTER_DELETE, $event); } else { Yii::$app->getSession()->setFlash( 'warning', Yii::t('user', 'Unable to delete user. Please, try again later.') ); } } return $this->redirect(['index']); } public function actionBlock($id) { if ($id === Yii::$app->user->getId()) { Yii::$app->getSession()->setFlash('danger', Yii::t('user', 'You cannot remove your own account')); } else { /** @var User $user */ $user = $this->userQuery->where(['id' => $id])->one(); /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); if ($this->make(UserBlockService::class, [$user, $event, $this])->run()) { Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User block status has been updated.')); } else { Yii::$app->getSession()->setFlash('danger', Yii::t('user', 'Unable to update block status.')); } } return $this->redirect(Url::previous('actions-redirect')); } }