* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Site\Dispatcher; use Joomla\CMS\Dispatcher\ComponentDispatcher; use Joomla\CMS\Language\Text; // phpcs:disable PSR1.Files.SideEffects \defined('JPATH_PLATFORM') or die; // phpcs:enable PSR1.Files.SideEffects /** * ComponentDispatcher class for com_content * * @since 4.0.0 */ class Dispatcher extends ComponentDispatcher { /** * Dispatch a controller task. Redirecting the user if appropriate. * * @return void * * @since 4.0.0 */ public function dispatch() { $checkCreateEdit = ($this->input->get('view') === 'articles' && $this->input->get('layout') === 'modal') || ($this->input->get('view') === 'article' && $this->input->get('layout') === 'pagebreak'); if ($checkCreateEdit) { // Can create in any category (component permission) or at least in one category $canCreateRecords = $this->app->getIdentity()->authorise('core.create', 'com_content') || count($this->app->getIdentity()->getAuthorisedCategories('com_content', 'core.create')) > 0; // Instead of checking edit on all records, we can use **same** check as the form editing view $values = (array) $this->app->getUserState('com_content.edit.article.id'); $isEditingRecords = count($values); $hasAccess = $canCreateRecords || $isEditingRecords; if (!$hasAccess) { $this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'warning'); return; } } parent::dispatch(); } }