/** * 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'); }
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; }