* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Administrator\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\Response\JsonResponse; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; use Joomla\Component\Privacy\Administrator\Model\RequestsModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Privacy Controller * * @since 3.9.0 */ class DisplayController extends BaseController { /** * The default view. * * @var string * @since 3.9.0 */ protected $default_view = 'requests'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return $this * * @since 3.9.0 */ public function display($cachable = false, $urlparams = []) { // Get the document object. $document = $this->app->getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', $this->default_view); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $model = $this->getModel($vName); $view->setModel($model, true); if ($vName === 'request') { // For the default layout, we need to also push the action logs model into the view if ($lName === 'default') { $logsModel = $this->app->bootComponent('com_actionlogs') ->getMVCFactory()->createModel('Actionlogs', 'Administrator', ['ignore_request' => true]); // Set default ordering for the context $logsModel->setState('list.fullordering', 'a.log_date DESC'); // And push the model into the view $view->setModel($logsModel, false); } // For the edit layout, if mail sending is disabled then redirect back to the list view as the form is unusable in this state if ($lName === 'edit' && !$this->app->get('mailonline', 1)) { $this->setRedirect( Route::_('index.php?option=com_privacy&view=requests', false), Text::_('COM_PRIVACY_WARNING_CANNOT_CREATE_REQUEST_WHEN_SENDMAIL_DISABLED'), 'warning' ); return $this; } } $view->setLayout($lName); // Push document object into the view. $view->document = $document; $view->display(); } return $this; } /** * Fetch and report number urgent privacy requests in JSON format, for AJAX requests * * @return void * * @since 3.9.0 */ public function getNumberUrgentRequests() { // Check for a valid token. If invalid, send a 403 with the error message. if (!Session::checkToken('get')) { $this->app->setHeader('status', 403, true); $this->app->sendHeaders(); echo new JsonResponse(new \Exception(Text::_('JINVALID_TOKEN'), 403)); $this->app->close(); } /** @var RequestsModel $model */ $model = $this->getModel('requests'); $numberUrgentRequests = $model->getNumberUrgentRequests(); echo new JsonResponse(['number_urgent_requests' => $numberUrgentRequests]); } }