예제 #1
0
 /**
  * Меню задач для текущего пользователя.
  * Возвращаются только доступные ему задачи
  *
  * @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");
 }