예제 #1
0
/**
 * Displays backend navigation menu
 *
 * @param array $params
 * @param Smarty $smarty
 * @return string
 *
 * @package application.helper.smarty
 * @author Integry Systems
 */
function smarty_function_backendMenu($params, Smarty_Internal_Template $smarty)
{
    $smarty = $smarty->smarty;
    $locale = $smarty->getApplication()->getLocale();
    $request = $smarty->getApplication()->getRequest();
    $controller = $request->get('controller');
    $action = $request->get('action');
    // load language file for menu
    $locale->translationManager()->loadFile('backend/menu');
    $menuLoader = new MenuLoader($smarty->getApplication(), $params['menu']);
    $structure = $menuLoader->getCurrentHierarchy($controller, $action);
    $router = $smarty->getApplication()->getRouter();
    // get translations and generate URL's
    $items = array();
    foreach ($structure['items'] as $topValue) {
        if (!empty($topValue['role']) && !AccessStringParser::run($topValue['role'])) {
            continue;
        }
        $filteredValue = array();
        foreach (array('title', 'descr') as $field) {
            $filteredValue[$field] = $smarty->branding($locale->translator()->translate($topValue[$field]));
        }
        $filteredValue['controller'] = isset($topValue['controller']) ? $topValue['controller'] : '';
        $filteredValue['action'] = isset($topValue['action']) ? $topValue['action'] : '';
        $filteredValue['icon'] = isset($topValue['icon']) ? $topValue['icon'] : '';
        if (!empty($topValue['controller'])) {
            $filteredValue['url'] = $router->createUrl(array('controller' => $topValue['controller'], 'action' => isset($topValue['action']) ? $topValue['action'] : null), true);
        }
        if (isset($topValue['items']) && is_array($topValue['items'])) {
            $subItems = array();
            foreach ($topValue['items'] as &$subValue) {
                if (!empty($subValue['role']) && !AccessStringParser::run($subValue['role'])) {
                    continue;
                }
                $filteredSubValue = array();
                foreach (array('title', 'descr') as $field) {
                    $filteredSubValue[$field] = $smarty->branding($locale->translator()->translate($subValue[$field]));
                }
                $filteredSubValue['url'] = $router->createUrl(array('controller' => $subValue['controller'], 'action' => isset($subValue['action']) ? $subValue['action'] : null), true);
                if (!empty($subValue['query'])) {
                    $filteredSubValue['url'] .= '?' . $subValue['query'];
                }
                $filteredSubValue['controller'] = $subValue['controller'];
                $filteredSubValue['action'] = isset($subValue['action']) ? $subValue['action'] : '';
                $filteredSubValue['icon'] = isset($subValue['icon']) ? $subValue['icon'] : '';
                $subItems[] = $filteredSubValue;
            }
            if (count($subItems) > 0) {
                $filteredValue['items'] = $subItems;
            }
        }
        $items[] = $filteredValue;
    }
    $smarty->assign('menuArray', json_encode($items));
    $smarty->assign('controller', $controller);
    $smarty->assign('action', $action);
    return $smarty->display('block/backend/backendMenu.tpl');
}
예제 #2
0
 public function index()
 {
     Role::cleanUp();
     $userGroupID = (int) $this->request->get('id');
     $userGroup = UserGroup::getInstanceByID($userGroupID);
     $activeRoles = $userGroup->getRolesRecordSet();
     $roles = array();
     $parentID = 0;
     // sort roles by their appearance in backend menu
     $filter = new ARSelectFilter();
     foreach (array('product', 'category', 'option', 'filter', 'order', 'user') as $roleName) {
         $filter->setOrder(new ARExpressionHandle('(Role.name LIKE "' . $roleName . '%")'), 'DESC');
     }
     // disabled roles
     $disable = ClassLoader::getRealPath('storage.configuration.DisabledRoles') . '.php';
     if (file_exists($disable)) {
         $disabledRoles = (include $disable);
         foreach ($disabledRoles as $disabled) {
             $filter->mergeCondition(new NotEqualsCond(new ARFieldHandle('Role', 'name'), $disabled));
         }
     }
     $menu = new MenuLoader($this->application);
     $menuItems = $menu->getCurrentHierarchy('', '');
     //print_r($menuItems);
     $menuItems = $menuItems['items'];
     foreach ($menuItems as $topLevel) {
         if (isset($topLevel['items'])) {
             foreach ($topLevel['items'] as $item) {
                 if (isset($item['role'])) {
                     $filter->setOrder(new ARExpressionHandle('(Role.name LIKE "' . $item['role'] . '%")'), 'DESC');
                 }
             }
         }
     }
     foreach (Role::getRecordSet($filter) as $role) {
         $roleArray = $role->toArray();
         if ('login' == $roleArray['name']) {
             continue;
         }
         $roleArray['indent'] = strpos($roleArray['name'], '.') ? 1 : 0;
         if ($roleArray['indent'] > 0) {
             $rc = count($roles) - 1;
             if (isset($roles[$rc]) && $roles[$rc]['parent'] === 0) {
                 $parentID = 'smart-' . $roles[$rc]['ID'];
                 $roles[] = array('ID' => $roles[$rc]['ID'], 'name' => $roles[$rc]['name'] . '.misc', 'translation' => $this->translate('_role_' . strtolower($roles[$rc]['name']) . '_misc'), 'parent' => $parentID, 'indent' => 1);
                 $roles[$rc]['ID'] = $parentID;
             }
             $roleArray['parent'] = $parentID;
         } else {
             $parentID = $roleArray['ID'];
             $roleArray['parent'] = 0;
         }
         $roleArray['translation'] = $this->translate(strtolower("_role_" . str_replace('.', '_', $roleArray['name'])));
         $roles[] = $roleArray;
     }
     $activeRolesIDs = array();
     foreach ($activeRoles as $role) {
         $activeRolesIDs[] = $role->getID();
     }
     $form = $this->createRolesForm($userGroup, $activeRoles);
     $response = new ActionResponse();
     $response->set('form', $form);
     $response->set('roles', $roles);
     $response->set('userGroup', $userGroup->toArray());
     $response->set('activeRolesIDs', $activeRolesIDs);
     return $response;
 }