primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,89 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ListField;
use Joomla\CMS\Language\Text;
use Joomla\Utilities\ArrayHelper;
/**
* MenuItem by Component field.
*
* @since 4.3.0
*/
class MenuItemByComponentField extends ListField
{
/**
* The form field type.
*
* @var string
* @since 4.3.0
*/
protected $type = 'MenuItemByComponent';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*
* @since 4.3.0
*/
protected function getOptions()
{
// Initialise variable.
$db = $this->getDatabase();
$options = [];
$query = $db->getQuery(true);
$query->select('DISTINCT ' . $db->quoteName('extensions.element'))
->from($db->quoteName('#__menu', 'menu'))
->join(
'INNER',
$db->quoteName('#__extensions', 'extensions'),
$db->quoteName('extensions.extension_id') . ' = ' . $db->quoteName('menu.component_id')
)
->where($db->quoteName('menu.client_id') . ' = 0')
->where($db->quoteName('menu.type') . ' = ' . $db->quote('component'))
->where($db->quoteName('extensions.extension_id') . ' IS NOT NULL');
$app = Factory::getApplication();
$currentMenuType = $app->getInput()->getString('menutype', $app->getUserState($this->context . '.menutype', ''));
if ($currentMenuType) {
$query->where($db->quoteName('menu.menutype') . ' = :currentMenuType')
->bind(':currentMenuType', $currentMenuType);
}
$db->setQuery($query);
$components = $db->loadColumn();
foreach ($components as $component) {
// Load component language files
$lang = $app->getLanguage();
$lang->load($component, JPATH_BASE)
|| $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component);
$option = new \stdClass();
$option->value = $component;
$option->text = Text::_(strtoupper($component));
$options[] = $option;
}
// Sort by name
$options = ArrayHelper::sortObjects($options, 'text', 1, true, true);
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}

View File

@ -0,0 +1,272 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\GroupedlistField;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\Component\Menus\Administrator\Helper\MenusHelper;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Supports an HTML grouped select list of menu item grouped by menu
*
* @since 3.8.0
*/
class MenuItemByTypeField extends GroupedlistField
{
/**
* The form field type.
*
* @var string
* @since 3.8.0
*/
public $type = 'MenuItemByType';
/**
* The menu type.
*
* @var string
* @since 3.8.0
*/
protected $menuType;
/**
* The client id.
*
* @var string
* @since 3.8.0
*/
protected $clientId;
/**
* The language.
*
* @var array
* @since 3.8.0
*/
protected $language;
/**
* The published status.
*
* @var array
* @since 3.8.0
*/
protected $published;
/**
* The disabled status.
*
* @var array
* @since 3.8.0
*/
protected $disable;
/**
* Method to get certain otherwise inaccessible properties from the form field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.8.0
*/
public function __get($name)
{
switch ($name) {
case 'menuType':
case 'clientId':
case 'language':
case 'published':
case 'disable':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.8.0
*/
public function __set($name, $value)
{
switch ($name) {
case 'menuType':
$this->menuType = (string) $value;
break;
case 'clientId':
$this->clientId = (int) $value;
break;
case 'language':
case 'published':
case 'disable':
$value = (string) $value;
$this->$name = $value ? explode(',', $value) : [];
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a Form object to the field.
*
* @param \SimpleXMLElement $element The SimpleXMLElement object representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control value. This acts as an array container for the field.
* For example if the field has name="foo" and the group value is set to "bar" then the
* full field name would end up being "bar[foo]".
*
* @return boolean True on success.
*
* @see \Joomla\CMS\Form\FormField::setup()
* @since 3.8.0
*/
public function setup(\SimpleXMLElement $element, $value, $group = null)
{
$result = parent::setup($element, $value, $group);
if ($result == true) {
$menuType = (string) $this->element['menu_type'];
if (!$menuType) {
$app = Factory::getApplication();
$currentMenuType = $app->getUserState('com_menus.items.menutype', '');
$menuType = $app->getInput()->getString('menutype', $currentMenuType);
}
$this->menuType = $menuType;
$this->clientId = (int) $this->element['client_id'];
$this->published = $this->element['published'] ? explode(',', (string) $this->element['published']) : [];
$this->disable = $this->element['disable'] ? explode(',', (string) $this->element['disable']) : [];
$this->language = $this->element['language'] ? explode(',', (string) $this->element['language']) : [];
}
return $result;
}
/**
* Method to get the field option groups.
*
* @return array The field option objects as a nested array in groups.
*
* @since 3.8.0
*/
protected function getGroups()
{
$groups = [];
$menuType = $this->menuType;
// Get the menu items.
$items = MenusHelper::getMenuLinks($menuType, 0, 0, $this->published, $this->language, $this->clientId);
// Build group for a specific menu type.
if ($menuType) {
// If the menutype is empty, group the items by menutype.
$db = $this->getDatabase();
$query = $db->getQuery(true)
->select($db->quoteName('title'))
->from($db->quoteName('#__menu_types'))
->where($db->quoteName('menutype') . ' = :menuType')
->bind(':menuType', $menuType);
$db->setQuery($query);
try {
$menuTitle = $db->loadResult();
} catch (\RuntimeException $e) {
$menuTitle = $menuType;
}
// Initialize the group.
$groups[$menuTitle] = [];
// Build the options array.
foreach ($items as $key => $link) {
// Unset if item is menu_item_root
if ($link->text === 'Menu_Item_Root') {
unset($items[$key]);
continue;
}
$levelPrefix = str_repeat('- ', max(0, $link->level - 1));
// Displays language code if not set to All
if ($link->language !== '*') {
$lang = ' (' . $link->language . ')';
} else {
$lang = '';
}
$text = Text::_($link->text);
$groups[$menuTitle][] = HTMLHelper::_(
'select.option',
$link->value,
$levelPrefix . $text . $lang,
'value',
'text',
\in_array($link->type, $this->disable)
);
}
} else {
// Build groups for all menu types.
// Build the groups arrays.
foreach ($items as $menu) {
// Initialize the group.
$groups[$menu->title] = [];
// Build the options array.
foreach ($menu->links as $link) {
$levelPrefix = str_repeat('- ', max(0, $link->level - 1));
// Displays language code if not set to All
if ($link->language !== '*') {
$lang = ' (' . $link->language . ')';
} else {
$lang = '';
}
$text = Text::_($link->text);
$groups[$menu->title][] = HTMLHelper::_(
'select.option',
$link->value,
$levelPrefix . $text . $lang,
'value',
'text',
\in_array($link->type, $this->disable)
);
}
}
}
// Merge any additional groups in the XML definition.
$groups = array_merge(parent::getGroups(), $groups);
return $groups;
}
}

View File

@ -0,0 +1,123 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ListField;
use Joomla\CMS\Language\Text;
use Joomla\Database\ParameterType;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Menu Ordering field.
*
* @since 1.6
*/
class MenuOrderingField extends ListField
{
/**
* The form field type.
*
* @var string
* @since 1.7
*/
protected $type = 'MenuOrdering';
/**
* Method to get the list of siblings in a menu.
* The method requires that parent be set.
*
* @return array|boolean The field option objects or false if the parent field has not been set
*
* @since 1.7
*/
protected function getOptions()
{
$options = [];
// Get the parent
$parent_id = (int) $this->form->getValue('parent_id', 0);
if (!$parent_id) {
return false;
}
$db = $this->getDatabase();
$query = $db->getQuery(true)
->select(
[
$db->quoteName('a.id', 'value'),
$db->quoteName('a.title', 'text'),
$db->quoteName('a.client_id', 'clientId'),
]
)
->from($db->quoteName('#__menu', 'a'))
->where($db->quoteName('a.published') . ' >= 0')
->where($db->quoteName('a.parent_id') . ' = :parentId')
->bind(':parentId', $parent_id, ParameterType::INTEGER);
if ($menuType = $this->form->getValue('menutype')) {
$query->where($db->quoteName('a.menutype') . ' = :menuType')
->bind(':menuType', $menuType);
} else {
$query->where($db->quoteName('a.menutype') . ' != ' . $db->quote(''));
}
$query->order($db->quoteName('a.lft') . ' ASC');
// Get the options.
$db->setQuery($query);
try {
$options = $db->loadObjectList();
} catch (\RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}
// Allow translation of custom admin menus
foreach ($options as &$option) {
if ($option->clientId != 0) {
$option->text = Text::_($option->text);
}
}
$options = array_merge(
[['value' => '-1', 'text' => Text::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_FIRST')]],
$options,
[['value' => '-2', 'text' => Text::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_LAST')]]
);
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7
*/
protected function getInput()
{
if ($this->form->getValue('id', 0) == 0) {
return '<span class="readonly">' . Text::_('COM_MENUS_ITEM_FIELD_ORDERING_TEXT') . '</span>';
}
return parent::getInput();
}
}

View File

@ -0,0 +1,116 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ListField;
use Joomla\CMS\Language\Text;
use Joomla\Database\ParameterType;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Menu Parent field.
*
* @since 1.6
*/
class MenuParentField extends ListField
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'MenuParent';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.6
*/
protected function getOptions()
{
$options = [];
$db = $this->getDatabase();
$query = $db->getQuery(true)
->select(
[
'DISTINCT ' . $db->quoteName('a.id', 'value'),
$db->quoteName('a.title', 'text'),
$db->quoteName('a.level'),
$db->quoteName('a.lft'),
]
)
->from($db->quoteName('#__menu', 'a'));
// Filter by menu type.
if ($menuType = $this->form->getValue('menutype')) {
$query->where($db->quoteName('a.menutype') . ' = :menuType')
->bind(':menuType', $menuType);
} else {
// Skip special menu types
$query->where($db->quoteName('a.menutype') . ' != ' . $db->quote(''));
$query->where($db->quoteName('a.menutype') . ' != ' . $db->quote('main'));
}
// Filter by client id.
$clientId = $this->getAttribute('clientid');
if (!\is_null($clientId)) {
$clientId = (int) $clientId;
$query->where($db->quoteName('a.client_id') . ' = :clientId')
->bind(':clientId', $clientId, ParameterType::INTEGER);
}
// Prevent parenting to children of this item.
if ($id = (int) $this->form->getValue('id')) {
$query->join('LEFT', $db->quoteName('#__menu', 'p'), $db->quoteName('p.id') . ' = :id')
->bind(':id', $id, ParameterType::INTEGER)
->where(
'NOT(' . $db->quoteName('a.lft') . ' >= ' . $db->quoteName('p.lft')
. ' AND ' . $db->quoteName('a.rgt') . ' <= ' . $db->quoteName('p.rgt') . ')'
);
}
$query->where($db->quoteName('a.published') . ' != -2')
->order($db->quoteName('a.lft') . ' ASC');
// Get the options.
$db->setQuery($query);
try {
$options = $db->loadObjectList();
} catch (\RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}
// Pad the option text with spaces using depth level as a multiplier.
foreach ($options as $option) {
if ($clientId != 0) {
// Allow translation of custom admin menus
$option->text = str_repeat('- ', $option->level) . Text::_($option->text);
} else {
$option->text = str_repeat('- ', $option->level) . $option->text;
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}

View File

@ -0,0 +1,56 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Form\Field\ListField;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\Component\Menus\Administrator\Helper\MenusHelper;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Administrator Menu Presets list field.
*
* @since 3.8.0
*/
class MenuPresetField extends ListField
{
/**
* The form field type.
*
* @var string
*
* @since 3.8.0
*/
protected $type = 'MenuPreset';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 3.8.0
*/
protected function getOptions()
{
$options = [];
$presets = MenusHelper::getPresets();
foreach ($presets as $preset) {
$options[] = HTMLHelper::_('select.option', $preset->name, Text::_($preset->title));
}
return array_merge(parent::getOptions(), $options);
}
}

View File

@ -0,0 +1,148 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ModalSelectField;
use Joomla\CMS\Language\Text;
use Joomla\Component\Menus\Administrator\Helper\MenusHelper;
use Joomla\Utilities\ArrayHelper;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Menu Type field.
*
* @since 1.6
*/
class MenutypeField extends ModalSelectField
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'menutype';
/**
* Method to attach a Form object to the field.
*
* @param \SimpleXMLElement $element The SimpleXMLElement object representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control value.
*
* @return boolean True on success.
*
* @see FormField::setup()
* @since 5.0.0
*/
public function setup(\SimpleXMLElement $element, $value, $group = null)
{
$result = parent::setup($element, $value, $group);
if (!$result) {
return $result;
}
$recordId = (int) $this->form->getValue('id');
$clientId = (int) $this->element['clientid'] ?: 0;
$url = 'index.php?option=com_menus&view=menutypes&tmpl=component&client_id=' . $clientId . '&recordId=' . $recordId;
$this->urls['select'] = $url;
$this->canDo['clear'] = false;
$this->modalTitles['select'] = Text::_('COM_MENUS_ITEM_FIELD_TYPE_LABEL');
$this->buttonIcons['select'] = 'icon-list';
return $result;
}
/**
* Method to retrieve the title of selected item.
*
* @return string
*
* @since 5.0.0
*/
protected function getValueTitle()
{
$title = '';
$clientId = (int) $this->element['clientid'] ?: 0;
// Get a reverse lookup of the base link URL to Title
switch ($this->value) {
case 'url':
$title = Text::_('COM_MENUS_TYPE_EXTERNAL_URL');
break;
case 'alias':
$title = Text::_('COM_MENUS_TYPE_ALIAS');
break;
case 'separator':
$title = Text::_('COM_MENUS_TYPE_SEPARATOR');
break;
case 'heading':
$title = Text::_('COM_MENUS_TYPE_HEADING');
break;
case 'container':
$title = Text::_('COM_MENUS_TYPE_CONTAINER');
break;
default:
$link = $this->form->getValue('link');
if ($link !== null) {
/** @var \Joomla\Component\Menus\Administrator\Model\MenutypesModel $model */
$model = Factory::getApplication()->bootComponent('com_menus')
->getMVCFactory()->createModel('Menutypes', 'Administrator', ['ignore_request' => true]);
$model->setState('client_id', $clientId);
$rlu = $model->getReverseLookup();
// Clean the link back to the option, view and layout
$title = Text::_(ArrayHelper::getValue($rlu, MenusHelper::getLinkKey($link)));
}
break;
}
return $title;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 5.0.0
*/
protected function getInput()
{
// Get the layout data
$data = $this->getLayoutData();
// Load the content title here to avoid a double DB Query
$data['valueTitle'] = $this->getValueTitle();
// On new item creation the model forces the value to be 'component',
// However this is need to be empty in the input for correct validation and rendering.
if ($data['value'] === 'component' && !$data['valueTitle'] && !$this->form->getValue('link')) {
$data['value'] = '';
}
return $this->getRenderer($this->layout)->render($data);
}
}

View File

@ -0,0 +1,292 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Menus\Administrator\Field\Modal;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ModalSelectField;
use Joomla\CMS\Form\FormField;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;
use Joomla\Database\ParameterType;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Supports a modal menu item picker.
*
* @since 3.7.0
*/
class MenuField extends ModalSelectField
{
/**
* The form field type.
*
* @var string
* @since 3.7.0
*/
protected $type = 'Modal_Menu';
/**
* Method to get certain otherwise inaccessible properties from the form field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.7.0
*/
public function __get($name)
{
switch ($name) {
case 'allowSelect':
case 'allowClear':
case 'allowNew':
case 'allowEdit':
case 'allowPropagate':
// @TODO: The override only for backward compatibility. Remove in Joomla 6.
$map = [
'allowSelect' => 'select',
'allowClear' => 'clear',
'allowNew' => 'new',
'allowEdit' => 'edit',
'allowPropagate' => 'propagate',
];
$newName = $map[$name];
@trigger_error(
\sprintf(
'MenuField::__get property "%s" is deprecated, and will not work in Joomla 6. Use "%s" property instead.',
$name,
$newName
),
E_USER_DEPRECATED
);
return parent::__get($newName);
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.7.0
*/
public function __set($name, $value)
{
switch ($name) {
case 'allowSelect':
case 'allowClear':
case 'allowNew':
case 'allowEdit':
case 'allowPropagate':
// @TODO: The override only for backward compatibility. Remove in Joomla 6.
$map = [
'allowSelect' => 'select',
'allowClear' => 'clear',
'allowNew' => 'new',
'allowEdit' => 'edit',
'allowPropagate' => 'propagate',
];
$newName = $map[$name];
@trigger_error(
\sprintf(
'MenuField::__set property "%s" is deprecated, and will not work in Joomla 6. Use "%s" property instead.',
$name,
$newName
),
E_USER_DEPRECATED
);
$value = (string) $value;
$value = !($value === 'false' || $value === 'off' || $value === '0');
parent::__set($newName, $value);
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a Form object to the field.
*
* @param \SimpleXMLElement $element The SimpleXMLElement object representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control value. This acts as an array container for the field.
* For example if the field has name="foo" and the group value is set to "bar" then the
* full field name would end up being "bar[foo]".
*
* @return boolean True on success.
*
* @see FormField::setup()
* @since 3.7.0
*/
public function setup(\SimpleXMLElement $element, $value, $group = null)
{
// Check if the value consist with id:alias, extract the id only
if ($value && str_contains($value, ':')) {
[$id] = explode(':', $value, 2);
$value = (int) $id;
}
$return = parent::setup($element, $value, $group);
if (!$return) {
return $return;
}
$app = Factory::getApplication();
$app->getLanguage()->load('com_menus', JPATH_ADMINISTRATOR);
$languages = LanguageHelper::getContentLanguages([0, 1], false);
$language = (string) $this->element['language'];
$clientId = (int) $this->element['clientid'];
// Prepare enabled actions
$this->canDo['propagate'] = ((string) $this->element['propagate'] === 'true') && \count($languages) > 2;
// Creating/editing menu items is not supported in frontend.
if (!$app->isClient('administrator')) {
$this->canDo['new'] = false;
$this->canDo['edit'] = false;
}
// Prepare Urls
$linkItems = (new Uri())->setPath(Uri::base(true) . '/index.php');
$linkItems->setQuery([
'option' => 'com_menus',
'view' => 'items',
'layout' => 'modal',
'tmpl' => 'component',
'client_id' => $clientId,
Session::getFormToken() => 1,
]);
$linkItem = clone $linkItems;
$linkItem->setVar('view', 'item');
$linkCheckin = (new Uri())->setPath(Uri::base(true) . '/index.php');
$linkCheckin->setQuery([
'option' => 'com_menus',
'task' => 'items.checkin',
'format' => 'json',
Session::getFormToken() => 1,
]);
if ($language) {
$linkItems->setVar('forcedLanguage', $language);
$linkItem->setVar('forcedLanguage', $language);
$modalTitle = Text::_('COM_MENUS_SELECT_A_MENUITEM') . ' &#8212; ' . $this->getTitle();
$this->dataAttributes['data-language'] = $language;
} else {
$modalTitle = Text::_('COM_MENUS_SELECT_A_MENUITEM');
}
$urlSelect = $linkItems;
$urlEdit = clone $linkItem;
$urlEdit->setVar('task', 'item.edit');
$urlNew = clone $linkItem;
$urlNew->setVar('task', 'item.add');
$this->urls['select'] = (string) $urlSelect;
$this->urls['new'] = (string) $urlNew;
$this->urls['edit'] = (string) $urlEdit;
$this->urls['checkin'] = (string) $linkCheckin;
// Prepare titles
$this->modalTitles['select'] = $modalTitle;
$this->modalTitles['new'] = Text::_('COM_MENUS_NEW_MENUITEM');
$this->modalTitles['edit'] = Text::_('COM_MENUS_EDIT_MENUITEM');
$this->hint = $this->hint ?: Text::_('COM_MENUS_SELECT_A_MENUITEM');
return $return;
}
/**
* Method to retrieve the title of selected item.
*
* @return string
*
* @since 5.0.0
*/
protected function getValueTitle()
{
$value = (int) $this->value ?: '';
$title = '';
if ($value) {
try {
$db = $this->getDatabase();
$query = $db->getQuery(true)
->select($db->quoteName('title'))
->from($db->quoteName('#__menu'))
->where($db->quoteName('id') . ' = :id')
->bind(':id', $value, ParameterType::INTEGER);
$db->setQuery($query);
$title = $db->loadResult();
} catch (\Throwable $e) {
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}
}
return $title ?: $value;
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 5.0.0
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
$data['language'] = (string) $this->element['language'];
return $data;
}
/**
* Get the renderer
*
* @param string $layoutId Id to load
*
* @return FileLayout
*
* @since 5.0.0
*/
protected function getRenderer($layoutId = 'default')
{
$layout = parent::getRenderer($layoutId);
$layout->setComponent('com_menus');
$layout->setClient(1);
return $layout;
}
}