/** * Меню задач для текущего пользователя. * Возвращаются только доступные ему задачи * * @static * @return CMenu */ private static function getTasksMenu() { if (!self::getCacheMenu()->hasElement("admin_menu")) { $user = CSession::getCurrentUser(); /** * Чтобы не выбиваться из общей концепции придется адаптировать существующую таблицу * задач портала под вывод в виде меню. Также было бы неплохо сделать редактор этой * гадости в виде такого же простого вида, как и с моими меню * * 1. Создадим фиктивную activeRecord из моего меню для ссылки в другое меню * 2. Берем из таблицы группы меню (из task_menu_names) * 3. Выберем пункты меню из нужной таблицы и добавим их как обычные пункты. * 4. Добавим недостающие * 5. Исключим недоступные текущему пользователю * * Обновление от 06.02.2014 - все пункты меню хранятся в базе */ // дополнительный пункт "Прочее" $arr = array(); $arr['id'] = 100000; $arr['title'] = "Меню админки"; $arr['alias'] = "admin_menu"; $arr['description'] = "Фиктивное меню для отображения задач портала"; $arr['published'] = 1; $menu = new CMenu(new CActiveRecord($arr)); foreach (CActiveRecordProvider::getWithCondition("task_menu_names", "1=1 order by name desc")->getItems() as $i) { $arr = $i->getItems(); // адаптер для моей системы меню $arr['id'] = $arr['id'] + 100000; $arr['title'] = $arr['name']; $arr['anchor'] = "#"; $arr['menu_id'] = $menu->getId(); $arr['parent_id'] = 0; $i->setItems($arr); $menuItem = new CMenuItem($i); $menu->addMenuItem($menuItem); } // дополнительный пункт "Прочее" $arr = array(); $arr['id'] = 100000; $arr['title'] = CUtils::getTextStringInCorrectEncoding("Прочее"); $arr['anchor'] = "#"; $arr['menu_id'] = $menu->getId(); $arr['parent_id'] = 0; $menuItem = new CMenuItem(new CActiveRecord($arr)); $menu->addMenuItem($menuItem); foreach (CActiveRecordProvider::getWithCondition("tasks", "hidden=0 order by name asc")->getItems() as $i) { $arr = $i->getItems(); // адаптер для совместимости с моей системой $arr['title'] = $arr['name']; $arr['anchor'] = $arr['url']; $arr['parent_id'] = $arr['menu_name_id'] + 100000; $arr['menu_id'] = $menu->getId(); unset($arr['name']); unset($arr['url']); unset($arr['menu_name_id']); unset($arr['hidden']); unset($arr['kadri_in_task']); unset($arr['students_in_task']); unset($arr['comment']); $i->setItems($arr); $menuItem = new CMenuItem($i); $menu->addMenuItem($menuItem); } // дополнительный пункт меню "Выход" $arr = array(); $arr['id'] = 200000; $arr['title'] = CUtils::getTextStringInCorrectEncoding("Выход"); $arr['anchor'] = "p_administration.php?exit=1"; $arr['menu_id'] = $menu->getId(); $arr['parent_id'] = 0; $menuItem = new CMenuItem(new CActiveRecord($arr)); $menu->addMenuItem($menuItem); // теперь исключаем все задачи недоступные текущему пользователю foreach ($menu->getMenuItems()->getItems() as $menuItem) { if ($menuItem->getId() < 100000) { if (!$user->getRoles()->hasElement($menuItem->getId())) { $menu->getMenuItems()->removeItem($menuItem->getId()); } } } self::getCacheMenu()->add("admin_menu", $menu); } return self::getCacheMenu()->getItem("admin_menu"); }