first commit
This commit is contained in:
115
components/com_menus/forms/filter_items.xml
Normal file
115
components/com_menus/forms/filter_items.xml
Normal file
@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form addfieldprefix="Joomla\Component\Menus\Administrator\Field">
|
||||
<field
|
||||
name="menutype"
|
||||
type="menu"
|
||||
label="COM_MENUS_SELECT_MENU_FILTER"
|
||||
accesstype="manage"
|
||||
clientid=""
|
||||
showAll="false"
|
||||
filtermode="selector"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">COM_MENUS_SELECT_MENU</option>
|
||||
</field>
|
||||
<fields name="filter">
|
||||
<field
|
||||
name="search"
|
||||
type="text"
|
||||
inputmode="search"
|
||||
label="COM_MENUS_ITEMS_SEARCH_FILTER_LABEL"
|
||||
description="COM_MENUS_ITEMS_SEARCH_FILTER"
|
||||
hint="JSEARCH_FILTER"
|
||||
/>
|
||||
<field
|
||||
name="published"
|
||||
type="status"
|
||||
label="COM_MENUS_FILTER_PUBLISHED"
|
||||
description="COM_MENUS_FILTER_PUBLISHED_DESC"
|
||||
optionsFilter="*,0,1,-2"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">JOPTION_SELECT_PUBLISHED</option>
|
||||
</field>
|
||||
<field
|
||||
name="access"
|
||||
type="accesslevel"
|
||||
label="JOPTION_FILTER_ACCESS"
|
||||
description="JOPTION_FILTER_ACCESS_DESC"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">JOPTION_SELECT_ACCESS</option>
|
||||
</field>
|
||||
<field
|
||||
name="language"
|
||||
type="contentlanguage"
|
||||
label="JOPTION_FILTER_LANGUAGE"
|
||||
description="JOPTION_FILTER_LANGUAGE_DESC"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">JOPTION_SELECT_LANGUAGE</option>
|
||||
<option value="*">JALL</option>
|
||||
</field>
|
||||
<field
|
||||
name="level"
|
||||
type="integer"
|
||||
label="JOPTION_FILTER_LEVEL"
|
||||
description="JOPTION_FILTER_LEVEL_DESC"
|
||||
first="1"
|
||||
last="10"
|
||||
step="1"
|
||||
languages="*"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">JOPTION_SELECT_MAX_LEVELS</option>
|
||||
</field>
|
||||
<field
|
||||
name="parent_id"
|
||||
type="MenuItemByType"
|
||||
label="COM_MENUS_FILTER_PARENT_MENU_ITEM_LABEL"
|
||||
onchange="this.form.submit();"
|
||||
>
|
||||
<option value="">COM_MENUS_FILTER_SELECT_PARENT_MENU_ITEM</option>
|
||||
</field>
|
||||
</fields>
|
||||
<fields name="list">
|
||||
<field
|
||||
name="fullordering"
|
||||
type="list"
|
||||
label="JGLOBAL_SORT_BY"
|
||||
description="JGLOBAL_SORT_BY"
|
||||
statuses="*,0,1,2,-2"
|
||||
onchange="this.form.submit();"
|
||||
default="a.lft ASC"
|
||||
validate="options"
|
||||
>
|
||||
<option value="">JGLOBAL_SORT_BY</option>
|
||||
<option value="a.lft ASC">JGRID_HEADING_ORDERING_ASC</option>
|
||||
<option value="a.lft DESC">JGRID_HEADING_ORDERING_DESC</option>
|
||||
<option value="a.published ASC">JSTATUS_ASC</option>
|
||||
<option value="a.published DESC">JSTATUS_DESC</option>
|
||||
<option value="a.title ASC">JGLOBAL_TITLE_ASC</option>
|
||||
<option value="a.title DESC">JGLOBAL_TITLE_DESC</option>
|
||||
<option value="menutype_title ASC">COM_MENUS_HEADING_MENU_ASC</option>
|
||||
<option value="menutype_title DESC">COM_MENUS_HEADING_MENU_DESC</option>
|
||||
<option value="a.home ASC">COM_MENUS_HEADING_HOME_ASC</option>
|
||||
<option value="a.home DESC">COM_MENUS_HEADING_HOME_DESC</option>
|
||||
<option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option>
|
||||
<option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option>
|
||||
<option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option>
|
||||
<option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option>
|
||||
<option value="language ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
|
||||
<option value="language DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
|
||||
<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
|
||||
<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
|
||||
</field>
|
||||
<field
|
||||
name="limit"
|
||||
type="limitbox"
|
||||
label="COM_MENUS_LIST_LIMIT"
|
||||
description="COM_MENUS_LIST_LIMIT_DESC"
|
||||
default="25"
|
||||
onchange="this.form.submit();"
|
||||
/>
|
||||
</fields>
|
||||
</form>
|
||||
123
components/com_menus/layouts/joomla/searchtools/default.php
Normal file
123
components/com_menus/layouts/joomla/searchtools/default.php
Normal file
@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_menus
|
||||
*
|
||||
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
|
||||
$data = $displayData;
|
||||
|
||||
// Receive overridable options
|
||||
$data['options'] = !empty($data['options']) ? $data['options'] : [];
|
||||
|
||||
$noResultsText = '';
|
||||
$hideActiveFilters = false;
|
||||
$showFilterButton = false;
|
||||
$showSelector = false;
|
||||
$selectorFieldName = $data['options']['selectorFieldName'] ?? 'client_id';
|
||||
|
||||
// If a filter form exists.
|
||||
if (isset($data['view']->filterForm) && !empty($data['view']->filterForm)) {
|
||||
// Checks if a selector (e.g. client_id) exists.
|
||||
if ($selectorField = $data['view']->filterForm->getField($selectorFieldName)) {
|
||||
$showSelector = $selectorField->getAttribute('filtermode', '') === 'selector' ? true : $showSelector;
|
||||
|
||||
// Checks if a selector should be shown in the current layout.
|
||||
if (isset($data['view']->layout)) {
|
||||
$showSelector = $selectorField->getAttribute('layout', 'default') != $data['view']->layout ? false : $showSelector;
|
||||
}
|
||||
|
||||
// Unset the selector field from active filters group.
|
||||
unset($data['view']->activeFilters[$selectorFieldName]);
|
||||
}
|
||||
|
||||
if ($data['view'] instanceof \Joomla\Component\Menus\Administrator\View\Items\HtmlView) :
|
||||
unset($data['view']->activeFilters['client_id']);
|
||||
endif;
|
||||
|
||||
// Checks if the filters button should exist.
|
||||
$filters = $data['view']->filterForm->getGroup('filter');
|
||||
$showFilterButton = isset($filters['filter_search']) && count($filters) === 1 ? false : true;
|
||||
|
||||
// Checks if it should show the be hidden.
|
||||
$hideActiveFilters = empty($data['view']->activeFilters);
|
||||
|
||||
// Check if the no results message should appear.
|
||||
if (isset($data['view']->total) && (int) $data['view']->total === 0) {
|
||||
$noResults = $data['view']->filterForm->getFieldAttribute('search', 'noresults', '', 'filter');
|
||||
if (!empty($noResults)) {
|
||||
$noResultsText = Text::_($noResults);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set some basic options.
|
||||
$customOptions = [
|
||||
'filtersHidden' => isset($data['options']['filtersHidden']) && $data['options']['filtersHidden'] ? $data['options']['filtersHidden'] : $hideActiveFilters,
|
||||
'filterButton' => isset($data['options']['filterButton']) && $data['options']['filterButton'] ? $data['options']['filterButton'] : $showFilterButton,
|
||||
'defaultLimit' => $data['options']['defaultLimit'] ?? Factory::getApplication()->get('list_limit', 20),
|
||||
'searchFieldSelector' => '#filter_search',
|
||||
'selectorFieldName' => $selectorFieldName,
|
||||
'showSelector' => $showSelector,
|
||||
'orderFieldSelector' => '#list_fullordering',
|
||||
'showNoResults' => !empty($noResultsText),
|
||||
'noResultsText' => !empty($noResultsText) ? $noResultsText : '',
|
||||
'formSelector' => !empty($data['options']['formSelector']) ? $data['options']['formSelector'] : '#adminForm',
|
||||
];
|
||||
|
||||
// Merge custom options in the options array.
|
||||
$data['options'] = array_merge($customOptions, $data['options']);
|
||||
|
||||
// Add class to hide the active filters if needed.
|
||||
$filtersActiveClass = $hideActiveFilters ? '' : ' js-stools-container-filters-visible';
|
||||
|
||||
// Load search tools
|
||||
HTMLHelper::_('searchtools.form', $data['options']['formSelector'], $data['options']);
|
||||
?>
|
||||
<div class="js-stools" role="search">
|
||||
<?php if ($data['view'] instanceof \Joomla\Component\Menus\Administrator\View\Items\HtmlView) : ?>
|
||||
<?php // Add the itemtype and language selectors before the form filters. Do not display in modal.?>
|
||||
<?php $app = Factory::getApplication(); ?>
|
||||
<?php $clientIdField = $data['view']->filterForm->getField('client_id'); ?>
|
||||
<?php if ($clientIdField) : ?>
|
||||
<div class="js-stools-container-selector">
|
||||
<div class="visually-hidden">
|
||||
<?php echo $clientIdField->label; ?>
|
||||
</div>
|
||||
<div class="js-stools-field-selector js-stools-client_id">
|
||||
<?php echo $clientIdField->input; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<?php if ($data['options']['showSelector']) : ?>
|
||||
<div class="js-stools-container-selector">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default.selector', $data); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="js-stools-container-bar ms-auto">
|
||||
<div class="btn-toolbar">
|
||||
<?php echo $this->sublayout('bar', $data); ?>
|
||||
<?php echo $this->sublayout('list', $data); ?>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Filters div -->
|
||||
<div class="js-stools-container-filters clearfix<?php echo $filtersActiveClass; ?>">
|
||||
<?php if ($data['options']['filterButton']) : ?>
|
||||
<?php echo $this->sublayout('filters', $data); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($data['options']['showNoResults']) : ?>
|
||||
<?php echo $this->sublayout('noitems', $data); ?>
|
||||
<?php endif; ?>
|
||||
78
components/com_menus/src/Dispatcher/Dispatcher.php
Normal file
78
components/com_menus/src/Dispatcher/Dispatcher.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_menus
|
||||
*
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Menus\Site\Dispatcher;
|
||||
|
||||
use Joomla\CMS\Access\Exception\NotAllowed;
|
||||
use Joomla\CMS\Dispatcher\ComponentDispatcher;
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* ComponentDispatcher class for com_menus
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
class Dispatcher extends ComponentDispatcher
|
||||
{
|
||||
/**
|
||||
* Load the language
|
||||
*
|
||||
* @since 4.0.0
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function loadLanguage()
|
||||
{
|
||||
$this->app->getLanguage()->load('com_menus', JPATH_ADMINISTRATOR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dispatch a controller task. Redirecting the user if appropriate.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
public function checkAccess()
|
||||
{
|
||||
parent::checkAccess();
|
||||
|
||||
if (
|
||||
$this->input->get('view') !== 'items'
|
||||
|| $this->input->get('layout') !== 'modal'
|
||||
|| !$this->app->getIdentity()->authorise('core.create', 'com_menus')
|
||||
) {
|
||||
throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a controller from the component
|
||||
*
|
||||
* @param string $name Controller name
|
||||
* @param string $client Optional client (like Administrator, Site etc.)
|
||||
* @param array $config Optional controller config
|
||||
*
|
||||
* @return \Joomla\CMS\MVC\Controller\BaseController
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
public function getController(string $name, string $client = '', array $config = []): BaseController
|
||||
{
|
||||
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
|
||||
$client = 'Administrator';
|
||||
|
||||
return parent::getController($name, $client, $config);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user