items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); MenusHelper::addSubmenu('items'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->ordering = array(); // Preprocess the list of items to find ordering divisions. foreach ($this->items as $item) { $this->ordering[$item->parent_id][] = $item->id; // item type text switch ($item->type) { case 'url': $value = JText::_('COM_MENUS_TYPE_EXTERNAL_URL'); break; case 'alias': $value = JText::_('COM_MENUS_TYPE_ALIAS'); break; case 'separator': $value = JText::_('COM_MENUS_TYPE_SEPARATOR'); break; case 'heading': $value = JText::_('COM_MENUS_TYPE_HEADING'); break; case 'component': default: // load language $lang->load($item->componentname.'.sys', JPATH_ADMINISTRATOR, null, false, false) || $lang->load($item->componentname.'.sys', JPATH_ADMINISTRATOR.'/components/'.$item->componentname, null, false, false) || $lang->load($item->componentname.'.sys', JPATH_ADMINISTRATOR, $lang->getDefault(), false, false) || $lang->load($item->componentname.'.sys', JPATH_ADMINISTRATOR.'/components/'.$item->componentname, $lang->getDefault(), false, false); if (!empty($item->componentname)) { $value = JText::_($item->componentname); $vars = null; parse_str($item->link, $vars); if (isset($vars['view'])) { // Attempt to load the view xml file. $file = JPATH_SITE.'/components/'.$item->componentname.'/views/'.$vars['view'].'/metadata.xml'; if (is_file($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($view = $xml->xpath('view[1]')) { if (!empty($view[0]['title'])) { $vars['layout'] = isset($vars['layout']) ? $vars['layout'] : 'default'; // Attempt to load the layout xml file. // If Alternative Menu Item, get template folder for layout file if (strpos($vars['layout'], ':') > 0) { // Use template folder for layout file $temp = explode(':', $vars['layout']); $file = JPATH_SITE.'/templates/'.$temp[0].'/html/'.$item->componentname.'/'.$vars['view'].'/'.$temp[1].'.xml'; // Load template language file $lang->load('tpl_'.$temp[0].'.sys', JPATH_SITE, null, false, false) || $lang->load('tpl_'.$temp[0].'.sys', JPATH_SITE.'/templates/'.$temp[0], null, false, false) || $lang->load('tpl_'.$temp[0].'.sys', JPATH_SITE, $lang->getDefault(), false, false) || $lang->load('tpl_'.$temp[0].'.sys', JPATH_SITE.'/templates/'.$temp[0], $lang->getDefault(), false, false); } else { // Get XML file from component folder for standard layouts $file = JPATH_SITE.'/components/'.$item->componentname.'/views/'.$vars['view'].'/tmpl/'.$vars['layout'].'.xml'; } if (is_file($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($layout = $xml->xpath('layout[1]')) { if (!empty($layout[0]['title'])) { $value .= ' » ' . JText::_(trim((string) $layout[0]['title'])); } } if (!empty($layout[0]->message[0])) { $item->item_type_desc = JText::_(trim((string) $layout[0]->message[0])); } } } } unset($xml); } else { // Special case for absent views $value .= ' » ' . $vars['view']; } } } else { if (preg_match("/^index.php\?option=([a-zA-Z\-0-9_]*)/", $item->link, $result)) { $value = JText::sprintf('COM_MENUS_TYPE_UNEXISTING', $result[1]); } else { $value = JText::_('COM_MENUS_TYPE_UNKNOWN'); } } break; } $item->item_type = $value; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); // Allow a system plugin to insert dynamic menu types to the list shown in menus: JDispatcher::getInstance()->trigger('onBeforeRenderMenuItems', array($this)); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/menus.php'; $canDo = MenusHelper::getActions($this->state->get('filter.parent_id')); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolBar::getInstance('toolbar'); JToolbarHelper::title(JText::_('COM_MENUS_VIEW_ITEMS_TITLE'), 'menumgr.png'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('item.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('item.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('items.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('items.unpublish', 'JTOOLBAR_UNPUBLISH', true); } if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::checkin('items.checkin', 'JTOOLBAR_CHECKIN', true); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('', 'items.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('items.trash'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::makeDefault('items.setDefault', 'COM_MENUS_TOOLBAR_SET_HOME'); } if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::custom('items.rebuild', 'refresh.png', 'refresh_f2.png', 'JToolbar_Rebuild', false); } // Add a batch button if ($user->authorise('core.create', 'com_menus') && $user->authorise('core.edit', 'com_menus') && $user->authorise('core.edit.state', 'com_menus')) { JHtml::_('bootstrap.modal', 'collapseModal'); $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } JToolbarHelper::help('JHELP_MENUS_MENU_ITEM_MANAGER'); JHtmlSidebar::setAction('index.php?option=com_menus&view=items'); JHtmlSidebar::addFilter( // @todo we need a label here '', 'menutype', JHtml::_('select.options', JHtml::_('menu.menus'), 'value', 'text', $this->state->get('filter.menutype')), false ); JHtmlSidebar::addFilter( JText::_('COM_MENUS_OPTION_SELECT_LEVEL'), 'filter_level', JHtml::_('select.options', $this->f_levels, 'value', 'text', $this->state->get('filter.level')) ); JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('archived' => false)), 'value', 'text', $this->state->get('filter.published'), true) ); JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_ACCESS'), 'filter_access', JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) ); JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_LANGUAGE'), 'filter_language', JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')) ); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.lft' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.home' => JText::_('COM_MENUS_HEADING_HOME'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'association' => JText::_('COM_MENUS_HEADING_ASSOCIATION'), 'language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } }