* @license GNU General Public License version 2 or later; see LICENSE.txt * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace */ use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Session\Session; use Joomla\CMS\Uri\Uri; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Joomla! template override notification plugin * * @since 4.0.0 */ class PlgQuickiconOverrideCheck extends CMSPlugin { /** * Load the language file on instantiation. * * @var boolean * * @since 4.0.0 */ protected $autoloadLanguage = true; /** * Application object. * * @var \Joomla\CMS\Application\CMSApplication * @since 3.7.0 */ protected $app; /** * Database object * * @var \Joomla\Database\DatabaseInterface * * @since 3.8.0 */ protected $db; /** * Returns an icon definition for an icon which looks for overrides update * via AJAX and displays a notification when such overrides are updated. * * @param string $context The calling context * * @return array A list of icon definition associative arrays, consisting of the * keys link, image, text and access. * * @since 4.0.0 */ public function onGetIcons($context) { if ($context !== $this->params->get('context', 'update_quickicon') || !$this->app->getIdentity()->authorise('core.manage', 'com_installer')) { return array(); } $token = Session::getFormToken() . '=1'; $options = array( 'url' => Uri::base() . 'index.php?option=com_templates&view=templates', 'ajaxUrl' => Uri::base() . 'index.php?option=com_templates&view=templates&task=template.ajax&' . $token, 'pluginId' => $this->getOverridePluginId(), ); $this->app->getDocument()->addScriptOptions('js-override-check', $options); Text::script('PLG_QUICKICON_OVERRIDECHECK_ERROR', true); Text::script('PLG_QUICKICON_OVERRIDECHECK_ERROR_ENABLE', true); Text::script('PLG_QUICKICON_OVERRIDECHECK_UPTODATE', true); Text::script('PLG_QUICKICON_OVERRIDECHECK_OVERRIDEFOUND', true); $this->app->getDocument()->getWebAssetManager() ->registerAndUseScript('plg_quickicon_overridecheck', 'plg_quickicon_overridecheck/overridecheck.js', [], ['defer' => true], ['core']); return array( array( 'link' => 'index.php?option=com_templates&view=templates', 'image' => 'icon-file', 'icon' => '', 'text' => Text::_('PLG_QUICKICON_OVERRIDECHECK_CHECKING'), 'id' => 'plg_quickicon_overridecheck', 'group' => 'MOD_QUICKICON_MAINTENANCE', ), ); } /** * Gets the installer override plugin extension id. * * @return integer The installer override plugin extension id. * * @since 4.0.0 */ private function getOverridePluginId() { $query = $this->db->getQuery(true) ->select($this->db->quoteName('extension_id')) ->from($this->db->quoteName('#__extensions')) ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote('installer')) ->where($this->db->quoteName('element') . ' = ' . $this->db->quote('override')); $this->db->setQuery($query); try { $result = (int) $this->db->loadResult(); } catch (\RuntimeException $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } return $result; } }