3 namespace app\controllers;
6 use app\models\Locations;
7 use app\models\LocationsSearch;
8 use yii\web\Controller;
9 use yii\web\NotFoundHttpException;
10 use yii\filters\VerbFilter;
14 * LocationsController implements the CRUD actions for Locations model.
16 class LocationsController extends Controller
21 public function behaviors()
25 'class' => VerbFilter::className(),
27 'delete' => [ 'POST' ],
34 * Добавление места разположения
36 * @param array $options
37 * string 'name' - наименование места расположения
38 * string|NULL 'region' - наименование региона/подразделения
39 * integer|NULL 'region_id' - идентификатор региона/подразделения
40 * @return integer|boolean - идентификатор записи места расположения или FALSE
42 public static function addIfNeed($options)
46 'error' => Yii::t('locations', 'Locations: Key field missing "location" and "region": ') . print_r($options, TRUE),
48 if (is_array($options) && isset($options[ 'location' ]) && (isset($options[ 'region' ]) || isset($options[ 'region_id' ])))
50 if (isset($options[ 'region' ]))
52 $region = RegionsController::addIfNeed($options);
56 $region[ 'id' ] = $options[ 'region_id' ];
58 if ($region[ 'id' ] !== FALSE) {
59 // Ищем расположение, совпадающее по наименованию и региону/подразделению
60 $model = Locations::find()
61 ->where([ 'like', 'name', $options[ 'location' ]])
62 ->andWhere([ 'region_id' => $region[ 'id' ]])
64 if (count($model) > 0)
66 // Если нашли, возвращаем идентификатор записи
67 $result[ 'id' ] = $model[0]->id;
68 $result[ 'error' ] = '';
72 // Не нашли, пробуем добавить место расположения
73 $model = new Locations();
74 $model->name = $options[ 'location' ];
75 $model->region_id = $region[ 'id' ];
76 if($model->validate() && $model->save())
78 // Если удалось сохранить, вернём идентификатор места расположения
79 $result[ 'id' ] = $model->id;
80 $result[ 'error' ] = '';
84 $result[ 'error' ] = Yii::t('locations', 'Error to create location "{location}": ', $options) . print_r($model->errors, TRUE);
90 $result[ 'error' ] .= '<br />' . $region[ 'error' ];
93 return $result; // Записать не удалось, вернём FALSE
97 * Список всех мест/размещений.
100 public function actionIndex()
102 if (! User::canPermission('createRecord'))
104 return $this->redirect(['site/index']);
107 $searchModel = new LocationsSearch();
108 if (isset(Yii::$app->request->queryParams['id'])) {
109 $id = Yii::$app->request->queryParams['id'];
110 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
111 //$dataProvider->query->select([Locations::tableName() . '.id', Locations::tableName() . '.name']);
112 $pageSize = $dataProvider->pagination->pageSize;
113 $dataProvider->pagination = FALSE;
114 $rows = $dataProvider->getModels();
116 foreach ($rows as $key => $val) {
117 if ($id == $val->id) {
118 $page = ceil(($key + 1) / $pageSize);
122 return $this->redirect(['index', 'page' => $page]);
124 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
126 return $this->render('index', [
127 'searchModel' => $searchModel,
128 'dataProvider' => $dataProvider,
133 * Показ одного места размещения (не используется).
136 * @throws NotFoundHttpException если отсутствует место/размещение
138 public function actionView($id)
140 if (! User::canPermission('updateRecord'))
142 return $this->redirect(['index']);
144 return $this->render('view', [
145 'model' => $this->findModel($id),
150 * Создание нового места/размещения.
151 * В случае успешного создания, происходит переход к списку всех мест/размещений.
154 public function actionCreate()
156 if (! User::canPermission('createRecord'))
158 return $this->redirect(['site/index']);
160 $model = new Locations();
162 if ($model->load(Yii::$app->request->post()) && $model->save())
164 return $this->redirect([ 'index', 'id' => $model->id ]);
167 return $this->render('create', [
173 * Изменение существующего места/размещения.
174 * В случаае успешного изменения, происходит переход к списку всех мест/размещений.
177 * @throws NotFoundHttpException если отсутствует место/размещение
179 public function actionUpdate($id)
181 if (! User::canPermission('updateRecord'))
183 return $this->redirect(['site/index']);
185 $model = $this->findModel($id);
187 if ($model->load(Yii::$app->request->post()) && $model->save())
189 return $this->redirect([ 'index', 'id' => $model->id ]);
192 return $this->render('update', [
198 * Удаение существующего места/размещения.
199 * В случае успешного удаления, происходит переход к списку всех мест/размещений.
202 * @throws NotFoundHttpException Усли отсутствует место/размещение
204 public function actionDelete($id)
206 if (! User::canPermission('updateRecord'))
208 return $this->redirect(['index']);
210 $this->findModel($id)->delete();
212 return $this->redirect([ 'index' ]);
216 * Finds the Locations model based on its primary key value.
217 * If the model is not found, a 404 HTTP exception will be thrown.
219 * @return Locations the loaded model
220 * @throws NotFoundHttpException if the model cannot be found
222 protected function findModel($id)
224 if (($model = Locations::findOne($id)) !== null)
229 throw new NotFoundHttpException(Yii::t('locations', 'The requested page does not exist.'));