1<?php
2/**
3 * @package     Joomla.Administrator
4 * @subpackage  com_menus
5 *
6 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
7 * @license     GNU General Public License version 2 or later; see LICENSE.txt
8 */
9
10defined('_JEXEC') or die;
11
12/**
13 * Base controller class for Menu Manager.
14 *
15 * @since  1.6
16 */
17class MenusController extends JControllerLegacy
18{
19	/**
20	 * Method to display a view.
21	 *
22	 * @param   boolean        $cachable   If true, the view output will be cached
23	 * @param   array|boolean  $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
24	 *
25	 * @return  JController    This object to support chaining.
26	 *
27	 * @since   1.5
28	 */
29	public function display($cachable = false, $urlparams = false)
30	{
31		JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php');
32
33		// Check custom administrator menu modules
34		if (JModuleHelper::isAdminMultilang())
35		{
36			$languages = JLanguageHelper::getInstalledLanguages(1, true);
37			$langCodes = array();
38
39			foreach ($languages as $language)
40			{
41				if (isset($language->metadata['nativeName']))
42				{
43					$languageName = $language->metadata['nativeName'];
44				}
45				else
46				{
47					$languageName = $language->metadata['name'];
48				}
49
50				$langCodes[$language->metadata['tag']] = $languageName;
51			}
52
53			$db    = JFactory::getDbo();
54			$query = $db->getQuery(true);
55
56			$query->select($db->qn('m.language'))
57				->from($db->qn('#__modules', 'm'))
58				->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu'))
59				->where($db->qn('m.published') . ' = 1')
60				->where($db->qn('m.client_id') . ' = 1')
61				->group($db->qn('m.language'));
62
63			$mLanguages = $db->setQuery($query)->loadColumn();
64
65			// Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language.
66			if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages)))
67			{
68				$app         = JFactory::getApplication();
69				$langMissing = array_intersect_key($langCodes, array_flip($langMissing));
70
71				$app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning');
72			}
73		}
74
75		return parent::display();
76	}
77}
78