Skip to content

Commit

Permalink
[New Feature] Implementing filtering admin modules per admin language…
Browse files Browse the repository at this point in the history
…s (including custom menu modules) (#17215)

* Implementing multilingual custom backend menus

* Implementing multilingual custom backend menus

* Alignment

* Correcting grammar and alpha order

* Improving Warning. Thanks @izharaazmi

* Modifyimg patch to allow language filtering per module when modules
Option is set such.

* uppercase

* module lang field exchange

* fix xml cs ;)

* Update adminlanguage.php

since version

* Update adminlanguage.php
  • Loading branch information
infograf768 authored and Michael Babker committed Jul 27, 2017
1 parent fffdce9 commit 1bcfb4a
Show file tree
Hide file tree
Showing 16 changed files with 426 additions and 21 deletions.
33 changes: 33 additions & 0 deletions administrator/components/com_menus/controller.php
Expand Up @@ -30,6 +30,39 @@ public function display($cachable = false, $urlparams = false)
{
JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php');

// Check custom administrator menu modules
if (JLanguageMultilang::isAdminEnabled())
{
$languages = JLanguageHelper::getInstalledLanguages(1, true);
$langCodes = array();

foreach ($languages as $language)
{
$langCodes[$language->metadata['tag']] = $language->metadata['nativeName'];
}

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->qn('m.language'))
->from($db->qn('#__modules', 'm'))
->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu'))
->where($db->qn('m.published') . ' = 1')
->where($db->qn('m.client_id') . ' = 1')
->group($db->qn('m.language'));

$mLanguages = $db->setQuery($query)->loadColumn();

// Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language.
if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages)))
{
$app = JFactory::getApplication();
$langMissing = array_intersect_key($langCodes, array_flip($langMissing));

$app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning');
}
}

return parent::display();
}
}
19 changes: 19 additions & 0 deletions administrator/components/com_modules/config.xml
Expand Up @@ -17,6 +17,25 @@
<option value="site">JSITE</option>
</field>
</fieldset>

<fieldset
name="admin_modules"
label="COM_MODULES_ADMIN_LANG_FILTER_FIELDSET_LABEL"
>
<field
name="adminlangfilter"
type="radio"
label="COM_MODULES_ADMIN_LANG_FILTER_LABEL"
description="COM_MODULES_ADMIN_LANG_FILTER_DESC"
class="btn-group btn-group-yesno"
default="0"
filter="integer"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
</fieldset>

<fieldset
name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
Expand Down
33 changes: 33 additions & 0 deletions administrator/components/com_modules/controller.php
Expand Up @@ -76,6 +76,39 @@ public function display($cachable = false, $urlparams = false)
// Load the submenu.
ModulesHelper::addSubmenu($this->input->get('view', 'modules'));

// Check custom administrator menu modules
if (JLanguageMultilang::isAdminEnabled())
{
$languages = JLanguageHelper::getInstalledLanguages(1, true);
$langCodes = array();

foreach ($languages as $language)
{
$langCodes[$language->metadata['tag']] = $language->metadata['nativeName'];
}

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->qn('m.language'))
->from($db->qn('#__modules', 'm'))
->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu'))
->where($db->qn('m.published') . ' = 1')
->where($db->qn('m.client_id') . ' = 1')
->group($db->qn('m.language'));

$mLanguages = $db->setQuery($query)->loadColumn();

// Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language.
if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages)))
{
$app = JFactory::getApplication();
$langMissing = array_intersect_key($langCodes, array_flip($langMissing));

$app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning');
}
}

return parent::display();
}
}
@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset addfieldpath="/administrator/components/com_modules/models/fields" />

<field
name="client_id"
type="list"
label=""
filtermode="selector"
layout="default"
onchange="jQuery('#filter_position, #filter_module, #filter_language').val('');this.form.submit();"
>
<option value="0">JSITE</option>
<option value="1">JADMINISTRATOR</option>
</field>
<fields name="filter">
<field
name="search"
type="text"
label="COM_MODULES_MODULES_FILTER_SEARCH_LABEL"
description="COM_MODULES_MODULES_FILTER_SEARCH_DESC"
hint="JSEARCH_FILTER"
noresults="COM_MODULES_MSG_MANAGE_NO_MODULES"
/>
<field
name="state"
type="status"
label="JSTATUS"
filter="*,-2,0,1"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_PUBLISHED</option>
</field>
<field
name="position"
type="modulesposition"
label="COM_MODULES_FIELD_POSITION_LABEL"
onchange="this.form.submit();"
>
<option value="">COM_MODULES_OPTION_SELECT_POSITION</option>
</field>
<field
name="module"
type="ModulesModule"
label="COM_MODULES_OPTION_SELECT_MODULE"
onchange="this.form.submit();"
>
<option value="">COM_MODULES_OPTION_SELECT_MODULE</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="language"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
client="administrator"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
<fields name="list">
<field
name="fullordering"
type="list"
label="JGLOBAL_SORT_BY"
description="JGLOBAL_SORT_BY"
statuses="*,0,1,-2"
onchange="this.form.submit();"
default="a.position ASC"
>
<option value="">JGLOBAL_SORT_BY</option>
<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>
<option value="a.ordering 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="a.position ASC">COM_MODULES_HEADING_POSITION_ASC</option>
<option value="a.position DESC">COM_MODULES_HEADING_POSITION_DESC</option>
<option value="name ASC">COM_MODULES_HEADING_MODULE_ASC</option>
<option value="name DESC">COM_MODULES_HEADING_MODULE_DESC</option>
<option value="ag.title ASC">JGRID_HEADING_ACCESS_ASC</option>
<option value="ag.title DESC">JGRID_HEADING_ACCESS_DESC</option>
<option value="a.language ASC">JGRID_HEADING_LANGUAGE_ASC</option>
<option value="a.language DESC">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_MODULES_LIST_LIMIT"
description="JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC"
class="input-mini"
default="25"
onchange="this.form.submit();"
/>
</fields>
</form>
11 changes: 11 additions & 0 deletions administrator/components/com_modules/models/forms/moduleadmin.xml
Expand Up @@ -103,6 +103,17 @@
label="JFIELD_ORDERING_LABEL"
/>

<field
name="language"
type="language"
label="JFIELD_LANGUAGE_LABEL"
description="JFIELD_MODULE_LANGUAGE_DESC"
default="*"
client="administrator"
>
<option value="*">JALL</option>
</field>

<field name="content" type="editor"
buttons="true"
description="COM_MODULES_FIELD_CONTENT_DESC"
Expand Down
6 changes: 6 additions & 0 deletions administrator/components/com_modules/models/module.php
Expand Up @@ -541,6 +541,12 @@ public function getForm($data = array(), $loadData = true)
if ($clientId == 1)
{
$form = $this->loadForm('com_modules.module.admin', 'moduleadmin', array('control' => 'jform', 'load_data' => $loadData), true);

// Display language field to filter admin custom menus per language
if (!JLanguageMultilang::isAdminEnabled())
{
$form->setFieldAttribute('language', 'type', 'hidden');
}
}
else
{
Expand Down
6 changes: 6 additions & 0 deletions administrator/components/com_modules/models/modules.php
Expand Up @@ -111,6 +111,12 @@ protected function populateState($ordering = 'a.position', $direction = 'asc')
$this->setState('client_id', $clientId);
}

// Use a different filter file when client is administrator
if ($clientId == 1)
{
$this->filterFormName = 'filter_modulesadmin';
}

// Load the parameters.
$params = JComponentHelper::getParams('com_modules');
$this->setState('params', $params);
Expand Down
Expand Up @@ -69,6 +69,10 @@
<th width="10%" class="nowrap hidden-phone">
<?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'l.title', $listDirn, $listOrder); ?>
</th>
<?php elseif ($clientId === 1 && JLanguageMultilang::isAdminEnabled()) : ?>
<th width="10%" class="nowrap hidden-phone">
<?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $listDirn, $listOrder); ?>
</th>
<?php endif; ?>
<th width="1%" class="nowrap center hidden-phone">
<?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
Expand Down Expand Up @@ -187,6 +191,16 @@
<td class="small hidden-phone">
<?php echo JLayoutHelper::render('joomla.content.language', $item); ?>
</td>
<?php elseif ($clientId === 1 && JLanguageMultilang::isAdminEnabled()) : ?>
<td class="small hidden-phone">
<?php if ($item->language == ''):?>
<?php echo JText::_('JUNDEFINED'); ?>
<?php elseif ($item->language == '*'):?>
<?php echo JText::alt('JALL', 'language'); ?>
<?php else:?>
<?php echo $this->escape($item->language); ?>
<?php endif; ?>
</td>
<?php endif; ?>
<td class="hidden-phone">
<?php echo (int) $item->id; ?>
Expand Down
Expand Up @@ -33,11 +33,19 @@
<div class="container-fluid">
<p><?php echo JText::_('COM_MODULES_BATCH_TIP'); ?></p>
<div class="row-fluid">
<div class="control-group span6">
<div class="controls">
<?php echo JHtml::_('batch.language'); ?>
<?php if ($clientId != 1) : ?>
<div class="control-group span6">
<div class="controls">
<?php echo JLayoutHelper::render('joomla.html.batch.language', array()); ?>
</div>
</div>
</div>
<?php elseif ($clientId == 1 && JLanguageMultilang::isAdminEnabled()) : ?>
<div class="control-group span6">
<div class="controls">
<?php echo JLayoutHelper::render('joomla.html.batch.adminlanguage', array()); ?>
</div>
</div>
<?php endif; ?>
<div class="control-group span6">
<div class="controls">
<?php echo JHtml::_('batch.access'); ?>
Expand Down

0 comments on commit 1bcfb4a

Please sign in to comment.