* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Plugin\EditorsXtd\Article\Extension; use Joomla\CMS\Editor\Button\Button; use Joomla\CMS\Event\Editor\EditorButtonsSetupEvent; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Session\Session; use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Editor Article button * * @since 1.5 */ final class Article extends CMSPlugin implements SubscriberInterface { /** * Returns an array of events this subscriber will listen to. * * @return array * * @since 5.0.0 */ public static function getSubscribedEvents(): array { return ['onEditorButtonsSetup' => 'onEditorButtonsSetup']; } /** * @param EditorButtonsSetupEvent $event * @return void * * @since 5.0.0 */ public function onEditorButtonsSetup(EditorButtonsSetupEvent $event): void { $subject = $event->getButtonsRegistry(); $disabled = $event->getDisabledButtons(); if (\in_array($this->_name, $disabled)) { return; } $this->loadLanguage(); $button = $this->onDisplay($event->getEditorId()); if ($button) { $subject->add($button); } } /** * Display the button * * @param string $name The name of the button to add * * @return Button|void The button options as Button object, void if ACL check fails. * * @since 1.5 * * @deprecated 5.0 Use onEditorButtonsSetup event */ public function onDisplay($name) { $user = $this->getApplication()->getIdentity(); // Can create in any category (component permission) or at least in one category $canCreateRecords = $user->authorise('core.create', 'com_content') || \count($user->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->getApplication()->getUserState('com_content.edit.article.id'); $isEditingRecords = \count($values); // This ACL check is probably a double-check (form view already performed checks) $hasAccess = $canCreateRecords || $isEditingRecords; if (!$hasAccess) { return; } $link = 'index.php?option=com_content&view=articles&layout=modal&tmpl=component&' . Session::getFormToken() . '=1&editor=' . $name; $button = new Button( $this->_name, [ 'action' => 'modal', 'link' => $link, 'text' => Text::_('PLG_ARTICLE_BUTTON_ARTICLE'), 'icon' => 'file-add', 'iconSVG' => '', // This is whole Plugin name, it is needed for keeping backward compatibility 'name' => $this->_type . '_' . $this->_name, ] ); return $button; } }