[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/plugins/system/jooa11y/ -> jooa11y.php (source)

   1  <?php
   2  
   3  /**
   4   * @package     Joomla.Plugin
   5   * @subpackage  System.jooa11y
   6   *
   7   * @copyright   (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
   8   * @license     GNU General Public License version 2 or later; see LICENSE.txt
   9  
  10   * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
  11   */
  12  
  13  use Joomla\CMS\Application\CMSApplicationInterface;
  14  use Joomla\CMS\Factory;
  15  use Joomla\CMS\Language\Text;
  16  use Joomla\CMS\Plugin\CMSPlugin;
  17  use Joomla\Event\SubscriberInterface;
  18  
  19  // phpcs:disable PSR1.Files.SideEffects
  20  \defined('_JEXEC') or die;
  21  // phpcs:enable PSR1.Files.SideEffects
  22  
  23  /**
  24   * Jooa11y plugin to add an accessibility checker
  25   *
  26   * @since  4.1.0
  27   */
  28  class PlgSystemJooa11y extends CMSPlugin implements SubscriberInterface
  29  {
  30      /**
  31       * Application object.
  32       *
  33       * @var    CMSApplicationInterface
  34       * @since  4.1.0
  35       */
  36      protected $app;
  37  
  38      /**
  39       * Affects constructor behavior. If true, language files will be loaded automatically.
  40       *
  41       * @var    boolean
  42       * @since  4.1.0
  43       */
  44      protected $autoloadLanguage = true;
  45  
  46      /**
  47       * Subscribe to certain events
  48       *
  49       * @return string[]  An array of event mappings
  50       *
  51       * @since 4.1.0
  52       *
  53       * @throws Exception
  54       */
  55      public static function getSubscribedEvents(): array
  56      {
  57          $mapping = [];
  58  
  59          // Only trigger in frontend
  60          if (Factory::getApplication()->isClient('site')) {
  61              $mapping['onBeforeCompileHead'] = 'initJooa11y';
  62          }
  63  
  64          return $mapping;
  65      }
  66  
  67      /**
  68       * Method to check if the current user is allowed to see the debug information or not.
  69       *
  70       * @return  boolean  True if access is allowed.
  71       *
  72       * @since   4.1.0
  73       */
  74      private function isAuthorisedDisplayChecker(): bool
  75      {
  76          static $result;
  77  
  78          if (is_bool($result)) {
  79              return $result;
  80          }
  81  
  82          // If the user is not allowed to view the output then end here.
  83          $filterGroups = (array) $this->params->get('filter_groups', []);
  84  
  85          if (!empty($filterGroups)) {
  86              $userGroups = $this->app->getIdentity()->get('groups');
  87  
  88              if (!array_intersect($filterGroups, $userGroups)) {
  89                  $result = false;
  90  
  91                  return $result;
  92              }
  93          }
  94  
  95          $result = true;
  96  
  97          return $result;
  98      }
  99  
 100      /**
 101       * Add the checker.
 102       *
 103       * @return  void
 104       *
 105       * @since   4.1.0
 106       */
 107      public function initJooa11y()
 108      {
 109          // Check if we are in a preview modal or the plugin has enforced loading
 110          $showJooa11y = $this->app->input->get('jooa11y', $this->params->get('showAlways', 0));
 111  
 112          // Load the checker if authorised
 113          if (!$showJooa11y || !$this->isAuthorisedDisplayChecker()) {
 114              return;
 115          }
 116  
 117          // Get the document object.
 118          $document = $this->app->getDocument();
 119  
 120          // Determine if it is an LTR or RTL language
 121          $direction = Factory::getLanguage()->isRtl() ? 'right' : 'left';
 122  
 123          // Detect the current active language
 124          $lang = Factory::getLanguage()->getTag();
 125  
 126          // Add plugin settings from the xml
 127          $document->addScriptOptions(
 128              'jooa11yOptions',
 129              [
 130                  'checkRoot'       => $this->params->get('checkRoot', 'main'),
 131                  'readabilityRoot' => $this->params->get('readabilityRoot', 'main'),
 132                  'containerIgnore' => $this->params->get('containerIgnore'),
 133              ]
 134          );
 135  
 136          // Add the language constants
 137          $constants = [
 138              'PLG_SYSTEM_JOOA11Y_ALERT_CLOSE',
 139              'PLG_SYSTEM_JOOA11Y_ALERT_TEXT',
 140              'PLG_SYSTEM_JOOA11Y_AVG_WORD_PER_SENTENCE',
 141              'PLG_SYSTEM_JOOA11Y_COMPLEX_WORDS',
 142              'PLG_SYSTEM_JOOA11Y_CONTAINER_LABEL',
 143              'PLG_SYSTEM_JOOA11Y_CONTRAST',
 144              'PLG_SYSTEM_JOOA11Y_CONTRAST_ERROR_INPUT_MESSAGE',
 145              'PLG_SYSTEM_JOOA11Y_CONTRAST_ERROR_INPUT_MESSAGE_INFO',
 146              'PLG_SYSTEM_JOOA11Y_CONTRAST_ERROR_MESSAGE',
 147              'PLG_SYSTEM_JOOA11Y_CONTRAST_ERROR_MESSAGE_INFO',
 148              'PLG_SYSTEM_JOOA11Y_CONTRAST_WARNING_MESSAGE',
 149              'PLG_SYSTEM_JOOA11Y_CONTRAST_WARNING_MESSAGE_INFO',
 150              'PLG_SYSTEM_JOOA11Y_DARK_MODE',
 151              'PLG_SYSTEM_JOOA11Y_DIFFICULT_READABILITY',
 152              'PLG_SYSTEM_JOOA11Y_EMBED_AUDIO',
 153              'PLG_SYSTEM_JOOA11Y_EMBED_GENERAL_WARNING',
 154              'PLG_SYSTEM_JOOA11Y_EMBED_MISSING_TITLE',
 155              'PLG_SYSTEM_JOOA11Y_EMBED_VIDEO',
 156              'PLG_SYSTEM_JOOA11Y_ERROR',
 157              'PLG_SYSTEM_JOOA11Y_FAIRLY_DIFFICULT_READABILITY',
 158              'PLG_SYSTEM_JOOA11Y_FILE_TYPE_WARNING',
 159              'PLG_SYSTEM_JOOA11Y_FILE_TYPE_WARNING_TIP',
 160              'PLG_SYSTEM_JOOA11Y_FORM_LABELS',
 161              'PLG_SYSTEM_JOOA11Y_GOOD',
 162              'PLG_SYSTEM_JOOA11Y_GOOD_READABILITY',
 163              'PLG_SYSTEM_JOOA11Y_HEADING_EMPTY',
 164              'PLG_SYSTEM_JOOA11Y_HEADING_EMPTY_WITH_IMAGE',
 165              'PLG_SYSTEM_JOOA11Y_HEADING_FIRST',
 166              'PLG_SYSTEM_JOOA11Y_HEADING_LONG',
 167              'PLG_SYSTEM_JOOA11Y_HEADING_LONG_INFO',
 168              'PLG_SYSTEM_JOOA11Y_HEADING_MISSING_ONE',
 169              'PLG_SYSTEM_JOOA11Y_HEADING_NON_CONSECUTIVE_LEVEL',
 170              'PLG_SYSTEM_JOOA11Y_HIDE_OUTLINE',
 171              'PLG_SYSTEM_JOOA11Y_HIDE_SETTINGS',
 172              'PLG_SYSTEM_JOOA11Y_HYPERLINK_ALT_LENGTH_MESSAGE',
 173              'PLG_SYSTEM_JOOA11Y_HYPERLINK_ALT_LENGTH_MESSAGE_INFO',
 174              'PLG_SYSTEM_JOOA11Y_IMAGE_FIGURE_DECORATIVE',
 175              'PLG_SYSTEM_JOOA11Y_IMAGE_FIGURE_DECORATIVE_INFO',
 176              'PLG_SYSTEM_JOOA11Y_IMAGE_FIGURE_DUPLICATE_ALT',
 177              'PLG_SYSTEM_JOOA11Y_LABELS_ARIA_LABEL_INPUT_MESSAGE',
 178              'PLG_SYSTEM_JOOA11Y_LABELS_ARIA_LABEL_INPUT_MESSAGE_INFO',
 179              'PLG_SYSTEM_JOOA11Y_LABELS_INPUT_RESET_MESSAGE',
 180              'PLG_SYSTEM_JOOA11Y_LABELS_INPUT_RESET_MESSAGE_TIP',
 181              'PLG_SYSTEM_JOOA11Y_LABELS_MISSING_IMAGE_INPUT_MESSAGE',
 182              'PLG_SYSTEM_JOOA11Y_LABELS_MISSING_LABEL_MESSAGE',
 183              'PLG_SYSTEM_JOOA11Y_LABELS_NO_FOR_ATTRIBUTE_MESSAGE',
 184              'PLG_SYSTEM_JOOA11Y_LABELS_NO_FOR_ATTRIBUTE_MESSAGE_INFO',
 185              'PLG_SYSTEM_JOOA11Y_LANG_CODE',
 186              'PLG_SYSTEM_JOOA11Y_LINKS_ADVANCED',
 187              'PLG_SYSTEM_JOOA11Y_LINK_ALT_HAS_BAD_WORD_MESSAGE',
 188              'PLG_SYSTEM_JOOA11Y_LINK_ALT_HAS_BAD_WORD_MESSAGE_INFO',
 189              'PLG_SYSTEM_JOOA11Y_LINK_ALT_HAS_SUS_WORD_MESSAGE',
 190              'PLG_SYSTEM_JOOA11Y_LINK_ALT_HAS_SUS_WORD_MESSAGE_INFO',
 191              'PLG_SYSTEM_JOOA11Y_LINK_ALT_PLACEHOLDER_MESSAGE',
 192              'PLG_SYSTEM_JOOA11Y_LINK_ALT_TOO_LONG_MESSAGE',
 193              'PLG_SYSTEM_JOOA11Y_LINK_ALT_TOO_LONG_MESSAGE_INFO',
 194              'PLG_SYSTEM_JOOA11Y_LINK_ANCHOR_LINK_AND_ALT_MESSAGE',
 195              'PLG_SYSTEM_JOOA11Y_LINK_ANCHOR_LINK_AND_ALT_MESSAGE_INFO',
 196              'PLG_SYSTEM_JOOA11Y_LINK_BEST_PRACTICES',
 197              'PLG_SYSTEM_JOOA11Y_LINK_BEST_PRACTICES_DETAILS',
 198              'PLG_SYSTEM_JOOA11Y_LINK_DECORATIVE_MESSAGE',
 199              'PLG_SYSTEM_JOOA11Y_LINK_EMPTY',
 200              'PLG_SYSTEM_JOOA11Y_LINK_EMPTY_LINK_NO_LABEL',
 201              'PLG_SYSTEM_JOOA11Y_LINK_HYPERLINKED_IMAGE_ARIA_HIDDEN',
 202              'PLG_SYSTEM_JOOA11Y_LINK_IDENTICAL_NAME',
 203              'PLG_SYSTEM_JOOA11Y_LINK_IDENTICAL_NAME_TIP',
 204              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_BAD_ALT_MESSAGE',
 205              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_BAD_ALT_MESSAGE_INFO',
 206              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_LINK_ALT_TEXT_MESSAGE',
 207              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_LINK_ALT_TEXT_MESSAGE_INFO',
 208              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_LINK_NULL_ALT_NO_TEXT_MESSAGE',
 209              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_PLACEHOLDER_ALT_MESSAGE',
 210              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_SUS_ALT_MESSAGE',
 211              'PLG_SYSTEM_JOOA11Y_LINK_IMAGE_SUS_ALT_MESSAGE_INFO',
 212              'PLG_SYSTEM_JOOA11Y_LINK_LABEL',
 213              'PLG_SYSTEM_JOOA11Y_LINK_LINK_HAS_ALT_MESSAGE',
 214              'PLG_SYSTEM_JOOA11Y_LINK_PASS_ALT',
 215              'PLG_SYSTEM_JOOA11Y_LINK_STOPWORD',
 216              'PLG_SYSTEM_JOOA11Y_LINK_STOPWORD_TIP',
 217              'PLG_SYSTEM_JOOA11Y_LINK_URL',
 218              'PLG_SYSTEM_JOOA11Y_LINK_URL_TIP',
 219              'PLG_SYSTEM_JOOA11Y_MAIN_TOGGLE_LABEL',
 220              'PLG_SYSTEM_JOOA11Y_MISSING_ALT_LINK_BUT_HAS_TEXT_MESSAGE',
 221              'PLG_SYSTEM_JOOA11Y_MISSING_ALT_LINK_MESSAGE',
 222              'PLG_SYSTEM_JOOA11Y_MISSING_ALT_MESSAGE',
 223              'PLG_SYSTEM_JOOA11Y_NEW_TAB_WARNING',
 224              'PLG_SYSTEM_JOOA11Y_NEW_TAB_WARNING_TIP',
 225              'PLG_SYSTEM_JOOA11Y_OFF',
 226              'PLG_SYSTEM_JOOA11Y_ON',
 227              'PLG_SYSTEM_JOOA11Y_PAGE_OUTLINE',
 228              'PLG_SYSTEM_JOOA11Y_PANEL_HEADING_MISSING_ONE',
 229              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_BOTH',
 230              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_ERRORS',
 231              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_HIDDEN',
 232              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_ICON',
 233              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_NONE',
 234              'PLG_SYSTEM_JOOA11Y_PANEL_STATUS_WARNINGS',
 235              'PLG_SYSTEM_JOOA11Y_QA_BAD_ITALICS',
 236              'PLG_SYSTEM_JOOA11Y_QA_BAD_LINK',
 237              'PLG_SYSTEM_JOOA11Y_QA_BLOCKQUOTE_MESSAGE',
 238              'PLG_SYSTEM_JOOA11Y_QA_BLOCKQUOTE_MESSAGE_TIP',
 239              'PLG_SYSTEM_JOOA11Y_QA_DUPLICATE_ID',
 240              'PLG_SYSTEM_JOOA11Y_QA_DUPLICATE_ID_TIP',
 241              'PLG_SYSTEM_JOOA11Y_QA_FAKE_HEADING',
 242              'PLG_SYSTEM_JOOA11Y_QA_FAKE_HEADING_INFO',
 243              'PLG_SYSTEM_JOOA11Y_QA_PAGE_LANGUAGE_MESSAGE',
 244              'PLG_SYSTEM_JOOA11Y_QA_PDF_COUNT',
 245              'PLG_SYSTEM_JOOA11Y_QA_SHOULD_BE_LIST',
 246              'PLG_SYSTEM_JOOA11Y_QA_SHOULD_BE_LIST_TIP',
 247              'PLG_SYSTEM_JOOA11Y_QA_UPPERCASE_WARNING',
 248              'PLG_SYSTEM_JOOA11Y_READABILITY',
 249              'PLG_SYSTEM_JOOA11Y_READABILITY_NOT_ENOUGH_CONTENT_MESSAGE',
 250              'PLG_SYSTEM_JOOA11Y_READABILITY_NO_P_OR_LI_MESSAGE',
 251              'PLG_SYSTEM_JOOA11Y_SETTINGS',
 252              'PLG_SYSTEM_JOOA11Y_SHORTCUT_SR',
 253              'PLG_SYSTEM_JOOA11Y_SHORTCUT_TOOLTIP',
 254              'PLG_SYSTEM_JOOA11Y_SHOW_OUTLINE',
 255              'PLG_SYSTEM_JOOA11Y_SHOW_SETTINGS',
 256              'PLG_SYSTEM_JOOA11Y_TABLES_EMPTY_HEADING',
 257              'PLG_SYSTEM_JOOA11Y_TABLES_EMPTY_HEADING_INFO',
 258              'PLG_SYSTEM_JOOA11Y_TABLES_MISSING_HEADINGS',
 259              'PLG_SYSTEM_JOOA11Y_TABLES_MISSING_HEADINGS_INFO',
 260              'PLG_SYSTEM_JOOA11Y_TABLES_SEMANTIC_HEADING',
 261              'PLG_SYSTEM_JOOA11Y_TABLES_SEMANTIC_HEADING_INFO',
 262              'PLG_SYSTEM_JOOA11Y_TEXT_UNDERLINE_WARNING',
 263              'PLG_SYSTEM_JOOA11Y_TEXT_UNDERLINE_WARNING_TIP',
 264              'PLG_SYSTEM_JOOA11Y_TOTAL_WORDS',
 265              'PLG_SYSTEM_JOOA11Y_VERY_DIFFICULT_READABILITY',
 266              'PLG_SYSTEM_JOOA11Y_WARNING',
 267          ];
 268  
 269          foreach ($constants as $constant) {
 270              Text::script($constant);
 271          }
 272  
 273          /** @var Joomla\CMS\WebAsset\WebAssetManager $wa*/
 274          $wa = $document->getWebAssetManager();
 275  
 276          $wa->getRegistry()->addRegistryFile('media/plg_system_jooa11y/joomla.asset.json');
 277  
 278          $wa->useScript('plg_system_jooa11y.jooa11y')
 279              ->useStyle('plg_system_jooa11y.jooa11y');
 280  
 281          return true;
 282      }
 283  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer