* @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\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('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]); } } return $data; } }