Esempio n. 1
0
 /**
  * Деактивация плагина
  * @return bool
  */
 public function Deactivate()
 {
     $oMenu = E::ModuleMenu()->GetMenu('user');
     $oMenu->RemoveItemById('plugin.menutest.my_menu', true);
     E::ModuleMenu()->SaveMenu($oMenu);
     return true;
 }
 /**
  * @param ModuleMenu_EntityMenu $oMenu
  */
 protected function _addMenuItem($oMenu)
 {
     // Создадим элемент меню
     $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin.sandbox.topics', array('text' => array('{{plugin.sandbox.menu_text}}', 'hook:new_sandbox_count' => array('red')), 'link' => R::GetPath('index/sandbox'), 'active' => array('topic_kind' => array('sandbox')), 'options' => array('class' => '', 'link_title' => '{{plugin.sandbox.menu_text}}')));
     // Добавим в меню
     $oMenu->AddItem($oMenuItem);
     // Сохраним
     E::ModuleMenu()->SaveMenu($oMenu);
 }
 /**
  * Деактивация плагина
  *
  * @return bool
  */
 public function Deactivate()
 {
     /** @var ModuleMenu_EntityMenu $oMenu */
     $oMenu = E::ModuleMenu()->GetMenu('topics');
     $oMenu->RemoveItemById(array('plugin.sandbox.topics', 'plugin_sandbox_topics'), true);
     E::ModuleMenu()->SaveMenu($oMenu);
     //E::ModuleMenu()->ClearMenuCache('topics');
     //Config::ResetCustomConfig('plugin.sandbox');
     return true;
 }
Esempio n. 4
0
 public function RenderInitDone()
 {
     $aMenus = Config::Get('menu.data');
     $bChanged = false;
     if ($aMenus && is_array($aMenus)) {
         foreach ($aMenus as $sMenuId => $aMenu) {
             if (isset($aMenu['init']['fill'])) {
                 $aMenus[$sMenuId] = E::ModuleMenu()->Prepare($sMenuId, $aMenu);
                 $bChanged = true;
             }
         }
         if ($bChanged) {
             Config::Set('menu.data', null);
             Config::Set('menu.data', $aMenus);
         }
     }
 }
Esempio n. 5
0
 public function CodeHook()
 {
     // Если пользоватль авторизован и у него не заполнено поле о себе, то
     if (E::IsUser() && trim(E::User()->getProfileAbout()) == '') {
         // Получим меню пользователя
         /** @var ModuleMenu_EntityMenu $oMenu */
         $oMenu = E::ModuleMenu()->GetMenu('user');
         // Проверим, может в этой теме меню не объектное
         if ($oMenu && !$oMenu->GetItemById('plugin_menutest_my_menu')) {
             // Создадим элемент меню
             $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin_menutest_my_menu', array('text' => '{{plugin.menutest.empty_about}}', 'link' => E::User()->getProfileUrl() . 'settings/', 'display' => array('not_event' => array('settings')), 'options' => array('class' => 'btn right create')));
             // Добавим в меню
             $oMenu->AddItem('first', $oMenuItem);
             // Сохраним
             E::ModuleMenu()->SaveMenu($oMenu);
         }
     }
 }
Esempio n. 6
0
 /**
  * Метод, который вызывается после создания меню
  */
 public function CodeHook()
 {
     // Получим результат выполнения метода-источника хука
     /** @var ModuleMenu_EntityMenu $oMenu */
     $oMenu = $this->GetSourceResult();
     // Убеждаемся, что было создано нужное нам меню - меню пользователя
     if ($oMenu && $oMenu->getId() == 'user') {
         // Если пользователь авторизован и у него не заполнено поле о себе, то
         if (E::IsUser() && trim(E::User()->getProfileAbout()) == '') {
             // Проверим, есть ли в меню нужный элемент
             if (!$oMenu->GetItemById('plugin.menutest.my_menu')) {
                 // Создадим элемент меню
                 $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin.menutest.my_menu', array('text' => '{{plugin.menutest.empty_about}}', 'link' => E::User()->getProfileUrl() . 'settings/', 'display' => array('not_event' => array('settings')), 'options' => array('class' => 'btn right create')));
                 // Добавим в меню
                 $oMenu->AddItem($oMenuItem, 'first');
                 // Сохраним
                 E::ModuleMenu()->SaveMenu($oMenu);
             }
         }
     }
 }
Esempio n. 7
0
 /**
  * Обработчик экшена менеджера меню
  *
  * @return bool|null|string
  */
 protected function EventMenuManager()
 {
     // Активная вкладка главного меню
     $this->sMainMenuItem = 'settings';
     $this->_prepareMenus();
     // Получим страницу, на которой находится пользователь
     $sMode = $this->getParam(0);
     // В зависимости от страницы запускаем нужный обработчик
     if ($sMode == 'edit') {
         return $this->_eventMenuEdit();
     } else {
         if ($sMode == 'reset') {
             return $this->_eventMenuReset();
         } else {
             // Получим те меню, которые можно редактировать ползователю.
             $aMenu = E::ModuleMenu()->GetMenusByArrayId(Config::Get('module.menu.admin'));
             // Заполним вьювер
             E::ModuleViewer()->Assign(array('aMenu' => $aMenu, 'sMode' => $sMode));
             // Установим заголовок страницы
             $this->_setTitle(E::ModuleLang()->Get('action.admin.menu_manager'));
             // Установми страницу вывода
             $this->SetTemplateAction('settings/menu_manager');
         }
     }
 }
Esempio n. 8
0
 /**
  * Удаляет элемент меню по его ID
  *
  * @param string|array|object $xItem
  * @param bool                $bClearCache
  */
 public function RemoveItemById($xItem, $bClearCache = false)
 {
     if (is_array($xItem)) {
         /** @var string|object $xItemId */
         foreach ($xItem as $xItemId) {
             if (is_object($xItemId)) {
                 $sItemId = $xItemId->getId();
             } else {
                 $sItemId = (string) $xItemId;
             }
             if (isset($this->_aItems[$sItemId])) {
                 unset($this->_aItems[$sItemId]);
             }
         }
     } else {
         if (is_object($xItem)) {
             $sItemId = $xItem->getId();
         } else {
             $sItemId = (string) $xItem;
         }
         if (isset($this->_aItems[$sItemId])) {
             unset($this->_aItems[$sItemId]);
         }
     }
     if ($bClearCache) {
         Config::ResetCustomConfig('menu.data.' . $this->getId() . '.list');
         E::ModuleMenu()->SaveMenu($this);
     }
 }
Esempio n. 9
0
 /**
  * Обработчик формирования меню в режиме blogs
  *
  * @param string[] $aFillSet Набор элементов меню
  * @param array $aMenu Само меню
  *
  * @return array
  */
 public function ProcessBlogsMode($aFillSet, $aMenu = NULL)
 {
     /** @var ModuleMenu_EntityItem[] $aItems */
     $aItems = array();
     /** @var ModuleBlog_EntityBlog[] $aBlogs */
     $aBlogs = array();
     if ($aFillSet) {
         $aBlogs = E::ModuleBlog()->GetBlogsByUrl($aFillSet['items']);
     } else {
         if ($aResult = E::ModuleBlog()->GetBlogsRating(1, $aFillSet['limit'])) {
             $aBlogs = $aResult['collection'];
         }
     }
     if ($aBlogs) {
         foreach ($aBlogs as $oBlog) {
             $aItems[$oBlog->getUrl()] = E::ModuleMenu()->CreateMenuItem($oBlog->getUrl(), array('title' => $oBlog->getTitle(), 'link' => $oBlog->getUrlFull(), 'active' => (Config::Get('router.rewrite.blog') ? Config::Get('router.rewrite.blog') : 'blog') . '.' . $oBlog->getUrl(), 'submenu' => array(), 'on' => array('{*}'), 'off' => NULL, 'display' => TRUE, 'options' => array('image_url' => $oBlog->getAvatarUrl(Config::Get('module.menu.blog_logo_size')))));
         }
     }
     return $aItems;
 }
Esempio n. 10
0
/**
 * Формирует меню
 *
 * @param $aParams
 * @param $oSmarty
 *
 * @internal param $sMenuId
 * @internal param bool $sMenuClass
 * @internal param string $sActiveClass
 *
 * @return string
 */
function smarty_function_menu($aParams, &$oSmarty = NULL)
{
    // Меню нет - уходим
    if (!isset($aParams['id']) || !($aMenu = E::ModuleMenu()->GetPreparedMenu($aParams['id']))) {
        return '';
    }
    if (!isset($aMenu['items'])) {
        return '';
    }
    /** @var ModuleMenu_EntityItem[] $aMenuItems Элементы меню */
    $aMenuItems = $aMenu['items'];
    /** @var string $sMenu Запрашиваемое меню */
    $sMenu = '';
    // Установим класс меню, если он задан
    /** @var string $sMenuClass Класс меню */
    $sMenuClass = isset($aParams['class']) ? 'class="' . $aParams['class'] . '"' : '';
    if (!$sMenuClass) {
        $sMenuClass = isset($aMenu['class']) ? 'class="' . $aMenu['class'] . '"' : '';
    }
    // Открываем меню
    if (!isset($aParams['hideul'])) {
        $sMenu .= "<ul {$sMenuClass}>";
    }
    // Меню пустое
    $bEmpty = TRUE;
    // Заполним меню его элементами
    foreach ($aMenuItems as $sItemMenuName => $oMenuItem) {
        // Вызовем хук
        if (is_string($oMenuItem)) {
            $sMenu .= smarty_function_hook(array_merge(array('run' => $sItemMenuName), isset($aParams[$oMenuItem]) ? $aParams[$oMenuItem] : array()), $oSmarty);
            continue;
        }
        if (!$oMenuItem->isEnabled(isset($aParams['type']) ? $aParams['type'] : false)) {
            continue;
        }
        // Сформируем подменю если нужно
        $oMenuItem->setMenuId($aParams['id']);
        if (strpos($oMenuItemHtml = $oMenuItem->getHtml(), "[[submenu_") !== FALSE) {
            $oMenuItemHtml = preg_replace_callback('~\\[\\[submenu_(\\S*)\\]\\]~', function ($sSubmenuId) {
                if (isset($sSubmenuId[1])) {
                    $sSubmenuId = $sSubmenuId[1];
                } else {
                    return '';
                }
                $aSettings = array('id' => $sSubmenuId);
                if (preg_match('~[a-f0-9]{10}~', $sSubmenuId)) {
                    $aSettings = array_merge($aSettings, array('class' => Config::Get('menu.submenu.class')));
                }
                if (!is_null($sSubmenuHtml = smarty_function_menu($aSettings))) {
                    return $sSubmenuHtml;
                }
                return '';
            }, $oMenuItemHtml);
        }
        // Добавим html в вывод
        $sMenu .= $oMenuItemHtml;
        $bEmpty = FALSE;
    }
    // Закрываем меню
    if (!isset($aParams['hideul'])) {
        $sMenu .= '</ul>';
    }
    // Пустое меню не показываем, если не указано другое
    if (!isset($aParams['show_empty'])) {
        $aParams['show_empty'] = FALSE;
    }
    // Если меню не пустое, то покажем
    if (!($bEmpty && $aParams['show_empty'])) {
        return $sMenu;
    }
    return '';
}
Esempio n. 11
0
 public function RenderInitDone()
 {
     E::ModuleMenu()->PrepareMenus();
 }