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;
/**
* The base class for a guideline
*
* @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 brickfield_accessibility_guideline {
/** @var object The current document's DOMDocument */
public $dom;
/** @var object The current brickfield CSS object */
public $css;
/** @var array The path to the current document */
public $path;
/** @var array An array of report objects */
public $report;
/** @var array An array of translations for all this guideline's tests */
public $translations;
/** @var bool Whether we are running in CMS mode */
public $cmsmode = false;
/** @var array An array of all the severity levels for every test */
public $severity = [];
/** @var array To store all the tests. */
public array $tests = [];
/**
* The class constructor.
* @param object $dom The current DOMDocument object
* @param object $css The current brickfieldCSS object
* @param array $path The current path
* @param null $arg
* @param string $domain
* @param bool $cmsmode
*/
public function __construct(&$dom, &$css, array &$path,
$arg = null, string $domain = 'en', bool $cmsmode = false) {
$this->dom = &$dom;
$this->css = &$css;
$this->path = &$path;
$this->cmsmode = $cmsmode;
$this->load_translations($domain);
$this->run($arg, $domain);
}
/**
* Returns an array of all the tests associated with the current guideline
* @return array
*/
public function get_tests(): array {
return $this->tests;
}
/**
* Loads translations from a file. This can be overriden, just as long as the
* local variable 'translations' is an associative array with test function names
* as the key
* @param string $domain
*/
public function load_translations(string $domain) {
$csv = fopen(dirname(__FILE__) .'/guidelines/translations/'. $domain .'.txt', 'r');
if ($csv) {
while ($translation = fgetcsv($csv)) {
if (count($translation) == 4) {
$this->translations[$translation[0]] = [
'title' => $translation[1],
'description' => $translation[2],
];
}
}
}
}
/**
* Returns the translation for a test name.
* @param string $testname The function name of the test
* @return mixed
*/
public function get_translation(string $testname) {
return (isset($this->translations[$testname]))
? $this->translations[$testname]
: $testname;
}
/**
* Iterates through each test string, makes a new test object, and runs it against the current DOM
* @param null $arg
* @param string $language
*/
public function run($arg = null, string $language = 'en') {
foreach ($this->tests as $testname => $options) {
if (is_numeric($testname) && !is_array($options)) {
$testname = $options;
}
$name = $testname;
$testname = 'tool_brickfield\local\htmlchecker\common\\checks\\'.$testname;
if (class_exists($testname) && $this->dom) {
$testname = new $testname($this->dom, $this->css, $this->path, $language, $arg);
if (!$this->cmsmode || ($testname->cms && $this->cmsmode)) {
$this->report[$name] = $testname->get_report();
}
$this->severity[$name] = $testname->defaultseverity;
unset($testname);
} else {
$this->report[$name] = false;
}
}
}
/**
* Returns all the Report variable
* @return mixed Look to your report to see what it returns
*/
public function get_report() {
return $this->report;
}
/**
* Returns the severity level of a given test
* @param string $testname The name of the test
* @return int The severity level
*/
public function get_severity(string $testname): int {
if (isset($this->tests[$testname]['severity'])) {
return $this->tests[$testname]['severity'];
}
if (isset($this->severity[$testname])) {
return $this->severity[$testname];
}
return brickfield_accessibility::BA_TEST_MODERATE;
}
}