/** * Сохранение пункта меню */ public function actionSaveItem() { if (!CSession::isAuth()) { $this->redirectNoAccess(); } $item = new CMenuItem(); $item->setAttributes(CRequest::getArray(CMenuItem::getClassName())); if ($item->validate()) { $item->save(); // сохранение ролей. удаляем старые, записываем новые foreach (CActiveRecordProvider::getWithCondition(TABLE_MENU_ITEMS_ACCESS, "item_id = " . $item->id)->getItems() as $val) { $val->remove(); } // делаем новые и сохраняем их $items = CRequest::getArray(CMenuItem::getClassName()); if (array_key_exists("roles", $items)) { foreach ($items["roles"] as $role) { $r = new CMenuItemRole(); $r->item_id = $item->id; $r->role_id = $role; $r->save(); } } $this->redirect("?action=view&id=" . $item->getMenu()->getId()); } $this->setData("item", $item); $this->setData("menu", CMenuManager::getMenu(CRequest::getInt("menu_id", CMenuItem::getClassName()))); $this->renderView("_menumanager/editItem.tpl"); }
/** * Все опубликованные пункты текущего меню с учетом иерархии * Показываются только опубликованные и доступные текущему пользователю * * @return CArrayList */ public function getMenuPublishedItems() { if (is_null($this->_itemsPublished)) { $this->_itemsPublished = new CArrayList(); foreach (CActiveRecordProvider::getWithCondition(TABLE_MENU_ITEMS, "menu_id=" . $this->getId() . " and published=1")->getItems() as $i) { $item = new CMenuItem($i); if ($item->getRoles()->getCount() == 0) { $this->_itemsPublished->add($item->getId(), $item); } else { if (is_null(CSession::getCurrentUser())) { if ($item->getRoles()->getCount() == 0) { $this->_itemsPublished->add($item->getId(), $item); } } else { foreach ($item->getRoles()->getItems() as $role) { if (CSession::getCurrentUser()->getRoles()->hasElement($role->getId())) { $this->_itemsPublished->add($item->getId(), $item); break; } } } } CMenuManager::getCacheItems()->add($item->getId(), $item); } // инициализируем иерархический вывод } return $this->_itemsPublished; }
public function setParent(CMenuItem $value) { $this->_parent = $value; $this->setParentId($value->getId()); }