File manager - Edit - /home/opticamezl/www/newok/com_languages.zip
Back
PK n?�\���} } languages.xmlnu �[��� <?xml version="1.0" encoding="UTF-8"?> <extension type="component" method="upgrade"> <name>com_languages</name> <author>Joomla! Project</author> <creationDate>2006-04</creationDate> <copyright>(C) 2006 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>4.0.0</version> <description>COM_LANGUAGES_XML_DESCRIPTION</description> <namespace path="src">Joomla\Component\Languages</namespace> <media destination="com_languages" folder="media"> <folder>css</folder> <folder>js</folder> </media> <administration> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>languages.xml</filename> <folder>forms</folder> <folder>services</folder> <folder>src</folder> <folder>tmpl</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB/com_languages.ini</language> <language tag="en-GB">language/en-GB/com_languages.sys.ini</language> </languages> </administration> </extension> PK n?�\A#͡b b src/Model/LanguagesModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Administrator\Model; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\ListModel; use Joomla\CMS\Table\Table; use Joomla\Database\DatabaseQuery; use Joomla\Database\ParameterType; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Model Class * * @since 1.6 */ class LanguagesModel extends ListModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * @param MVCFactoryInterface $factory The factory. * * @see \Joomla\CMS\MVC\Model\BaseDatabaseModel * @since 3.2 */ public function __construct($config = [], MVCFactoryInterface $factory = null) { if (empty($config['filter_fields'])) { $config['filter_fields'] = [ 'lang_id', 'a.lang_id', 'lang_code', 'a.lang_code', 'title', 'a.title', 'title_native', 'a.title_native', 'sef', 'a.sef', 'image', 'a.image', 'published', 'a.published', 'ordering', 'a.ordering', 'access', 'a.access', 'access_level', 'home', 'l.home', ]; } parent::__construct($config, $factory); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.ordering', $direction = 'asc') { // Load the parameters. $params = ComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.published'); return parent::getStoreId($id); } /** * Method to build an SQL query to load the list data. * * @return DatabaseQuery An SQL query * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDatabase(); $query = $db->getQuery(true); // Select all fields from the languages table. $query->select( $this->getState( 'list.select', [ $db->quoteName('a') . '.*', ] ) ) ->select( [ $db->quoteName('l.home'), $db->quoteName('ag.title', 'access_level'), ] ) ->from($db->quoteName('#__languages', 'a')) ->join('LEFT', $db->quoteName('#__viewlevels', 'ag'), $db->quoteName('ag.id') . ' = ' . $db->quoteName('a.access')) ->join( 'LEFT', $db->quoteName('#__menu', 'l'), $db->quoteName('l.language') . ' = ' . $db->quoteName('a.lang_code') . ' AND ' . $db->quoteName('l.home') . ' = 1 AND ' . $db->quoteName('l.language') . ' <> ' . $db->quote('*') ); // Filter on the published state. $published = (string) $this->getState('filter.published'); if (is_numeric($published)) { $published = (int) $published; $query->where($db->quoteName('a.published') . ' = :published') ->bind(':published', $published, ParameterType::INTEGER); } elseif ($published === '') { $query->where($db->quoteName('a.published') . ' IN (0, 1)'); } // Filter by search in title. if ($search = $this->getState('filter.search')) { $search = '%' . str_replace(' ', '%', trim($search)) . '%'; $query->where($db->quoteName('a.title') . ' LIKE :search') ->bind(':search', $search); } // Filter by access level. if ($access = (int) $this->getState('filter.access')) { $query->where($db->quoteName('a.access') . ' = :access') ->bind(':access', $access, ParameterType::INTEGER); } // Add the list ordering clause. $query->order($db->quoteName($db->escape($this->getState('list.ordering', 'a.ordering'))) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Set the published language(s). * * @param array $cid An array of language IDs. * @param integer $value The value of the published state. * * @return boolean True on success, false otherwise. * * @since 1.6 */ public function setPublished($cid, $value = 0) { return Table::getInstance('Language', 'Joomla\\CMS\\Table\\')->publish($cid, $value); } /** * Method to delete records. * * @param array $pks An array of item primary keys. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete($pks) { // Sanitize the array. $pks = (array) $pks; // Get a row instance. $table = Table::getInstance('Language', 'Joomla\\CMS\\Table\\'); // Iterate the items to delete each one. foreach ($pks as $itemId) { if (!$table->delete((int) $itemId)) { $this->setError($table->getError()); return false; } } // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method, 2 places for 2 clients. * * @param string $group Optional cache group name. * @param integer $clientId No longer used, will be removed without replacement * @deprecated 4.3 will be removed in 6.0 * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $clientId = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PK n?�\�Gʔ � src/Model/OverridesModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Model; use Joomla\CMS\Factory; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\ListModel; use Joomla\Filesystem\File; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Overrides Model * * @since 2.5 */ class OverridesModel extends ListModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * @param MVCFactoryInterface $factory The factory. * * @see \Joomla\CMS\MVC\Model\BaseDatabaseModel * @since 2.5 */ public function __construct($config = [], MVCFactoryInterface $factory = null) { if (empty($config['filter_fields'])) { $config['filter_fields'] = [ 'key', 'text', ]; } parent::__construct($config, $factory); } /** * Retrieves the overrides data * * @param boolean $all True if all overrides shall be returned without considering pagination, defaults to false * * @return array Array of objects containing the overrides of the override.ini file * * @since 2.5 */ public function getOverrides($all = false) { // Get a storage key. $store = $this->getStoreId(); // Try to load the data from internal storage. if (!empty($this->cache[$store])) { return $this->cache[$store]; } $client = strtoupper($this->getState('filter.client')); // Parse the override.ini file in order to get the keys and strings. $fileName = constant('JPATH_' . $client) . '/language/overrides/' . $this->getState('filter.language') . '.override.ini'; $strings = LanguageHelper::parseIniFile($fileName); // Delete the override.ini file if empty. if (file_exists($fileName) && $strings === []) { File::delete($fileName); } // Filter the loaded strings according to the search box. $search = $this->getState('filter.search'); if ($search != '') { $search = preg_quote($search, '~'); $matchvals = preg_grep('~' . $search . '~i', $strings); $matchkeys = array_intersect_key($strings, array_flip(preg_grep('~' . $search . '~i', array_keys($strings)))); $strings = array_merge($matchvals, $matchkeys); } // Consider the ordering if ($this->getState('list.ordering') == 'text') { if (strtoupper($this->getState('list.direction')) == 'DESC') { arsort($strings); } else { asort($strings); } } else { if (strtoupper($this->getState('list.direction')) == 'DESC') { krsort($strings); } else { ksort($strings); } } // Consider the pagination. if (!$all && $this->getState('list.limit') && $this->getTotal() > $this->getState('list.limit')) { $strings = array_slice($strings, $this->getStart(), $this->getState('list.limit'), true); } // Add the items to the internal cache. $this->cache[$store] = $strings; return $this->cache[$store]; } /** * Method to get the total number of overrides. * * @return integer The total number of overrides. * * @since 2.5 */ public function getTotal() { // Get a storage key. $store = $this->getStoreId('getTotal'); // Try to load the data from internal storage if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Add the total to the internal cache. $this->cache[$store] = count($this->getOverrides(true)); return $this->cache[$store]; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 2.5 */ protected function populateState($ordering = 'key', $direction = 'asc') { // We call populate state first so that we can then set the filter.client and filter.language properties in afterwards parent::populateState($ordering, $direction); $app = Factory::getApplication(); if ($app->isClient('api')) { return; } $language_client = $this->getUserStateFromRequest('com_languages.overrides.language_client', 'language_client', '', 'cmd'); $client = substr($language_client, -1); $language = substr($language_client, 0, -1); // Sets the search filter. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $this->setState('language_client', $language . $client); $this->setState('filter.client', $client ? 'administrator' : 'site'); $this->setState('filter.language', $language); // Add the 'language_client' value to the session to display a message if none selected $app->setUserState('com_languages.overrides.language_client', $language . $client); // Add filters to the session because they won't be stored there by 'getUserStateFromRequest' if they aren't in the current request. $app->setUserState('com_languages.overrides.filter.client', $client); $app->setUserState('com_languages.overrides.filter.language', $language); } /** * Method to delete one or more overrides. * * @param array $cids Array of keys to delete. * * @return integer Number of successfully deleted overrides, boolean false if an error occurred. * * @since 2.5 */ public function delete($cids) { // Check permissions first. if (!$this->getCurrentUser()->authorise('core.delete', 'com_languages')) { $this->setError(Text::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } $app = Factory::getApplication(); if ($app->isClient('api')) { $cids = (array) $cids; $client = $this->getState('filter.client'); } else { $filterclient = Factory::getApplication()->getUserState('com_languages.overrides.filter.client'); $client = $filterclient == 0 ? 'site' : 'administrator'; } // Parse the override.ini file in order to get the keys and strings. $fileName = constant('JPATH_' . strtoupper($client)) . '/language/overrides/' . $this->getState('filter.language') . '.override.ini'; $strings = LanguageHelper::parseIniFile($fileName); // Unset strings that shall be deleted foreach ($cids as $key) { if (isset($strings[$key])) { unset($strings[$key]); } } // Write override.ini file with the strings. if (LanguageHelper::saveToIniFile($fileName, $strings) === false) { return false; } $this->cleanCache(); return count($cids); } /** * Removes all of the cached strings from the table. * * @return boolean result of operation * * @since 3.4.2 */ public function purge() { $db = $this->getDatabase(); // Note: TRUNCATE is a DDL operation // This may or may not mean depending on your database try { $db->truncateTable('#__overrider'); } catch (\RuntimeException $e) { return $e; } Factory::getApplication()->enqueueMessage(Text::_('COM_LANGUAGES_VIEW_OVERRIDES_PURGE_SUCCESS')); } } PK n?�\����+ �+ src/Model/InstalledModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Model; use Joomla\CMS\Application\ApplicationHelper; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Filesystem\Folder; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\ListModel; use Joomla\CMS\Table\Table; use Joomla\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Component Languages Model * * @since 1.6 */ class InstalledModel extends ListModel { /** * @var object user object */ protected $user = null; /** * @var string option name */ protected $option = null; /** * @var array languages description */ protected $data = null; /** * @var integer total number of languages */ protected $total = null; /** * @var string language path */ protected $path = null; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * @param MVCFactoryInterface $factory The factory. * * @see \Joomla\CMS\MVC\Model\BaseDatabaseModel * @since 3.2 */ public function __construct($config = [], MVCFactoryInterface $factory = null) { if (empty($config['filter_fields'])) { $config['filter_fields'] = [ 'name', 'nativeName', 'language', 'author', 'published', 'version', 'creationDate', 'author', 'authorEmail', 'extension_id', 'client_id', ]; } parent::__construct($config, $factory); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'name', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Special case for client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, [0, 1])) ? 0 : $clientId; $this->setState('client_id', $clientId); // Load the parameters. $params = ComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to get the client object. * * @return object * * @since 1.6 */ public function getClient() { return ApplicationHelper::getClientInfo($this->getState('client_id', 0)); } /** * Method to get the option. * * @return object * * @since 1.6 */ public function getOption() { $option = $this->getState('option'); return $option; } /** * Method to get Languages item data. * * @return array * * @since 1.6 */ public function getData() { // Fetch language data if not fetched yet. if (is_null($this->data)) { $this->data = []; $isCurrentLanguageRtl = Factory::getLanguage()->isRtl(); $params = ComponentHelper::getParams('com_languages'); $installedLanguages = LanguageHelper::getInstalledLanguages(null, true, true, null, null, null); // Compute all the languages. foreach ($installedLanguages as $clientId => $languages) { $defaultLanguage = $params->get(ApplicationHelper::getClientInfo($clientId)->name, 'en-GB'); foreach ($languages as $lang) { $row = new \stdClass(); $row->language = $lang->element; $row->name = $lang->metadata['name']; $row->nativeName = $lang->metadata['nativeName'] ?? '-'; $row->client_id = (int) $lang->client_id; $row->extension_id = (int) $lang->extension_id; $row->author = $lang->manifest['author']; $row->creationDate = $lang->manifest['creationDate']; $row->authorEmail = $lang->manifest['authorEmail']; $row->version = $lang->manifest['version']; $row->published = $defaultLanguage === $row->language ? 1 : 0; $row->checked_out = null; // Fix wrongly set parentheses in RTL languages if ($isCurrentLanguageRtl) { $row->name = html_entity_decode($row->name . '‎', ENT_QUOTES, 'UTF-8'); $row->nativeName = html_entity_decode($row->nativeName . '‎', ENT_QUOTES, 'UTF-8'); } $this->data[] = $row; } } } $installedLanguages = array_merge($this->data); // Process filters. $clientId = (int) $this->getState('client_id'); $search = $this->getState('filter.search'); foreach ($installedLanguages as $key => $installedLanguage) { // Filter by client id. if (in_array($clientId, [0, 1])) { if ($installedLanguage->client_id !== $clientId) { unset($installedLanguages[$key]); continue; } } // Filter by search term. if (!empty($search)) { if ( stripos($installedLanguage->name, $search) === false && stripos($installedLanguage->nativeName, $search) === false && stripos($installedLanguage->language, $search) === false ) { unset($installedLanguages[$key]); } } } // Process ordering. $listOrder = $this->getState('list.ordering', 'name'); $listDirn = $this->getState('list.direction', 'ASC'); $installedLanguages = ArrayHelper::sortObjects($installedLanguages, $listOrder, strtolower($listDirn) === 'desc' ? -1 : 1, true, true); // Process pagination. $limit = (int) $this->getState('list.limit', 25); // Sets the total for pagination. $this->total = count($installedLanguages); if ($limit !== 0) { $start = (int) $this->getState('list.start', 0); return array_slice($installedLanguages, $start, $limit); } return $installedLanguages; } /** * Method to get the total number of Languages items. * * @return integer * * @since 1.6 */ public function getTotal() { if (is_null($this->total)) { $this->getData(); } return $this->total; } /** * Method to set the default language. * * @param integer $cid Id of the language to publish. * * @return boolean * * @since 1.6 */ public function publish($cid) { if ($cid) { $client = $this->getClient(); $params = ComponentHelper::getParams('com_languages'); $params->set($client->name, $cid); $table = Table::getInstance('extension', 'Joomla\\CMS\\Table\\'); $id = $table->find(['element' => 'com_languages']); // Load. if (!$table->load($id)) { $this->setError($table->getError()); return false; } $table->params = (string) $params; // Pre-save checks. if (!$table->check()) { $this->setError($table->getError()); return false; } // Save the changes. if (!$table->store()) { $this->setError($table->getError()); return false; } } else { $this->setError(Text::_('COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED')); return false; } // Clean the cache of com_languages and component cache. $this->cleanCache(); $this->cleanCache('_system'); return true; } /** * Method to get the folders. * * @return array Languages folders. * * @since 1.6 */ protected function getFolders() { if (is_null($this->folders)) { $path = $this->getPath(); $this->folders = Folder::folders($path, '.', false, false, ['.svn', 'CVS', '.DS_Store', '__MACOSX', 'pdf_fonts', 'overrides']); } return $this->folders; } /** * Method to get the path. * * @return string The path to the languages folders. * * @since 1.6 */ protected function getPath() { if (is_null($this->path)) { $client = $this->getClient(); $this->path = LanguageHelper::getLanguagePath($client->path); } return $this->path; } /** * Method to switch the administrator language. * * @param string $cid The language tag. * * @return boolean * * @since 3.5 */ public function switchAdminLanguage($cid) { if ($cid) { $client = $this->getClient(); if ($client->name == 'administrator') { Factory::getApplication()->setUserState('application.lang', $cid); } } else { Factory::getApplication()->enqueueMessage(Text::_('COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED'), 'error'); return false; } return true; } } PK n?�\����� � src/Model/LanguageModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Model; use Joomla\CMS\Application\ApplicationHelper; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\AdminModel; use Joomla\CMS\Object\CMSObject; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Table\Table; use Joomla\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Component Language Model * * @since 1.5 */ class LanguageModel extends AdminModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * @param MVCFactoryInterface $factory The factory. * * @see \Joomla\CMS\MVC\Model\BaseDatabaseModel * @since 3.2 */ public function __construct($config = [], MVCFactoryInterface $factory = null) { $config = array_merge( [ 'event_after_save' => 'onExtensionAfterSave', 'event_before_save' => 'onExtensionBeforeSave', 'events_map' => [ 'save' => 'extension', ], ], $config ); parent::__construct($config, $factory); } /** * Override to get the table. * * @param string $name Name of the table. * @param string $prefix Table name prefix. * @param array $options Array of options. * * @return Table * * @since 1.6 */ public function getTable($name = '', $prefix = '', $options = []) { return Table::getInstance('Language', 'Joomla\\CMS\\Table\\'); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = Factory::getApplication(); $params = ComponentHelper::getParams('com_languages'); // Load the User state. $langId = $app->getInput()->getInt('lang_id'); $this->setState('language.id', $langId); // Load the parameters. $this->setState('params', $params); } /** * Method to get a member item. * * @param integer $langId The id of the member to get. * * @return mixed User data object on success, false on failure. * * @since 1.0 */ public function getItem($langId = null) { $langId = (!empty($langId)) ? $langId : (int) $this->getState('language.id'); // Get a member row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($langId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } // Set a valid accesslevel in case '0' is stored due to a bug in the installation SQL (was fixed with PR 2714). if ($table->access == '0') { $table->access = (int) Factory::getApplication()->get('access'); } $properties = $table->getProperties(1); $value = ArrayHelper::toObject($properties, CMSObject::class); return $value; } /** * Method to get the group form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return \Joomla\CMS\Form\Form|bool A Form object on success, false on failure. * * @since 1.6 */ public function getForm($data = [], $loadData = true) { // Get the form. $form = $this->loadForm('com_languages.language', 'language', ['control' => 'jform', 'load_data' => $loadData]); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = Factory::getApplication()->getUserState('com_languages.edit.language.data', []); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_languages.language', $data); return $data; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $langId = (!empty($data['lang_id'])) ? $data['lang_id'] : (int) $this->getState('language.id'); $isNew = true; PluginHelper::importPlugin($this->events_map['save']); $table = $this->getTable(); $context = $this->option . '.' . $this->name; // Load the row if saving an existing item. if ($langId > 0) { $table->load($langId); $isNew = false; } // Prevent white spaces, including East Asian double bytes. $spaces = ['/\xE3\x80\x80/', ' ']; $data['lang_code'] = str_replace($spaces, '', $data['lang_code']); // Prevent saving an incorrect language tag if (!preg_match('#\b([a-z]{2,3})[-]([A-Z]{2})\b#', $data['lang_code'])) { $this->setError(Text::_('COM_LANGUAGES_ERROR_LANG_TAG')); return false; } $data['sef'] = str_replace($spaces, '', $data['sef']); $data['sef'] = ApplicationHelper::stringURLSafe($data['sef']); // Prevent saving an empty url language code if ($data['sef'] === '') { $this->setError(Text::_('COM_LANGUAGES_ERROR_SEF')); return false; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = Factory::getApplication()->triggerEvent($this->event_before_save, [$context, &$table, $isNew]); // Check the event responses. if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event. Factory::getApplication()->triggerEvent($this->event_after_save, [$context, &$table, $isNew]); $this->setState('language.id', $table->lang_id); // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method. * * @param string $group Optional cache group name. * @param integer $clientId No longer used, will be removed without replacement * @deprecated 4.3 will be removed in 6.0 * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $clientId = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PK n?�\"�@U U src/Model/OverrideModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Model; use Joomla\CMS\Factory; use Joomla\CMS\Filesystem\Path; use Joomla\CMS\Language\Language; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Model\AdminModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Override Model * * @since 2.5 */ class OverrideModel extends AdminModel { /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return \Joomla\CMS\Form\Form|bool A Form object on success, false on failure. * * @since 2.5 */ public function getForm($data = [], $loadData = true) { // Get the form. $form = $this->loadForm('com_languages.override', 'override', ['control' => 'jform', 'load_data' => $loadData]); if (empty($form)) { return false; } $client = $this->getState('filter.client', 'site'); $language = $this->getState('filter.language', 'en-GB'); $langName = Language::getInstance($language)->getName(); if (!$langName) { // If a language only exists in frontend, its metadata cannot be // loaded in backend at the moment, so fall back to the language tag. $langName = $language; } $form->setValue('client', null, Text::_('COM_LANGUAGES_VIEW_OVERRIDE_CLIENT_' . strtoupper($client))); $form->setValue('language', null, Text::sprintf('COM_LANGUAGES_VIEW_OVERRIDE_LANGUAGE', $langName, $language)); $form->setValue('file', null, Path::clean(constant('JPATH_' . strtoupper($client)) . '/language/overrides/' . $language . '.override.ini')); return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 2.5 */ protected function loadFormData() { // Check the session for previously entered form data. $data = Factory::getApplication()->getUserState('com_languages.edit.override.data', []); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_languages.override', $data); return $data; } /** * Method to get a single record. * * @param string $pk The key name. * * @return mixed Object on success, false otherwise. * * @since 2.5 */ public function getItem($pk = null) { $input = Factory::getApplication()->getInput(); $pk = !empty($pk) ? $pk : $input->get('id'); $fileName = constant('JPATH_' . strtoupper($this->getState('filter.client'))) . '/language/overrides/' . $this->getState('filter.language', 'en-GB') . '.override.ini'; $strings = LanguageHelper::parseIniFile($fileName); $result = new \stdClass(); $result->key = ''; $result->override = ''; if (isset($strings[$pk])) { $result->key = $pk; $result->override = $strings[$pk]; } $oppositeFileName = constant('JPATH_' . strtoupper($this->getState('filter.client') == 'site' ? 'administrator' : 'site')) . '/language/overrides/' . $this->getState('filter.language', 'en-GB') . '.override.ini'; $oppositeStrings = LanguageHelper::parseIniFile($oppositeFileName); $result->both = isset($oppositeStrings[$pk]) && ($oppositeStrings[$pk] == $strings[$pk]); return $result; } /** * Method to save the form data. * * @param array $data The form data. * @param boolean $oppositeClient Indicates whether the override should not be created for the current client. * * @return boolean True on success, false otherwise. * * @since 2.5 */ public function save($data, $oppositeClient = false) { $app = Factory::getApplication(); if ($app->isClient('api')) { $client = $this->getState('filter.client'); $language = $this->getState('filter.language'); } else { $client = $app->getUserState('com_languages.overrides.filter.client', 0); $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); } // If the override should be created for both. if ($oppositeClient) { $client = 1 - $client; } // Return false if the constant is a reserved word, i.e. YES, NO, NULL, FALSE, ON, OFF, NONE, TRUE $reservedWords = ['YES', 'NO', 'NULL', 'FALSE', 'ON', 'OFF', 'NONE', 'TRUE']; if (in_array($data['key'], $reservedWords)) { $this->setError(Text::_('COM_LANGUAGES_OVERRIDE_ERROR_RESERVED_WORDS')); return false; } $client = $client ? 'administrator' : 'site'; // Parse the override.ini file in order to get the keys and strings. $fileName = constant('JPATH_' . strtoupper($client)) . '/language/overrides/' . $language . '.override.ini'; $strings = LanguageHelper::parseIniFile($fileName); if (isset($strings[$data['id']])) { // If an existent string was edited check whether // the name of the constant is still the same. if ($data['key'] == $data['id']) { // If yes, simply override it. $strings[$data['key']] = $data['override']; } else { // If no, delete the old string and prepend the new one. unset($strings[$data['id']]); $strings = [$data['key'] => $data['override']] + $strings; } } else { // If it is a new override simply prepend it. $strings = [$data['key'] => $data['override']] + $strings; } // Write override.ini file with the strings. if (LanguageHelper::saveToIniFile($fileName, $strings) === false) { return false; } // If the override should be stored for both clients save // it also for the other one and prevent endless recursion. if (isset($data['both']) && $data['both'] && !$oppositeClient) { return $this->save($data, true); } return true; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 2.5 */ protected function populateState() { $app = Factory::getApplication(); if ($app->isClient('api')) { return; } $client = $app->getUserStateFromRequest('com_languages.overrides.filter.client', 'filter_client', 0, 'int') ? 'administrator' : 'site'; $this->setState('filter.client', $client); $language = $app->getUserStateFromRequest('com_languages.overrides.filter.language', 'filter_language', 'en-GB', 'cmd'); $this->setState('filter.language', $language); } } PK n?�\Z6�H H src/Model/StringsModel.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Model; use Joomla\CMS\Factory; use Joomla\CMS\Filesystem\Folder; use Joomla\CMS\Filesystem\Path; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\MVC\Model\BaseDatabaseModel; use Joomla\Database\ParameterType; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Languages Strings Model * * @since 2.5 */ class StringsModel extends BaseDatabaseModel { /** * Method for refreshing the cache in the database with the known language strings. * * @return boolean|\Exception True on success, \Exception object otherwise. * * @since 2.5 */ public function refresh() { $app = Factory::getApplication(); $db = $this->getDatabase(); $app->setUserState('com_languages.overrides.cachedtime', null); // Empty the database cache first. try { $db->truncateTable('#__overrider'); } catch (\RuntimeException $e) { return $e; } // Create the insert query. $query = $db->getQuery(true) ->insert($db->quoteName('#__overrider')) ->columns( [ $db->quoteName('constant'), $db->quoteName('string'), $db->quoteName('file'), ] ); // Initialize some variables. $client = $app->getUserState('com_languages.overrides.filter.client', 'site') ? 'administrator' : 'site'; $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); $base = constant('JPATH_' . strtoupper($client)); $path = $base . '/language/' . $language; $files = []; // Parse common language directory. if (is_dir($path)) { $files = Folder::files($path, '.*ini$', false, true); } // Parse language directories of components. $files = array_merge($files, Folder::files($base . '/components', '.*ini$', 3, true)); // Parse language directories of modules. $files = array_merge($files, Folder::files($base . '/modules', '.*ini$', 3, true)); // Parse language directories of templates. $files = array_merge($files, Folder::files($base . '/templates', '.*ini$', 3, true)); // Parse language directories of plugins. $files = array_merge($files, Folder::files(JPATH_PLUGINS, '.*ini$', 4, true)); // Parse all found ini files and add the strings to the database cache. foreach ($files as $file) { // Only process if language file is for selected language if (strpos($file, $language, strlen($base)) === false) { continue; } $strings = LanguageHelper::parseIniFile($file); if ($strings) { $file = Path::clean($file); $query->clear('values') ->clear('bounded'); foreach ($strings as $key => $string) { $query->values(implode(',', $query->bindArray([$key, $string, $file], ParameterType::STRING))); } try { $db->setQuery($query); $db->execute(); } catch (\RuntimeException $e) { return $e; } } } // Update the cached time. $app->setUserState('com_languages.overrides.cachedtime.' . $client . '.' . $language, time()); return true; } /** * Method for searching language strings. * * @return array|\Exception Array of results on success, \Exception object otherwise. * * @since 2.5 */ public function search() { $results = []; $input = Factory::getApplication()->getInput(); $filter = InputFilter::getInstance(); $db = $this->getDatabase(); $searchTerm = $input->getString('searchstring'); $limitstart = $input->getInt('more'); try { $searchstring = '%' . $filter->clean($searchTerm, 'TRIM') . '%'; // Create the search query. $query = $db->getQuery(true) ->select( [ $db->quoteName('constant'), $db->quoteName('string'), $db->quoteName('file'), ] ) ->from($db->quoteName('#__overrider')); if ($input->get('searchtype') === 'constant') { $query->where($db->quoteName('constant') . ' LIKE :search'); } else { $query->where($db->quoteName('string') . ' LIKE :search'); } $query->bind(':search', $searchstring); // Consider the limitstart according to the 'more' parameter and load the results. $query->setLimit(10, $limitstart); $db->setQuery($query); $results['results'] = $db->loadObjectList(); // Check whether there are more results than already loaded. $query->clear('select') ->clear('limit') ->select('COUNT(' . $db->quoteName('id') . ')'); $db->setQuery($query); if ($db->loadResult() > $limitstart + 10) { // If this is set a 'More Results' link will be displayed in the view. $results['more'] = $limitstart + 10; } } catch (\RuntimeException $e) { return $e; } return $results; } } PK n?�\t��� � src/View/Override/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\View\Override; use Joomla\CMS\Factory; use Joomla\CMS\Helper\ContentHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * View to edit a language override * * @since 2.5 */ class HtmlView extends BaseHtmlView { /** * The form to use for the view. * * @var object * @since 2.5 */ protected $form; /** * The item to edit. * * @var object * @since 2.5 */ protected $item; /** * The model state. * * @var object * @since 2.5 */ protected $state; /** * Displays the view. * * @param string $tpl The name of the template file to parse * * @return void * * @since 2.5 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $app = Factory::getApplication(); $languageClient = $app->getUserStateFromRequest('com_languages.overrides.language_client', 'language_client'); if ($languageClient == null) { $app->enqueueMessage(Text::_('COM_LANGUAGES_OVERRIDE_FIRST_SELECT_MESSAGE'), 'warning'); $app->redirect('index.php?option=com_languages&view=overrides'); } // Check for errors. if (count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors)); } // Check whether the cache has to be refreshed. $cached_time = Factory::getApplication()->getUserState( 'com_languages.overrides.cachedtime.' . $this->state->get('filter.client') . '.' . $this->state->get('filter.language'), 0 ); if (time() - $cached_time > 60 * 5) { $this->state->set('cache_expired', true); } // Add strings for translations in \Javascript. Text::script('COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS'); Text::script('COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR'); $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { Factory::getApplication()->getInput()->set('hidemainmenu', true); $canDo = ContentHelper::getActions('com_languages'); $toolbar = Toolbar::getInstance(); ToolbarHelper::title(Text::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_TITLE'), 'comments langmanager'); if ($canDo->get('core.edit')) { $toolbar->apply('override.apply'); } $saveGroup = $toolbar->dropdownButton('save-group'); $saveGroup->configure( function (Toolbar $childBar) use ($canDo) { if ($canDo->get('core.edit')) { $childBar->save('override.save'); } // This component does not support Save as Copy. if ($canDo->get('core.edit') && $canDo->get('core.create')) { $childBar->save2new('override.save2new'); } } ); if (empty($this->item->key)) { $toolbar->cancel('override.cancel', 'JTOOLBAR_CANCEL'); } else { $toolbar->cancel('override.cancel'); } $toolbar->divider(); $toolbar->help('Languages:_Edit_Override'); } } PK n?�\���,� � % src/View/Multilangstatus/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\View\Multilangstatus; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\Component\Languages\Administrator\Helper\MultilangstatusHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Displays the multilang status. * * @since 1.7.1 */ class HtmlView extends BaseHtmlView { /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->homes = MultilangstatusHelper::getHomes(); $this->language_filter = Multilanguage::isEnabled(); $this->switchers = MultilangstatusHelper::getLangswitchers(); $this->listUsersError = MultilangstatusHelper::getContacts(); $this->contentlangs = MultilangstatusHelper::getContentlangs(); $this->site_langs = LanguageHelper::getInstalledLanguages(0); $this->statuses = MultilangstatusHelper::getStatus(); $this->homepages = Multilanguage::getSiteHomePages(); $this->defaultHome = MultilangstatusHelper::getDefaultHomeModule(); $this->default_lang = ComponentHelper::getParams('com_languages')->get('site', 'en-GB'); parent::display($tpl); } } PK n?�\^E�u� � src/View/Languages/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Administrator\View\Languages; use Joomla\CMS\Helper\ContentHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Toolbar\Button\DropdownButton; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * HTML Languages View class for the Languages component. * * @since 1.6 */ class HtmlView extends BaseHtmlView { /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var \Joomla\CMS\Pagination\Pagination */ protected $pagination; /** * The model state * * @var \Joomla\CMS\Object\CMSObject * * @since 4.0.0 */ protected $state; /** * Form object for search filters * * @var \Joomla\CMS\Form\Form * * @since 4.0.0 */ public $filterForm; /** * The active search filters * * @var array * @since 4.0.0 */ public $activeFilters; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar(): void { $canDo = ContentHelper::getActions('com_languages'); $toolbar = Toolbar::getInstance(); ToolbarHelper::title(Text::_('COM_LANGUAGES_VIEW_LANGUAGES_TITLE'), 'comments langmanager'); if ($canDo->get('core.create')) { $toolbar->addNew('language.add'); } if ($canDo->get('core.edit.state')) { /** @var DropdownButton $dropdown */ $dropdown = $toolbar->dropdownButton('status-group', 'JTOOLBAR_CHANGE_STATUS') ->toggleSplit(false) ->icon('icon-ellipsis-h') ->buttonClass('btn btn-action') ->listCheck(true); $childBar = $dropdown->getChildToolbar(); $childBar->publish('languages.publish')->listCheck(true); $childBar->unpublish('languages.unpublish')->listCheck(true); if ($this->state->get('filter.published') != -2) { $childBar->trash('languages.trash')->listCheck(true); } } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { $toolbar->delete('languages.delete', 'JTOOLBAR_EMPTY_TRASH') ->message('JGLOBAL_CONFIRM_DELETE') ->listCheck(true); } if ($canDo->get('core.admin')) { // Add install languages link to the lang installer component. $toolbar->link('COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages') ->icon('icon-upload'); $toolbar->divider(); $toolbar->preferences('com_languages'); $toolbar->divider(); } $toolbar->help('Languages:_Content'); } } PK n?�\#��\e e src/View/Overrides/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\View\Overrides; use Joomla\CMS\Helper\ContentHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * View for language overrides list. * * @since 2.5 */ class HtmlView extends BaseHtmlView { /** * The items to list. * * @var array * @since 2.5 */ protected $items; /** * The pagination object. * * @var object * @since 2.5 */ protected $pagination; /** * The model state. * * @var object * @since 2.5 */ protected $state; /** * An array containing all frontend and backend languages * * @var array * @since 4.0.0 */ protected $languages; /** * Displays the view. * * @param string $tpl The name of the template file to parse. * * @return void * * @since 2.5 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->items = $this->get('Overrides'); $this->languages = $this->get('Languages'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors)); } $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { // Get the results for each action $canDo = ContentHelper::getActions('com_languages'); $toolbar = Toolbar::getInstance(); ToolbarHelper::title(Text::_('COM_LANGUAGES_VIEW_OVERRIDES_TITLE'), 'comments langmanager'); if ($canDo->get('core.create')) { $toolbar->addNew('override.add'); } if ($canDo->get('core.delete') && $this->pagination->total) { $toolbar->delete('overrides.delete') ->message('JGLOBAL_CONFIRM_DELETE'); } if ($this->getCurrentUser()->authorise('core.admin')) { $toolbar->standardButton('purge', 'COM_LANGUAGES_VIEW_OVERRIDES_PURGE', 'overrides.purge') ->listCheck(false) ->icon('icon-refresh'); } if ($canDo->get('core.admin')) { $toolbar->preferences('com_languages'); } $toolbar->divider(); $toolbar->help('Languages:_Overrides'); } } PK n?�\�3�D D src/View/Language/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\View\Language; use Joomla\CMS\Factory; use Joomla\CMS\Helper\ContentHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Object\CMSObject; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * HTML View class for the Languages component. * * @since 1.5 */ class HtmlView extends BaseHtmlView { /** * The active item * * @var object */ public $item; /** * The Form object * * @var \Joomla\CMS\Form\Form */ public $form; /** * The model state * * @var CMSObject */ public $state; /** * The actions the user is authorised to perform * * @var CMSObject * * @since 4.0.0 */ protected $canDo; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->item = $this->get('Item'); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->canDo = ContentHelper::getActions('com_languages'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { Factory::getApplication()->getInput()->set('hidemainmenu', 1); $isNew = empty($this->item->lang_id); $canDo = $this->canDo; $toolbar = Toolbar::getInstance(); ToolbarHelper::title( Text::_($isNew ? 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_NEW_TITLE' : 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_EDIT_TITLE'), 'comments-2 langmanager' ); if (($isNew && $canDo->get('core.create')) || (!$isNew && $canDo->get('core.edit'))) { $toolbar->apply('language.apply'); } $saveGroup = $toolbar->dropdownButton('save-group'); $saveGroup->configure( function (Toolbar $childBar) use ($canDo, $isNew) { if (($isNew && $canDo->get('core.create')) || (!$isNew && $canDo->get('core.edit'))) { $childBar->save('language.save'); } // If an existing item, can save to a copy only if we have create rights. if ($canDo->get('core.create')) { $childBar->save2new('language.save2new'); } } ); if ($isNew) { $toolbar->cancel('language.cancel'); } else { $toolbar->cancel('language.cancel'); } $toolbar->divider(); $toolbar->help('Languages:_Edit_Content_Language'); } } PK n?�\F�eS� � src/View/Installed/HtmlView.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\View\Installed; use Joomla\CMS\Helper\ContentHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Displays a list of the installed languages. * * @since 1.6 */ class HtmlView extends BaseHtmlView { /** * Option (component) name * * @var string */ protected $option = null; /** * The pagination object * * @var \Joomla\CMS\Pagination\Pagination */ protected $pagination; /** * Languages information * * @var array */ protected $rows = null; /** * The model state * * @var \Joomla\CMS\Object\CMSObject * * @since 4.0.0 */ protected $state; /** * Form object for search filters * * @var \Joomla\CMS\Form\Form * * @since 4.0.0 */ public $filterForm; /** * The active search filters * * @var array * @since 4.0.0 */ public $activeFilters; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->option = $this->get('Option'); $this->pagination = $this->get('Pagination'); $this->rows = $this->get('Data'); $this->total = $this->get('Total'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = ContentHelper::getActions('com_languages'); $toolbar = Toolbar::getInstance(); if ((int) $this->state->get('client_id') === 1) { ToolbarHelper::title(Text::_('COM_LANGUAGES_VIEW_INSTALLED_ADMIN_TITLE'), 'comments langmanager'); } else { ToolbarHelper::title(Text::_('COM_LANGUAGES_VIEW_INSTALLED_SITE_TITLE'), 'comments langmanager'); } if ($canDo->get('core.edit.state')) { $toolbar->makeDefault('installed.setDefault'); $toolbar->divider(); } if ($canDo->get('core.admin')) { // Switch administrator language if ($this->state->get('client_id', 0) == 1) { $toolbar->standardButton('switch', 'COM_LANGUAGES_SWITCH_ADMIN', 'installed.switchadminlanguage') ->icon('icon-refresh') ->listCheck(true); $toolbar->divider(); } $toolbar->link('COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages') ->icon('icon-upload'); $toolbar->divider(); $toolbar->preferences('com_languages'); $toolbar->divider(); } $toolbar->help('Languages:_Installed'); } } PK n?�\���=� � src/Service/HTML/Languages.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_languages * * @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\Languages\Administrator\Service\HTML; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Utility class working with languages * * @since 1.6 */ class Languages { /** * Method to generate an information about the default language. * * @param boolean $published True if the language is the default. * * @return string HTML code. */ public function published($published) { if (!$published) { return ' '; } return HTMLHelper::_('image', 'menu/icon-16-default.png', Text::_('COM_LANGUAGES_HEADING_DEFAULT'), null, true); } /** * Method to generate an input radio button. * * @param integer $rowNum The row number. * @param string $language Language tag. * * @return string HTML code. */ public function id($rowNum, $language) { return '<input' . ' class="form-check-input"' . ' type="radio"' . ' id="cb' . $rowNum . '"' . ' name="cid"' . ' value="' . htmlspecialchars($language, ENT_COMPAT, 'UTF-8') . '"' . ' onclick="Joomla.isChecked(this.checked);"' . '>'; } /** * Method to generate an array of clients. * * @return array of client objects. */ public function clients() { return [ HTMLHelper::_('select.option', 0, Text::_('JSITE')), HTMLHelper::_('select.option', 1, Text::_('JADMINISTRATOR')), ]; } /** * Returns an array of published state filter options. * * @return string The HTML code for the select tag. * * @since 1.6 */ public function publishedOptions() { // Build the active state filter options. $options = []; $options[] = HTMLHelper::_('select.option', '1', 'JPUBLISHED'); $options[] = HTMLHelper::_('select.option', '0', 'JUNPUBLISHED'); $options[] = HTMLHelper::_('select.option', '-2', 'JTRASHED'); $options[] = HTMLHelper::_('select.option', '*', 'JALL'); return $options; } } PK n?�\���71 1 &