public function run() { $filterModel = null; $filterFields = []; $dataProvider = null; $request = Yii::$app->getRequest(); if ($this->filterModelClass) { $filterModelClass = $this->filterModelClass; /** @var yii\db\BaseActiveRecord $filterModel */ $filterModel = new $filterModelClass(['scenario' => $this->searchScenario]); if ($request->getIsPost()) { $filterModel->load($request->getBodyParams()); } else { $filterModel->load($request->getQueryParams()); } // validation if ($request->getIsAjax() && $request->getQueryParam('validation')) { Yii::$app->getResponse()->format = Response::FORMAT_JSON; return ActiveForm::validate($filterModel); } // processing $filterFields = $this->prepareFields($filterModel); if ($filterModel->beforeSave(false)) { $dataProvider = $filterModel->search([$filterModel->formName() => []]); $filterModel->afterSave(false, []); } } $modelClass = $this->modelClass; if (!$dataProvider) { $dataProvider = new ActiveDataProvider(['query' => $modelClass::find()]); } Yii::configure($dataProvider, $this->dataProviderConfig); if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id, null, ['query' => $dataProvider->query]); } $session = Yii::$app->getSession(); $successMessage = $session->getFlash('success'); $errorMessage = $session->getFlash('error'); // $formConfig = array_merge($this->formConfig, ['validationUrl' => [$this->id, 'validation' => 1], 'action' => ['list'], 'method' => 'get']); // rendering $viewParams = ['canCreate' => ModelHelper::canCreate($modelClass), 'pluralHumanName' => ModelHelper::pluralHumanName($modelClass), 'successMessage' => $successMessage, 'errorMessage' => $errorMessage, 'filterModel' => $filterModel, 'filterFields' => $filterFields, 'formClass' => $this->formClass, 'formConfig' => $formConfig, 'gridClass' => $this->gridClass, 'gridConfig' => array_merge(ModelHelper::gridConfig($modelClass), $this->gridConfig, ['dataProvider' => $dataProvider, 'columns' => $this->prepareColumns($modelClass), 'filterModel' => $filterModel, 'filterFields' => $filterFields, 'formClass' => $this->formClass, 'formConfig' => $formConfig])]; if ($request->getIsAjax()) { return $this->controller->renderPartial($this->view, $viewParams); } else { return $this->controller->render($this->view, $viewParams); } }
public function run($id = null) { $modelClass = $this->modelClass; /** @var yii\db\BaseActiveRecord $model */ $model = $this->findModel($id); if (is_null($id)) { $id = ModelHelper::getPrimaryKey($model); } $model->setScenario($this->scenario); if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id, $model, ['id' => $id]); } $session = Yii::$app->getSession(); $successMessage = $session->getFlash('success'); $errorMessage = $session->getFlash('error'); $request = Yii::$app->getRequest(); if ($request->getIsPost()) { $model->load($request->getBodyParams()); // validation if ($request->getIsAjax() && $request->getQueryParam('validation')) { Yii::$app->getResponse()->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } // processing $saved = $model->validate() && $model->save(); if ($saved) { $successMessage = Yii::t('mozayka', 'Record "{record}" has been successfully saved.', ['record' => ModelHelper::getDisplayField($model)]); if (!$request->getIsAjax()) { $session->setFlash('success', $successMessage); return $this->controller->redirect(['update-form', 'id' => $id]); } } else { ModelHelper::log($model); $errorMessage = Yii::t('mozayka', 'Record "{record}" has not been saved.', ['record' => ModelHelper::getDisplayField($model)]); } if ($request->getIsAjax()) { Yii::$app->getResponse()->format = Response::FORMAT_JSON; return ['ok' => $saved, 'message' => $saved ? $successMessage : $errorMessage]; } } // rendering $viewParams = ['canList' => ModelHelper::canList($modelClass), 'pluralHumanName' => ModelHelper::pluralHumanName($modelClass), 'successMessage' => $successMessage, 'errorMessage' => $errorMessage, 'canCreate' => ModelHelper::canCreate($modelClass), 'model' => $model, 'id' => $id, 'displayField' => ModelHelper::getDisplayField($model), 'fields' => $this->prepareFields($model), 'formClass' => $this->formClass, 'formConfig' => array_merge($this->formConfig, ['validationUrl' => [$this->id, 'id' => $id, 'validation' => 1]])]; if ($request->getIsAjax()) { return $this->controller->renderPartial($this->view, $viewParams); } else { return $this->controller->render($this->view, $viewParams); } }
public function checkAccess($action, $model = null, $params = []) { $newModel = null; if (array_key_exists('newModel', $params)) { $newModel = $params['newModel']; unset($params['newModel']); } $query = null; if (array_key_exists('query', $params)) { $query = $params['query']; unset($params['query']); } switch ($action) { case 'create': case 'create-form': $allowed = ModelHelper::canCreate($this->modelClass, $params, $newModel); break; case 'view': case 'read-form': $allowed = ModelHelper::canRead($model); break; case 'update': case 'update-form': $allowed = ModelHelper::canUpdate($model); break; case 'delete': case 'delete-form': $allowed = ModelHelper::canDelete($model); break; case 'index': case 'list': $allowed = ModelHelper::canList($this->modelClass, $params, $query); break; case 'change-position': $allowed = ModelHelper::canChangePosition($model); break; default: $allowed = false; } if (!$allowed) { $user = Yii::$app->getUser(); throw new ForbiddenHttpException(Yii::t('mozayka', 'Permission denied for user "{user}" to perform action "{action}".', ['user' => $user->getIsGuest() ? Yii::t('mozayka', 'Guest') : $user->getIdentity()->username, 'action' => $this->id . '/' . $action])); } }