Beispiel #1
0
 public function getType()
 {
     switch ($this->nav_item_type) {
         case self::TYPE_PAGE:
             return \cmsadmin\models\NavItemPage::findOne($this->nav_item_type_id);
             break;
         case self::TYPE_MODULE:
             return \cmsadmin\models\NavItemModule::findOne($this->nav_item_type_id);
             break;
     }
 }
Beispiel #2
0
 public function getType()
 {
     switch ($this->nav_item_type) {
         case self::TYPE_PAGE:
             $object = NavItemPage::findOne($this->nav_item_type_id);
             break;
         case self::TYPE_MODULE:
             $object = NavItemModule::findOne($this->nav_item_type_id);
             break;
         case self::TYPE_REDIRECT:
             $object = NavItemRedirect::findOne($this->nav_item_type_id);
             break;
     }
     // assign the current context for an item type object.
     $object->setNavItem($this);
     return $object;
 }
 /**
  * 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;
 }
Beispiel #4
0
 /**
  *
  * Copy content of type cms_nav_item_page to a target nav item. This will create a new entry in cms_nav_item_page and for every used block a new entry in cms_nav_item_page_block_item
  *
  * @param $targetNavItem nav item object
  * @return bool
  */
 public function copyPageItem($targetNavItem)
 {
     if ($this->nav_item_type !== 1) {
         return false;
     }
     $sourcePageItem = NavItemPage::findOne($this->nav_item_type_id);
     if (!$sourcePageItem) {
         return false;
     }
     $pageItem = new NavItemPage();
     $pageItem->attributes = $sourcePageItem->toArray();
     if (!$pageItem->save()) {
         return false;
     }
     $targetNavItem->nav_item_type_id = $pageItem->id;
     if (!$targetNavItem->save()) {
         return false;
     }
     $pageBlocks = NavItemPageBlockItem::findAll(['nav_item_page_id' => $sourcePageItem->id]);
     foreach ($pageBlocks as $block) {
         $blockItem = new NavItemPageBlockItem();
         $blockItem->attributes = $block->toArray();
         $blockItem->nav_item_page_id = $pageItem->id;
         $blockItem->insert();
     }
     return true;
 }
Beispiel #5
0
 public function createPageFromDraft($parentNavId, $navContainerId, $langId, $title, $alias, $description, $fromDraftNavId, $isDraft = false)
 {
     if (!$isDraft && empty($isDraft) && !is_numeric($isDraft)) {
         $isDraft = 0;
     }
     $errors = [];
     // nav
     $nav = $this;
     $nav->attributes = ['parent_nav_id' => $parentNavId, 'nav_container_id' => $navContainerId, 'is_hidden' => 1, 'is_offline' => 1, 'is_draft' => $isDraft];
     // nav item
     $navItem = new NavItem();
     $navItem->parent_nav_id = $parentNavId;
     $navItem->attributes = ['lang_id' => $langId, 'title' => $title, 'alias' => $alias, 'description' => $description, 'nav_item_type' => 1];
     if (!$nav->validate()) {
         $errors = ArrayHelper::merge($nav->getErrors(), $errors);
     }
     if (!$navItem->validate()) {
         $errors = ArrayHelper::merge($navItem->getErrors(), $errors);
     }
     if (!empty($errors)) {
         return $errors;
     }
     // get draft nav item data
     $draftNavItem = NavItem::findOne(['nav_id' => $fromDraftNavId]);
     $navItemPageId = $draftNavItem->type->id;
     $layoutId = $draftNavItem->type->layout_id;
     $pageBlocks = NavItemPageBlockItem::findAll(['nav_item_page_id' => $navItemPageId]);
     // proceed save process
     $nav->save();
     $navItemPage = new NavItemPage();
     $navItemPage->layout_id = $layoutId;
     $navItemPage->save();
     foreach ($pageBlocks as $block) {
         $i = new NavItemPageBlockItem();
         $i->attributes = $block->toArray();
         $i->nav_item_page_id = $navItemPage->id;
         $i->insert();
     }
     $navItem->nav_id = $nav->id;
     $navItem->nav_item_type_id = $navItemPage->id;
     return $navItem->save();
 }
Beispiel #6
0
 /**
  *
  * Copy content of type cms_nav_item_page to a target nav item. This will create a new entry in cms_nav_item_page and for every used block a new entry in cms_nav_item_page_block_item
  *
  * @param $targetNavItem nav item object
  * @return bool
  */
 public function copyPageItem($targetNavItem)
 {
     if ($this->nav_item_type !== 1) {
         return false;
     }
     $sourcePageItem = NavItemPage::findOne($this->nav_item_type_id);
     if (!$sourcePageItem) {
         return false;
     }
     $pageItem = new NavItemPage();
     $pageItem->attributes = $sourcePageItem->toArray();
     if (!$pageItem->save()) {
         return false;
     }
     $targetNavItem->nav_item_type_id = $pageItem->id;
     if (!$targetNavItem->save()) {
         return false;
     }
     $pageBlocks = NavItemPageBlockItem::findAll(['nav_item_page_id' => $sourcePageItem->id]);
     $idLink = [];
     foreach ($pageBlocks as $block) {
         $blockItem = new NavItemPageBlockItem();
         $blockItem->attributes = $block->toArray();
         $blockItem->nav_item_page_id = $pageItem->id;
         $blockItem->insert();
         $idLink[$block->id] = $blockItem->id;
     }
     // check if prev_id is used, check if id is in set - get new id and set new prev_ids in copied items
     $newPageBlocks = NavItemPageBlockItem::findAll(['nav_item_page_id' => $pageItem->id]);
     foreach ($newPageBlocks as $block) {
         if ($block->prev_id) {
             if (isset($idLink[$block->prev_id])) {
                 $block->prev_id = $idLink[$block->prev_id];
             }
         }
         $block->update(false);
     }
     return true;
 }