Пример #1
0
 /**
  * check old entries - delete if obsolete (changed type) and add new entry to the appropriate cms_nav_item_(page/module/redirect).
  *
  * @param $navItemId
  * @param $navItemType
  * @param $navItemTypeId
  * @param $title
  * @param $alias
  *
  * @return array|bool
  */
 public function actionUpdatePageItem($navItemId, $navItemType, $navItemTypeId)
 {
     $model = NavItem::find()->where(['id' => $navItemId])->one();
     if (!$model) {
         throw new Exception('Unable to find item id ' . $navItemId);
     }
     $model->setParentFromModel();
     // save old id
     $oldNavItemType = $model->nav_item_type;
     $oldNavItemTypeId = $model->nav_item_type_id;
     $oldTitle = $model->title;
     $oldAlias = $model->alias;
     $model->nav_item_type = $navItemType;
     $model->title = Yii::$app->request->post('title', false);
     $model->alias = Yii::$app->request->post('alias', false);
     $model->description = Yii::$app->request->post('description', null);
     if (!$model->validate() || !$model->save()) {
         return $this->sendModelError($model);
     }
     $itemModel = null;
     if ($oldNavItemType == $model->nav_item_type) {
         switch ($navItemType) {
             case 1:
                 $itemModel = NavItemPage::find()->where(['id' => $navItemTypeId])->one();
                 break;
             case 2:
                 $itemModel = NavItemModule::find()->where(['id' => $navItemTypeId])->one();
                 break;
             case 3:
                 $itemModel = NavItemRedirect::find()->where(['id' => $navItemTypeId])->one();
                 break;
         }
     } else {
         switch ($navItemType) {
             case 1:
                 $itemModel = new NavItemPage();
                 break;
             case 2:
                 $itemModel = new NavItemModule();
                 break;
             case 3:
                 $itemModel = new NavItemRedirect();
                 break;
         }
     }
     switch ($navItemType) {
         case 1:
             $this->setPostAttribute($itemModel, 'layout_id');
             break;
         case 2:
             $this->setPostAttribute($itemModel, 'module_name');
             break;
         case 3:
             $this->setPostAttribute($itemModel, 'type');
             $this->setPostAttribute($itemModel, 'value');
             break;
     }
     if (!$itemModel->validate() || !$itemModel->save()) {
         // error: reverse changes in nav item
         $model->nav_item_type = $oldNavItemType;
         $model->nav_item_type_id = $oldNavItemTypeId;
         $model->alias = $oldAlias;
         $model->title = $oldTitle;
         $model->update(false);
         return $this->sendModelError($itemModel);
     }
     if ($oldNavItemType != $model->nav_item_type) {
         $this->deleteItem($oldNavItemType, $oldNavItemTypeId);
     }
     // save new type id
     $model->nav_item_type_id = $itemModel->id;
     $model->update(false);
     return true;
 }