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; } }
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; }
/** * * 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; }
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(); }
/** * * 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; }