Autoría | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace tool_brickfield\local\htmlchecker\reporters;use tool_brickfield\local\htmlchecker\brickfield_accessibility_reporter;/*** A static reporter.** Generates a list of errors which do not pass and their severity.** This is just a demonstration of what you can do with a reporter.** @package tool_brickfield* @copyright 2020 onward: Brickfield Education Labs, www.brickfield.ie* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class report_static extends brickfield_accessibility_reporter {/*** Generates a static list of errors within a div.* @return array A fully-formatted report*/public function get_report(): array {$output = [];foreach ($this->guideline->get_report() as $testname => $test) {$severity = $this->guideline->get_severity($testname);$translation = $this->guideline->get_translation($testname);if (isset($translation['title'])) {$title = $translation['title'];} else {$title = null;}if (isset($translation['description'])) {$description = $translation['description'];} else {$description = null;}switch ($severity) {case \tool_brickfield\local\htmlchecker\brickfield_accessibility::BA_TEST_SEVERE:$severitylevel = 'Error';$severitynumber = 1;break;case \tool_brickfield\local\htmlchecker\brickfield_accessibility::BA_TEST_MODERATE:$severitylevel = 'Warning';$severitynumber = 2;break;case \tool_brickfield\local\htmlchecker\brickfield_accessibility::BA_TEST_SUGGESTION:$severitylevel = 'Suggestion';$severitynumber = 3;break;}if (is_array($test)) {$testcount = 0;foreach ($test as $problem) {$testresult = [];if (is_object($problem)) {$testresult['text_type'] = $problem->message;if ($testname === "cssTextHasContrast" || $testname === "cssTextStyleEmphasize") {$stylevalue = $problem->message;$hexcolors = [];$stylematches = [];$weightmatches = [];preg_match_all("/(#[0-9a-f]{6}|#[0-9a-f]{3})/", $stylevalue, $hexcolors);preg_match("/font-style:\s([a-z]*);/", $stylevalue, $stylematches);preg_match("/font-weight:\s([a-z]*);/", $stylevalue, $weightmatches);$hexcolors = array_unique($hexcolors[0]);$testresult['colors'] = $hexcolors;$testresult['back_color'] = $hexcolors[0];$testresult['fore_color'] = $hexcolors[1];$testresult['font_style'] = $stylematches[1];$testresult['font_weight'] = $weightmatches[1];if ($testresult['font_weight'] === "bolder") {$testresult['font_weight'] = "bold";}$testresult['text_type'] = preg_replace('/(?=:).+/', '', $problem->message);}$testresult['type'] = $testname;$testresult['lineNo'] = $problem->line;if (isset($testresult['element'])) {$testresult['element'] = $problem->element->tagName;}// Edit description for certain cases.switch($testname) {case 'videosEmbeddedOrLinkedNeedCaptions':if ($problem->manual == true || $testcount > 0) {if ($problem->manual == true) {$testcount++;}$testresult['description'] = $description."<p>⚠️ ".$testcount.' items require manual verification because unable to detect captions.' .' This is most likely due to the video being unlisted, private, or deleted.</p>';} else {$testresult['description'] = $description;}break;default:$testresult['description'] = $description;break;}$testresult['severity'] = $severitylevel;$testresult['severity_num'] = $severitynumber;$testresult['title'] = $title;$testresult['path'] = count($this->path) > 1 ? $this->path[1] : "None";$testresult['html'] = $problem->get_html();$testresult['state'] = $problem->state;$testresult['manual'] = $problem->manual;}$output[] = $testresult;}}}return $output;}}