[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |