uawdijnntqw1x1x1
IP : 216.73.216.219
Hostname : webm009.cluster128.gra.hosting.ovh.net
Kernel : Linux webm009.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
chauffn
/
vuzelia
/
2023
/
cf455
/
.
/
..
/
.
/
cc5e2
/
api.tar
/
/
includes/framework.php000064400000006471152462255100011072 0ustar00<?php /** * @package Joomla.API * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Version; use Joomla\Utilities\IpHelper; // System includes require_once JPATH_LIBRARIES . '/bootstrap.php'; // Installation check, and check on removal of the install directory. if ( !file_exists(JPATH_CONFIGURATION . '/configuration.php') || (filesize(JPATH_CONFIGURATION . '/configuration.php') < 10) || (file_exists(JPATH_INSTALLATION . '/index.php') && (false === (new Version())->isInDevelopmentState())) ) { if (file_exists(JPATH_INSTALLATION . '/index.php')) { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => 'You must install Joomla to use the API'] ); exit(); } else { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => 'No configuration file found and no installation code available. Exiting...'] ); exit; } } // Pre-Load configuration. Don't remove the Output Buffering due to BOM issues, see JCode 26026 ob_start(); require_once JPATH_CONFIGURATION . '/configuration.php'; ob_end_clean(); // System configuration. $config = new JConfig(); // Set the error_reporting switch ($config->error_reporting) { case 'default': case '-1': break; case 'none': case '0': error_reporting(0); break; case 'simple': error_reporting(E_ERROR | E_WARNING | E_PARSE); ini_set('display_errors', 1); break; case 'maximum': case 'development': // <= Stays for backward compatibility, @TODO: can be removed in 5.0 error_reporting(E_ALL); ini_set('display_errors', 1); break; default: error_reporting($config->error_reporting); ini_set('display_errors', 1); break; } define('JDEBUG', $config->debug); // Check deprecation logging if (empty($config->log_deprecated)) { // Reset handler for E_USER_DEPRECATED set_error_handler(null, E_USER_DEPRECATED); } else { // Make sure handler for E_USER_DEPRECATED is registered set_error_handler(['Joomla\CMS\Exception\ExceptionHandler', 'handleUserDeprecatedErrors'], E_USER_DEPRECATED); } if (JDEBUG || $config->error_reporting === 'maximum') { // Set new Exception handler with debug enabled $errorHandler->setExceptionHandler( [ new \Symfony\Component\ErrorHandler\ErrorHandler(null, true), 'renderException', ] ); } /** * Correctly set the allowing of IP Overrides if behind a trusted proxy/load balancer. * * We need to do this as high up the stack as we can, as the default in \Joomla\Utilities\IpHelper is to * $allowIpOverride = true which is the wrong default for a generic site NOT behind a trusted proxy/load balancer. */ if (property_exists($config, 'behind_loadbalancer') && $config->behind_loadbalancer == 1) { // If Joomla is configured to be behind a trusted proxy/load balancer, allow HTTP Headers to override the REMOTE_ADDR IpHelper::setAllowIpOverrides(true); } else { // We disable the allowing of IP overriding using headers by default. IpHelper::setAllowIpOverrides(false); } unset($config); includes/defines.php000064400000002157152462255100010507 0ustar00<?php /** * @package Joomla.API * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Global definitions $parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE); array_pop($parts); // Defines. define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts)); define('JPATH_SITE', JPATH_ROOT); define('JPATH_CONFIGURATION', JPATH_ROOT); define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator'); define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries'); define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins'); define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation'); define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates'); define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache'); define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests'); define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api'); define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli'); includes/app.php000064400000003476152462255100007657 0ustar00<?php /** * @package Joomla.API * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Saves the start time and memory usage. $startTime = microtime(1); $startMem = memory_get_usage(); if (file_exists(dirname(__DIR__) . '/defines.php')) { include_once dirname(__DIR__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__DIR__)); require_once JPATH_BASE . '/includes/defines.php'; } require_once JPATH_BASE . '/includes/framework.php'; // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG && \Joomla\CMS\Profiler\Profiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad'); // Boot the DI container $container = \Joomla\CMS\Factory::getContainer(); /* * Alias the session service keys to the web session service as that is the primary session backend for this application * * In addition to aliasing "common" service keys, we also create aliases for the PHP classes to ensure autowiring objects * is supported. This includes aliases for aliased class names, and the keys for aliased class names should be considered * deprecated to be removed when the class name alias is removed as well. */ $container->alias('session', 'session.cli') ->alias('JSession', 'session.cli') ->alias(\Joomla\CMS\Session\Session::class, 'session.cli') ->alias(\Joomla\Session\Session::class, 'session.cli') ->alias(\Joomla\Session\SessionInterface::class, 'session.cli'); // Instantiate the application. $app = $container->get(\Joomla\CMS\Application\ApiApplication::class); // Set the application as global app \Joomla\CMS\Factory::$application = $app; // Execute the application. $app->execute(); components/com_categories/src/View/Categories/JsonapiView.php000064400000007373152462255100020465 0ustar00<?php /** * @package Joomla.API * @subpackage com_categories * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Categories\Api\View\Categories; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The categories view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'checked_out', 'checked_out_time', 'created_user_id', 'parent_id', 'level', 'extension', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'count_trashed', 'count_unpublished', 'count_published', 'count_archived', 'params', 'description', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'checked_out', 'checked_out_time', 'created_user_id', 'parent_id', 'level', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'count_trashed', 'count_unpublished', 'count_published', 'count_archived', 'params', 'description', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_content.categories') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_content.categories') as $field) { $this->fieldsToRenderItem[] = $field->name; } if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->extension != $this->getModel()->getState('filter.extension')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { foreach (FieldsHelper::getFields('com_content.categories', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } return parent::prepareItem($item); } } components/com_categories/src/Controller/CategoriesController.php000064400000007125152462255100021477 0ustar00<?php /** * @package Joomla.API * @subpackage com_categories * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Categories\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\Table\Category; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The categories controller * * @since 4.0.0 */ class CategoriesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'categories'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'categories'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { $extension = $this->getExtensionFromInput(); $data['extension'] = $extension; // TODO: This is a hack to drop the extension into the global input object - to satisfy how state is built // we should be able to improve this in the future $this->input->set('extension', $extension); return $data; } /** * Method to save a record. * * @param integer $recordKey The primary key of the item (if exists) * * @return integer The record ID on success, false on failure * * @since 4.0.6 */ protected function save($recordKey = null) { $recordId = parent::save($recordKey); if (!$recordId) { return $recordId; } $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (empty($data['location'])) { return $recordId; } /** @var Category $category */ $category = $this->getModel('Category')->getTable('Category'); $category->load((int) $recordId); $reference = $category->parent_id; if (!empty($data['location_reference'])) { $reference = (int) $data['location_reference']; } $category->setLocation($reference, $data['location']); $category->store(); return $recordId; } /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.extension', $this->getExtensionFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.extension', $this->getExtensionFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getExtensionFromInput() { return $this->input->exists('extension') ? $this->input->get('extension') : $this->input->post->get('extension'); } } components/com_plugins/src/View/Plugins/JsonapiView.php000064400000003174152462255100017350 0ustar00<?php /** * @package Joomla.API * @subpackage com_plugins * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Plugins\Api\View\Plugins; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The plugins view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'name', 'type', 'element', 'changelogurl', 'folder', 'client_id', 'enabled', 'access', 'protected', 'checked_out', 'checked_out_time', 'ordering', 'state', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'element', 'folder', 'checked_out', 'checked_out_time', 'enabled', 'access', 'ordering', 'editor', 'access_level', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->extension_id; unset($item->extension_id); return $item; } } components/com_plugins/src/Controller/PluginsController.php000064400000006644152462255100020374 0ustar00<?php /** * @package Joomla.API * @subpackage com_plugins * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Plugins\Api\Controller; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The plugins controller * * @since 4.0.0 */ class PluginsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'plugins'; /** * The default view for the display method. * * @var string * * @since 3.0 */ protected $default_view = 'plugins'; /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { $recordId = $this->input->getInt('id'); if (!$recordId) { throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404); } $data = json_decode($this->input->json->getRaw(), true); foreach ($data as $key => $value) { if (!\in_array($key, ['enabled', 'access', 'ordering'])) { throw new InvalidParameterException("Invalid parameter {$key}.", 400); } } /** @var \Joomla\Component\Plugins\Administrator\Model\PluginModel $model */ $model = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $item = $model->getItem($recordId); if (!isset($item->extension_id)) { throw new RouteNotFoundException('Item does not exist'); } $data['folder'] = $item->folder; $data['element'] = $item->element; $this->input->set('data', $data); return parent::edit(); } /** * Plugin list view with filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('element', $apiFilterInfo)) { $this->modelState->set('filter.element', $filter->clean($apiFilterInfo['element'], 'STRING')); } if (\array_key_exists('status', $apiFilterInfo)) { $this->modelState->set('filter.enabled', $filter->clean($apiFilterInfo['status'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('type', $apiFilterInfo)) { $this->modelState->set('filter.folder', $filter->clean($apiFilterInfo['type'], 'STRING')); } return parent::displayList(); } } components/com_banners/src/View/Banners/JsonapiView.php000064400000004030152462255100017256 0ustar00<?php /** * @package Joomla.API * @subpackage com_banners * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\View\Banners; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The banners view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'cid', 'type', 'name', 'alias', 'imptotal', 'impmade', 'clicks', 'clickurl', 'state', 'catid', 'description', 'custombannercode', 'sticky', 'ordering', 'metakey', 'params', 'own_prefix', 'metakey_prefix', 'purchase_type', 'track_clicks', 'track_impressions', 'checked_out', 'checked_out_time', 'publish_up', 'publish_down', 'reset', 'created', 'language', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'version', 'contenthistoryHelper', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'alias', 'checked_out', 'checked_out_time', 'catid', 'clicks', 'metakey', 'sticky', 'impmade', 'imptotal', 'state', 'ordering', 'purchase_type', 'language', 'publish_up', 'publish_down', 'language_image', 'editor', 'category_title', 'client_name', 'client_purchase_type', ]; } components/com_banners/src/View/Clients/JsonapiView.php000064400000002742152462255100017277 0ustar00<?php /** * @package Joomla.API * @subpackage com_banners * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\View\Clients; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The clients view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'checked_out_time', 'name', 'contact', 'email', 'checked_out', 'checked_out_time', 'extrainfo', 'state', 'metakey', 'own_prefix', 'metakey_prefix', 'purchase_type', 'track_clicks', 'track_impressions', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'contact', 'checked_out', 'checked_out_time', 'state', 'metakey', 'purchase_type', 'nbanners', 'editor', 'count_published', 'count_unpublished', 'count_trashed', 'count_archived', ]; } components/com_banners/src/Controller/ClientsController.php000064400000001503152462255100020310 0ustar00<?php /** * @package Joomla.API * @subpackage com_banners * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The clients controller * * @since 4.0.0 */ class ClientsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'clients'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'clients'; } components/com_banners/src/Controller/BannersController.php000064400000001503152462255100020277 0ustar00<?php /** * @package Joomla.API * @subpackage com_banners * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The banners controller * * @since 4.0.0 */ class BannersController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'banners'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'banners'; } components/com_privacy/src/Controller/ConsentsController.php000064400000002533152462255100020534 0ustar00<?php /** * @package Joomla.API * @subpackage com_privacy * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The consents controller * * @since 4.0.0 */ class ConsentsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'consents'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'consents'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { if ($id === null) { $id = $this->input->get('id', 0, 'int'); } $this->input->set('model', $this->contentType); return parent::displayItem($id); } } components/com_privacy/src/Controller/RequestsController.php000064400000004425152462255100020555 0ustar00<?php /** * @package Joomla.API * @subpackage com_privacy * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Privacy\Api\View\Requests\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The requests controller * * @since 4.0.0 */ class RequestsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'requests'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'requests'; /** * Export request data * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function export($id = null) { if ($id === null) { $id = $this->input->get('id', 0, 'int'); } $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } $model = $this->getModel('export'); try { $modelName = $model->getName(); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } $model->setState($modelName . '.request_id', $id); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->export(); return $this; } } components/com_privacy/src/View/Consents/JsonapiView.php000064400000005604152462255100017517 0ustar00<?php /** * @package Joomla.API * @subpackage com_privacy * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\View\Consents; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The consents view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'user_id', 'state', 'created', 'subject', 'body', 'remind', 'token', 'username', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'user_id', 'state', 'created', 'subject', 'body', 'remind', 'token', 'username', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { $id = $this->get('state')->get($this->getName() . '.id'); if ($id === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ITEMID_MISSING')); } /** @var \Joomla\CMS\MVC\Model\ListModel $model */ $model = $this->getModel(); $displayItem = null; foreach ($model->getItems() as $item) { $item = $this->prepareItem($item); if ($item->id === $id) { $displayItem = $item; break; } } if ($displayItem === null) { throw new RouteNotFoundException('Item does not exist'); } // Check for errors. if (\count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } if ($this->type === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING')); } $serializer = new JoomlaSerializer($this->type); $element = (new Resource($displayItem, $serializer)) ->fields([$this->type => $this->fieldsToRenderItem]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } components/com_privacy/src/View/Requests/JsonapiView.php000064400000003527152462255100017540 0ustar00<?php /** * @package Joomla.API * @subpackage com_privacy * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\View\Requests; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Joomla\Component\Privacy\Administrator\Model\ExportModel; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The requests view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = ['id', 'typeAlias', 'email', 'requested_at', 'status', 'request_type']; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = ['id', 'email', 'requested_at', 'status', 'request_type']; /** * Execute and display a template script. * * @return string * * @since 4.0.0 */ public function export() { /** @var ExportModel $model */ $model = $this->getModel(); $exportData = $model->collectDataForExportRequest(); if ($exportData == false) { throw new RouteNotFoundException('Item does not exist'); } $serializer = new JoomlaSerializer('export'); $element = (new Resource($exportData, $serializer)); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } components/com_contenthistory/src/View/History/JsonapiView.php000064400000002525152462255100021002 0ustar00<?php /** * @package Joomla.API * @subpackage com_contenthistory * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contenthistory\Api\View\History; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The history view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'ucm_item_id', 'ucm_type_id', 'version_note', 'save_date', 'editor_user_id', 'character_count', 'sha1_hash', 'version_data', 'keep_forever', 'editor', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->version_id; unset($item->version_id); $item->version_data = (array) json_decode($item->version_data, true); return parent::prepareItem($item); } } components/com_contenthistory/src/Controller/HistoryController.php000064400000006330152462255100022017 0ustar00<?php /** * @package Joomla.API * @subpackage com_contenthistory * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contenthistory\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\Component\Contenthistory\Administrator\Model\HistoryModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The history controller * * @since 4.0.0 */ class HistoryController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'history'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'history'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('type_alias', $this->getTypeAliasFromInput()); $this->modelState->set('type_id', $this->getTypeIdFromInput()); $this->modelState->set('item_id', $this->getTypeAliasFromInput() . '.' . $this->getItemIdFromInput()); $this->modelState->set('list.ordering', 'h.save_date'); $this->modelState->set('list.direction', 'DESC'); return parent::displayList(); } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function keep() { /** @var HistoryModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $recordId = $this->input->getInt('id'); if (!$recordId) { throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404); } $cid = [$recordId]; if (!$model->keep($cid)) { throw new Exception\Save(Text::plural('COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE', \count($cid))); } return $this; } /** * Get item id from input * * @return string * * @since 4.0.0 */ private function getItemIdFromInput() { return $this->input->exists('id') ? $this->input->get('id') : $this->input->post->get('id'); } /** * Get type id from input * * @return string * * @since 4.0.0 */ private function getTypeIdFromInput() { return $this->input->exists('type_id') ? $this->input->get('type_id') : $this->input->post->get('type_id'); } /** * Get type alias from input * * @return string * * @since 4.0.0 */ private function getTypeAliasFromInput() { return $this->input->exists('type_alias') ? $this->input->get('type_alias') : $this->input->post->get('type_alias'); } } components/com_media/src/Controller/MediaController.php000064400000027142152462255100017364 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Media\Administrator\Exception\FileExistsException; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; use Joomla\Component\Media\Api\Model\MediumModel; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service controller. * * @since 4.1.0 */ class MediaController extends ApiController { use ProviderManagerHelperTrait; /** * The content type of the item. * * @var string * @since 4.1.0 */ protected $contentType = 'media'; /** * Query parameters => model state mappings * * @var array * @since 4.1.0 */ private static $listQueryModelStateMap = [ 'path' => [ 'name' => 'path', 'type' => 'STRING', ], 'url' => [ 'name' => 'url', 'type' => 'BOOLEAN', ], 'temp' => [ 'name' => 'temp', 'type' => 'BOOLEAN', ], 'content' => [ 'name' => 'content', 'type' => 'BOOLEAN', ], ]; /** * Item query parameters => model state mappings * * @var array * @since 4.1.0 */ private static $itemQueryModelStateMap = [ 'path' => [ 'name' => 'path', 'type' => 'STRING', ], 'url' => [ 'name' => 'url', 'type' => 'BOOLEAN', ], 'temp' => [ 'name' => 'temp', 'type' => 'BOOLEAN', ], 'content' => [ 'name' => 'content', 'type' => 'BOOLEAN', ], ]; /** * The default view for the display method. * * @var string * * @since 4.1.0 */ protected $default_view = 'media'; /** * Display a list of files and/or folders. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.1.0 * * @throws \Exception */ public function displayList() { // Set list specific request parameters in model state. $this->setModelState(self::$listQueryModelStateMap); // Display files in specific path. if ($this->input->exists('path')) { $this->modelState->set('path', $this->input->get('path', '', 'STRING')); } // Return files (not folders) as urls. if ($this->input->exists('url')) { $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN')); } // Map JSON:API compliant filter[search] to com_media model state. $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); // Search for files matching (part of) a name or glob pattern. if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('search', $filter->clean($apiFilterInfo['search'], 'STRING')); // Tell model to search recursively $this->modelState->set('search_recursive', $this->input->get('search_recursive', false, 'BOOLEAN')); } return parent::displayList(); } /** * Display one specific file or folder. * * @param string $path The path of the file to display. Leave empty if you want to retrieve data from the request. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.1.0 * * @throws InvalidPathException * @throws \Exception */ public function displayItem($path = '') { // Set list specific request parameters in model state. $this->setModelState(self::$itemQueryModelStateMap); // Display files in specific path. $this->modelState->set('path', $path ?: $this->input->get('path', '', 'STRING')); // Return files (not folders) as urls. if ($this->input->exists('url')) { $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN')); } return parent::displayItem(); } /** * Set model state using a list of mappings between query parameters and model state names. * * @param array $mappings A list of mappings between query parameters and model state names. * * @return void * * @since 4.1.0 */ private function setModelState(array $mappings): void { foreach ($mappings as $queryName => $modelState) { if ($this->input->exists($queryName)) { $this->modelState->set($modelState['name'], $this->input->get($queryName, '', $modelState['type'])); } } } /** * Method to add a new file or folder. * * @return void * * @since 4.1.0 * * @throws FileExistsException * @throws InvalidPathException * @throws InvalidParameterException * @throws \RuntimeException * @throws \Exception */ public function add(): void { $path = $this->input->json->get('path', '', 'STRING'); $content = $this->input->json->get('content', '', 'RAW'); $missingParameters = []; if (empty($path)) { $missingParameters[] = 'path'; } // Content is only required when it is a file if (empty($content) && strpos($path, '.') !== false) { $missingParameters[] = 'content'; } if (\count($missingParameters)) { throw new InvalidParameterException( Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', implode(' & ', $missingParameters)) ); } $this->modelState->set('path', $this->input->json->get('path', '', 'STRING')); // Check if an existing file may be overwritten. Defaults to false. $this->modelState->set('override', $this->input->json->get('override', false)); parent::add(); } /** * Method to check if it's allowed to add a new file or folder * * @param array $data An array of input data. * * @return boolean * * @since 4.1.0 */ protected function allowAdd($data = []): bool { $user = $this->app->getIdentity(); return $user->authorise('core.create', 'com_media'); } /** * Method to modify an existing file or folder. * * @return void * * @since 4.1.0 * * @throws FileExistsException * @throws InvalidPathException * @throws \RuntimeException * @throws \Exception */ public function edit(): void { // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $path = $this->input->json->get('path', '', 'STRING'); $content = $this->input->json->get('content', '', 'RAW'); if (empty($path) && empty($content)) { throw new InvalidParameterException( Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', 'path | content') ); } $this->modelState->set('path', $this->input->json->get('path', '', 'STRING')); // For renaming/moving files, we need the path to the existing file or folder. $this->modelState->set('old_path', $this->input->get('path', '', 'STRING')); // Check if an existing file may be overwritten. Defaults to true. $this->modelState->set('override', $this->input->json->get('override', true)); $recordId = $this->save(); $this->displayItem($recordId); } /** * Method to check if it's allowed to modify an existing file or folder. * * @param array $data An array of input data. * * @return boolean * * @since 4.1.0 */ protected function allowEdit($data = [], $key = 'id'): bool { $user = $this->app->getIdentity(); // com_media's access rules contains no specific update rule. return $user->authorise('core.edit', 'com_media'); } /** * Method to create or modify a file or folder. * * @param integer $recordKey The primary key of the item (if exists) * * @return string The path * * @since 4.1.0 */ protected function save($recordKey = null) { // Explicitly get the single item model name. $modelName = $this->input->get('model', Inflector::singularize($this->contentType)); /** @var MediumModel $model */ $model = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]); $json = $this->input->json; // Decode content, if any if ($content = base64_decode($json->get('content', '', 'raw'))) { $this->checkContent(); } // If there is no content, com_media assumes the path refers to a folder. $this->modelState->set('content', $content); return $model->save(); } /** * Performs various checks to see if it is allowed to save the content. * * @return void * * @since 4.1.0 * * @throws \RuntimeException */ private function checkContent(): void { $params = ComponentHelper::getParams('com_media'); $helper = new \Joomla\CMS\Helper\MediaHelper(); $serverlength = $this->input->server->getInt('CONTENT_LENGTH'); // Check if the size of the request body does not exceed various server imposed limits. if ( ($params->get('upload_maxsize', 0) > 0 && $serverlength > ($params->get('upload_maxsize', 0) * 1024 * 1024)) || $serverlength > $helper->toBytes(ini_get('upload_max_filesize')) || $serverlength > $helper->toBytes(ini_get('post_max_size')) || $serverlength > $helper->toBytes(ini_get('memory_limit')) ) { throw new \RuntimeException(Text::_('COM_MEDIA_ERROR_WARNFILETOOLARGE'), 400); } } /** * Method to delete an existing file or folder. * * @return void * * @since 4.1.0 * * @throws InvalidPathException * @throws \RuntimeException * @throws \Exception */ public function delete($id = null): void { if (!$this->allowDelete()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED', 403); } $this->modelState->set('path', $this->input->get('path', '', 'STRING')); $modelName = $this->input->get('model', Inflector::singularize($this->contentType)); $model = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]); $model->delete(); $this->app->setHeader('status', 204); } /** * Method to check if it's allowed to delete an existing file or folder. * * @return boolean * * @since 4.1.0 */ protected function allowDelete(): bool { $user = $this->app->getIdentity(); return $user->authorise('core.delete', 'com_media'); } } components/com_media/src/Controller/AdaptersController.php000064400000003131152462255100020100 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service controller. * * @since 4.1.0 */ class AdaptersController extends ApiController { use ProviderManagerHelperTrait; /** * The content type of the item. * * @var string * @since 4.1.0 */ protected $contentType = 'adapters'; /** * The default view for the display method. * * @var string * * @since 4.1.0 */ protected $default_view = 'adapters'; /** * Display one specific adapter. * * @param string $path The path of the file to display. Leave empty if you want to retrieve data from the request. * * @return static A \JControllerLegacy object to support chaining. * * @throws InvalidPathException * @throws \Exception * * @since 4.1.0 */ public function displayItem($path = '') { // Set the id as the parent sets it as int $this->modelState->set('id', $this->input->get('id', '', 'string')); return parent::displayItem(); } } components/com_media/src/Model/AdapterModel.php000064400000002735152462255100015560 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting a single adapter item. * * @since 4.1.0 */ class AdapterModel extends BaseModel { use ProviderManagerHelperTrait; /** * Method to get a single adapter. * * @return \stdClass The adapter. * * @since 4.1.0 */ public function getItem(): \stdClass { list($provider, $account) = array_pad(explode('-', $this->getState('id'), 2), 2, null); if ($account === null) { throw new \Exception('Account was not set'); } $provider = $this->getProvider($provider); $adapter = $this->getAdapter($this->getState('id')); $obj = new \stdClass(); $obj->id = $provider->getID() . '-' . $adapter->getAdapterName(); $obj->provider_id = $provider->getID(); $obj->name = $adapter->getAdapterName(); $obj->path = $provider->getID() . '-' . $adapter->getAdapterName() . ':/'; return $obj; } } components/com_media/src/Model/MediaModel.php000064400000007546152462255100015224 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\CMS\MVC\Model\ListModelInterface; use Joomla\CMS\Pagination\Pagination; use Joomla\Component\Media\Administrator\Exception\FileNotFoundException; use Joomla\Component\Media\Administrator\Model\ApiModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting lists of media items. * * @since 4.1.0 */ class MediaModel extends BaseModel implements ListModelInterface { use ProviderManagerHelperTrait; /** * Instance of com_media's ApiModel * * @var ApiModel * @since 4.1.0 */ private $mediaApiModel; /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object, * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models. * * @var int * @since 4.1.0 */ private $total = 0; public function __construct($config = []) { parent::__construct($config); $this->mediaApiModel = new ApiModel(); } /** * Method to get a list of files and/or folders. * * @return array An array of data items. * * @since 4.1.0 */ public function getItems(): array { // Map web service model state to com_media options. $options = [ 'url' => $this->getState('url', false), 'temp' => $this->getState('temp', false), 'search' => $this->getState('search', ''), 'recursive' => $this->getState('search_recursive', false), 'content' => $this->getState('content', false), ]; ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { $files = $this->mediaApiModel->getFiles($adapterName, $path, $options); } catch (FileNotFoundException $e) { throw new ResourceNotFound( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object. * Because com_media's ApiModel does not support pagination as we know from regular ListModel * derived models, we always return all retrieved items. */ $this->total = \count($files); return $files; } /** * Method to get a \JPagination object for the data set. * * @return Pagination A Pagination object for the data set. * * @since 4.1.0 */ public function getPagination(): Pagination { return new Pagination($this->getTotal(), $this->getStart(), 0); } /** * Method to get the starting number of items for the data set. Because com_media's ApiModel * does not support pagination as we know from regular ListModel derived models, * we always start at the top. * * @return int The starting number of items available in the data set. * * @since 4.1.0 */ public function getStart(): int { return 0; } /** * Method to get the total number of items for the data set. * * @return int The total number of items available in the data set. * * @since 4.1.0 */ public function getTotal(): int { return $this->total; } } components/com_media/src/Model/AdaptersModel.php000064400000005740152462255100015742 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\CMS\MVC\Model\ListModelInterface; use Joomla\CMS\Pagination\Pagination; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting lists of media adapters. * * @since 4.1.0 */ class AdaptersModel extends BaseModel implements ListModelInterface { use ProviderManagerHelperTrait; /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object, * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models. * * @var int * @since 4.1.0 */ private $total = 0; /** * Method to get a list of files and/or folders. * * @return array An array of data items. * * @since 4.1.0 */ public function getItems(): array { $adapters = []; foreach ($this->getProviderManager()->getProviders() as $provider) { foreach ($provider->getAdapters() as $adapter) { $obj = new \stdClass(); $obj->id = $provider->getID() . '-' . $adapter->getAdapterName(); $obj->provider_id = $provider->getID(); $obj->name = $adapter->getAdapterName(); $obj->path = $provider->getID() . '-' . $adapter->getAdapterName() . ':/'; $adapters[] = $obj; } } // A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object. $this->total = \count($adapters); return $adapters; } /** * Method to get a \JPagination object for the data set. * * @return Pagination A Pagination object for the data set. * * @since 4.1.0 */ public function getPagination(): Pagination { return new Pagination($this->getTotal(), $this->getStart(), 0); } /** * Method to get the starting number of items for the data set. Because com_media's ApiModel * does not support pagination as we know from regular ListModel derived models, * we always start at the top. * * @return integer The starting number of items available in the data set. * * @since 4.1.0 */ public function getStart(): int { return 0; } /** * Method to get the total number of items for the data set. * * @return integer The total number of items available in the data set. * * @since 4.1.0 */ public function getTotal(): int { return $this->total; } } components/com_media/src/Model/MediumModel.php000064400000020107152462255100015411 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound; use Joomla\CMS\MVC\Controller\Exception\Save; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\Component\Media\Administrator\Exception\FileExistsException; use Joomla\Component\Media\Administrator\Exception\FileNotFoundException; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Model\ApiModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting a single media item. * * @since 4.1.0 */ class MediumModel extends BaseModel { use ProviderManagerHelperTrait; /** * Instance of com_media's ApiModel * * @var ApiModel * @since 4.1.0 */ private $mediaApiModel; public function __construct($config = []) { parent::__construct($config); $this->mediaApiModel = new ApiModel(); } /** * Method to get a single files or folder. * * @return \stdClass A file or folder object. * * @since 4.1.0 * @throws ResourceNotFound */ public function getItem() { $options = [ 'path' => $this->getState('path', ''), 'url' => $this->getState('url', false), 'temp' => $this->getState('temp', false), 'content' => $this->getState('content', false), ]; ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { return $this->mediaApiModel->getFile($adapterName, $path, $options); } catch (FileNotFoundException $e) { throw new ResourceNotFound( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } } /** * Method to save a file or folder. * * @param string $path The primary key of the item (if exists) * * @return string The path * * @since 4.1.0 * * @throws Save */ public function save($path = null): string { $path = $this->getState('path', ''); $oldPath = $this->getState('old_path', ''); $content = $this->getState('content', null); $override = $this->getState('override', false); ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($path); // Trim adapter information from path if ($pos = strpos($path, ':/')) { $path = substr($path, $pos + 1); } // Trim adapter information from old path if ($pos = strpos($oldPath, ':/')) { $oldPath = substr($oldPath, $pos + 1); } $resultPath = ''; /** * If we have a (new) path and an old path, we want to move an existing * file or folder. This must be done before updating the content of a file, * if also requested (see below). */ if ($path && $oldPath) { try { // ApiModel::move() (or actually LocalAdapter::move()) returns a path with leading slash. $resultPath = trim( $this->mediaApiModel->move($adapterName, $oldPath, $path, $override), '/' ); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $oldPath ), 404 ); } } // If we have a (new) path but no old path, we want to create a // new file or folder. if ($path && !$oldPath) { // com_media expects separate directory and file name. // If we moved the file before, we must use the new path. $basename = basename($resultPath ?: $path); $dirname = dirname($resultPath ?: $path); try { // If there is content, com_media's assumes the new item is a file. // Otherwise a folder is assumed. $name = $content ? $this->mediaApiModel->createFile( $adapterName, $basename, $dirname, $content, $override ) : $this->mediaApiModel->createFolder( $adapterName, $basename, $dirname, $override ); $resultPath = $dirname . '/' . $name; } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $dirname . '/' . $basename ), 404 ); } catch (FileExistsException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_EXISTS', $dirname . '/' . $basename ), 400 ); } catch (InvalidPathException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE', $dirname . '/' . $basename ), 400 ); } } // If we have no (new) path but we do have an old path and we have content, // we want to update the contents of an existing file. if ($oldPath && $content) { // com_media expects separate directory and file name. // If we moved the file before, we must use the new path. $basename = basename($resultPath ?: $oldPath); $dirname = dirname($resultPath ?: $oldPath); try { $this->mediaApiModel->updateFile( $adapterName, $basename, $dirname, $content ); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $dirname . '/' . $basename ), 404 ); } catch (InvalidPathException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE', $dirname . '/' . $basename ), 400 ); } $resultPath = $resultPath ?: $oldPath; } // If we still have no result path, something fishy is going on. if (!$resultPath) { throw new Save( Text::_( 'WEBSERVICE_COM_MEDIA_UNSUPPORTED_PARAMETER_COMBINATION' ), 400 ); } return $resultPath; } /** * Method to delete an existing file or folder. * * @return void * * @since 4.1.0 * @throws Save */ public function delete(): void { ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { $this->mediaApiModel->delete($adapterName, $path); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } } } components/com_media/src/View/Adapters/JsonapiView.php000064400000002073152462255100017065 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\View\Adapters; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service view * * @since 4.1.0 */ class JsonapiView extends BaseApiView { use ProviderManagerHelperTrait; /** * The fields to render item in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderItem = [ 'provider_id', 'name', 'path', ]; /** * The fields to render items in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderList = [ 'provider_id', 'name', 'path', ]; } components/com_media/src/View/Media/JsonapiView.php000064400000003671152462255100016346 0ustar00<?php /** * @package Joomla.API * @subpackage com_media * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\View\Media; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service view * * @since 4.1.0 */ class JsonapiView extends BaseApiView { use ProviderManagerHelperTrait; /** * The fields to render item in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderItem = [ 'type', 'name', 'path', 'extension', 'size', 'mime_type', 'width', 'height', 'create_date', 'create_date_formatted', 'modified_date', 'modified_date_formatted', 'thumb_path', 'adapter', 'content', 'url', 'tempUrl', ]; /** * The fields to render items in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderList = [ 'type', 'name', 'path', 'extension', 'size', 'mime_type', 'width', 'height', 'create_date', 'create_date_formatted', 'modified_date', 'modified_date_formatted', 'thumb_path', 'adapter', 'content', 'url', 'tempUrl', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.1.0 */ protected function prepareItem($item) { // Media resources have no id. $item->id = '0'; return $item; } } components/com_menus/src/Controller/ItemsController.php000064400000012201152462255100017464 0ustar00<?php /** * @package Joomla.API * @subpackage com_menus * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Model\ListModel; use Joomla\Component\Menus\Api\View\Items\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The items controller * * @since 4.0.0 */ class ItemsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'items'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'items'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('menutype', $apiFilterInfo)) { $this->modelState->set('filter.menutype', $filter->clean($apiFilterInfo['menutype'], 'STRING')); } $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Method to add a new record. * * @return void * * @since 4.0.0 * @throws NotAllowed * @throws \RuntimeException */ public function add() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (isset($data['menutype'])) { $this->input->set('menutype', $data['menutype']); $this->input->set('com_menus.items.menutype', $data['menutype']); } isset($data['type']) && $this->input->set('type', $data['type']); isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']); isset($data['link']) && $this->input->set('link', $data['link']); $this->input->set('id', '0'); parent::add(); } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (isset($data['menutype'])) { $this->input->set('menutype', $data['menutype']); $this->input->set('com_menus.items.menutype', $data['menutype']); } isset($data['type']) && $this->input->set('type', $data['type']); isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']); isset($data['link']) && $this->input->set('link', $data['link']); return parent::edit(); } /** * Return menu items types * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function getTypes() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ListModel $model */ $model = $this->getModel('menutypes', '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('client_id', $this->getClientIdFromInput()); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayListTypes(); return $this; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } components/com_menus/src/Controller/MenusController.php000064400000003573152462255100017506 0ustar00<?php /** * @package Joomla.API * @subpackage com_menus * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The menus controller * * @since 4.0.0 */ class MenusController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'menus'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'menus'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } components/com_menus/src/View/Menus/JsonapiView.php000064400000002157152462255100016464 0ustar00<?php /** * @package Joomla.API * @subpackage com_menus * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\View\Menus; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The menus view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'menutype', 'title', 'description', 'client_id', 'count_published', 'count_unpublished', 'count_trashed', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'asset_id', 'menutype', 'title', 'description', 'client_id', ]; } components/com_menus/src/View/Items/JsonapiView.php000064400000013222152462255100016451 0ustar00<?php /** * @package Joomla.API * @subpackage com_menus * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\View\Items; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The items view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'parent_id', 'level', 'lft', 'rgt', 'alias', 'typeAlias', 'menutype', 'title', 'note', 'path', 'link', 'type', 'published', 'component_id', 'checked_out', 'checked_out_time', 'browserNav', 'access', 'img', 'template_style_id', 'params', 'home', 'language', 'client_id', 'publish_up', 'publish_down', 'request', 'associations', 'menuordering', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'menutype', 'title', 'alias', 'note', 'path', 'link', 'type', 'parent_id', 'level', 'a.published', 'component_id', 'checked_out', 'checked_out_time', 'browserNav', 'access', 'img', 'template_style_id', 'params', 'lft', 'rgt', 'home', 'language', 'client_id', 'enabled', 'publish_up', 'publish_down', 'published', 'language_title', 'language_image', 'language_sef', 'editor', 'componentname', 'access_level', 'menutype_id', 'menutype_title', 'association', 'name', ]; /** * Execute and display a list items types. * * @return string * * @since 4.0.0 */ public function displayListTypes() { /** @var \Joomla\Component\Menus\Administrator\Model\MenutypesModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getTypeOptions() as $type => $data) { $groupItems = []; foreach ($data as $item) { $item->id = implode('/', $item->request); $item->title = Text::_($item->title); $item->description = Text::_($item->description); $item->group = Text::_($type); $groupItems[] = $item; } $items = array_merge($items, $groupItems); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = $totalPagesAvailable - $limit; $lastPage->setVar('page', $lastPageQuery); $collection = (new Collection($items, new JoomlaSerializer('menutypes'))); // Set the data into the document and render it $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->setData($collection) ->addLink('self', (string) $currentUrl) ->addLink('first', (string) $firstPage) ->addLink('next', (string) $nextPage) ->addLink('previous', (string) $previousPage) ->addLink('last', (string) $lastPage); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (\is_string($item->params)) { $item->params = json_decode($item->params); } return parent::prepareItem($item); } } components/com_tags/src/View/Tags/JsonapiView.php000064400000003542152462255100016101 0ustar00<?php /** * @package Joomla.API * @subpackage com_tags * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Tags\Api\View\Tags; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The tags view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'parent_id', 'level', 'lft', 'rgt', 'alias', 'typeAlias', 'path', 'title', 'note', 'description', 'published', 'checked_out', 'checked_out_time', 'access', 'params', 'metadesc', 'metakey', 'metadata', 'created_user_id', 'created_time', 'created_by_alias', 'modified_user_id', 'modified_time', 'images', 'urls', 'hits', 'language', 'version', 'publish_up', 'publish_down', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'description', 'checked_out', 'checked_out_time', 'created_user_id', 'path', 'parent_id', 'level', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'author_name', 'access_title', ]; } components/com_tags/src/Controller/TagsController.php000064400000001461152462255100017116 0ustar00<?php /** * @package Joomla.API * @subpackage com_tags * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Tags\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The tags controller * * @since 4.0.0 */ class TagsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'tags'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'tags'; } components/com_newsfeeds/src/Controller/FeedsController.php000064400000001503152462255100020270 0ustar00<?php /** * @package Joomla.API * @subpackage com_newsfeeds * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The feeds controller * * @since 4.0.0 */ class FeedsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'newsfeeds'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'feeds'; } components/com_newsfeeds/src/Serializer/NewsfeedSerializer.php000064400000005703152462255100020764 0ustar00<?php /** * Joomla! Content Management System * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Tag\TagApiSerializerTrait; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class NewsfeedSerializer extends JoomlaSerializer { use TagApiSerializerTrait; /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newsfeeds/feeds/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newfeeds/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } } components/com_newsfeeds/src/View/Feeds/JsonapiView.php000064400000010131152462255100017246 0ustar00<?php /** * @package Joomla.API * @subpackage com_newsfeeds * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\View\Feeds; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Newsfeeds\Api\Serializer\NewsfeedSerializer; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The feeds view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'category', 'name', 'alias', 'link', 'published', 'numarticles', 'cache_time', 'checked_out', 'checked_out_time', 'ordering', 'rtl', 'access', 'language', 'params', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'metakey', 'metadesc', 'metadata', 'publish_up', 'publish_down', 'description', 'version', 'hits', 'images', 'tags', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'alias', 'checked_out', 'checked_out_time', 'category', 'numarticles', 'cache_time', 'created_by', 'published', 'access', 'ordering', 'language', 'publish_up', 'publish_down', 'language_title', 'language_image', 'editor', 'access_level', 'category_title', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'modified_by', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new NewsfeedSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $tagsNames = $item->tagsHelper->getTagNames($tagsIds); $item->tags = array_combine($tagsIds, $tagsNames); } else { $item->tags = []; } return parent::prepareItem($item); } } components/com_templates/src/Controller/StylesController.php000064400000005517152462255100020551 0ustar00<?php /** * @package Joomla.API * @subpackage com_templates * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Templates\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The styles controller * * @since 4.0.0 */ class StylesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'styles'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'styles'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 * @throws InvalidParameterException */ protected function preprocessSaveData(array $data): array { $data['client_id'] = $this->getClientIdFromInput(); // If we are updating an item the template is a readonly property based on the ID if ($this->input->getMethod() === 'PATCH') { if (\array_key_exists('template', $data)) { unset($data['template']); } $model = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]); $data['template'] = $model->getItem($this->input->getInt('id'))->template; } return $data; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } components/com_templates/src/View/Styles/JsonapiView.php000064400000003146152462255100017526 0ustar00<?php /** * @package Joomla.API * @subpackage com_templates * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Templates\Api\View\Styles; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The styles view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'template', 'client_id', 'home', 'title', 'params', 'xml', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'template', 'title', 'home', 'client_id', 'language_title', 'image', 'language_sef', 'assigned', 'e_id', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if ($item->client_id != $this->getModel()->getState('client_id')) { throw new RouteNotFoundException('Item does not exist'); } return parent::prepareItem($item); } } components/com_content/src/Serializer/ContentSerializer.php000064400000005566152462255100020334 0ustar00<?php /** * Joomla! Content Management System * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class ContentSerializer extends JoomlaSerializer { /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/articles/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } } components/com_content/src/View/Articles/JsonapiView.php000064400000014270152462255100017465 0ustar00<?php /** * @package Joomla.API * @subpackage com_content * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\View\Articles; use Joomla\CMS\Factory; use Joomla\CMS\Helper\TagsHelper; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Plugin\PluginHelper; use Joomla\Component\Content\Api\Helper\ContentHelper; use Joomla\Component\Content\Api\Serializer\ContentSerializer; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Joomla\Registry\Registry; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The article view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'typeAlias', 'asset_id', 'title', 'text', 'tags', 'language', 'state', 'category', 'images', 'metakey', 'metadesc', 'metadata', 'access', 'featured', 'alias', 'note', 'publish_up', 'publish_down', 'urls', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'hits', 'version', 'featured_up', 'featured_down', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'typeAlias', 'asset_id', 'title', 'text', 'tags', 'language', 'state', 'category', 'images', 'metakey', 'metadesc', 'metadata', 'access', 'featured', 'alias', 'note', 'publish_up', 'publish_down', 'urls', 'created', 'created_by', 'created_by_alias', 'modified', 'hits', 'version', 'featured_up', 'featured_down', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new ContentSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_content.article') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { $this->relationship[] = 'modified_by'; foreach (FieldsHelper::getFields('com_content.article') as $field) { $this->fieldsToRenderItem[] = $field->name; } if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (!$item) { return $item; } $item->text = $item->introtext . ' ' . $item->fulltext; // Process the content plugins. PluginHelper::importPlugin('content'); Factory::getApplication()->triggerEvent('onContentPrepare', ['com_content.article', &$item, &$item->params]); foreach (FieldsHelper::getFields('com_content.article', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $item->tags = $item->tagsHelper->getTags($tagsIds); } else { $item->tags = []; $tags = new TagsHelper(); $tagsIds = $tags->getTagIds($item->id, 'com_content.article'); if (!empty($tagsIds)) { $tagsIds = explode(',', $tagsIds); $item->tags = $tags->getTags($tagsIds); } } if (isset($item->images)) { $registry = new Registry($item->images); $item->images = $registry->toArray(); if (!empty($item->images['image_intro'])) { $item->images['image_intro'] = ContentHelper::resolve($item->images['image_intro']); } if (!empty($item->images['image_fulltext'])) { $item->images['image_fulltext'] = ContentHelper::resolve($item->images['image_fulltext']); } } return parent::prepareItem($item); } } components/com_content/src/Controller/ArticlesController.php000064400000007524152462255100020510 0ustar00<?php /** * @package Joomla.API * @subpackage com_content * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Controller; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Helper\TagsHelper; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The article controller * * @since 4.0.0 */ class ArticlesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'articles'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'articles'; /** * Article list view amended to add filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('author', $apiFilterInfo)) { $this->modelState->set('filter.author_id', $filter->clean($apiFilterInfo['author'], 'INT')); } if (\array_key_exists('category', $apiFilterInfo)) { $this->modelState->set('filter.category_id', $filter->clean($apiFilterInfo['category'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('state', $apiFilterInfo)) { $this->modelState->set('filter.published', $filter->clean($apiFilterInfo['state'], 'INT')); } if (\array_key_exists('featured', $apiFilterInfo)) { $this->modelState->set('filter.featured', $filter->clean($apiFilterInfo['featured'], 'INT')); } if (\array_key_exists('tag', $apiFilterInfo)) { $this->modelState->set('filter.tag', $filter->clean($apiFilterInfo['tag'], 'INT')); } if (\array_key_exists('language', $apiFilterInfo)) { $this->modelState->set('filter.language', $filter->clean($apiFilterInfo['language'], 'STRING')); } $apiListInfo = $this->input->get('list', [], 'array'); if (array_key_exists('ordering', $apiListInfo)) { $this->modelState->set('list.ordering', $filter->clean($apiListInfo['ordering'], 'STRING')); } if (array_key_exists('direction', $apiListInfo)) { $this->modelState->set('list.direction', $filter->clean($apiListInfo['direction'], 'STRING')); } return parent::displayList(); } /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_content.article') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } if (($this->input->getMethod() === 'PATCH') && !(\array_key_exists('tags', $data))) { $tags = new TagsHelper(); $tags->getTagIds($data['id'], 'com_content.article'); $data['tags'] = explode(',', $tags->tags); } return $data; } } components/com_content/src/Helper/ContentHelper.php000064400000001533152462255100016536 0ustar00<?php /** * @package Joomla.Api * @subpackage com_content * * @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Helper; use Joomla\CMS\Uri\Uri; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Content api helper. * * @since 4.0.0 */ class ContentHelper { /** * Fully Qualified Domain name for the image url * * @param string $uri The uri to resolve * * @return string */ public static function resolve(string $uri): string { // Check if external URL. if (stripos($uri, 'http') !== 0) { return Uri::root() . $uri; } return $uri; } } components/com_languages/src/Controller/LanguagesController.php000064400000001517152462255100021140 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The languages controller * * @since 4.0.0 */ class LanguagesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'languages'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'languages'; } components/com_languages/src/Controller/OverridesController.php000064400000012033152462255100021167 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The overrides controller * * @since 4.0.0 */ class OverridesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'overrides'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'overrides'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); return parent::displayList(); } /** * Method to save a record. * * @param integer $recordKey The primary key of the item (if exists) * * @return integer The record ID on success, false on failure * * @since 4.0.0 */ protected function save($recordKey = null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(Inflector::singularize($this->contentType)); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('filter.language', $this->input->post->get('lang_code')); $model->setState('filter.client', $this->input->post->get('app')); $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms'); // Validate the posted data. $form = $model->getForm($data, false); if (!$form) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_FORM_CREATE')); } // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } if (!isset($validData['tags'])) { $validData['tags'] = []; } if (!$model->save($validData)) { throw new Exception\Save(Text::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); } return $validData['key']; } /** * Removes an item. * * @param integer $id The primary key to delete item. * * @return void * * @since 4.0.0 */ public function delete($id = null) { $id = $this->input->get('id', '', 'string'); $this->input->set('model', $this->contentType); $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); parent::delete($id); } /** * Get client code from input * * @return string * * @since 4.0.0 */ private function getClientFromInput() { return $this->input->exists('app') ? $this->input->get('app') : $this->input->post->get('app'); } /** * Get language code from input * * @return string * * @since 4.0.0 */ private function getLanguageFromInput() { return $this->input->exists('lang_code') ? $this->input->get('lang_code') : $this->input->post->get('lang_code'); } } components/com_languages/src/Controller/StringsController.php000064400000007025152462255100020663 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The strings controller * * @since 4.0.0 */ class StringsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'strings'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'strings'; /** * Search by languages constants * * @return static A \JControllerLegacy object to support chaining. * * @throws InvalidParameterException * @since 4.0.0 */ public function search() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (!isset($data['searchstring']) || !\is_string($data['searchstring'])) { throw new InvalidParameterException("Invalid param 'searchstring'"); } if (!isset($data['searchtype']) || !\in_array($data['searchtype'], ['constant', 'value'])) { throw new InvalidParameterException("Invalid param 'searchtype'"); } $this->input->set('searchstring', $data['searchstring']); $this->input->set('searchtype', $data['searchtype']); $this->input->set('more', 0); $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var \Joomla\Component\Languages\Api\View\Strings\JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } // Push the model into the view (as default) $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Refresh cache * * @return static A \JControllerLegacy object to support chaining. * * @throws \Exception * @since 4.0.0 */ public function refresh() { /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $result = $model->refresh(); if ($result instanceof \Exception) { throw $result; } return $this; } } components/com_languages/src/View/Languages/JsonapiView.php000064400000003417152462255100020122 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Languages; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The languages view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'asset_id', 'lang_code', 'title', 'title_native', 'sef', 'image', 'description', 'metakey', 'metadesc', 'sitename', 'published', 'access', 'ordering', 'access_level', 'home', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'asset_id', 'lang_code', 'title', 'title_native', 'sef', 'image', 'description', 'metakey', 'metadesc', 'sitename', 'published', 'access', 'ordering', 'access_level', 'home', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->lang_id; unset($item->lang->id); return parent::prepareItem($item); } } components/com_languages/src/View/Strings/JsonapiView.php000064400000004646152462255100017652 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Strings; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The strings view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'string', 'file', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel(); $result = $model->search(); if ($result instanceof \Exception) { throw $result; } $items = []; foreach ($result['results'] as $item) { $items[] = $this->prepareItem($item); } // Check for errors. if (\count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } if ($this->type === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING'), 400); } $collection = (new Collection($items, new JoomlaSerializer($this->type))) ->fields([$this->type => $this->fieldsToRenderList]); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->constant; unset($item->constant); return parent::prepareItem($item); } } components/com_languages/src/View/Overrides/JsonapiView.php000064400000004631152462255100020155 0ustar00<?php /** * @package Joomla.API * @subpackage com_languages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Overrides; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The overrides view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = ['value']; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = ['value']; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { /** @var \Joomla\Component\Languages\Administrator\Model\OverrideModel $model */ $model = $this->getModel(); $id = $model->getState($model->getName() . '.id'); $item = $this->prepareItem($model->getItem($id)); return parent::displayItem($item); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var \Joomla\Component\Languages\Administrator\Model\OverridesModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getOverrides() as $key => $override) { $item = (object) [ 'key' => $key, 'override' => $override, ]; $items[] = $this->prepareItem($item); } return parent::displayList($items); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->key; $item->value = $item->override; unset($item->key); unset($item->override); return parent::prepareItem($item); } } components/com_users/src/View/Groups/JsonapiView.php000064400000001776152462255100016674 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\View\Groups; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'parent_id', 'lft', 'rgt', 'title', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'parent_id', 'lft', 'rgt', 'title', ]; } components/com_users/src/View/Levels/JsonapiView.php000064400000001672152462255100016642 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\View\Levels; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The levels view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'title', 'rules', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'rules', ]; } components/com_users/src/View/Users/JsonapiView.php000064400000005357152462255100016515 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\View\Users; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The users view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'groups', 'name', 'username', 'email', 'registerDate', 'lastvisitDate', 'lastResetTime', 'resetCount', 'sendEmail', 'block', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'username', 'email', 'group_count', 'group_names', 'registerDate', 'lastvisitDate', 'lastResetTime', 'resetCount', 'sendEmail', 'block', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_users.user') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_users.user') as $field) { $this->fieldsToRenderItem[] = $field->name; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (empty($item->username)) { throw new RouteNotFoundException('Item does not exist'); } foreach (FieldsHelper::getFields('com_users.user', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } return parent::prepareItem($item); } } components/com_users/src/Controller/UsersController.php000064400000014641152462255100017530 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\Controller; use Joomla\CMS\Date\Date; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The users controller * * @since 4.0.0 */ class UsersController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'users'; /** * The default view for the display method. * * @var string * @since 4.0.0 */ protected $default_view = 'users'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_users.user') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } if ($this->input->getMethod() === 'PATCH') { $body = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (!\array_key_exists('password', $body)) { unset($data['password']); } } if ($this->input->getMethod() === 'POST') { if (isset($data['password'])) { $data['password2'] = $data['password']; } } return $data; } /** * User list view with filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 * @throws InvalidParameterException */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('state', $apiFilterInfo)) { $this->modelState->set('filter.state', $filter->clean($apiFilterInfo['state'], 'INT')); } if (\array_key_exists('active', $apiFilterInfo)) { $this->modelState->set('filter.active', $filter->clean($apiFilterInfo['active'], 'INT')); } if (\array_key_exists('groupid', $apiFilterInfo)) { $this->modelState->set('filter.group_id', $filter->clean($apiFilterInfo['groupid'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('registrationDateStart', $apiFilterInfo)) { $registrationStartInput = $filter->clean($apiFilterInfo['registrationDateStart'], 'STRING'); $registrationStartDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationStartInput); if (!$registrationStartDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateStart'); throw new InvalidParameterException($error, 400, null, 'registrationDateStart'); } $this->modelState->set('filter.registrationDateStart', $registrationStartDate); } if (\array_key_exists('registrationDateEnd', $apiFilterInfo)) { $registrationEndInput = $filter->clean($apiFilterInfo['registrationDateEnd'], 'STRING'); $registrationEndDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationEndInput); if (!$registrationEndDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateEnd'); throw new InvalidParameterException($error, 400, null, 'registrationDateEnd'); } $this->modelState->set('filter.registrationDateEnd', $registrationEndDate); } elseif ( \array_key_exists('registrationDateStart', $apiFilterInfo) && !\array_key_exists('registrationDateEnd', $apiFilterInfo) ) { // If no end date specified the end date is now $this->modelState->set('filter.registrationDateEnd', new Date()); } if (\array_key_exists('lastVisitDateStart', $apiFilterInfo)) { $lastVisitStartInput = $filter->clean($apiFilterInfo['lastVisitDateStart'], 'STRING'); $lastVisitStartDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitStartInput); if (!$lastVisitStartDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateStart'); throw new InvalidParameterException($error, 400, null, 'lastVisitDateStart'); } $this->modelState->set('filter.lastVisitStart', $lastVisitStartDate); } if (\array_key_exists('lastVisitDateEnd', $apiFilterInfo)) { $lastVisitEndInput = $filter->clean($apiFilterInfo['lastVisitDateEnd'], 'STRING'); $lastVisitEndDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitEndInput); if (!$lastVisitEndDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateEnd'); throw new InvalidParameterException($error, 400, null, 'lastVisitDateEnd'); } $this->modelState->set('filter.lastVisitEnd', $lastVisitEndDate); } elseif ( \array_key_exists('lastVisitDateStart', $apiFilterInfo) && !\array_key_exists('lastVisitDateEnd', $apiFilterInfo) ) { // If no end date specified the end date is now $this->modelState->set('filter.lastVisitEnd', new Date()); } return parent::displayList(); } } components/com_users/src/Controller/LevelsController.php000064400000001512152462255100017652 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The levels controller * * @since 4.0.0 */ class LevelsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'levels'; /** * The default view for the display method. * * @var string * @since 4.0.0 */ protected $default_view = 'levels'; } components/com_users/src/Controller/GroupsController.php000064400000001510152462255100017675 0ustar00<?php /** * @package Joomla.API * @subpackage com_users * * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups controller * * @since 4.0.0 */ class GroupsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'groups'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'groups'; } components/com_redirect/src/View/Redirect/JsonapiView.php000064400000002333152462255100017604 0ustar00<?php /** * @package Joomla.API * @subpackage com_redirect * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Redirect\Api\View\Redirect; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The redirect view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'old_url', 'new_url', 'referer', 'comment', 'hits', 'published', 'created_date', 'modified_date', 'header', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'old_url', 'new_url', 'referer', 'comment', 'hits', 'published', 'created_date', 'modified_date', 'header', ]; } components/com_redirect/src/Controller/RedirectController.php000064400000001506152462255100020624 0ustar00<?php /** * @package Joomla.API * @subpackage com_redirect * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Redirect\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The redirect controller * * @since 4.0.0 */ class RedirectController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'links'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'redirect'; } components/com_config/src/View/Component/JsonapiView.php000064400000011173152462255100017453 0ustar00<?php /** * @package Joomla.API * @subpackage com_config * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\View\Component; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The component view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { try { $component = ComponentHelper::getComponent($this->get('component_name')); if ($component === null || !$component->enabled) { // @todo: exception component unavailable throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_INVALID_COMPONENT_NAME'), 400); } $data = $component->getParams()->toObject(); } catch (\Exception $e) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500, $e); } $items = []; foreach ($data as $key => $value) { $item = (object) [$key => $value]; $items[] = $this->prepareItem($item); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->addLink('self', (string) $currentUrl); // Check for first and previous pages if ($offset > 0) { $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage)) ->addLink('previous', $this->queryEncode((string) $previousPage)); } // Check for next and last pages if ($offset + $limit < $totalItemsCount) { $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit; $lastPage->setVar('page', $lastPageQuery); $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage)) ->addLink('last', $this->queryEncode((string) $lastPage)); } $collection = (new Collection($items, new JoomlaSerializer($this->type))); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = ExtensionHelper::getExtensionRecord($this->get('component_name'), 'component')->extension_id; return $item; } } components/com_config/src/View/Application/JsonapiView.php000064400000010241152462255100017747 0ustar00<?php /** * @package Joomla.API * @subpackage com_config * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\View\Application; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Joomla\Component\Config\Administrator\Model\ApplicationModel; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The application view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var ApplicationModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getData() as $key => $value) { $item = (object) [$key => $value]; $items[] = $this->prepareItem($item); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->addLink('self', (string) $currentUrl); // Check for first and previous pages if ($offset > 0) { $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage)) ->addLink('previous', $this->queryEncode((string) $previousPage)); } // Check for next and last pages if ($offset + $limit < $totalItemsCount) { $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit; $lastPage->setVar('page', $lastPageQuery); $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage)) ->addLink('last', $this->queryEncode((string) $lastPage)); } $collection = (new Collection($items, new JoomlaSerializer($this->type))); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = ExtensionHelper::getExtensionRecord('joomla', 'file')->extension_id; return $item; } } components/com_config/src/Controller/ComponentController.php000064400000010720152462255100020467 0ustar00<?php /** * @package Joomla.API * @subpackage com_config * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Config\Administrator\Model\ComponentModel; use Joomla\Component\Config\Api\View\Component\JsonapiView; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The component controller * * @since 4.0.0 */ class ComponentController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'component'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'component'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $viewType = $this->app->getDocument()->getType(); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $this->default_view, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ComponentModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Push the model into the view (as default) $view->setModel($model, true); $view->set('component_name', $this->input->get('component_name')); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { /** @var ComponentModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $option = $this->input->get('component_name'); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_ADMINISTRATOR . '/components/' . $option); // Must load after serving service-requests $form = $model->getForm(); $data = json_decode($this->input->json->getRaw(), true); $component = ComponentHelper::getComponent($option); $oldData = $component->getParams()->toArray(); $data = array_replace($oldData, $data); // Validate the posted data. $validData = $model->validate($form, $data); if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } // Attempt to save the configuration. $data = [ 'params' => $validData, 'id' => ExtensionHelper::getExtensionRecord($option, 'component')->extension_id, 'option' => $option, ]; if (!$model->save($data)) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500); } return $this; } } components/com_config/src/Controller/ApplicationController.php000064400000010025152462255100020766 0ustar00<?php /** * @package Joomla.API * @subpackage com_config * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Config\Administrator\Model\ApplicationModel; use Joomla\Component\Config\Api\View\Application\JsonapiView; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The application controller * * @since 4.0.0 */ class ApplicationController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'application'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'application'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $viewType = $this->app->getDocument()->getType(); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $this->default_view, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ApplicationModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Push the model into the view (as default) $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { /** @var ApplicationModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $data = json_decode($this->input->json->getRaw(), true); // Complete data array if needed $oldData = $model->getData(); $data = array_replace($oldData, $data); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms'); // Must load after serving service-requests $form = $model->getForm(); // Validate the posted data. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } if (!$model->save($validData)) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500); } return $this; } } components/com_modules/src/View/Modules/JsonapiView.php000064400000006052152462255100017324 0ustar00<?php /** * @package Joomla.API * @subpackage com_modules * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Modules\Api\View\Modules; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Modules\Administrator\Model\SelectModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The modules view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'typeAlias', 'asset_id', 'title', 'note', 'content', 'ordering', 'position', 'checked_out', 'checked_out_time', 'publish_up', 'publish_down', 'published', 'module', 'access', 'showtitle', 'params', 'client_id', 'language', 'assigned', 'assignment', 'xml', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'note', 'position', 'module', 'language', 'checked_out', 'checked_out_time', 'published', 'enabled', 'access', 'ordering', 'publish_up', 'publish_down', 'language_title', 'language_image', 'editor', 'access_level', 'pages', 'name', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); if ($item === null) { $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ((int) $model->getState('client_id') !== $item->client_id) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } /** * Execute and display a list modules types. * * @return string * * @since 4.0.0 */ public function displayListTypes() { /** @var SelectModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getItems() as $item) { $item->id = $item->extension_id; unset($item->extension_id); $items[] = $item; } $this->fieldsToRenderList = ['id', 'name', 'module', 'xml', 'desc']; return parent::displayList($items); } } components/com_modules/src/Controller/ModulesController.php000064400000006377152462255100020355 0ustar00<?php /** * @package Joomla.API * @subpackage com_modules * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Modules\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Modules\Administrator\Model\SelectModel; use Joomla\Component\Modules\Api\View\Modules\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The modules controller * * @since 4.0.0 */ class ModulesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'modules'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'modules'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Return module items types * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function getTypes() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var SelectModel $model */ $model = $this->getModel('select', '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('client_id', $this->getClientIdFromInput()); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayListTypes(); return $this; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } components/com_fields/src/View/Groups/JsonapiView.php000064400000005133152462255100016770 0ustar00<?php /** * @package Joomla.API * @subpackage com_fields * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\View\Groups; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'asset_id', 'context', 'title', 'note', 'description', 'state', 'checked_out', 'checked_out_time', 'ordering', 'params', 'language', 'created', 'created_by', 'modified', 'modified_by', 'access', 'type', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'name', 'checked_out', 'checked_out_time', 'note', 'state', 'access', 'created_time', 'created_user_id', 'ordering', 'language', 'fieldparams', 'params', 'type', 'default_value', 'context', 'group_id', 'label', 'description', 'required', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'group_title', 'group_access', 'group_state', 'group_note', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->context != $this->getModel()->getState('filter.context')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } } components/com_fields/src/View/Fields/JsonapiView.php000064400000005377152462255100016731 0ustar00<?php /** * @package Joomla.API * @subpackage com_fields * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\View\Fields; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The fields view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'asset_id', 'context', 'group_id', 'title', 'name', 'label', 'default_value', 'type', 'note', 'description', 'state', 'required', 'checked_out', 'checked_out_time', 'ordering', 'params', 'fieldparams', 'language', 'created_time', 'created_user_id', 'modified_time', 'modified_by', 'access', 'assigned_cat_ids', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'name', 'checked_out', 'checked_out_time', 'note', 'state', 'access', 'created_time', 'created_user_id', 'ordering', 'language', 'fieldparams', 'params', 'type', 'default_value', 'context', 'group_id', 'label', 'description', 'required', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'group_title', 'group_access', 'group_state', 'group_note', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->context != $this->getModel()->getState('filter.context')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } } components/com_fields/src/Controller/FieldsController.php000064400000003564152462255100017744 0ustar00<?php /** * @package Joomla.API * @subpackage com_fields * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The fields controller * * @since 4.0.0 */ class FieldsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'fields'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'fields'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getContextFromInput() { return $this->input->exists('context') ? $this->input->get('context') : $this->input->post->get('context'); } } components/com_fields/src/Controller/GroupsController.php000064400000003564152462255100020015 0ustar00<?php /** * @package Joomla.API * @subpackage com_fields * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups controller * * @since 4.0.0 */ class GroupsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'groups'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'groups'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getContextFromInput() { return $this->input->exists('context') ? $this->input->get('context') : $this->input->post->get('context'); } } components/com_messages/src/View/Messages/JsonapiView.php000064400000003010152462255100017611 0ustar00<?php /** * @package Joomla.API * @subpackage com_messages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Messages\Api\View\Messages; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The messages view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'user_id_from', 'user_id_to', 'date_time', 'priority', 'subject', 'message', 'state', 'user_from', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'user_id_from', 'user_id_to', 'date_time', 'priority', 'subject', 'message', 'state', 'user_from', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->message_id; unset($item->message_id); return parent::prepareItem($item); } } components/com_messages/src/Controller/MessagesController.php000064400000001511152462255100020634 0ustar00<?php /** * @package Joomla.API * @subpackage com_messages * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Messages\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The messages controller * * @since 4.0.0 */ class MessagesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'messages'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'messages'; } components/com_installer/src/View/Manage/JsonapiView.php000064400000002155152462255100017431 0ustar00<?php /** * @package Joomla.API * @subpackage com_installer * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Installer\Api\View\Manage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The manage view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'type', 'version', 'folder', 'status', 'client_id', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->extension_id; unset($item->extension_id); return $item; } } components/com_installer/src/Controller/ManageController.php000064400000003674152462255100020457 0ustar00<?php /** * @package Joomla.API * @subpackage com_installer * * @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Installer\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The manage controller * * @since 4.0.0 */ class ManageController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'manage'; /** * The default view for the display method. * * @var string * @since 4.0.0 */ protected $default_view = 'manage'; /** * Extension list view amended to add filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $requestBool = $this->input->get('core', $this->input->get->get('core')); if (!\is_null($requestBool) && $requestBool !== 'true' && $requestBool !== 'false') { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'core'); throw new InvalidParameterException($error, 400, null, 'core'); } if (!\is_null($requestBool)) { $this->modelState->set('filter.core', ($requestBool === 'true') ? '1' : '0'); } $this->modelState->set('filter.status', $this->input->get('status', $this->input->get->get('status', null, 'INT'), 'INT')); $this->modelState->set('filter.type', $this->input->get('type', $this->input->get->get('type', null, 'STRING'), 'STRING')); return parent::displayList(); } } components/com_contact/src/Controller/ContactController.php000064400000020272152462255100020311 0ustar00<?php /** * @package Joomla.API * @subpackage com_contact * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\Controller; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\Log\Log; use Joomla\CMS\Mail\Exception\MailDisabledException; use Joomla\CMS\Mail\MailTemplate; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception\SendEmail; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\String\PunycodeHelper; use Joomla\CMS\Uri\Uri; use Joomla\CMS\User\User; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Joomla\Registry\Registry; use Joomla\String\Inflector; use PHPMailer\PHPMailer\Exception as phpMailerException; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The contact controller * * @since 4.0.0 */ class ContactController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'contacts'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'contacts'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } return $data; } /** * Submit contact form * * @param integer $id Leave empty if you want to retrieve data from the request * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function submitForm($id = null) { if ($id === null) { $id = $this->input->post->get('id', 0, 'int'); } $modelName = Inflector::singularize($this->contentType); /** @var \Joomla\Component\Contact\Site\Model\ContactModel $model */ $model = $this->getModel($modelName, 'Site'); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('filter.published', 1); $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); $contact = $model->getItem($id); if ($contact->id === null) { throw new RouteNotFoundException('Item does not exist'); } $contactParams = new Registry($contact->params); if (!$contactParams->get('show_email_form')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_DISPLAY_EMAIL_FORM')); } // Contact plugins PluginHelper::importPlugin('contact'); Form::addFormPath(JPATH_COMPONENT_SITE . '/forms'); // Validate the posted data. $form = $model->getForm(); if (!$form) { throw new \RuntimeException($model->getError(), 500); } if (!$model->validate($form, $data)) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } // Validation succeeded, continue with custom handlers $results = $this->app->triggerEvent('onValidateContact', [&$contact, &$data]); foreach ($results as $result) { if ($result instanceof \Exception) { throw new InvalidParameterException($result->getMessage()); } } // Passed Validation: Process the contact plugins to integrate with other applications $this->app->triggerEvent('onSubmitContact', [&$contact, &$data]); // Send the email $sent = false; $params = ComponentHelper::getParams('com_contact'); if (!$params->get('custom_reply')) { $sent = $this->_sendEmail($data, $contact, $params->get('show_email_copy', 0)); } if (!$sent) { throw new SendEmail('Error sending message'); } return $this; } /** * Method to get a model object, loading it if required. * * @param array $data The data to send in the email. * @param \stdClass $contact The user information to send the email to * @param boolean $emailCopyToSender True to send a copy of the email to the user. * * @return boolean True on success sending the email, false on failure. * * @since 1.6.4 */ private function _sendEmail($data, $contact, $emailCopyToSender) { $app = $this->app; $app->getLanguage()->load('com_contact', JPATH_SITE, $app->getLanguage()->getTag(), true); if ($contact->email_to == '' && $contact->user_id != 0) { $contact_user = User::getInstance($contact->user_id); $contact->email_to = $contact_user->get('email'); } $templateData = [ 'sitename' => $app->get('sitename'), 'name' => $data['contact_name'], 'contactname' => $contact->name, 'email' => PunycodeHelper::emailToPunycode($data['contact_email']), 'subject' => $data['contact_subject'], 'body' => stripslashes($data['contact_message']), 'url' => Uri::base(), 'customfields' => '', ]; // Load the custom fields if (!empty($data['com_fields']) && $fields = FieldsHelper::getFields('com_contact.mail', $contact, true, $data['com_fields'])) { $output = FieldsHelper::render( 'com_contact.mail', 'fields.render', [ 'context' => 'com_contact.mail', 'item' => $contact, 'fields' => $fields, ] ); if ($output) { $templateData['customfields'] = $output; } } try { $mailer = new MailTemplate('com_contact.mail', $app->getLanguage()->getTag()); $mailer->addRecipient($contact->email_to); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); $sent = $mailer->send(); // If we are supposed to copy the sender, do so. if ($emailCopyToSender == true && !empty($data['contact_email_copy'])) { $mailer = new MailTemplate('com_contact.mail.copy', $app->getLanguage()->getTag()); $mailer->addRecipient($templateData['email']); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); $sent = $mailer->send(); } } catch (MailDisabledException | phpMailerException $exception) { try { Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror'); $sent = false; } catch (\RuntimeException $exception) { Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning'); $sent = false; } } return $sent; } } components/com_contact/src/View/Contacts/JsonapiView.php000064400000011753152462255100017461 0ustar00<?php /** * @package Joomla.API * @subpackage com_contact * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\View\Contacts; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Contact\Api\Serializer\ContactSerializer; use Joomla\Component\Content\Api\Helper\ContentHelper; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The contacts view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'alias', 'name', 'category', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'image', 'tags', 'featured', 'publish_up', 'publish_down', 'version', 'hits', 'metakey', 'metadesc', 'metadata', 'con_position', 'address', 'suburb', 'state', 'country', 'postcode', 'telephone', 'fax', 'misc', 'email_to', 'default_con', 'user_id', 'access', 'mobile', 'webpage', 'sortname1', 'sortname2', 'sortname3', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'alias', 'name', 'category', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'image', 'tags', 'user_id', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'modified_by', 'user_id', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new ContactSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { $this->fieldsToRenderItem[] = $field->name; } if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { foreach (FieldsHelper::getFields('com_contact.contact', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $tagsNames = $item->tagsHelper->getTagNames($tagsIds); $item->tags = array_combine($tagsIds, $tagsNames); } else { $item->tags = []; } if (isset($item->image)) { $item->image = ContentHelper::resolve($item->image); } return parent::prepareItem($item); } } components/com_contact/src/Serializer/ContactSerializer.php000064400000006645152462255100020275 0ustar00<?php /** * Joomla! Content Management System * * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Tag\TagApiSerializerTrait; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class ContactSerializer extends JoomlaSerializer { use TagApiSerializerTrait; /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/contact/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } /** * Build contact user relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function userId($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->user_id, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->user_id)); return new Relationship($resource); } } language/en-GB/install.xml000064400000001165152462255100011414 0ustar00<?xml version="1.0" encoding="UTF-8"?> <extension client="api" type="language" method="upgrade"> <name>English (en-GB)</name> <tag>en-GB</tag> <version>4.4.14</version> <creationDate>2025-09</creationDate> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>(C) 2020 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description>en-GB api language</description> <files> <folder>/</folder> <filename file="meta">install.xml</filename> </files> <params /> </extension> language/en-GB/langmetadata.xml000064400000001600152462255100012362 0ustar00<?xml version="1.0" encoding="UTF-8"?> <metafile client="api"> <name>English (en-GB)</name> <version>4.4.14</version> <creationDate>2025-09</creationDate> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>(C) 2020 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description><![CDATA[en-GB api language]]></description> <metadata> <name>English (United Kingdom)</name> <nativeName>English (United Kingdom)</nativeName> <tag>en-GB</tag> <rtl>0</rtl> <locale>en_GB.utf8, en_GB.UTF-8, en_GB, eng_GB, en, english, english-uk, uk, gbr, britain, england, great britain, uk, united kingdom, united-kingdom</locale> <firstDay>0</firstDay> <weekEnd>0,6</weekEnd> <calendar>gregorian</calendar> </metadata> <params /> </metafile> language/en-GB/joomla.ini000064400000135544152462255100011217 0ustar00; Joomla! Project ; (C) 2020 Open Source Matters, Inc. <https://www.joomla.org> ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 ; Common boolean values ; Note: YES, NO, TRUE, FALSE are reserved words in INI format. ; Keep this string on top JERROR_PARSING_LANGUAGE_FILE=" : error(s) in line(s) %s" J1="1" J2="2" J3="3" J4="4" J5="5" J6="6" J7="7" J8="8" J9="9" J10="10" J15="15" J20="20" J25="25" J30="30" J50="50" J75="75" J100="100" J150="150" J200="200" J250="250" J300="300" J500="500" JH1="h1" JH2="h2" JH3="h3" JH4="h4" JH5="h5" JH6="h6" ERROR="Error" INFO="Info" MESSAGE="Message" NOTICE="Notice" WARNING="Warning" JACTIONS="Actions for: %s" JADMINISTRATION="Administration" JADMINISTRATOR="Administrator" JALIAS="Alias" JALL="All" JALL_LANGUAGE="All" JAPI="API" JAPPLY="Save" JARCHIVED="Archived" JASSOCIATIONS_ASC="Associations ascending" JASSOCIATIONS_DESC="Associations descending" JAUTHOR="Author" JAUTHOR_ASC="Author ascending" JAUTHOR_DESC="Author descending" JCANCEL="Cancel" JCATEGORIES="Categories" JCATEGORY="Category" JCATEGORY_ASC="Category ascending" JCATEGORY_DESC="Category descending" JCATEGORY_SPRINTF="Category: %s" JCLEAR="Clear" JCLIENT="Location" JCLOSE="Close" JCONFIG_PERMISSIONS_DESC="Permissions for this component unless they are changed for a specific item." JCONFIG_PERMISSIONS_LABEL="Permissions" JCURRENT="Current" JDATE="Date" JDATE_ASC="Date ascending" JDATE_DESC="Date descending" JDAY="Day" JDEFAULT="Default" JDEFAULTLANGUAGE="Language - Default" JDETAILS="Details" JDISABLED="Disabled" JENABLED="Enabled" JFALSE="False" JFEATURE="Feature" JFEATURED="Featured" JFEATURED_ASC="Featured ascending" JFEATURED_DESC="Featured descending" JHELP="Help" JHIDE="Hide" JHIDEPASSWORD="Hide Password" JINVALID_TOKEN="The most recent request was denied because it had an invalid security token. Please refresh the page and try again." JINVALID_TOKEN_NOTICE="The security token did not match. The request was cancelled to prevent any security breach. Please try again." JLOGIN="Log in" JLOGOUT="Log out" JMENU_MULTILANG_WARNING_MISSING_MODULES="An administrator menu module for <strong>%s</strong> does not exist. <br>Create a custom administrator menu and module for each administrator language or publish a menu module set to All languages." JMODIFY="Modify" JMONTH="Month" JMONTH_PUBLISHED="Month (published)" JNEVER="Never" JNEXT="Next" JNEXT_TITLE="Next article: %s" JNO="No" JNONE="None" JOFF="Off" JOK="OK" JON="On" JONLY="Only" JOPEN="Open" JOPTIONS="Options" JORDERINGDISABLED="Please sort by order to enable reordering" JPREV="Prev" JPREVIOUS="Previous" JPREVIOUS_TITLE="Previous article: %s" JPROTECTED="Protected" JPUBLISHED="Published" JRECORD_NUMBER="Record Number" JREGISTER="Register" JRESET="Reset" JSAVE="Save & Close" JSELECT="Select" JSHOW="Show" JSHOWPASSWORD="Show Password" JSITE="Site" JSITEADMIN="Select Client" JSTAGE="Stage" JSTAGE_ASC="Stage ascending" JSTAGE_DESC="Stage descending" JSTATUS="Status" JSTATUS_ASC="Status ascending" JSTATUS_DESC="Status descending" JSUBMIT="Submit" JTAG="Tags" JTAG_FIELD_SELECT_DESC="Select the tag to use." JTOOLBAR="Toolbar" JTRASH="Trash" JTRASHED="Trashed" JTRUE="True" JUNARCHIVE="Remove from archive status" JUNDEFINED="Undefined" JUNFEATURE="Unfeature" JUNFEATURED="Unfeatured" JUNPROTECTED="Unprotected" JUNPUBLISHED="Unpublished" JVERSION="Version" JVISIT_LINK="Visit Link" JVISIT_WEBSITE="Visit Website" JYEAR="Year" JYES="Yes" JACTION_ADMIN="Configure ACL & Options" JACTION_ADMIN_GLOBAL="Super User" JACTION_COMPONENT_SETTINGS="Component Settings" JACTION_CREATE="Create" JACTION_DELETE="Delete" JACTION_EDIT="Edit" JACTION_EDIT_MODULE="Edit the '%s' module" JACTION_EDITOWN="Edit Own" JACTION_EDITSTATE="Edit State" JACTION_EDITVALUE="Edit Custom Field Value" JACTION_EXECUTETRANSITION="Execute Transition" JACTION_LOGIN_ADMIN="Administrator Login" JACTION_LOGIN_API="Web Services Login" JACTION_LOGIN_OFFLINE="Offline Access" JACTION_LOGIN_SITE="Site Login" JACTION_MANAGE="Access Administration Interface" JACTION_MANAGEWORKFLOW="Manage Workflows" JACTION_OPTIONS="Configure Options" JACTION_UNPUBLISH="Unpublish" JBROWSERTARGET_DOWNLOAD="Download %s in new window" JBROWSERTARGET_MODAL="Modal" JBROWSERTARGET_NEW="Open in new window" JBROWSERTARGET_NEW_TITLE="Open %s in new window" JBROWSERTARGET_PARENT="Open in parent window" JBROWSERTARGET_POPUP="Open in popup" JENFORCE_2FA_REDIRECT_MESSAGE="You were redirected because you are required to set up Two Factor Authentication to continue." JERROR_ALERTNOAUTHOR="You don't have permission to access this. Please contact a website administrator if this is incorrect." JERROR_ALERTNOTEMPLATE="The template for this display is not available." JERROR_AN_ERROR_HAS_OCCURRED="An error has occurred." JERROR_CORE_CREATE_NOT_PERMITTED="Create not permitted." JERROR_CORE_DELETE_NOT_PERMITTED="Delete not permitted." JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template \"%s\"." JERROR_INVALID_CONTROLLER="Invalid controller" JERROR_INVALID_CONTROLLER_CLASS="Invalid controller class" JERROR_LAYOUT_PREVIOUS_ERROR="Previous Error" JERROR_LOADFILE_FAILED="Error loading form file" JERROR_LOADING_MENUS="Error loading Menus: %s" JERROR_LOGIN_DENIED="You do not have access to the Administrator section of this site." JERROR_NO_ITEMS_SELECTED="No item(s) selected." JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet." JERROR_SAVE_FAILED="Could not save data. Error: %s" JERROR_SENDING_EMAIL="Email could not be sent." JERROR_SESSION_STARTUP="Error starting the session." JFIELD_ACCESS_DESC="The access level group that is allowed to view this item." JFIELD_ACCESS_LABEL="Access" JFIELD_ALIAS_DESC="The Alias will be used as part of the URL." JFIELD_ALIAS_LABEL="Alias" JFIELD_ALIAS_PLACEHOLDER="Auto-generate from title" JFIELD_ALT_COMPONENT_LAYOUT_DESC="Use a layout from the supplied component view or overrides in the templates." JFIELD_ALT_LAYOUT_LABEL="Layout" ; Deprecated, will be removed with 5.0 JFIELD_ALT_MODULE_LAYOUT_DESC="Use a layout from the supplied module or overrides in the templates." JFIELD_ALT_PAGE_TITLE_DESC="An optional alternative page title to set that will change the TITLE tag in the HTML output." JFIELD_ALT_PAGE_TITLE_LABEL="Alternative Page Title" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_DESC="Asset ID" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_LABEL="Asset ID" JFIELD_BASIC_LOGIN_DESCRIPTION_LABEL="Login Description Text" JFIELD_BASIC_LOGIN_DESCRIPTION_SHOW_LABEL="Login Description" JFIELD_BASIC_LOGOUT_DESCRIPTION_LABEL="Logout Description Text" JFIELD_BASIC_LOGOUT_DESCRIPTION_SHOW_LABEL="Logout Description" JFIELD_CATEGORY_DESC="The category that this item is assigned to. You may select an existing category or enter a new category by typing the name in the field and pressing enter." JFIELD_COLOR_ERROR_CONVERT_HSL="Unable to convert HSL value" JFIELD_COLOR_ERROR_CONVERT_HUE="Unable to convert hue value" JFIELD_COLOR_ERROR_NO_COLOR="No colour value available" JFIELD_COLOR_ERROR_WRONG_FORMAT="Wrong format" JFIELD_COLOR_LABEL_SLIDER_ALPHA="Alpha Slider" JFIELD_COLOR_LABEL_SLIDER_HUE="Hue Slider" JFIELD_COLOR_LABEL_SLIDER_INPUT="Selected Colour Value" JFIELD_COLOR_LABEL_SLIDER_LIGHT="Light Slider" JFIELD_COLOR_LABEL_SLIDER_SATURATION="Saturation Slider" JFIELD_COLOR_SELECT="Select a colour" JFIELD_COLOR_TRANSPARENT="No colour, transparent" JFIELD_COLOR_VALUE="Colour with hexadecimal value of" JFIELD_DISPLAY_READONLY_LABEL="Display When Read-Only" JFIELD_ENABLED_DESC="The enabled status of this item." JFIELD_FIELDS_CATEGORY_DESC="Select the category that this field is assigned to." JFIELD_LANGUAGE_DESC="Assign a language to this article." JFIELD_LANGUAGE_LABEL="Language" JFIELD_LOGIN_IMAGE_DESC="Select or upload an image to display on login page." JFIELD_LOGIN_IMAGE_LABEL="Login Image" JFIELD_LOGIN_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after login.<br>The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGIN_REDIRECT_URL_LABEL="Login Redirect" JFIELD_LOGOUT_IMAGE_DESC="Select or upload an image to display on logout page." JFIELD_LOGOUT_IMAGE_LABEL="Logout Image" JFIELD_LOGOUT_REDIRECT_PAGE_DESC="Select or create the page the user will be redirected to after ending their current session by logging out. The default is to stay on the same page." JFIELD_LOGOUT_REDIRECT_PAGE_LABEL="Logout Redirection Page" JFIELD_LOGOUT_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after logout.<br>The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGOUT_REDIRECT_URL_LABEL="Logout Redirect" JFIELD_MEDIA_ALT_CHECK_DESC_LABEL="Decorative Image - no description required" JFIELD_MEDIA_ALT_CHECK_LABEL="No Description" JFIELD_MEDIA_ALT_LABEL="Image Description (Alt Text)" JFIELD_MEDIA_DOWNLOAD_CHECK_DESC_LABEL="Use a download link" JFIELD_MEDIA_DOWNLOAD_CHECK_LABEL="Download" JFIELD_MEDIA_DOWNLOAD_FILE="Download {file}" ; Do not translate the text between the {} JFIELD_MEDIA_EMBED_CHECK_DESC_LABEL="Use native elements audio, video or object" JFIELD_MEDIA_EMBED_CHECK_LABEL="Embed" JFIELD_MEDIA_CLASS_LABEL="Image Class" JFIELD_MEDIA_FIGURE_CAPTION_LABEL="Figure Caption" JFIELD_MEDIA_FIGURE_CLASS_LABEL="Figure Class" JFIELD_MEDIA_HEIGHT_LABEL="Height" JFIELD_MEDIA_LAZY_LABEL="Image will be lazyloaded" JFIELD_MEDIA_SUMMARY_LABEL="Additional Data" JFIELD_MEDIA_WIDTH_LABEL="Width" JFIELD_MEDIA_TITLE_LABEL="Title" JFIELD_MEDIA_UNSUPPORTED="You don't have a {extension} plugin, but you can {tag} download the {extension} file.</a>" ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_COUNTER="{remaining} characters remaining of {maxlength} characters." ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_DESC="An optional paragraph to be used as the description of the page in the HTML output. This will generally display in the results of search engines." JFIELD_META_DESCRIPTION_LABEL="Meta Description" JFIELD_META_KEYWORDS_DESC="An optional comma-separated list of keywords and/or phrases to be used in the HTML output." JFIELD_META_KEYWORDS_LABEL="Keywords" JFIELD_META_RIGHTS_DESC="Describe what rights others have to use this content." JFIELD_META_RIGHTS_LABEL="Content Rights" JFIELD_METADATA_AUTHOR_DESC="The author of this content." JFIELD_METADATA_RIGHTS_DESC="Publication rights for the content." JFIELD_METADATA_RIGHTS_LABEL="Rights" JFIELD_METADATA_ROBOTS_DESC="Robots instructions." JFIELD_METADATA_ROBOTS_LABEL="Robots" JFIELD_MODULE_LANGUAGE_DESC="Assign a language to this module." JFIELD_NAME_DESC="The name will be used to identify the field. Leave this blank and Joomla will fill in a default value from the title." JFIELD_NAME_LABEL="Name" JFIELD_NAME_PLACEHOLDER="Auto-generate from title" JFIELD_NOTE_DESC="Note" JFIELD_NOTE_LABEL="Note" JFIELD_OPTION_NONE="None" JFIELD_ORDERING_DESC="Select the ordering." JFIELD_ORDERING_LABEL="Ordering" JFIELD_PARAMS_LABEL="Options" JFIELD_PASSWORD_INDICATE_COMPLETE="Password accepted" JFIELD_PASSWORD_INDICATE_INCOMPLETE="Password doesn't meet site's requirements." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N="Password does not have enough numbers. At least %s numbers are required." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N_1="Password does not have enough numbers. At least 1 number is required." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N="Password does not have enough lower case characters. At least %s lower case characters are required." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N_1="Password does not have enough lower case characters. At least 1 lower case character is required." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N="Password does not have enough symbols (such as !@#$). At least %s symbols are required." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N_1="Password does not have enough symbols (such as !@#$). At least 1 symbol is required." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N="Password does not have enough upper case characters. At least %s upper case characters are required." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N_1="Password does not have enough upper case characters. At least 1 upper case character is required." JFIELD_PASSWORD_RULES_CHARACTERS="Characters: %d" JFIELD_PASSWORD_RULES_DIGITS="Numbers: %d" JFIELD_PASSWORD_RULES_LOWERCASE="Lower Case: %d" JFIELD_PASSWORD_RULES_MINIMUM_REQUIREMENTS="<strong>Minimum Requirements</strong> — %s" JFIELD_PASSWORD_RULES_SYMBOLS="Symbols: %d" JFIELD_PASSWORD_RULES_UPPERCASE="Upper Case: %d" JFIELD_PASSWORD_SPACES_IN_PASSWORD="Password must not have spaces at the beginning or end." JFIELD_PASSWORD_TOO_LONG="Password is too long. Passwords must be less than 100 characters." JFIELD_PASSWORD_TOO_SHORT_N="Password is too short. Passwords must have at least %s characters." JFIELD_PLG_SEARCH_ALL_DESC="Include published items in the search." JFIELD_PLG_SEARCH_ALL_LABEL="Search Published" JFIELD_PLG_SEARCH_ARCHIVED_DESC="Include archived items in the search." JFIELD_PLG_SEARCH_ARCHIVED_LABEL="Search Archived" JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC="Sets the maximum number of results to return." JFIELD_PLG_SEARCH_SEARCHLIMIT_LABEL="Search Limit" JFIELD_PUBLISHED_DESC="Set publication status." JFIELD_READMORE_DESC="Add a custom text instead of Read More." JFIELD_READMORE_LABEL="Read More Text" JFIELD_SPACER_LABEL="<span style=\"width:auto\"><hr></span>" JFIELD_TITLE_DESC="Title" JFIELD_VERSION_HISTORY_DESC="This button allows you to open a window to view older versions of this item." JFIELD_VERSION_HISTORY_LABEL="Prior Versions" JFIELD_VERSION_HISTORY_SELECT="View Prior Versions" JGLOBAL_ACTION_PERMISSIONS_LABEL="Permissions" JGLOBAL_ADD_CUSTOM_CATEGORY="Add new Category" JGLOBAL_ALL_ARTICLE="Max Levels Articles" JGLOBAL_ALL_LIST="Max Levels as List" JGLOBAL_ALLOW_COMMENTS_DESC="If Yes, viewers will be able to add and view comments for the article." JGLOBAL_ALLOW_COMMENTS_LABEL="Allow Comments" JGLOBAL_ALLOW_RATINGS_DESC="If Yes, viewers will be able to add and view ratings for the article." JGLOBAL_ALLOW_RATINGS_LABEL="Allow Ratings" JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_LABEL="Intro text Limit" JGLOBAL_ARCHIVE_OPTIONS="Archive" JGLOBAL_ARTICLE_COUNT_DESC="Show or hide a count of articles in each category." JGLOBAL_ARTICLE_COUNT_LABEL="Article Count" JGLOBAL_ARTICLE_MANAGER_ORDER="Ordering" JGLOBAL_ARTICLE_MANAGER_REVERSE_ORDER="Ordering Reverse" JGLOBAL_ARTICLE_ORDER_DESC="The order that articles will show in." JGLOBAL_ARTICLE_ORDER_LABEL="Article Order" JGLOBAL_ARTICLES="Articles" JGLOBAL_ASSOC_NOT_POSSIBLE="To define associations, please make sure the item language is not set to 'All'." JGLOBAL_ASSOCIATIONS_CONTENTLANGUAGE_WARNING="Some associated items are assigned to the <strong>%s</strong> Content Language but that Content Language is trashed or deleted." JGLOBAL_ASSOCIATIONS_NEW_ITEM_WARNING="To create associations, first save the item." JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON="Propagate" JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED="Failed propagating associations. You may have to select or create them manually." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_ALL="All existing associations have been set." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_NONE="No associations exist to propagate." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_SOME="Associations have been set for: %s" JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP="Propagates this item's existing associations." JGLOBAL_ASSOCIATIONS_RESET_WARNING="The language has been changed. If you save this item again it will reset the available associations. If this was not intended, close the item." JGLOBAL_AUTH_ACCESS_DENIED="Access Denied" JGLOBAL_AUTH_ACCESS_GRANTED="Access Granted" JGLOBAL_AUTH_BIND_FAILED="Failed binding to LDAP server" JGLOBAL_AUTH_CANCEL="Authentication cancelled" JGLOBAL_AUTH_CURL_NOT_INSTALLED="Curl isn't installed" JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED="Empty password not allowed." JGLOBAL_AUTH_FAIL="Authentication failed" JGLOBAL_AUTH_FAILED="Failed to authenticate: %s" JGLOBAL_AUTH_INCORRECT="Incorrect username/password" JGLOBAL_AUTH_INVALID_PASS="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_INVALID_SECRETKEY="The Multi-factor Authentication Secret Key is invalid." JGLOBAL_AUTH_NO_REDIRECT="Could not redirect to server: %s" JGLOBAL_AUTH_NO_USER="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_NOT_CONNECT="Unable to connect to authentication service." JGLOBAL_AUTH_NOT_CREATE_DIR="Could not create the FileStore folder %s. Please check the effective permissions." JGLOBAL_AUTH_PASS_BLANK="LDAP can't have blank password" JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Result Unknown. Access Denied" JGLOBAL_AUTH_USER_NOT_FOUND="Unable to find user." JGLOBAL_AUTHOR_ALPHABETICAL="Author Alphabetical" JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL="Author Reverse Alphabetical" JGLOBAL_AUTO="Auto" JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND="Can't find the destination parent for this move." JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND="Can't find the destination row for this move." JGLOBAL_BATCH_PROCESS="Process" JGLOBAL_BATCH_WORKFLOW_STATE_ROW_NOT_FOUND="Can't find the destination row for this state change." JGLOBAL_BLOG="Blog" JGLOBAL_BLOG_CLASS="Article Class" JGLOBAL_BLOG_CLASS_LEADING="Leading Article Class" JGLOBAL_BLOG_LAYOUT_OPTIONS="Blog Layout" JGLOBAL_CATEGORIES_OPTIONS="Categories" JGLOBAL_CATEGORY_LAYOUT_DESC="Layout" JGLOBAL_CATEGORY_LAYOUT_LABEL="Choose a Layout" JGLOBAL_CATEGORY_MANAGER_ORDER="Category Order" JGLOBAL_CATEGORY_NOT_FOUND="Category not found" JGLOBAL_CATEGORY_OPTIONS="Category" JGLOBAL_CATEGORY_ORDER_DESC="The order that categories will show in." JGLOBAL_CATEGORY_ORDER_LABEL="Category Order" JGLOBAL_CENTER="Center" JGLOBAL_CHECK_ALL="Check All Items" JGLOBAL_CHOOSE_CATEGORY_DESC="Select or create a category to be displayed." JGLOBAL_CHOOSE_CATEGORY_LABEL="Choose a Category" JGLOBAL_CHOOSE_COMPONENT_DESC="Choose a component from the list." JGLOBAL_CHOOSE_COMPONENT_LABEL="Choose a component" JGLOBAL_CLICK_TO_SORT_THIS_COLUMN="Select to sort by this column" JGLOBAL_CLICK_TO_TOGGLE_STATE="Select icon to toggle state." JGLOBAL_CONFIRM_DELETE="Are you sure you want to delete? Confirming will permanently delete the selected item(s)!" JGLOBAL_COPY="(copy)" JGLOBAL_CREATED="Created" JGLOBAL_CREATED_DATE="Created Date" JGLOBAL_CUSTOM_CATEGORY="New Categories" JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC="Enable the creation or editing of custom fields." JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL="Edit Custom Fields" JGLOBAL_DATE_FORMAT_DESC="Optional format string for showing the date. For example, D M Y for day month year or you can use d-m-y for a short version eg. 28-12-16. See https://php.net/date. If left blank, it uses DATE_FORMAT_LC1 from your language file." JGLOBAL_DATE_FORMAT_LABEL="Date Format" JGLOBAL_DESCRIPTION="Description" JGLOBAL_DISPLAY_NUM="Display #" JGLOBAL_DISPLAY_SELECT_DESC="Show or hide the Display Select dropdown listbox." JGLOBAL_DISPLAY_SELECT_LABEL="Display Select" JGLOBAL_EDIT_ITEM="Edit item" JGLOBAL_EDIT_PREFERENCES="Edit Preferences" JGLOBAL_EMAIL="Email" JGLOBAL_EMAIL_DOMAIN_NOT_ALLOWED="The email domain <strong>%s</strong> is not allowed. Please enter another email address." JGLOBAL_EMPTY_CATEGORIES_DESC="Show or hide categories that have no articles and no subcategories." JGLOBAL_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_ERROR_INSUFFICIENT_BATCH_INFORMATION="Insufficient information to perform the batch operation" JGLOBAL_FEED_SHOW_READMORE_DESC="Displays a "Read More" link in the news feeds if Intro Text is set to Show." JGLOBAL_FEED_SHOW_READMORE_LABEL=""Read More" Link" JGLOBAL_FEED_SUMMARY_DESC="If set to Intro Text, only the Intro Text of each article will show in the news feed. If set to Full Text, the whole article will show in the news feed." JGLOBAL_FEED_SUMMARY_LABEL="Include in Feed" JGLOBAL_FEED_TITLE="News Feeds" JGLOBAL_FIELD_ADD="Add" JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_DESC="Categories that are within this category will be displayed." JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL="Select the Top Level Category" JGLOBAL_FIELD_CATEGORIES_DESC_DESC="If you enter some text in this field, it will replace the Top Level Category Description, if it has one." JGLOBAL_FIELD_CATEGORIES_DESC_LABEL="Alternative Description" JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Uses another name than the author's for display." JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Author's Alias" JGLOBAL_FIELD_CREATED_BY_DESC="The user who created this." JGLOBAL_FIELD_CREATED_BY_LABEL="Created By" JGLOBAL_FIELD_CREATED_DESC="Created Date." JGLOBAL_FIELD_CREATED_LABEL="Created Date" JGLOBAL_FIELD_FIELD_CACHETIME_DESC="The number of minutes before the cache is refreshed." JGLOBAL_FIELD_FIELD_ORDERING_DESC="Order items will be displayed in." JGLOBAL_FIELD_FIELD_ORDERING_LABEL="Order" JGLOBAL_FIELD_GROUPS="Field Groups" JGLOBAL_FIELD_ID_DESC="Record number in the database." JGLOBAL_FIELD_ID_LABEL="ID" JGLOBAL_FIELD_LAYOUT_DESC="Default layout to use for items." JGLOBAL_FIELD_LAYOUT_LABEL="Choose a Layout" JGLOBAL_FIELD_MODIFIED_BY_DESC="The user who did the last modification." JGLOBAL_FIELD_MODIFIED_BY_LABEL="Modified By" JGLOBAL_FIELD_MODIFIED_LABEL="Modified Date" JGLOBAL_FIELD_MOVE="Move" JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_DESC="Number of categories to display for each level." JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_LABEL="Number of Categories" JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to stop publishing." JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to start publishing." JGLOBAL_FIELD_PUBLISH_UP_LABEL="Start Publishing" JGLOBAL_FIELD_REMOVE="Remove" JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC="Show description of the top level category or alternatively replace with the text from the description field found in the menu item. If using Root as the top level category, the description field has to be filled." JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL="Top Level Category Description" JGLOBAL_FIELD_VERSION_NOTE_DESC="Enter an optional note for this version of the item." JGLOBAL_FIELD_VERSION_NOTE_LABEL="Version Note" JGLOBAL_FIELDS="Fields" JGLOBAL_FIELDS_TITLE="Custom Fields" JGLOBAL_FIELDSET_ADVANCED="Advanced" JGLOBAL_FIELDSET_ASSOCIATIONS="Associations" JGLOBAL_FIELDSET_BASIC="Options" JGLOBAL_FIELDSET_CONTENT="Content" JGLOBAL_FIELDSET_DESCRIPTION="Description" JGLOBAL_FIELDSET_DISPLAY_OPTIONS="Display" JGLOBAL_FIELDSET_GLOBAL="Main Options" JGLOBAL_FIELDSET_IMAGE_OPTIONS="Images" JGLOBAL_FIELDSET_INTEGRATION="Integration" JGLOBAL_FIELDSET_METADATA_OPTIONS="Metadata" JGLOBAL_FIELDSET_OPTIONS="Options" JGLOBAL_FIELDSET_PUBLISHING="Publishing" JGLOBAL_FILTER_ATTRIBUTES_DESC="3. List additional attributes, separating each attribute name with a space or comma. For example: <em>class,title,id</em>." JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filter Attributes<sup>3</sup>" JGLOBAL_FILTER_CLIENT="- Select Location -" JGLOBAL_FILTER_FIELD_DESC="Show or hide a filter field for the list." JGLOBAL_FILTER_FIELD_LABEL="Filter Field" JGLOBAL_FILTER_GROUPS_DESC="This sets the user groups that you want filters applied to. Other groups will have no filtering performed." JGLOBAL_FILTER_GROUPS_LABEL="Filter Groups" JGLOBAL_FILTER_TAGS_DESC="2. List additional tags, separating each tag name with a space or comma. For example: <em>p,div,span</em>." JGLOBAL_FILTER_TAGS_LABEL="Filter Tags<sup>2</sup>" JGLOBAL_FILTER_TYPE_DESC="<p>1. Forbidden List allows all tags and attributes except for those listed.<br><strong>--</strong> Tags for the Default Forbidden List include: 'applet', 'body', 'bgsound', 'base', 'basefont', 'canvas', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'<br><strong>--</strong> Attributes for the Default Forbidden List include: 'action', 'background', 'codebase', 'dynsrc', 'lowsrc', 'formaction'<br><strong>--</strong> You can forbid additional tags and attributes by adding to the Filter Tags and Filter Attributes fields, separating each tag or attribute name with a comma.<br><strong>--</strong> Custom Forbidden List allows you to override the Default Forbidden List. Add the tags and attributes to be forbidden in the Filter Tags and Filter Attributes fields.</p><p>Allowed List allows only the tags listed in the Filter Tags and Filter Attributes fields.</p><p>No HTML removes all HTML tags from the content when it is saved.</p><p>Please note that these settings work regardless of the editor that you are using. <br>Even if you are using a WYSIWYG editor, the filtering settings may strip additional tags and attributes prior to saving information in the database.</p>" JGLOBAL_FILTER_TYPE_LABEL="Filter Type<sup>1</sup>" JGLOBAL_FILTERED_BY="Filtered by:" JGLOBAL_FULL_TEXT="Full Text" JGLOBAL_GT=">" JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC="The maximum number of old versions of an item to save. If zero, all old versions will be saved." JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL="Maximum Versions" JGLOBAL_HITS="Hits" JGLOBAL_HITS_ASC="Hits ascending" JGLOBAL_HITS_DESC="Hits descending" JGLOBAL_INHERIT="Inherit" JGLOBAL_INTEGRATION_LABEL="Integration" JGLOBAL_INTRO_TEXT="Intro Text" JGLOBAL_ISFREESOFTWARE="%s is free software released under the <a href=\"https://www.gnu.org/licenses/gpl-2.0.html\" target=\"_blank\" rel=\"noopener noreferrer\">GNU General Public License</a>." JGLOBAL_ITEM_FEATURE="Feature Item" JGLOBAL_ITEM_UNFEATURE="Unfeature Item" JGLOBAL_JOOA11Y="Accessibility Check" JGLOBAL_KEEP_TYPING="Keep typing …" JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM="Language pack does not match this Joomla! version. Some strings may be missing and will be displayed in English." JGLOBAL_LEARN_MORE="Learn More" JGLOBAL_LEAST_HITS="Least Hits" JGLOBAL_LEFT="Left" JGLOBAL_LINK_AUTHOR_LABEL="Link to Author's Contact Page" JGLOBAL_LINK_CATEGORY_DESC="If set to Yes, and if Show Category is set to 'Show', the Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_CATEGORY_LABEL="Link Category" JGLOBAL_LINK_PARENT_CATEGORY_DESC="If set to Yes, and if Show Parent is set to 'Show', the Parent Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_PARENT_CATEGORY_LABEL="Link Parent Category" JGLOBAL_LINKED_INTRO_IMAGE_LABEL="Linked Intro Image" JGLOBAL_LINKED_TITLES_DESC="If set to Yes, the article title will be a link to the article." JGLOBAL_LINKED_TITLES_LABEL="Linked Titles" JGLOBAL_LIST="List" JGLOBAL_LIST_ALIAS="Alias: %s" JGLOBAL_LIST_ALIAS_NOTE="(<span>Alias</span>: %s, <span>Note</span>: %s)" JGLOBAL_LIST_AUTHOR_DESC="Show or hide the article author in the list of articles." JGLOBAL_LIST_AUTHOR_LABEL="Author" JGLOBAL_LIST_HITS_DESC="Show or hide article hits in the list of articles." JGLOBAL_LIST_HITS_LABEL="Hits" JGLOBAL_LIST_LAYOUT_OPTIONS="List Layouts" JGLOBAL_LIST_LIMIT="Select number of items per page." JGLOBAL_LIST_NAME="(<span>Name</span>: %s)" JGLOBAL_LIST_NAME_NOTE="(<span>Name</span>: %s, <span>Note</span>: %s)" JGLOBAL_LIST_NOTE="(<span>Note</span>: %s)" JGLOBAL_LIST_RATINGS_DESC="Whether to show article ratings in the list of articles." JGLOBAL_LIST_RATINGS_LABEL="Show Ratings in List" JGLOBAL_LIST_TITLE_DESC="If Show, Category Title will show in the list of categories." JGLOBAL_LIST_TITLE_LABEL="Category Title" JGLOBAL_LIST_VOTES_DESC="Whether to show article votes in the list of articles." JGLOBAL_LIST_VOTES_LABEL="Show Votes in List" JGLOBAL_LOOKING_FOR="Looking for" JGLOBAL_LT="<" JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC="The number of subcategory levels to display." JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL="Subcategory Levels" JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT="Maximum upload size: <strong>%s</strong>" JGLOBAL_MAXLEVEL_DESC="Maximum number of levels of subcategories to show." JGLOBAL_MAXLEVEL_LABEL="Subcategory Levels" JGLOBAL_MENU_SELECTION="Menu Selection" JGLOBAL_MODIFIED="Modified" JGLOBAL_MODIFIED_DATE="Modified Date" JGLOBAL_MOST_HITS="Most Hits" JGLOBAL_MOST_RECENT_FIRST="Most Recent First" JGLOBAL_MULTI_LEVEL="Multi Level" JGLOBAL_NAME_ASC="Name ascending" JGLOBAL_NAME_DESC="Name descending" JGLOBAL_NEWITEMSFIRST_DESC="New items default to the first position. The ordering can be changed after this item is saved." JGLOBAL_NEWITEMSLAST_DESC="New items default to the last position. The ordering can be changed after this item is saved." JGLOBAL_NO_ITEM_SELECTED="No items selected" JGLOBAL_NO_MATCHING_RESULTS="No Matching Results" JGLOBAL_NO_ORDER="No Order" JGLOBAL_NONAPPLICABLE="N/A" JGLOBAL_NUM_INTRO_ARTICLES_DESC="Number of articles to show after the leading article. Articles will be shown in columns." JGLOBAL_NUM_INTRO_ARTICLES_LABEL="# Intro Articles" JGLOBAL_NUM_LEADING_ARTICLES_DESC="Number of leading articles to display as full-width at the beginning of the page." JGLOBAL_NUM_LEADING_ARTICLES_LABEL="# Leading Articles" JGLOBAL_NUM_LINKS_DESC="Number of articles to display as links, normally below the Intro Articles." JGLOBAL_NUM_LINKS_LABEL="# Links" JGLOBAL_NUMBER_CATEGORY_ITEMS_DESC="If Show, the number of articles in the category will show." JGLOBAL_NUMBER_CATEGORY_ITEMS_LABEL="Show Article Count" JGLOBAL_NUMBER_ITEMS_LIST_DESC="Default number of articles to list on a page." JGLOBAL_NUMBER_ITEMS_LIST_LABEL="# Articles to List" JGLOBAL_OLDEST_FIRST="Oldest First" JGLOBAL_OPENS_IN_A_NEW_WINDOW="Opens in a new window" JGLOBAL_ORDER_ASCENDING="Ascending" JGLOBAL_ORDER_DESCENDING="Descending" JGLOBAL_ORDER_DIRECTION_DESC="Sort order. Descending is highest to lowest. Ascending is lowest to highest." JGLOBAL_ORDER_DIRECTION_LABEL="Direction" JGLOBAL_ORDERING="Article Order" JGLOBAL_ORDERING_DATE_DESC="If articles are ordered by date, which date to use." JGLOBAL_ORDERING_DATE_LABEL="Date for Ordering" JGLOBAL_OTPMETHOD_NONE="Disable Multi-factor Authentication" JGLOBAL_PAGINATION_DESC="Show or hide Pagination support. Pagination provides page links at the bottom of the page that allow the User to navigate to additional pages. These are needed if the Information will not fit on one page." JGLOBAL_PAGINATION_LABEL="Pagination" JGLOBAL_PAGINATION_RESULTS_DESC="Show or hide pagination summary, for example, "Page 1 of 4"." JGLOBAL_PAGINATION_RESULTS_LABEL="Pagination Summary" JGLOBAL_PASSWORD="Password" JGLOBAL_PASSWORD_RESET_REQUIRED="You are required to reset your password before proceeding." JGLOBAL_PERMISSIONS_ANCHOR="Set Permissions" JGLOBAL_PREVIEW="Preview" JGLOBAL_PREVIEW_POSITION="<span>Position:</span> %s" JGLOBAL_PREVIEW_STYLE="<span>Style:</span> %s" JGLOBAL_PUBLISHED_DATE="Published Date" JGLOBAL_RANDOM_ORDER="Random Order" JGLOBAL_RATINGS="Ratings" JGLOBAL_RATINGS_ASC="Ratings ascending" JGLOBAL_RATINGS_DESC="Ratings descending" JGLOBAL_RECORD_HITS_DISABLED="The recording of hits is disabled." JGLOBAL_RECORD_HITS_LABEL="Record Hits" JGLOBAL_RECORD_NUMBER="Record ID: %d" JGLOBAL_REMEMBER_ME="Remember Me" JGLOBAL_REPEATABLE_FIELDS_TABLE_CAPTION="Repeatable Fields" JGLOBAL_REVERSE_ORDERING="Article Reverse Order" JGLOBAL_RIGHT="Right" JGLOBAL_ROOT="Root" JGLOBAL_ROOT_PARENT="- No parent -" JGLOBAL_SAVE_HISTORY_OPTIONS_DESC="Automatically save old versions of an item. If set to Yes, old versions of items are saved automatically. When editing, you may restore from a previous version of the item." JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL="Enable Versions" JGLOBAL_SECRETKEY="Secret Key" JGLOBAL_SECRETKEY_HELP="If you have enabled Multi-factor Authentication in your user account please enter your secret key. If you do not know what this means, you can leave this field blank." JGLOBAL_SEF_NOIDS_DESC="Remove the IDs from the URLs of this component." JGLOBAL_SEF_NOIDS_LABEL="Remove IDs from URLs" JGLOBAL_SEF_TITLE="Routing" JGLOBAL_SELECT_ALLOW_DENY_GROUP="Change %s permission for %s group." JGLOBAL_SELECT_AN_OPTION="Select an option" JGLOBAL_SELECT_NO_RESULTS_MATCH="No results match" JGLOBAL_SELECT_PRESS_TO_SELECT="Press to select" JGLOBAL_SELECT_SOME_OPTIONS="Select some options" JGLOBAL_SELECTED_UPLOAD_FILE_SIZE="Selected file size: <strong>%s</strong>" JGLOBAL_SELECTION_ALL="Select All" JGLOBAL_SELECTION_INVERT="Toggle Selection" JGLOBAL_SELECTION_INVERT_ALL="Toggle All Selections" JGLOBAL_SELECTION_NONE="Clear Selection" JGLOBAL_SHOW_ASSOCIATIONS_DESC="Multilingual only. If set to Show, the associated articles flags or URL Language Code will be displayed." JGLOBAL_SHOW_ASSOCIATIONS_LABEL="Associations" JGLOBAL_SHOW_AUTHOR_DESC="If set to Show, the Name of the article's Author will be displayed." JGLOBAL_SHOW_AUTHOR_LABEL="Author" JGLOBAL_SHOW_CATEGORY_DESC="If set to Show, the title of the article’s category will show." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC="Show or hide the description of the selected Category." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL="Category Description" JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_DESC="If Show, the "Subcategories" will show as a subheading on the page. The subheading is usually displayed inside the "H3" tag." JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_LABEL="Subcategories Text" JGLOBAL_SHOW_CATEGORY_IMAGE_DESC="Show or hide the image of the selected Category." JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL="Category Image" JGLOBAL_SHOW_CATEGORY_LABEL="Category" JGLOBAL_SHOW_CATEGORY_TITLE="Category Title" JGLOBAL_SHOW_CATEGORY_TITLE_DESC="If Show, the Category Title will show as a subheading on the page. The subheading is usually displayed inside the "H2" tag." JGLOBAL_SHOW_CREATE_DATE_DESC="If set to Show, the date and time an Article was created will be displayed." JGLOBAL_SHOW_CREATE_DATE_LABEL="Create Date" JGLOBAL_SHOW_DATE_DESC="Show or hide a date column in the list of articles, or select which date you wish to show." JGLOBAL_SHOW_DATE_LABEL="Date" JGLOBAL_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no items or subcategories." JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_SHOW_FEATURED_ARTICLES_DESC="Select to show, hide or only display featured articles." JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL="Featured Articles" JGLOBAL_SHOW_FEED_LINK_DESC="Show or hide an RSS Feed Link. (A Feed Link will show up as a feed icon in the address bar of most modern browsers)." JGLOBAL_SHOW_FEED_LINK_LABEL="RSS Feed Link" JGLOBAL_SHOW_FLAG_DESC="If set to 'Yes', will display language choice as image flags. Otherwise will use the content language URL Language Code." JGLOBAL_SHOW_FLAG_LABEL="Use Image Flags" JGLOBAL_SHOW_FULL_DESCRIPTION="Show full description …" JGLOBAL_SHOW_HEADINGS_DESC="Show or hide the headings in list layouts." JGLOBAL_SHOW_HEADINGS_LABEL="Table Headings" JGLOBAL_SHOW_HITS_LABEL="Hits" JGLOBAL_SHOW_INTRO_DESC="If set to Show, the Intro Text of the article will show when you drill down to the article. If set to Hide, only the part of the article after the "Read More" break will show." JGLOBAL_SHOW_INTRO_LABEL="Intro Text" JGLOBAL_SHOW_MODIFY_DATE_DESC="If set to Show, the date and time an Article was last modified will be displayed." JGLOBAL_SHOW_MODIFY_DATE_LABEL="Modify Date" JGLOBAL_SHOW_NAVIGATION_DESC="If set to Show, shows a navigation link (Next, Previous) between articles." JGLOBAL_SHOW_NAVIGATION_LABEL="Navigation" JGLOBAL_SHOW_PARENT_CATEGORY_DESC="If set to Show, the title of the article’s parent category will show." JGLOBAL_SHOW_PARENT_CATEGORY_LABEL="Parent Category" JGLOBAL_SHOW_PUBLISH_DATE_DESC="If set to Show, the date and time an Article was published will be displayed." JGLOBAL_SHOW_PUBLISH_DATE_LABEL="Publish Date" JGLOBAL_SHOW_READMORE_DESC="If set to Show, the Read more … link will show if Main text has been provided for the Article." JGLOBAL_SHOW_READMORE_LABEL=""Read More" Link" JGLOBAL_SHOW_READMORE_LIMIT_DESC="Set a limit of number of characters in Article Title to show in Read More button." JGLOBAL_SHOW_READMORE_LIMIT_LABEL="Read More Limit (characters)" JGLOBAL_SHOW_READMORE_TITLE_DESC="If set to show the title of the Article will be shown on the Read More button." JGLOBAL_SHOW_READMORE_TITLE_LABEL="Read More with Title" JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC="Show or hide the subcategories descriptions." JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL="Subcategories Descriptions" JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC="If None, only articles from this category will show. If a number, all articles from the category and the subcategories up to and including that level will show in the blog." JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL="Include Subcategories" JGLOBAL_SHOW_SUBCATEGORY_HEADING="Subcategories Heading" JGLOBAL_SHOW_TAGS_DESC="Show the tags for this link." JGLOBAL_SHOW_TAGS_LABEL="Tags" JGLOBAL_SHOW_TITLE_DESC="If set to Show, the article title is shown." JGLOBAL_SHOW_TITLE_LABEL="Title" JGLOBAL_SHOW_UNAUTH_LINKS_DESC="If set to Yes, links to registered content will be shown even if you are not logged-in. You will need to log in to access the full item." JGLOBAL_SHOW_UNAUTH_LINKS_LABEL="Unauthorised Links" JGLOBAL_SHOW_VOTE_DESC="If set to show, a voting system will be enabled for Articles." JGLOBAL_SHOW_VOTE_LABEL="Voting" JGLOBAL_SINGLE_LEVEL="Single Level" JGLOBAL_SORT_BY="Sort Table By:" JGLOBAL_SORTED_BY="Sorted by:" JGLOBAL_STAGE_PROCESS="Process" JGLOBAL_START_PUBLISH_AFTER_FINISH="Item start publishing date must be before finish publishing date" JGLOBAL_SUBSLIDER_BLOG_EXTENDED_LABEL="The option below gives the ability to include articles from subcategories in the Blog layout." JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL="If a field is left blank, global settings will be used." JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL="These options are used when you select one of the category links, on the first page and/or thereafter, unless they are changed for a specific menu item." JGLOBAL_TITLE="Title" JGLOBAL_TITLE_ALPHABETICAL="Title Alphabetical" JGLOBAL_TITLE_ASC="Title ascending" JGLOBAL_TITLE_DESC="Title descending" JGLOBAL_TITLE_REVERSE_ALPHABETICAL="Title Reverse Alphabetical" JGLOBAL_TOGGLE_DROPDOWN="Toggle Dropdown" JGLOBAL_TOGGLE_FEATURED="Toggle featured status" JGLOBAL_TOP="Top" JGLOBAL_TPL_CPANEL_LINK_TEXT="Return to Dashboard" JGLOBAL_TYPE_OR_SELECT_CATEGORY="Type or select a Category" JGLOBAL_TYPE_OR_SELECT_SOME_OPTIONS="Type or select some options" JGLOBAL_TYPE_OR_SELECT_SOME_TAGS="Type or select some tags" JGLOBAL_USE_GLOBAL="Use Global" JGLOBAL_USE_GLOBAL_VALUE="Use Global (%s)" JGLOBAL_USERNAME="Username" JGLOBAL_VALIDATION_FORM_FAILED="Invalid form" JGLOBAL_VIEW_SITE="View Site" JGLOBAL_VOTES="Votes" JGLOBAL_VOTES_ASC="Votes ascending" JGLOBAL_VOTES_DESC="Votes descending" JGLOBAL_WARNCOOKIES="Warning! Cookies must be enabled to access the Administrator Backend." JGLOBAL_WARNIE="Warning! Internet Explorer should not be used for proper operation of the Administrator Backend." JGLOBAL_WARNJAVASCRIPT="Warning! JavaScript must be enabled for proper operation of the Administrator Backend." JGLOBAL_WIDTH="Width" JGRID_HEADING_ACCESS="Access" JGRID_HEADING_ACCESS_ASC="Access ascending" JGRID_HEADING_ACCESS_DESC="Access descending" JGRID_HEADING_CAPTION_ASC="%s - ascending" JGRID_HEADING_CAPTION_DESC="%s - descending" JGRID_HEADING_CREATED_BY="Created by" JGRID_HEADING_ID="ID" JGRID_HEADING_ID_ASC="ID ascending" JGRID_HEADING_ID_DESC="ID descending" JGRID_HEADING_LANGUAGE="Language" JGRID_HEADING_LANGUAGE_ASC="Language ascending" JGRID_HEADING_LANGUAGE_DESC="Language descending" JGRID_HEADING_MENU_ITEM_TYPE="Menu Item Type" JGRID_HEADING_ORDERING="Ordering" JGRID_HEADING_ORDERING_ASC="Ordering ascending" JGRID_HEADING_ORDERING_DESC="Ordering descending" ; If there is an error connecting database before initialisation, en-GB.lib_joomla.ini can't be loaded ; we therefore have to load the strings from en-GB.ini JLIB_DATABASE_ERROR_ADAPTER_MYSQL="The MySQL adapter 'mysql' is not available." JLIB_DATABASE_ERROR_ADAPTER_MYSQLI="The MySQL adapter 'mysqli' is not available." JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s." JLIB_DATABASE_ERROR_CONNECT_MYSQL="Could not connect to MySQL." JLIB_DATABASE_ERROR_DATABASE_CONNECT="Could not connect to database." JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s." JOPTION_ACCESS_SHOW_ALL_ACCESS="Show All Access" JOPTION_ACCESS_SHOW_ALL_GROUPS="Show All Groups" JOPTION_ACCESS_SHOW_ALL_LEVELS="Show All Access Levels" JOPTION_ALL_CATEGORIES="- All Categories -" JOPTION_ANY="Any" JOPTION_ANY_CATEGORY="Any Category" JOPTION_DO_NOT_USE="- None Selected -" JOPTION_FROM_COMPONENT="---From Component---" JOPTION_FROM_MODULE="---From Module---" JOPTION_FROM_STANDARD="---From Global Options---" JOPTION_FROM_TEMPLATE="---From %s Template---" JOPTION_MENUS="Menus" JOPTION_NO_USER="- No User -" JOPTION_OPTIONAL="Optional" JOPTION_REQUIRED="Required" JOPTION_SELECT_ACCESS="- Select Access -" JOPTION_SELECT_AUTHOR="- Select Author -" JOPTION_SELECT_AUTHOR_ALIAS="- Select Author Alias -" JOPTION_SELECT_AUTHOR_ALIASES="- Select Author Aliases -" JOPTION_SELECT_AUTHORS="- Select Authors -" JOPTION_SELECT_CATEGORY="- Select Category -" JOPTION_SELECT_EDITOR="- Select Editor -" JOPTION_SELECT_FEATURED="- Select Featured -" JOPTION_SELECT_IMAGE="- Select Image -" JOPTION_SELECT_LANGUAGE="- Select Language -" JOPTION_SELECT_MAX_LEVELS="- Select Max Levels -" JOPTION_SELECT_MENU="- Select Menu -" JOPTION_SELECT_MENU_ITEM="- Select Menu Item -" JOPTION_SELECT_PUBLISHED="- Select Status -" JOPTION_SELECT_STAGE="- Select Stage -" JOPTION_SELECT_TAG="- Select Tag -" JOPTION_SELECT_TEMPLATE="- Select Template -" JOPTION_SELECT_TRANSITION="- Select Transition -" JOPTION_UNASSIGNED="Unassigned" JOPTION_USE_DEFAULT="- Use Default -" JOPTION_USE_DEFAULT_MODULE_SETTING="- Use Default Module Setting -" JOPTION_USE_MENU_REQUEST_SETTING="- Use Menu or Request Setting -" JSEARCH_FILTER="Search" JSEARCH_FILTER_CLEAR="Clear" JSEARCH_FILTER_LABEL="Filter:" JSEARCH_FILTER_SUBMIT="Search" JSEARCH_RESET="Reset" JSEARCH_TITLE="Search %s" JTOGGLE_HIDE_SIDEBAR="Hide the sidebar" JTOGGLE_SHOW_SIDEBAR="Show the sidebar" JTOGGLE_SIDEBAR_LABEL="Sidebar" JTOGGLE_SIDEBAR_MENU="Toggle Menu" JTOOLBAR_APPLY="Save" JTOOLBAR_ARCHIVE="Archive" JTOOLBAR_ASSIGN="Assign" JTOOLBAR_ASSOCIATIONS="Associations" JTOOLBAR_BACK="Back" JTOOLBAR_BATCH="Batch" JTOOLBAR_BULK_IMPORT="Bulk Import" JTOOLBAR_CANCEL="Cancel" JTOOLBAR_CHANGE_STATUS="Actions" JTOOLBAR_CHECKIN="Check-in" JTOOLBAR_CLOSE="Close" JTOOLBAR_DEFAULT="Default" JTOOLBAR_DELETE="Delete" JTOOLBAR_DELETE_ALL="Delete All" JTOOLBAR_DISABLE="Disable" JTOOLBAR_DUPLICATE="Duplicate" JTOOLBAR_EDIT="Edit" JTOOLBAR_EDIT_CSS="Edit CSS" JTOOLBAR_EDIT_HTML="Edit HTML" JTOOLBAR_EMPTY_TRASH="Empty Trash" JTOOLBAR_ENABLE="Enable" JTOOLBAR_EXPORT="Export" JTOOLBAR_HELP="Help" JTOOLBAR_INSTALL="Install" JTOOLBAR_NEW="New" JTOOLBAR_OPTIONS="Options" JTOOLBAR_PUBLISH="Publish" JTOOLBAR_PURGE_CACHE="Clear Cache" JTOOLBAR_REBUILD="Rebuild" JTOOLBAR_REFRESH_CACHE="Refresh Cache" JTOOLBAR_REMOVE="Remove" JTOOLBAR_SAVE="Save & Close" JTOOLBAR_SAVE_AND_NEW="Save & New" JTOOLBAR_SAVE_AS_COPY="Save as Copy" JTOOLBAR_SAVE_TO_MENU="Save to Menu" JTOOLBAR_TRASH="Trash" JTOOLBAR_UNARCHIVE="Unarchive" JTOOLBAR_UNINSTALL="Uninstall" JTOOLBAR_UNPUBLISH="Unpublish" JTOOLBAR_UNTRASH="Untrash" JTOOLBAR_UPLOAD="Upload" JTOOLBAR_VERSIONS="Versions" JWARNING_ARCHIVE_MUST_SELECT="You must select at least one item to archive." JWARNING_DELETE_MUST_SELECT="You must select at least one item to permanently delete." JWARNING_PUBLISH_MUST_SELECT="You must select at least one item to publish." JWARNING_REMOVE_ROOT_USER="You are logged-in using the emergency Root User setting in configuration.php.<br>You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.<br><a href='%s'>Select here to try to do it automatically.</a>" JWARNING_REMOVE_ROOT_USER_ADMIN="The emergency Root User setting is enabled for the user(id): %s.<br>You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.<br><a href='%s'>Select here to try to do it automatically.</a>" JWARNING_TRASH_MUST_SELECT="You must select at least one item to remove." JWARNING_UNPUBLISH_MUST_SELECT="You must select at least one item to unpublish." ; Workflow JWORKFLOW="Workflow: %s" JWORKFLOW_ENABLED_LABEL="Enable Workflow" JWORKFLOW_EXECUTE_TRANSITION="Select the transition to execute on this item." JWORKFLOW_EXTENSION_FORBIDDEN_DESCRIPTION="Disable this plugin for listed extensions." JWORKFLOW_EXTENSION_FORBIDDEN_LABEL="Forbidden Extensions" JWORKFLOW_EXTENSION_ALLOWED_DESCRIPTION="Activate this plugin only for listed extensions. If used all other extensions are disabled." JWORKFLOW_EXTENSION_ALLOWED_LABEL="Allowed Extensions" JWORKFLOW_FIELD_COMPONENT_SECTIONS_TEXT="%1$s: %2$s" JWORKFLOW_SHOW_TRANSITIONS_FOR_THIS_ITEM="Show the transition selection to execute a transition on this item." JWORKFLOW_TITLE="Workflow" ; Date format DATE_FORMAT_CALENDAR_DATE="%Y-%m-%d" DATE_FORMAT_CALENDAR_DATETIME="%Y-%m-%d %H:%M:%S" DATE_FORMAT_FILTER_DATE="Y-m-d" DATE_FORMAT_FILTER_DATETIME="Y-m-d H:i:s" DATE_FORMAT_JS1="y-m-d" DATE_FORMAT_LC="l, d F Y" DATE_FORMAT_LC1="l, d F Y" DATE_FORMAT_LC2="l, d F Y H:i" DATE_FORMAT_LC3="d F Y" DATE_FORMAT_LC4="Y-m-d" DATE_FORMAT_LC5="Y-m-d H:i" DATE_FORMAT_LC6="Y-m-d H:i:s" ; Months JANUARY_SHORT="Jan" JANUARY="January" FEBRUARY_SHORT="Feb" FEBRUARY="February" MARCH_SHORT="Mar" MARCH="March" APRIL_SHORT="Apr" APRIL="April" MAY_SHORT="May" MAY="May" JUNE_SHORT="Jun" JUNE="June" JULY_SHORT="Jul" JULY="July" AUGUST_SHORT="Aug" AUGUST="August" SEPTEMBER_SHORT="Sep" SEPTEMBER="September" OCTOBER_SHORT="Oct" OCTOBER="October" NOVEMBER_SHORT="Nov" NOVEMBER="November" DECEMBER_SHORT="Dec" DECEMBER="December" ; Days of the Week SAT="Sat" SATURDAY="Saturday" SUN="Sun" SUNDAY="Sunday" MON="Mon" MONDAY="Monday" TUE="Tue" TUESDAY="Tuesday" WED="Wed" WEDNESDAY="Wednesday" THU="Thu" THURSDAY="Thursday" FRI="Fri" FRIDAY="Friday" ; Localised number format DECIMALS_SEPARATOR="." THOUSANDS_SEPARATOR="," ; Mailer Codes PHPMAILER_AUTHENTICATE="SMTP Error! Could not authenticate." PHPMAILER_CONNECT_HOST="SMTP Error! Could not connect to SMTP host." PHPMAILER_DATA_NOT_ACCEPTED="SMTP Error! Data not accepted." PHPMAILER_EMPTY_MESSAGE="Empty message body" PHPMAILER_ENCODING="Unknown encoding: " PHPMAILER_EXECUTE="Could not execute: " PHPMAILER_EXTENSION_MISSING="Extension missing: " PHPMAILER_FILE_ACCESS="Could not access file: " PHPMAILER_FILE_OPEN="File Error: Could not open file: " PHPMAILER_FROM_FAILED="The following from address failed: " PHPMAILER_INSTANTIATE="Could not start mail function." PHPMAILER_INVALID_ADDRESS="Invalid address" PHPMAILER_MAILER_IS_NOT_SUPPORTED="Mailer is not supported." PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient email address." PHPMAILER_RECIPIENTS_FAILED="SMTP Error! The following recipients failed: " PHPMAILER_SIGNING_ERROR="Signing error: " PHPMAILER_SMTP_CONNECT_FAILED="SMTP connect failed" PHPMAILER_SMTP_ERROR="SMTP server error: " PHPMAILER_TLS="Could not start TLS" PHPMAILER_VARIABLE_SET="Can't set or reset variable: " ; Database types (allows for a more descriptive label than the internal name) MYSQL="MySQL (PDO)" MYSQLI="MySQLi" ORACLE="Oracle" PGSQL="PostgreSQL (PDO)" POSTGRESQL="PostgreSQL" SQLITE="SQLite" ; Search tools JFILTER_OPTIONS="Filter Options" JTABLE_OPTIONS="Table Options" JTABLE_OPTIONS_ORDERING="Order by:" ; States assets translations ARCHIVE="Archive" ARCHIVED="Archived" PUBLISH="Publish" PUBLISHED="Published" TRASH="Trash" TRASHED="Trashed" UNPUBLISH="Unpublish" UNPUBLISHED="Unpublished" language/en-GB/com_media.ini000064400000001221152462255100011633 0ustar00; Joomla! Project ; (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 WEBSERVICE_COM_MEDIA="Media web service" WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS="Missing required parameter(s): %s" WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND="File not found: %s" WEBSERVICE_COM_MEDIA_FILE_EXISTS="File exists and overwriting not requested: %s" WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE="Invalid path or file type not allowed: %s" WEBSERVICE_COM_MEDIA_UNSUPPORTED_PARAMETER_COMBINATION="Unexpected or unsupported query parameter combination" language/fr-FR/install.xml000064400000001220152462255100011430 0ustar00<?xml version="1.0" encoding="UTF-8"?> <extension client="api" type="language" method="upgrade"> <name>French (fr-FR)</name> <tag>fr-FR</tag> <version>4.3.1</version> <creationDate>Mai 2023</creationDate> <author>Joomla! Project - French translation team</author> <authorEmail>traduction@joomla.fr</authorEmail> <authorUrl>www.joomla.fr</authorUrl> <copyright>(C) 2020 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description>fr-FR api language</description> <files> <folder>/</folder> <filename file="meta">install.xml</filename> </files> <params/> </extension> language/fr-FR/joomla.ini000064400000152352152462255100011237 0ustar00; Joomla! Project ; (C) 2020 Open Source Matters, Inc. <https://www.joomla.org> ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 ; Common boolean values ; Note: YES, NO, TRUE, FALSE are reserved words in INI format. ; Keep this string on top JERROR_PARSING_LANGUAGE_FILE=" : erreur(s) ligne(s) %s" J1="1" J2="2" J3="3" J4="4" J5="5" J6="6" J7="7" J8="8" J9="9" J10="10" J15="15" J20="20" J25="25" J30="30" J50="50" J75="75" J100="100" J150="150" J200="200" J250="250" J300="300" J500="500" JH1="H1" JH2="H2" JH3="H3" JH4="H4" JH5="H5" JH6="h6" ERROR="Erreur" INFO="Info" MESSAGE="Message" NOTICE="Annonce" WARNING="Alerte" JACTIONS="Actions pour : %s" JADMINISTRATION="Administration" JADMINISTRATOR="Administration" JALIAS="Alias" JALL="Tous" JALL_LANGUAGE="Tous" JAPI="API" JAPPLY="Enregistrer" JARCHIVED="Archivé" JASSOCIATIONS_ASC="Associations - Ascendant" JASSOCIATIONS_DESC="Associations - Descendant" JAUTHOR="Auteur" JAUTHOR_ASC="Auteur - Ascendant" JAUTHOR_DESC="Auteur - Descendant" JCANCEL="Annuler" JCATEGORIES="Catégories" JCATEGORY="Catégorie" JCATEGORY_ASC="Catégorie - Ascendant" JCATEGORY_DESC="Catégorie - Descendant" JCATEGORY_SPRINTF="Catégorie : %s" JCLEAR="Effacer" JCLIENT="Emplacement" JCLOSE="Fermer" JCONFIG_PERMISSIONS_DESC="Droits pour ce composant à moins qu'ils ne soient modifiés pour un élément spécifique." JCONFIG_PERMISSIONS_LABEL="Droits" JCURRENT="Courant" JDATE="Date" JDATE_ASC="Date - Ascendant" JDATE_DESC="Date - Descendant" JDAY="Jour" JDEFAULT="Défaut" JDEFAULTLANGUAGE="Langue - Défaut" JDETAILS="Détails" JDISABLED="Désactivé" JENABLED="Activé" JFALSE="Faux" JFEATURE="Épingler" JFEATURED="Épinglé" JFEATURED_ASC="Épinglé - Ascendant" JFEATURED_DESC="Épinglé - Descendant" JHELP="Aide" JHIDE="Masquer" JHIDEPASSWORD="Masquer le mot de passe" JINVALID_TOKEN="La dernière requête a été rejetée car elle contenait un marqueur de sécurité invalide. Veuillez actualiser la page et réessayer." JINVALID_TOKEN_NOTICE="L'identifiant de sécurité ne correspondait pas. La demande a été interrompue pour empêcher toute violation de la sécurité, veuillez réessayer." JLOGIN="Connexion" JLOGOUT="Déconnexion" JMENU_MULTILANG_WARNING_MISSING_MODULES="Il n'y a pas de module de menu administrateur pour <strong>%s</strong>. <br>Créez un menu administrateur personnalisé et un module pour chaque langue de l'administration ou, publiez un module de menu défini pour toutes langues." JMODIFY="Modifier" JMONTH="Mois" JMONTH_PUBLISHED="Mois (publié)" JNEVER="Jamais" JNEXT="Suivante" JNEXT_TITLE="Article suivant : %s" JNO="Non" JNONE="Aucun" JOFF="Désactivé" JOK="OK" JON="Activé" JONLY="Seulement" JOPEN="Ouvrir" JOPTIONS="Paramètres" JORDERINGDISABLED="Vous devez trier par ordre pour réordonner" JPREV="Précédent" JPREVIOUS="Précédente" JPREVIOUS_TITLE="Article précédent : %s" JPROTECTED="Protégé" JPUBLISHED="Publié(s)" JRECORD_NUMBER="Numéro d'enregistrement" JREGISTER="S'inscrire" JRESET="Réinitialiser" JSAVE="Enregistrer & Fermer" JSELECT="Sélectionner" JSHOW="Afficher" JSHOWPASSWORD="Afficher le mot de passe" JSITE="Site" JSITEADMIN="Sélectionnez l'interface" JSTAGE="Étape" JSTAGE_ASC="Étapes - Ascendant" JSTAGE_DESC="Étapes - Descendant" JSTATUS="Statut" JSTATUS_ASC="Statut - Ascendant" JSTATUS_DESC="Statut - Descendant" JSUBMIT="Envoyer" JTAG="Tags" JTAG_FIELD_SELECT_DESC="Sélectionner le tag à utiliser." JTOOLBAR="Barre d'outils" JTRASH="Corbeille" JTRASHED="Dans la corbeille" JTRUE="Vrai" JUNARCHIVE="Retirer du statut d'archive" JUNDEFINED="Indéfini" JUNFEATURE="Désépingler" JUNFEATURED="Désépinglé" JUNPROTECTED="Non protégé" JUNPUBLISHED="Dépublié(s)" JVERSION="Version" JVISIT_LINK="Lien visité" JVISIT_WEBSITE="Visiter le site web" JYEAR="Année" JYES="Oui" JACTION_ADMIN="Configurer les permissions et paramètres" JACTION_ADMIN_GLOBAL="Super Utilisateur" JACTION_COMPONENT_SETTINGS="Réglages du composant" JACTION_CREATE="Créer" JACTION_DELETE="Supprimer" JACTION_EDIT="Modifier" JACTION_EDIT_MODULE="Modifier le module '%s'" JACTION_EDITOWN="Modifier ses éléments" JACTION_EDITSTATE="Modifier le statut" JACTION_EDITVALUE="Modifier les valeurs des champs personnalisés" JACTION_EXECUTETRANSITION="Exécuter la transition" JACTION_LOGIN_ADMIN="Connexion à l'administration" JACTION_LOGIN_API="Connexion aux services Web" JACTION_LOGIN_OFFLINE="Accès hors-ligne" JACTION_LOGIN_SITE="Connexion au site" JACTION_MANAGE="Accès à l'administration" JACTION_MANAGEWORKFLOW="Gérer le flux de travail" JACTION_OPTIONS="Paramètres de configuration" JACTION_UNPUBLISH="Dépublier" JBROWSERTARGET_DOWNLOAD="Télécharger %s dans une nouvelle fenêtre" JBROWSERTARGET_MODAL="Ouvrir dans une fenêtre modale" JBROWSERTARGET_NEW="Ouvrir dans une nouvelle fenêtre" JBROWSERTARGET_NEW_TITLE="Ouvrir %s dans une nouvelle fenêtre" JBROWSERTARGET_PARENT="Ouvrir dans la fenêtre parente" JBROWSERTARGET_POPUP="Ouvrir en pop-up" JENFORCE_2FA_REDIRECT_MESSAGE="Vous avez été redirigé car vous devez configurer la double authentification avant de continuer." JERROR_ALERTNOAUTHOR="Vous n'avez pas les permissions requises pour accéder à ce contenu. Veuillez contacter un administrateur du site si vous pensez qu'il s'agit d'une erreur." JERROR_ALERTNOTEMPLATE="Le template de cet affichage n'est pas disponible." JERROR_AN_ERROR_HAS_OCCURRED="Une erreur s'est produite" JERROR_CORE_CREATE_NOT_PERMITTED="Création non autorisée" JERROR_CORE_DELETE_NOT_PERMITTED="Suppression non autorisée" JERROR_COULD_NOT_FIND_TEMPLATE="Impossible de trouver le template \"%s\"." JERROR_INVALID_CONTROLLER="Contrôleur invalide" JERROR_INVALID_CONTROLLER_CLASS="Classe de contrôleur invalide" JERROR_LAYOUT_PREVIOUS_ERROR="Erreur précédente" JERROR_LOADFILE_FAILED="Erreur de chargement du fichier de formulaire" JERROR_LOADING_MENUS="Erreur de chargement des menus: %s" JERROR_LOGIN_DENIED="Vous ne pouvez pas accéder à l'administration de ce site." JERROR_NO_ITEMS_SELECTED="Aucun élément sélectionné." JERROR_NOLOGIN_BLOCKED="Connexion refusée ! Soit votre compte a été bloqué, soit vous ne l'avez pas encore activé." JERROR_SAVE_FAILED="Impossible d'enregistrer les données. Erreur: %s" JERROR_SENDING_EMAIL="L'e-mail ne peut pas être envoyé." JERROR_SESSION_STARTUP="Erreur lors de l'initialisation de la session." JFIELD_ACCESS_DESC="Niveau d'accès du groupe et des groupes parents autorisés à voir cet élément." JFIELD_ACCESS_LABEL="Accès" JFIELD_ALIAS_DESC="L'alias est utilisé dans l'URL SEF. Si le champ est laissé vide, il sera généré à partir du titre." JFIELD_ALIAS_LABEL="Alias" JFIELD_ALIAS_PLACEHOLDER="Auto-généré à partir du titre" JFIELD_ALT_COMPONENT_LAYOUT_DESC="Utiliser la mise en page propre aux fichiers du composant ou la remplacer par celle générée par les fichiers du template." JFIELD_ALT_LAYOUT_LABEL="Affichage" ; Deprecated, will be removed with 5.0 JFIELD_ALT_MODULE_LAYOUT_DESC="Utiliser la mise en page propre aux fichiers du module ou la remplacer par celle générée par les fichiers du template." JFIELD_ALT_PAGE_TITLE_DESC="Titre alternatif optionnel, à utiliser pour une génération spécifique de la balise TITLE." JFIELD_ALT_PAGE_TITLE_LABEL="Titre alternatif" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_DESC="Asset ID" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_LABEL="Asset ID" JFIELD_BASIC_LOGIN_DESCRIPTION_LABEL="Texte de connexion" JFIELD_BASIC_LOGIN_DESCRIPTION_SHOW_LABEL="Afficher le texte" JFIELD_BASIC_LOGOUT_DESCRIPTION_LABEL="Texte de déconnexion" JFIELD_BASIC_LOGOUT_DESCRIPTION_SHOW_LABEL="Description de déconnexion" JFIELD_CATEGORY_DESC="Il est possible de sélectionner une catégorie existante ou saisir une nouvelle catégorie en tapant le nom dans le champ et appuyer sur la touche Entrée." JFIELD_COLOR_ERROR_CONVERT_HSL="Impossible de convertir la valeur HSL" JFIELD_COLOR_ERROR_CONVERT_HUE="Impossible de convertir la valeur de la teinte" JFIELD_COLOR_ERROR_NO_COLOR="Aucune valeur de couleur disponible" JFIELD_COLOR_ERROR_WRONG_FORMAT="Format erroné" JFIELD_COLOR_LABEL_SLIDER_ALPHA="Curseur Alpha" JFIELD_COLOR_LABEL_SLIDER_HUE="Curseur de teinte" JFIELD_COLOR_LABEL_SLIDER_INPUT="Valeur de couleur sélectionnée" JFIELD_COLOR_LABEL_SLIDER_LIGHT="Curseur de luminosité" JFIELD_COLOR_LABEL_SLIDER_SATURATION="Curseur de saturation" JFIELD_COLOR_SELECT="Sélectionner une couleur" JFIELD_COLOR_TRANSPARENT="Aucun couleur, transparent" JFIELD_COLOR_VALUE="Couleur avec la valeur hexadécimal" JFIELD_DISPLAY_READONLY_LABEL="Affichage quand lecture seule" JFIELD_ENABLED_DESC="Statut d'activation de cet élément." JFIELD_FIELDS_CATEGORY_DESC="Sélectionner la catégorie assignée à ce champ" JFIELD_LANGUAGE_DESC="Assigner cet article à une langue." JFIELD_LANGUAGE_LABEL="Langue" JFIELD_LOGIN_IMAGE_DESC="Image affichée sur la page de connexion." JFIELD_LOGIN_IMAGE_LABEL="Image de connexion" JFIELD_LOGIN_REDIRECT_URL_DESC="Si une URL est saisie ici, les utilisateurs y seront redirigés après la connexion.<br>L'URL doit être interne (exemple : index.php?Itemid=999)." JFIELD_LOGIN_REDIRECT_URL_LABEL="Redirection de connexion" JFIELD_LOGOUT_IMAGE_DESC="Image à afficher sur la page de déconnexion" JFIELD_LOGOUT_IMAGE_LABEL="Image de déconnexion" JFIELD_LOGOUT_REDIRECT_PAGE_DESC="Sélectionnez ou créez le lien de menu correspondant à la page vers laquelle vous souhaitez rediriger l'utilisateur après sa déconnexion du site. La valeur par défaut redirigera vers la même page." JFIELD_LOGOUT_REDIRECT_PAGE_LABEL="Redirection après déconnexion" JFIELD_LOGOUT_REDIRECT_URL_DESC="Si une URL est saisie ici, les utilisateurs y seront redirigés après la déconnexion.<br>L'URL doit être interne (exemple : index.php?Itemid=999)." JFIELD_LOGOUT_REDIRECT_URL_LABEL="Redirection de déconnexion" JFIELD_MEDIA_ALT_CHECK_DESC_LABEL="Image décorative - Aucune description requise" JFIELD_MEDIA_ALT_CHECK_LABEL="Aucune description" JFIELD_MEDIA_ALT_LABEL="Description d'image (balise alt)" JFIELD_MEDIA_DOWNLOAD_CHECK_DESC_LABEL="Utiliser un lien de téléchargement" JFIELD_MEDIA_DOWNLOAD_CHECK_LABEL="Télécharger" JFIELD_MEDIA_DOWNLOAD_FILE="Télécharger {file}" ; Do not translate the text between the {} JFIELD_MEDIA_EMBED_CHECK_DESC_LABEL="Utiliser les éléments natifs audio, vidéo ou objet" JFIELD_MEDIA_EMBED_CHECK_LABEL="Embed" JFIELD_MEDIA_CLASS_LABEL="Classe de l'image" JFIELD_MEDIA_FIGURE_CAPTION_LABEL="Légende de la figure" JFIELD_MEDIA_FIGURE_CLASS_LABEL="Classe de figure" JFIELD_MEDIA_HEIGHT_LABEL="Hauteur" JFIELD_MEDIA_LAZY_LABEL="Images chargées progressivement (lazyload)" JFIELD_MEDIA_SUMMARY_LABEL="Données Additionnelles" JFIELD_MEDIA_WIDTH_LABEL="Largeur" JFIELD_MEDIA_TITLE_LABEL="Titre" JFIELD_MEDIA_UNSUPPORTED="Vous n'avez pas de plugin {extension}, mais vous pouvez {tag} télécharger le fichier {extension} .</a>" ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_COUNTER="{remaining} caractères restants sur {maxlength} caractères." ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_DESC="La métadonnée 'description' permet d'indexer une description du contenu de la page afin d'améliorer son référencement (~250 caractères).<br />Lorsque le contenu est indexé par un moteur dans les résultats d'une recherche, le texte de cette métadonnée est affiché sous le titre." JFIELD_META_DESCRIPTION_LABEL="Description" JFIELD_META_KEYWORDS_DESC="La métadonnée 'keywords' permet d'indexer une série de mots clés ou d'expressions (séparés par une virgule) liés au thème du contenu." JFIELD_META_KEYWORDS_LABEL="Mots clés" JFIELD_META_RIGHTS_DESC="La métadonnée 'rights' permet d'indexer les droits légaux des contenus." JFIELD_META_RIGHTS_LABEL="Droits légaux" JFIELD_METADATA_AUTHOR_DESC="La métadonnée 'author' permet d'indexer l'auteur du contenu." JFIELD_METADATA_RIGHTS_DESC="Droits de publication sur cet article." JFIELD_METADATA_RIGHTS_LABEL="Droits" JFIELD_METADATA_ROBOTS_DESC="La métadonnée 'robots' permet de donner des instructions aux robots :<ul><li>Index, Follow : indexe le contenu et ses liens</li><li>No index, Follow : n'indexe pas le contenu mais ses liens</li><li>Index, No follow : indexe le contenu mais pas ses liens</li><li>No index, No follow : n'indexe ni le contenu ni ses liens</li></ul>" JFIELD_METADATA_ROBOTS_LABEL="Robots" JFIELD_MODULE_LANGUAGE_DESC="Assigner ce module à une langue." JFIELD_NAME_DESC="Le nom sera utilisé pour identifier le champ. Si laissé vide Joomla remplira une valeur par défaut à partir du titre." JFIELD_NAME_LABEL="Nom" JFIELD_NAME_PLACEHOLDER="Auto-généré à partir du titre" JFIELD_NOTE_DESC="Note" JFIELD_NOTE_LABEL="Note" JFIELD_OPTION_NONE="Aucun" JFIELD_ORDERING_DESC="Ordre d'affichage :" JFIELD_ORDERING_LABEL="Tri" JFIELD_PARAMS_LABEL="Paramètres" JFIELD_PASSWORD_INDICATE_COMPLETE="Mot de passe accepté" JFIELD_PASSWORD_INDICATE_INCOMPLETE="Le mot de passe ne répond pas aux exigences du site." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N_ONE="Le mot de passe ne contient pas assez de chiffres. Au moins 1 chiffre est requis." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N_OTHER="Le mot de passe ne contient pas assez de chiffres. Au moins %s chiffres sont requis." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N_ONE="Le mot de passe ne contient pas assez de caractères minuscules. Au moins 1 caractère minuscule est requis." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N_OTHER="Le mot de passe ne contient pas assez de caractères minuscules. Au moins %s caractères minuscules sont requis." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N_ONE="Le mot de passe ne contient pas assez de symboles (tel !@#$). Au moins 1 symbole est requis." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N_OTHER="Le mot de passe ne contient pas assez de symboles (tel !@#$). Au moins %s symboles sont requis." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N_ONE="Le mot de passe ne contient pas assez de caractères majuscules. Au moins 1 caractère majuscule est requis." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N_OTHER="Le mot de passe ne contient pas assez de caractères majuscules. Au moins %s caractères majuscules sont requis." JFIELD_PASSWORD_RULES_CHARACTERS="Caractères : %d" JFIELD_PASSWORD_RULES_DIGITS="Nombres : %d" JFIELD_PASSWORD_RULES_LOWERCASE="Minuscules : %d" JFIELD_PASSWORD_RULES_MINIMUM_REQUIREMENTS="<strong>Exigences minimales</strong> – %s" JFIELD_PASSWORD_RULES_SYMBOLS="Symboles : %d" JFIELD_PASSWORD_RULES_UPPERCASE="Majuscules : %d" JFIELD_PASSWORD_SPACES_IN_PASSWORD="Le mot de passe ne doit pas contenir d'espaces au début et à la fin." JFIELD_PASSWORD_TOO_LONG="Le mot de passe est trop long. Les mots de passe doivent contenir moins de 100 caractères." JFIELD_PASSWORD_TOO_SHORT_N="Le mot de passe est trop court. Les mots de passe doivent contenir au moins %s caractères." JFIELD_PLG_SEARCH_ALL_DESC="Intégrer les éléments publiés dans la recherche." JFIELD_PLG_SEARCH_ALL_LABEL="Recherche dans Publiés" JFIELD_PLG_SEARCH_ARCHIVED_DESC="Intégrer les éléments archivés dans la recherche." JFIELD_PLG_SEARCH_ARCHIVED_LABEL="Recherche dans Archivés" JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC="Nombre maximum de résultats à afficher dans une recherche." JFIELD_PLG_SEARCH_SEARCHLIMIT_LABEL="Nombre de résultats" JFIELD_PUBLISHED_DESC="Définir le statut de publication." JFIELD_READMORE_DESC="Vous pouvez attribuer un texte personnalisé au lien 'Lire la suite...'." JFIELD_READMORE_LABEL="Texte Lire la suite..." JFIELD_SPACER_LABEL="<span style=\"width:auto\"><hr></span>" JFIELD_TITLE_DESC="Titre" JFIELD_VERSION_HISTORY_DESC="Ce bouton permet d'ouvrir une fenêtre pour visualiser des versions anciennes de cet élément." JFIELD_VERSION_HISTORY_LABEL="Versions précédentes" JFIELD_VERSION_HISTORY_SELECT="Visualiser les versions précédentes" JGLOBAL_ACTION_PERMISSIONS_LABEL="Droits" JGLOBAL_ADD_CUSTOM_CATEGORY="Ajouter une nouvelle catégorie" JGLOBAL_ALL_ARTICLE="Niveaux max. d'articles" JGLOBAL_ALL_LIST="Niveaux max. dans une liste" JGLOBAL_ALLOW_COMMENTS_DESC="Si oui, la fonction 'Commentaires sur l'article' sera activée et les utilisateurs pourront les voir et en ajouter." JGLOBAL_ALLOW_COMMENTS_LABEL="Autoriser les commentaires" JGLOBAL_ALLOW_RATINGS_DESC="Si oui, la fonction 'Vote sur l'article' sera activée et les utilisateurs pourront les voir et y participer." JGLOBAL_ALLOW_RATINGS_LABEL="Autoriser les votes" JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_LABEL="Longueur de l'introduction" JGLOBAL_ARCHIVE_OPTIONS="Archives" JGLOBAL_ARTICLE_COUNT_DESC="Afficher/Masquer le nombre d'articles dans une catégorie." JGLOBAL_ARTICLE_COUNT_LABEL="Nombre d'articles" JGLOBAL_ARTICLE_MANAGER_ORDER="Tri" JGLOBAL_ARTICLE_MANAGER_REVERSE_ORDER="Ordre inverse" JGLOBAL_ARTICLE_ORDER_DESC="Ordre dans lequel les articles doivent être affichés." JGLOBAL_ARTICLE_ORDER_LABEL="Ordre des articles" JGLOBAL_ARTICLES="Articles" JGLOBAL_ASSOC_NOT_POSSIBLE="Pour définir des associations, s'assurer que la langue de cet élément n'est pas assignée à \"Toutes\"." JGLOBAL_ASSOCIATIONS_CONTENTLANGUAGE_WARNING="Certains éléments associés sont affectés à la langue de contenu <strong>%s</strong> mais cette langue de contenu est mise à la corbeille ou supprimée." JGLOBAL_ASSOCIATIONS_NEW_ITEM_WARNING="Pour créer des associations, d'abord sauvegarder l'item." JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON="Propager" JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED="Échec de la propagation des associations. Il faudra peut-être les sélectionner ou les créer manuellement." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_ALL="Toutes les associations existantes ont été définies." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_NONE="Il n'y a aucune association à propager." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_SOME="Des associations ont été définies pour : %s" JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP="Propage les associations existantes de cet item." JGLOBAL_ASSOCIATIONS_RESET_WARNING="La langue a été changée. Si vous sauvegardez à nouveau cet élément, les associations disponibles seront réinitialisées. Si cela n'était pas votre intention, fermez l'élément." JGLOBAL_AUTH_ACCESS_DENIED="Accès refusé" JGLOBAL_AUTH_ACCESS_GRANTED="Accès autorisé" JGLOBAL_AUTH_BIND_FAILED="Échec de liaison au serveur LDAP" JGLOBAL_AUTH_CANCEL="Authentification annulée" JGLOBAL_AUTH_CURL_NOT_INSTALLED="Curl n'est pas installé" JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED="Vous devez indiquer un mot de passe!" JGLOBAL_AUTH_FAIL="Authentification échouée" JGLOBAL_AUTH_FAILED="Échec de l'authentification : %s" JGLOBAL_AUTH_INCORRECT="Identifiant/Mot de passe incorrect" JGLOBAL_AUTH_INVALID_PASS="Le mot de passe ne correspond pas au nom d'utilisateur, ou vous n'avez pas encore de compte." JGLOBAL_AUTH_INVALID_SECRETKEY="La clé secrète d'authentification multifacteurs n'est pas valide." JGLOBAL_AUTH_NO_REDIRECT="Impossible d'effectuer la redirection sur le serveur : %s" JGLOBAL_AUTH_NO_USER="Le mot de passe ne correspond pas au nom d'utilisateur, ou vous n'avez pas encore de compte." JGLOBAL_AUTH_NOT_CONNECT="Impossible de se connecter au service d'authentification." JGLOBAL_AUTH_NOT_CREATE_DIR="Impossible de créer le répertoire FileStore %s. Veuillez vérifier que vous possédez les droits d'écriture dans le répertoire parent." JGLOBAL_AUTH_PASS_BLANK="Le système LDAP exige un mot de passe" JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Résultat inconnu. Accès refusé" JGLOBAL_AUTH_USER_NOT_FOUND="Impossible de trouver l'utilisateur" JGLOBAL_AUTHOR_ALPHABETICAL="Alphabétique des auteurs" JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL="Alphabétique inverse des auteurs" JGLOBAL_AUTO="Automatique" JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND="Impossible de trouver la destination parente pour ce déplacement." JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND="Impossible de trouver la ligne de destination pour ce déplacement." JGLOBAL_BATCH_PROCESS="Traitement" JGLOBAL_BATCH_WORKFLOW_STATE_ROW_NOT_FOUND="Impossible de trouver la ligne de destination pour ce changement de statut." JGLOBAL_BLOG="Blog" JGLOBAL_BLOG_CLASS="Classe d'article" JGLOBAL_BLOG_CLASS_LEADING="Classe de l'article principal" JGLOBAL_BLOG_LAYOUT_OPTIONS="Affichage du Blog" JGLOBAL_CATEGORIES_OPTIONS="Catégories" JGLOBAL_CATEGORY_LAYOUT_DESC="Affichage" JGLOBAL_CATEGORY_LAYOUT_LABEL="Mise en page" JGLOBAL_CATEGORY_MANAGER_ORDER="Options de tri de la catégorie" JGLOBAL_CATEGORY_NOT_FOUND="Catégorie introuvable" JGLOBAL_CATEGORY_OPTIONS="Paramètres" JGLOBAL_CATEGORY_ORDER_DESC="Ordre d'affichage des catégories." JGLOBAL_CATEGORY_ORDER_LABEL="Options de tri de la catégorie" JGLOBAL_CENTER="Centre" JGLOBAL_CHECK_ALL="Tout cocher" JGLOBAL_CHOOSE_CATEGORY_DESC="Sélectionner ou créer une catégorie à afficher." JGLOBAL_CHOOSE_CATEGORY_LABEL="Sélection de catégorie" JGLOBAL_CHOOSE_COMPONENT_DESC="Choisir un composant dans la liste" JGLOBAL_CHOOSE_COMPONENT_LABEL="Choisir un composant" JGLOBAL_CLICK_TO_SORT_THIS_COLUMN="Cliquez sur l'icône pour trier la colonne" JGLOBAL_CLICK_TO_TOGGLE_STATE="Cliquer sur l'icône pour changer le statut." JGLOBAL_CONFIRM_DELETE="Êtes-vous sûr de vouloir supprimer ces éléments ? Votre confirmation les supprimera définitivement !" JGLOBAL_COPY="(copie)" JGLOBAL_CREATED="Date de création" JGLOBAL_CREATED_DATE="Date de création" JGLOBAL_CUSTOM_CATEGORY="Nouvelles catégories" JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC="Activer la création ou la modification de champs personnalisés." JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL="Intégration des champs" JGLOBAL_DATE_FORMAT_DESC="Format optionnel d'affichage de la date. Par exemple: 'D, j F Y' pour 'Vendredi, 29 Avril 2016 '. Voir https://php.net/date . Si laissé vide, la valeur de DATE_FORMAT_LC1 de votre fichier de langue sera utilisée." JGLOBAL_DATE_FORMAT_LABEL="Format de la date" JGLOBAL_DESCRIPTION="Description" JGLOBAL_DISPLAY_NUM="Afficher #" JGLOBAL_DISPLAY_SELECT_DESC="Afficher/Masquer la liste déroulante du sélecteur d'affichage." JGLOBAL_DISPLAY_SELECT_LABEL="Sélecteur d'affichage" JGLOBAL_EDIT_ITEM="Modifier l'élément" JGLOBAL_EDIT_PREFERENCES="Modifier les préférences" JGLOBAL_EMAIL="E-mail" JGLOBAL_EMAIL_DOMAIN_NOT_ALLOWED="Le domaine de mail <strong>%s</strong> n'est pas autorisé. Merci de saisir une autre adresse mail." JGLOBAL_EMPTY_CATEGORIES_DESC="Afficher/Masquer les catégories qui ne contiennent ni article, ni sous-catégorie." JGLOBAL_EMPTY_CATEGORIES_LABEL="Catégories vides" JGLOBAL_ERROR_INSUFFICIENT_BATCH_INFORMATION="Information insuffisante pour effectuer l'opération par lots" JGLOBAL_FEED_SHOW_READMORE_DESC="Afficher les liens \"Lire la suite\" dans les fils d'actualité si le texte d'introduction est affiché." JGLOBAL_FEED_SHOW_READMORE_LABEL="Lien \"Lire la suite\"" JGLOBAL_FEED_SUMMARY_DESC="Le paramètre 'Texte d'introduction' n'affiche que le texte d'introduction des articles dans les fils d'actualité.<br />Le paramètre 'Texte intégral' affiche l'article complet dans les fils d'actualité." JGLOBAL_FEED_SUMMARY_LABEL="Inclure dans le flux" JGLOBAL_FEED_TITLE="Fils d'actualité" JGLOBAL_FIELD_ADD="Ajouter" JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_DESC="Sélectionnez la catégorie parente des sous-catégories à afficher." JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL="Sélectionner la catégorie principale" JGLOBAL_FIELD_CATEGORIES_DESC_DESC="Saisissez du texte dans ce champ pour remplacer la description d'origine de la catégorie principale." JGLOBAL_FIELD_CATEGORIES_DESC_LABEL="Description alternative" JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Saisissez un nom dans ce champ pour remplacer celui de l'auteur de l'article." JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Alias" JGLOBAL_FIELD_CREATED_BY_DESC="Auteur de l'article." JGLOBAL_FIELD_CREATED_BY_LABEL="Créé par (auteur)" JGLOBAL_FIELD_CREATED_DESC="Date de création de l'élément." JGLOBAL_FIELD_CREATED_LABEL="Date de création" JGLOBAL_FIELD_FIELD_CACHETIME_DESC="Durée en minutes entre deux actualisation du cache." JGLOBAL_FIELD_FIELD_ORDERING_DESC="Ordre d'affichage des éléments" JGLOBAL_FIELD_FIELD_ORDERING_LABEL="Ordre" JGLOBAL_FIELD_GROUPS="Groupes de champs" JGLOBAL_FIELD_ID_DESC="Numéro d'enregistrement (identification) dans la base de données." JGLOBAL_FIELD_ID_LABEL="Id" JGLOBAL_FIELD_LAYOUT_DESC="Choisissez dans la liste déroulante la mise en page à appliquer." JGLOBAL_FIELD_LAYOUT_LABEL="Mise en page" JGLOBAL_FIELD_MODIFIED_BY_DESC="L'utilisateur qui a effectué la dernière modification de l'article." JGLOBAL_FIELD_MODIFIED_BY_LABEL="Modifié par" JGLOBAL_FIELD_MODIFIED_LABEL="Date de modification" JGLOBAL_FIELD_MOVE="Déplacer" JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_DESC="Nombre de catégories à afficher pour chaque niveau." JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_LABEL="Nombre de catégories" JGLOBAL_FIELD_PUBLISH_DOWN_DESC="Indiquez si vous le souhaitez une date de fin de publication.<br />Si vous n'indiquez rien, l'article ne sera pas automatiquement au statut 'non publié' grâce à la valeur '0000-00-00 00:00:00'" JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Fin de publication" JGLOBAL_FIELD_PUBLISH_UP_DESC="Indiquez si vous le souhaitez une date de début de publication.<br />Si vous n'indiquez rien, la date de création est utilisée." JGLOBAL_FIELD_PUBLISH_UP_LABEL="Début de publication" JGLOBAL_FIELD_REMOVE="Effacer" JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC="Afficher la description de la catégorie de premier niveau ou la remplacer par le texte du champ de description du lien de menu. Si vous utilisez la catégorie racine comme principale, vous devez remplir le champ de description." JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL="Description de la catégorie du niveau supérieur" JGLOBAL_FIELD_VERSION_NOTE_DESC="Saisir une note facultative pour cette version de cet élément." JGLOBAL_FIELD_VERSION_NOTE_LABEL="Note de version" JGLOBAL_FIELDS="Champs" JGLOBAL_FIELDS_TITLE="Champs personnalisés" JGLOBAL_FIELDSET_ADVANCED="Paramètres avancés" JGLOBAL_FIELDSET_ASSOCIATIONS="Associations" JGLOBAL_FIELDSET_BASIC="Paramètres" JGLOBAL_FIELDSET_CONTENT="Contenu" JGLOBAL_FIELDSET_DESCRIPTION="Description" JGLOBAL_FIELDSET_DISPLAY_OPTIONS="Affichage" JGLOBAL_FIELDSET_GLOBAL="Options principales" JGLOBAL_FIELDSET_IMAGE_OPTIONS="Images" JGLOBAL_FIELDSET_INTEGRATION="Intégration" JGLOBAL_FIELDSET_METADATA_OPTIONS="Métadonnées" JGLOBAL_FIELDSET_OPTIONS="Paramètres" JGLOBAL_FIELDSET_PUBLISHING="Publication" JGLOBAL_FILTER_ATTRIBUTES_DESC="3. Saisissez les attributs supplémentaires en séparant chaque nom d'attribut par un espace ou une virgule. Par exemple : <em>classe,titre,id</em>." JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filtrer les attributs<sup>3</sup>" JGLOBAL_FILTER_CLIENT="- Emplacement -" JGLOBAL_FILTER_FIELD_DESC="Afficher/Masquer le champ de filtre dans l'affichage en liste des articles." JGLOBAL_FILTER_FIELD_LABEL="Champ filtre" JGLOBAL_FILTER_GROUPS_DESC="Définit les groupes d'utilisateurs auxquels seront appliqués les filtres. Les autres groupes ne seront pas filtrés." JGLOBAL_FILTER_GROUPS_LABEL="Filtrer les groupes" JGLOBAL_FILTER_TAGS_DESC="2. Saisissez les balises supplémentaires en séparant chaque nom de balise par un espace ou une virgule. Par exemple : <em>p,div,span</em>." JGLOBAL_FILTER_TAGS_LABEL="Filtrer les balises<sup>2</sup>" JGLOBAL_FILTER_TYPE_DESC="<p>1. La liste interdite autorise toutes les balises et tous les attributs, à l'exception de ce qui est spécifié.<br><strong>--</strong> Les balises de la liste des interdictions par défaut sont : 'applet', 'body', 'bgsound', 'base', 'basefont', 'canvas', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'<br><strong>--</strong> Les attributs de la liste des interdictions par défaut sont : ''action', 'background', 'codebase', 'dynsrc', 'lowsrc', 'formaction'<br><strong>--</strong> Vous pouvez interdire des balises et des attributs supplémentaires en les indiquant dans les champs à disposition, séparés par une virgule.<br><strong>--</strong> La liste personnalisée d'interdictions vous permet de remplacer la liste d'interdictions par défaut. Ajoutez les balises et attributs à interdire dans les champs 'Balises de filtre' et 'Attributs de filtre'.</p><p>La liste autorisée n'autorise que les balises répertoriées dans les champs 'Balises de filtre' et 'Attributs de filtre'.</p><p>Pas de HTML supprime toutes les balises HTML du contenu lorsqu'il est enregistré.</p><p>Veuillez noter que ces paramètres fonctionnent quel que soit l'éditeur que vous utilisez<br>Même si vous utilisez un éditeur WYSIWYG, les paramètres de filtrage permettent de supprimer les balises et les attributs supplémentaires avant d'enregistrer les contenus dans la base de données.</p>" JGLOBAL_FILTER_TYPE_LABEL="Filtrer les types<sup>1</sup>" JGLOBAL_FILTERED_BY="Filtré par :" JGLOBAL_FULL_TEXT="Article complet" JGLOBAL_GT=">" JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC="Nombre maximum d'anciennes versions à conserver. Si '0', toutes les anciennes versions seront conservées." JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL="Versions maximum" JGLOBAL_HITS="Clics" JGLOBAL_HITS_ASC="Clics - Ascendant" JGLOBAL_HITS_DESC="Clics - Descendant" JGLOBAL_INHERIT="Hérité" JGLOBAL_INTEGRATION_LABEL="Intégration" JGLOBAL_INTRO_TEXT="Texte d'intro" JGLOBAL_ISFREESOFTWARE="/%s est un logiciel libre publié sous la <a href=\"https://www.gnu.org/licenses/gpl-2.0.html\" target=\"_blank\" rel=\"noopener noreferrer\">licence publique générale GNU</a>." JGLOBAL_ITEM_FEATURE="Article épinglé" JGLOBAL_ITEM_UNFEATURE="Article désépinglé" JGLOBAL_JOOA11Y="Vérification d'accessibilité" JGLOBAL_KEEP_TYPING="Poursuivre la saisie..." JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM="Le pack de langue ne correspond pas à cette version de Joomla. Certaines chaînes peuvent être manquantes et seront affichées en anglais." JGLOBAL_LEARN_MORE="En savoir plus" JGLOBAL_LEAST_HITS="Moins populaires" JGLOBAL_LEFT="Gauche" JGLOBAL_LINK_AUTHOR_LABEL="Lien vers sa page de contact" JGLOBAL_LINK_CATEGORY_DESC="Activer/Désactiver le lien sur le titre de la catégorie<br />vers l'affichage en liste de ses articles." JGLOBAL_LINK_CATEGORY_LABEL="Titre cliquable" JGLOBAL_LINK_PARENT_CATEGORY_DESC="Activer/Désactiver le lien sur le titre de la catégorie parente<br />vers l'affichage en liste de ses articles." JGLOBAL_LINK_PARENT_CATEGORY_LABEL="Lien de catégorie parente" JGLOBAL_LINKED_INTRO_IMAGE_LABEL="Image d'introduction liée" JGLOBAL_LINKED_TITLES_DESC="Activer/Désactiver le lien sur le titre vers l'article complet.<br />Utile en affichage de type blog et dans un module (news)." JGLOBAL_LINKED_TITLES_LABEL="Titre cliquable" JGLOBAL_LIST="Liste" JGLOBAL_LIST_ALIAS="Alias : %s" JGLOBAL_LIST_ALIAS_NOTE="(<span>Alias</span>: %s, <span>Note</span> : %s)" JGLOBAL_LIST_AUTHOR_DESC="Afficher/Masquer l'auteur de l'article l'affichage en liste." JGLOBAL_LIST_AUTHOR_LABEL="Auteur" JGLOBAL_LIST_HITS_DESC="Afficher/Masquer le nombre d'affichages de l'article dans l'affichage en liste." JGLOBAL_LIST_HITS_LABEL="Clics" JGLOBAL_LIST_LAYOUT_OPTIONS="Listes" JGLOBAL_LIST_LIMIT="Sélectionnez le nombre d’éléments par page." JGLOBAL_LIST_NAME="(<span>Nom</span> : %s)" JGLOBAL_LIST_NAME_NOTE="(<span>Nom</span> : %s, <span>Note</span> : %s)" JGLOBAL_LIST_NOTE="(<span>Note</span> : %s)" JGLOBAL_LIST_RATINGS_DESC="Afficher/masquer l'évaluation des articles dans une liste d'articles." JGLOBAL_LIST_RATINGS_LABEL="Afficher l'évaluation dans une liste" JGLOBAL_LIST_TITLE_DESC="Afficher/Masquer le titre des catégories dans l'affichage en liste." JGLOBAL_LIST_TITLE_LABEL="Nom de la catégorie" JGLOBAL_LIST_VOTES_DESC="Afficher/masquer le vote des articles dans une liste d'articles." JGLOBAL_LIST_VOTES_LABEL="Afficher les votes dans les listes" JGLOBAL_LOOKING_FOR="Vue de" JGLOBAL_LT="<" JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC="Nombre de niveaux de sous catégories à afficher." JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL="Niveaux de sous catégories" JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT="Taille maximale d'envoi : <strong>%s</strong>" JGLOBAL_MAXLEVEL_DESC="Nombre de niveaux de sous-catégories à afficher." JGLOBAL_MAXLEVEL_LABEL="Niveaux de sous catégories" JGLOBAL_MENU_SELECTION="Sélection du menu" JGLOBAL_MODIFIED="Modifié" JGLOBAL_MODIFIED_DATE="Date de modification" JGLOBAL_MOST_HITS="Les plus populaires" JGLOBAL_MOST_RECENT_FIRST="Les plus récents en premier" JGLOBAL_MULTI_LEVEL="Multi-niveaux" JGLOBAL_NAME_ASC="Nom - Ascendant" JGLOBAL_NAME_DESC="Nom - Descendant" JGLOBAL_NEWITEMSFIRST_DESC="Les nouveaux éléments sont classés en premier par défaut. Vous ne pouvez modifier l'ordre qu'après enregistrement." JGLOBAL_NEWITEMSLAST_DESC="Les nouveaux éléments sont classés en dernier par défaut. Vous ne pouvez modifier l'ordre qu'après enregistrement." JGLOBAL_NO_ITEM_SELECTED="Aucun élément sélectionné" JGLOBAL_NO_MATCHING_RESULTS="Aucun résultat correspondant" JGLOBAL_NO_ORDER="Aucun ordre" JGLOBAL_NONAPPLICABLE="N/A" JGLOBAL_NUM_INTRO_ARTICLES_DESC="Nombre d'articles dont seule l'introduction doit être affichée.<br />Les articles sont présentés en une ou plusieurs colonnes.<br />En général, cet affichage est utilisé pour l'ensemble des articles." JGLOBAL_NUM_INTRO_ARTICLES_LABEL="Introduction des articles" JGLOBAL_NUM_LEADING_ARTICLES_DESC="Nombre d'articles en pleine largeur à afficher dans le blog." JGLOBAL_NUM_LEADING_ARTICLES_LABEL="Articles en pleine largeur" JGLOBAL_NUM_LINKS_DESC="Nombre d'articles dont seul le titre doit être affiché, sous forme de lien.<br />Attention, ces articles ne sont pas affichés dans le blog ce qui peut perturber l'utilisateur." JGLOBAL_NUM_LINKS_LABEL="Titres avec lien" JGLOBAL_NUMBER_CATEGORY_ITEMS_DESC="Afficher/Masquer le nombre d'articles dans une catégorie." JGLOBAL_NUMBER_CATEGORY_ITEMS_LABEL="Nombre d'Articles" JGLOBAL_NUMBER_ITEMS_LIST_DESC="Nombre d'articles par défaut à lister sur une page." JGLOBAL_NUMBER_ITEMS_LIST_LABEL="# Articles à lister" JGLOBAL_OLDEST_FIRST="Le plus ancien en premier" JGLOBAL_OPENS_IN_A_NEW_WINDOW="S'ouvre dans une nouvelle fenêtre" JGLOBAL_ORDER_ASCENDING="Ascendant" JGLOBAL_ORDER_DESCENDING="Descendant" JGLOBAL_ORDER_DIRECTION_DESC="Ordre : Descendant = du premier au dernier - Ascendant = du dernier au premier." JGLOBAL_ORDER_DIRECTION_LABEL="Direction" JGLOBAL_ORDERING="Ordre des articles" JGLOBAL_ORDERING_DATE_DESC="Si les articles sont classés par date, le type de date à utiliser." JGLOBAL_ORDERING_DATE_LABEL="Classement par date" JGLOBAL_OTPMETHOD_NONE="Désactiver l'authentification multifacteurs" JGLOBAL_PAGINATION_DESC="Afficher/Masquer le support de pagination affichant des liens au bas des pages pour permettre de naviguer entre les pages d'un même contenu.<br />La pagination est nécessaire si les informations sont réparties sur plusieurs pages." JGLOBAL_PAGINATION_LABEL="Pagination" JGLOBAL_PAGINATION_RESULTS_DESC="Afficher/Masquer le résumé de la pagination, par exemple, \"Page 1 sur 4\"." JGLOBAL_PAGINATION_RESULTS_LABEL="Résumé de la pagination" JGLOBAL_PASSWORD="Mot de passe" JGLOBAL_PASSWORD_RESET_REQUIRED="Vous devez réinitialiser votre mot de passe avant de continuer." JGLOBAL_PERMISSIONS_ANCHOR="Définir les droits" JGLOBAL_PREVIEW="Prévisualisation" JGLOBAL_PREVIEW_POSITION="<span>Position :</span> %s" JGLOBAL_PREVIEW_STYLE="<span>Style :</span> %s" JGLOBAL_PUBLISHED_DATE="Date de publication" JGLOBAL_RANDOM_ORDER="Ordre aléatoire" JGLOBAL_RATINGS="Évaluations" JGLOBAL_RATINGS_ASC="Évaluations - Ascendant" JGLOBAL_RATINGS_DESC="Évaluations - Descendant" JGLOBAL_RECORD_HITS_DISABLED="L'enregistrement des accès est désactivé." JGLOBAL_RECORD_HITS_LABEL="Enregistrer les affichages" JGLOBAL_RECORD_NUMBER="ID d'enregistrement : %d" JGLOBAL_REMEMBER_ME="Se souvenir de moi" JGLOBAL_REPEATABLE_FIELDS_TABLE_CAPTION="Champs répétables" JGLOBAL_REVERSE_ORDERING="Ordre inverse des articles" JGLOBAL_RIGHT="Droite" JGLOBAL_ROOT="Racine" JGLOBAL_ROOT_PARENT="- Pas de parent -" JGLOBAL_SAVE_HISTORY_OPTIONS_DESC="Sauvegarder automatiquement ou non les versions anciennes d'un élément. Si oui, les versions anciennes seront sauvegardées automatiquement. Quand un élément sera modifié, une version précédente pourra être rétablie." JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL="Activer l'historique" JGLOBAL_SECRETKEY="Clé secrète" JGLOBAL_SECRETKEY_HELP="Si vous avez activé l'authentification multifacteurs dans votre compte utilisateur, veuillez saisir votre clé secrète. Si vous ne comprenez pas ce dont il s'agit, veuillez laisser ce champ vide." JGLOBAL_SEF_NOIDS_DESC="Supprimer les \"id\" des URL de ce composant." JGLOBAL_SEF_NOIDS_LABEL="Supprimer les \"id\" des URL" JGLOBAL_SEF_TITLE="Routage" JGLOBAL_SELECT_ALLOW_DENY_GROUP="Changer les droits %s pour le groupe %s." JGLOBAL_SELECT_AN_OPTION="Sélectionnez une option" JGLOBAL_SELECT_NO_RESULTS_MATCH="Aucun résultat trouvé" JGLOBAL_SELECT_PRESS_TO_SELECT="Cliquer pour sélectionner" JGLOBAL_SELECT_SOME_OPTIONS="Sélectionnez des options" JGLOBAL_SELECTED_UPLOAD_FILE_SIZE="Taille du fichier sélectionné : <strong>%s</strong>" JGLOBAL_SELECTION_ALL="Tout sélectionner" JGLOBAL_SELECTION_INVERT="Inverser la sélection" JGLOBAL_SELECTION_INVERT_ALL="Activer/Désactiver toutes les sélections" JGLOBAL_SELECTION_NONE="Effacer la sélection" JGLOBAL_SHOW_ASSOCIATIONS_DESC="Multilingue seulement. Affiche/masque les drapeaux des articles associés ou le Code de langue URL." JGLOBAL_SHOW_ASSOCIATIONS_LABEL="Associations" JGLOBAL_SHOW_AUTHOR_DESC="Afficher/Masquer le nom de l'auteur de l'article." JGLOBAL_SHOW_AUTHOR_LABEL="Auteur" JGLOBAL_SHOW_CATEGORY_DESC="Afficher/Masquer le titre de la catégorie de l'article." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC="Afficher/Masquer la description des catégories." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL="Description" JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_DESC="Si affiché, les \"sous-catégories\" seront listées dans la page en tant que sous-titres. Les sous-titres sont en général affiché avec l'attribut de balise de titre \"H3\"." JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_LABEL="Texte des sous-catégories" JGLOBAL_SHOW_CATEGORY_IMAGE_DESC="Afficher/Masquer l'image des catégories." JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL="Image" JGLOBAL_SHOW_CATEGORY_LABEL="Paramètres" JGLOBAL_SHOW_CATEGORY_TITLE="Nom de la catégorie" JGLOBAL_SHOW_CATEGORY_TITLE_DESC="Afficher/Masquer le titre des catégories comme sous-titre de page.<br />Les sous-titres sont habituellement affichés dans une balise 'h2'." JGLOBAL_SHOW_CREATE_DATE_DESC="Afficher/Masquer la date et l'heure de création." JGLOBAL_SHOW_CREATE_DATE_LABEL="Date de création" JGLOBAL_SHOW_DATE_DESC="Afficher/Masquer la colonne de date dans la liste des articles. Sélectionnez 'Masquer' pour cacher la date, sinon sélectionnez quel type de date vous souhaitez afficher." JGLOBAL_SHOW_DATE_LABEL="Date" JGLOBAL_SHOW_EMPTY_CATEGORIES_DESC="Afficher/Masquer les catégories vides qui ne contiennent ni article, ni sous-catégories." JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL="Catégories vides" JGLOBAL_SHOW_FEATURED_ARTICLES_DESC="Afficher, masquer, ou n'afficher que les articles épinglés." JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL="Articles épinglés" JGLOBAL_SHOW_FEED_LINK_DESC="Afficher/Masquer un lien de fil d'actualité RSS dans la barre d'adresse de certains navigateurs pour permettre d'afficher le contenu de la page où il se situe sur un autre site ou dans des lecteurs de fils d'actualités.<br />Vous pouvez également utiliser le module 'Fils RSS ou ATOM'." JGLOBAL_SHOW_FEED_LINK_LABEL="Lien de flux RSS" JGLOBAL_SHOW_FLAG_DESC="Si oui, affichera le choix de langue sous la forme des images de drapeaux. Sinon affichera le Code langue URL." JGLOBAL_SHOW_FLAG_LABEL="Utiliser les images de drapeaux" JGLOBAL_SHOW_FULL_DESCRIPTION="Afficher la description complète..." JGLOBAL_SHOW_HEADINGS_DESC="Affiche ou masque les en-têtes, en affichage de type liste." JGLOBAL_SHOW_HEADINGS_LABEL="En-tête" JGLOBAL_SHOW_HITS_LABEL="Clics" JGLOBAL_SHOW_INTRO_DESC="Afficher/Masquer le texte d'introduction dans l'affichage complet des articles." JGLOBAL_SHOW_INTRO_LABEL="Texte d'intro" JGLOBAL_SHOW_MODIFY_DATE_DESC="Afficher/Masquer la date et l'heure de modification." JGLOBAL_SHOW_MODIFY_DATE_LABEL="Date de modification" JGLOBAL_SHOW_NAVIGATION_DESC="Afficher/Masquer les liens 'Précédent' et 'Suivant' pour naviguer entre les articles d'une même catégorie." JGLOBAL_SHOW_NAVIGATION_LABEL="Navigation" JGLOBAL_SHOW_PARENT_CATEGORY_DESC="Afficher/Masquer le titre de la catégorie parente." JGLOBAL_SHOW_PARENT_CATEGORY_LABEL="Catégorie parente" JGLOBAL_SHOW_PUBLISH_DATE_DESC="Afficher/Masquer la date et l'heure de publication." JGLOBAL_SHOW_PUBLISH_DATE_LABEL="Date de Publication" JGLOBAL_SHOW_READMORE_DESC="Afficher/Masquer le lien 'Lire la suite...' lorsque l'article est affiché en format Blog ou dans un module." JGLOBAL_SHOW_READMORE_LABEL="Lien \"Lire la suite\"" JGLOBAL_SHOW_READMORE_LIMIT_DESC="Nombre maximal de caractères du titre de l'article à afficher dans le lien 'Lire la suite'." JGLOBAL_SHOW_READMORE_LIMIT_LABEL="Nbr de caractères dans le lien" JGLOBAL_SHOW_READMORE_TITLE_DESC="Afficher/Masquer dans le lien 'Lire la suite...' le titre de l'article en remplacement du texte 'la suite'." JGLOBAL_SHOW_READMORE_TITLE_LABEL="Titre de l'article dans le lien" JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC="Afficher/Masquer la description des sous-catégories." JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL="Desc. sous-catégories" JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC="Si 'Non' est sélectionné, seuls les articles de la catégorie seront affichés. Si un nombre est choisi, tous les articles de la catégorie et de ses sous-catégories, jusqu'au niveau défini inclus, seront affichés en mode blog." JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL="Inclure les sous-catégories" JGLOBAL_SHOW_SUBCATEGORY_HEADING="Titre des sous-catégories" JGLOBAL_SHOW_TAGS_DESC="Afficher les tags de ce lien" JGLOBAL_SHOW_TAGS_LABEL="Tags" JGLOBAL_SHOW_TITLE_DESC="Afficher/Masquer le titre des articles." JGLOBAL_SHOW_TITLE_LABEL="Titre" JGLOBAL_SHOW_UNAUTH_LINKS_DESC="Afficher/Masquer les liens vers les articles accessibles uniquement aux utilisateurs identifiés sur le site. Pour les utilisateurs non identifiés, il sera demandé de se connecter ou de créer un compte." JGLOBAL_SHOW_UNAUTH_LINKS_LABEL="Liens non autorisés" JGLOBAL_SHOW_VOTE_DESC="Afficher/Masquer les votes permettant aux simples utilisateurs de les voir et aux utilisateurs autorisés de voter." JGLOBAL_SHOW_VOTE_LABEL="Vote sur les articles" JGLOBAL_SINGLE_LEVEL="Un seul niveau" JGLOBAL_SORT_BY="Tri des tables par :" JGLOBAL_SORTED_BY="Trier par :" JGLOBAL_STAGE_PROCESS="Traitement" JGLOBAL_START_PUBLISH_AFTER_FINISH="La date de début de publication doit être fixée avant la date de fin de publication." JGLOBAL_SUBSLIDER_BLOG_EXTENDED_LABEL="Cette option permet d'inclure des articles de sous-catégories en affichage blog." JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL="Si un champ est laissé vide, les paramètres globaux seront utilisés." JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL="Ces paramètres sont utilisés lorsque vous sélectionnez un des liens de catégorie, sur la première page et/ou sur les autres, à moins qu’ils ne soient modifiés dans un lien de menu spécifique." JGLOBAL_TITLE="Titre" JGLOBAL_TITLE_ALPHABETICAL="Alphabétique des titres" JGLOBAL_TITLE_ASC="Titres - Ascendant" JGLOBAL_TITLE_DESC="Titres - Descendant" JGLOBAL_TITLE_REVERSE_ALPHABETICAL="Alphabétique inverse des titres" JGLOBAL_TOGGLE_DROPDOWN="Permuter la liste déroulante" JGLOBAL_TOGGLE_FEATURED="Permuter le statut Épinglé" JGLOBAL_TOP="Haut" JGLOBAL_TPL_CPANEL_LINK_TEXT="Tableau de bord" JGLOBAL_TYPE_OR_SELECT_CATEGORY="Saisissez ou sélectionnez une catégorie" JGLOBAL_TYPE_OR_SELECT_SOME_OPTIONS="Saisir ou sélectionner certaines options" JGLOBAL_TYPE_OR_SELECT_SOME_TAGS="Saisir ou sélectionner certains tags" JGLOBAL_USE_GLOBAL="Paramètres globaux" JGLOBAL_USE_GLOBAL_VALUE="Paramètres globaux (%s)" JGLOBAL_USERNAME="Identifiant" JGLOBAL_VALIDATION_FORM_FAILED="Formulaire invalide" JGLOBAL_VIEW_SITE="Voir le site" JGLOBAL_VOTES="Votes" JGLOBAL_VOTES_ASC="Votes - Ascendant" JGLOBAL_VOTES_DESC="Votes - Descendant" JGLOBAL_WARNCOOKIES="Attention ! Les cookies doivent être activés pour accéder à l'espace administration." JGLOBAL_WARNIE="Attention, Internet Explorer ne doit pas être utilisé pour le bon fonctionnement de l'interface d'administration." JGLOBAL_WARNJAVASCRIPT="Attention : JavaScript doit être activé pour un fonctionnement correct de l'interface d'administration." JGLOBAL_WIDTH="Largeur" JGRID_HEADING_ACCESS="Accès" JGRID_HEADING_ACCESS_ASC="Accès - Ascendant" JGRID_HEADING_ACCESS_DESC="Accès - Descendant" JGRID_HEADING_CAPTION_ASC="%s - Ascendant" JGRID_HEADING_CAPTION_DESC="%s - Descendant" JGRID_HEADING_CREATED_BY="Créé par" JGRID_HEADING_ID="Id" JGRID_HEADING_ID_ASC="ID - Ascendant" JGRID_HEADING_ID_DESC="ID - Descendant" JGRID_HEADING_LANGUAGE="Langue" JGRID_HEADING_LANGUAGE_ASC="Langue - Ascendant" JGRID_HEADING_LANGUAGE_DESC="Langue - Descendant" JGRID_HEADING_MENU_ITEM_TYPE="Type de lien de menu" JGRID_HEADING_ORDERING="Tri" JGRID_HEADING_ORDERING_ASC="Ordre - Ascendant" JGRID_HEADING_ORDERING_DESC="Ordre - Descendant" JLIB_DATABASE_ERROR_ADAPTER_MYSQL="L'adaptateur MySQL 'mysql' n'est pas disponible." JLIB_DATABASE_ERROR_ADAPTER_MYSQLI="L'adaptateur MySQL 'mysqli' n'est pas disponible." JLIB_DATABASE_ERROR_CONNECT_DATABASE="Impossible de se connecter à la base de données : %s." JLIB_DATABASE_ERROR_CONNECT_MYSQL="Échec de connexion à la base de données à MySQL." JLIB_DATABASE_ERROR_DATABASE_CONNECT="Impossible de se connecter à la base de données" JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Impossible de charger le pilote de la base de données : %s." JOPTION_ACCESS_SHOW_ALL_ACCESS="Afficher tous les accès" JOPTION_ACCESS_SHOW_ALL_GROUPS="Afficher tous les groupes" JOPTION_ACCESS_SHOW_ALL_LEVELS="Afficher tous les niveaux d'accès" JOPTION_ALL_CATEGORIES="- Toutes les catégories -" JOPTION_ANY="N'importe lequel" JOPTION_ANY_CATEGORY="N'importe quelle catégorie" JOPTION_DO_NOT_USE="- Aucune Sélection -" JOPTION_FROM_COMPONENT="---Du composant---" JOPTION_FROM_MODULE="---Du module---" JOPTION_FROM_STANDARD="---Configuration globale---" JOPTION_FROM_TEMPLATE="---Du template %s---" JOPTION_MENUS="Menus" JOPTION_NO_USER="- Aucun utilisateur -" JOPTION_OPTIONAL="Facultatif" JOPTION_REQUIRED="Requis" JOPTION_SELECT_ACCESS="- Niveau d'accès -" JOPTION_SELECT_AUTHOR="- Auteur -" JOPTION_SELECT_AUTHOR_ALIAS="- Pseudo d'auteur -" JOPTION_SELECT_AUTHOR_ALIASES="- Pseudo d'auteurs -" JOPTION_SELECT_AUTHORS="- Auteurs -" JOPTION_SELECT_CATEGORY="- Catégorie -" JOPTION_SELECT_EDITOR="- Éditeur -" JOPTION_SELECT_FEATURED="- Épinglé -" JOPTION_SELECT_IMAGE="- Image -" JOPTION_SELECT_LANGUAGE="- Langue -" JOPTION_SELECT_MAX_LEVELS="- Niveau d'arborescence -" JOPTION_SELECT_MENU="- Menu -" JOPTION_SELECT_MENU_ITEM="- Lien de menu -" JOPTION_SELECT_PUBLISHED="- Statut -" JOPTION_SELECT_STAGE="- Étape -" JOPTION_SELECT_TAG="- Tag -" JOPTION_SELECT_TEMPLATE="- Template -" JOPTION_SELECT_TRANSITION="- Transition -" JOPTION_UNASSIGNED="Non assigné" JOPTION_USE_DEFAULT="- Paramètres par défaut -" JOPTION_USE_DEFAULT_MODULE_SETTING="- Paramètres par défaut du module -" JOPTION_USE_MENU_REQUEST_SETTING="- Paramètres du menu ou du lien -" JSEARCH_FILTER="Recherche" JSEARCH_FILTER_CLEAR="Effacer" JSEARCH_FILTER_LABEL="Filtrer :" JSEARCH_FILTER_SUBMIT="Recherche" JSEARCH_RESET="Réinitialiser" JSEARCH_TITLE="Rechercher %s" JTOGGLE_HIDE_SIDEBAR="Cacher la barre latérale" JTOGGLE_SHOW_SIDEBAR="Afficher la barre latérale" JTOGGLE_SIDEBAR_LABEL="Barre latérale" JTOGGLE_SIDEBAR_MENU="Réduire le menu" JTOOLBAR_APPLY="Enregistrer" JTOOLBAR_ARCHIVE="Archives" JTOOLBAR_ASSIGN="Assigner" JTOOLBAR_ASSOCIATIONS="Associations" JTOOLBAR_BACK="Retour" JTOOLBAR_BATCH="Traitement" JTOOLBAR_BULK_IMPORT="Importer en masse" JTOOLBAR_CANCEL="Annuler" JTOOLBAR_CHANGE_STATUS="Actions" JTOOLBAR_CHECKIN="Déverrouillage" JTOOLBAR_CLOSE="Fermer" JTOOLBAR_DEFAULT="Défaut" JTOOLBAR_DELETE="Supprimer" JTOOLBAR_DELETE_ALL="Tout supprimer" JTOOLBAR_DISABLE="Désactiver" JTOOLBAR_DUPLICATE="Dupliquer" JTOOLBAR_EDIT="Modifier" JTOOLBAR_EDIT_CSS="Modifier le CSS" JTOOLBAR_EDIT_HTML="Modifier le HTML" JTOOLBAR_EMPTY_TRASH="Vider la corbeille" JTOOLBAR_ENABLE="Activer" JTOOLBAR_EXPORT="Exportation" JTOOLBAR_HELP="Aide" JTOOLBAR_INSTALL="Installer" JTOOLBAR_NEW="Nouveau" JTOOLBAR_OPTIONS="Paramètres" JTOOLBAR_PUBLISH="Publier" JTOOLBAR_PURGE_CACHE="Vider le cache" JTOOLBAR_REBUILD="Reconstruire" JTOOLBAR_REFRESH_CACHE="Régénérer le cache" JTOOLBAR_REMOVE="Effacer" JTOOLBAR_SAVE="Enregistrer & Fermer" JTOOLBAR_SAVE_AND_NEW="Enregistrer & Nouveau" JTOOLBAR_SAVE_AS_COPY="Enregistrer une copie" JTOOLBAR_SAVE_TO_MENU="Enregistrer dans le menu" JTOOLBAR_TRASH="Corbeille" JTOOLBAR_UNARCHIVE="Désarchiver" JTOOLBAR_UNINSTALL="Désinstaller" JTOOLBAR_UNPUBLISH="Dépublier" JTOOLBAR_UNTRASH="Restaurer" JTOOLBAR_UPLOAD="Envoyer" JTOOLBAR_VERSIONS="Versions" JWARNING_ARCHIVE_MUST_SELECT="Vous devez sélectionner un élément à archiver." JWARNING_DELETE_MUST_SELECT="Vous devez sélectionner un élément à supprimer définitivement." JWARNING_PUBLISH_MUST_SELECT="Vous devez sélectionner un élément à publier." JWARNING_REMOVE_ROOT_USER="Vous êtes connecté à l'aide du profil utilisateur de secours 'Root' spécifié dans le fichier configuration.php.<br>Pour des raisons de sécurité, vous devez supprimer $root_user du fichier 'configuration.php' dès que vous avez repris le contrôle de votre site.<br><a href='%s'>Cliquez sur ce lien pour tenter de le supprimer automatiquement</a> (vous devez posséder les droits d'écriture sur le fichier)." JWARNING_REMOVE_ROOT_USER_ADMIN="Les paramètres d'urgence de l'utilisateur principal sont activés pour l'utilisateur (id) : %s.<br>Pour des raisons de sécurité, vous devez supprimer $root_user du fichier 'configuration.php' dès que vous avez repris le contrôle de votre site.<br><a href='%s'>Cliquez sur ce lien pour tenter de le supprimer automatiquement</a> (vous devez posséder les droits d'écriture sur le fichier)." JWARNING_TRASH_MUST_SELECT="Vous devez sélectionner un élément à mettre à la corbeille." JWARNING_UNPUBLISH_MUST_SELECT="Vous devez sélectionner un élément à dépublier." ; Workflow JWORKFLOW="Flux de travail : %s" JWORKFLOW_ENABLED_LABEL="Activer le flux de travail" JWORKFLOW_EXECUTE_TRANSITION="Sélectionner la transition à exécuter sur cet élément." JWORKFLOW_EXTENSION_FORBIDDEN_DESCRIPTION="Désactiver ce plugin pour les extensions répertoriées." JWORKFLOW_EXTENSION_FORBIDDEN_LABEL="Extensions interdites" JWORKFLOW_EXTENSION_ALLOWED_DESCRIPTION="Activer ce plugin uniquement pour les extensions répertoriées. Si utilisé, toutes les autres extensions sont désactivées." JWORKFLOW_EXTENSION_ALLOWED_LABEL="Extensions autorisées" JWORKFLOW_FIELD_COMPONENT_SECTIONS_TEXT="%1$s: %2$s" JWORKFLOW_SHOW_TRANSITIONS_FOR_THIS_ITEM="Afficher la sélection de transition pour exécuter une transition sur cet élément." JWORKFLOW_TITLE="Flux de travail" ; Date format DATE_FORMAT_CALENDAR_DATE="%d-%m-%Y" DATE_FORMAT_CALENDAR_DATETIME="%d-%m-%Y %H:%M:%S" DATE_FORMAT_FILTER_DATE="j/m/y" DATE_FORMAT_FILTER_DATETIME="d-m-Y H:i:s" DATE_FORMAT_JS1="j/m/y" DATE_FORMAT_LC="l j F Y" DATE_FORMAT_LC1="l j F Y" DATE_FORMAT_LC2="l j F Y H:i" DATE_FORMAT_LC3="j F Y" DATE_FORMAT_LC4="j/m/y" DATE_FORMAT_LC5="Y-m-d H:i" DATE_FORMAT_LC6="d-m-Y H:i:s" ; Months JANUARY_SHORT="Jan" JANUARY="janvier" FEBRUARY_SHORT="Fév" FEBRUARY="février" MARCH_SHORT="Mar" MARCH="mars" APRIL_SHORT="Avr" APRIL="avril" MAY_SHORT="Mai" MAY="Mai" JUNE_SHORT="Jui" JUNE="juin" JULY_SHORT="Juil" JULY="juillet" AUGUST_SHORT="Aoû" AUGUST="août" SEPTEMBER_SHORT="Sep" SEPTEMBER="septembre" OCTOBER_SHORT="Oct" OCTOBER="octobre" NOVEMBER_SHORT="Nov" NOVEMBER="novembre" DECEMBER_SHORT="Déc" DECEMBER="décembre" ; Days of the Week SAT="Sam" SATURDAY="samedi" SUN="Dim" SUNDAY="dimanche" MON="Lun" MONDAY="lundi" TUE="Mar" TUESDAY="mardi" WED="Mer" WEDNESDAY="mercredi" THU="Jeu" THURSDAY="jeudi" FRI="Ven" FRIDAY="vendredi" ; Localised number format DECIMALS_SEPARATOR="," THOUSANDS_SEPARATOR=" " ; Mailer Codes PHPMAILER_AUTHENTICATE="Erreur SMTP : authentification impossible !" PHPMAILER_CONNECT_HOST="Erreur SMTP ! Impossible de se connecter à l'hôte SMTP." PHPMAILER_DATA_NOT_ACCEPTED="Erreur SMTP ! Données refusées." PHPMAILER_EMPTY_MESSAGE="Corps du message vide" PHPMAILER_ENCODING="Encodage inconnu :" PHPMAILER_EXECUTE="Impossible d'exécuter :" PHPMAILER_EXTENSION_MISSING="Extension manquante :" PHPMAILER_FILE_ACCESS="Impossible d'accéder au fichier :" PHPMAILER_FILE_OPEN="Erreur fichier ! Impossible d'ouvrir le fichier :" PHPMAILER_FROM_FAILED="Échec de l'adresse suivante :" PHPMAILER_INSTANTIATE="Impossible de lancer la fonction mail" PHPMAILER_INVALID_ADDRESS="Adresse invalide" PHPMAILER_MAILER_IS_NOT_SUPPORTED="Mailer n'est pas supporté." PHPMAILER_PROVIDE_ADDRESS="Vous devez saisir une adresse e-mail de destinataire." PHPMAILER_RECIPIENTS_FAILED="Erreur SMTP ! Échec de l'adresse suivante :" PHPMAILER_SIGNING_ERROR="Erreur de signature : " PHPMAILER_SMTP_CONNECT_FAILED="Impossible de connecter par SMTP" PHPMAILER_SMTP_ERROR="Erreur serveur SMTP : " PHPMAILER_TLS="Impossible de lancer TLS" PHPMAILER_VARIABLE_SET="Impossible d'initialiser ou de réinitialiser la variable: " ; Database types (allows for a more descriptive label than the internal name) MYSQL="MySQL (PDO)" MYSQLI="MySQLi" ORACLE="Oracle" PGSQL="PostgreSQL (PDO)" POSTGRESQL="PostgreSQL" SQLITE="SQLite" ; Search tools JFILTER_OPTIONS="Filtres d'affichage" JTABLE_OPTIONS="Liste des options" JTABLE_OPTIONS_ORDERING="Ordonner par :" ; States assets translations ARCHIVE="Archives" ARCHIVED="Archivé" PUBLISH="Publier" PUBLISHED="Publié(s)" TRASH="Corbeille" TRASHED="Dans la corbeille" UNPUBLISH="Dépublier" UNPUBLISHED="Dépublié(s)" language/fr-FR/langmetadata.xml000064400000001513152462255100012411 0ustar00<?xml version="1.0" encoding="UTF-8"?> <metafile client="api"> <name>French (fr-FR)</name> <version>4.3.1</version> <creationDate>Mai 2023</creationDate> <author>Joomla! Project - French translation team</author> <authorEmail>traduction@joomla.fr</authorEmail> <authorUrl>www.joomla.fr</authorUrl> <copyright>(C) 2020 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description><![CDATA[fr-FR api language]]></description> <metadata> <name>French (fr-FR)</name> <nativeName>Français (France)</nativeName> <tag>fr-FR</tag> <rtl>0</rtl> <locale>fr_FR.utf8, fr_FR.UTF-8, fr_FR, fr, français, french-fr, france, francophone</locale> <firstDay>1</firstDay> <weekEnd>0,6</weekEnd> <calendar>gregorian</calendar> </metadata> <params/> </metafile> index.php000064400000002044152462255100006366 0ustar00<?php /** * @package Joomla.API * * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ // NOTE: This file should remain compatible with PHP 5.2 to allow us to run our PHP minimum check and show a friendly error message // Define the application's minimum supported PHP version as a constant so it can be referenced within the application. define('JOOMLA_MINIMUM_PHP', '7.2.5'); if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<')) { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => sprintf('Joomla requires PHP version %s to run', JOOMLA_MINIMUM_PHP)] ); return; } /** * Constant that is checked in included files to prevent direct access. * define() is used rather than "const" to not cause an error for PHP 5.2 and lower */ define('_JEXEC', 1); // Run the application - All executable code should be triggered through this file require_once dirname(__FILE__) . '/includes/app.php';
/home/chauffn/vuzelia/2023/cf455/./.././cc5e2/api.tar