/**
  * Сохранение пункта меню
  */
 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");
 }
Beispiel #2
0
 /**
  * Все опубликованные пункты текущего меню с учетом иерархии
  * Показываются только опубликованные и доступные текущему пользователю
  *
  * @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());
 }