Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
/**
* Barrieren in den Vorlagen finden.
*
* php bin/a11y-scan.php Übersicht je Regel und Verzeichnis
* php bin/a11y-scan.php --files Übersicht je Datei
* php bin/a11y-scan.php templates/tickets nur diesen Pfad
* php bin/a11y-scan.php --list <pfad> Fundstellen mit Zeilennummer
*
* Geprüft wird der Quelltext. Was ein Skript zur Laufzeit nachträgt, sieht die
* Prüfung nicht – sie ersetzt keinen Durchgang mit Tastatur und Vorlese-Software.
*/
require __DIR__ . '/../src/Core/AccessibilityScan.php';
use OpenNIT\Core\AccessibilityScan;
$wurzel = dirname(__DIR__);
$args = array_slice($argv, 1);
$modus = 'dirs';
$pfade = [];
foreach ($args as $arg) {
if ($arg === '--files') {
$modus = 'files';
} elseif ($arg === '--list') {
$modus = 'list';
} else {
$pfade[] = $arg;
}
}
$sammle = static function (string $basis): array {
if (is_file($basis)) {
return [$basis];
}
$dateien = [];
$lauf = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($basis, FilesystemIterator::SKIP_DOTS));
foreach ($lauf as $datei) {
if ($datei->isFile() && $datei->getExtension() === 'php') {
$dateien[] = $datei->getPathname();
}
}
sort($dateien);
return $dateien;
};
$basen = $pfade ?: [$wurzel . '/templates'];
$gruppen = [];
$regeln = [];
$gesamt = 0;
foreach ($basen as $basis) {
foreach ($sammle($basis) as $datei) {
$funde = AccessibilityScan::pruefe((string)file_get_contents($datei));
$relativ = str_replace($wurzel . '/', '', $datei);
if ($modus === 'list') {
foreach ($funde as $fund) {
printf("%s:%d %-28s %s\n", $relativ, $fund['zeile'], $fund['regel'], $fund['fund']);
}
}
$gruppe = $modus === 'files' ? $relativ : dirname($relativ);
$gruppen[$gruppe] = ($gruppen[$gruppe] ?? 0) + count($funde);
foreach ($funde as $fund) {
$regeln[$fund['regel']] = ($regeln[$fund['regel']] ?? 0) + 1;
}
$gesamt += count($funde);
}
}
if ($modus === 'list') {
printf("\n%d Fundstelle(n)\n", $gesamt);
exit($gesamt === 0 ? 0 : 1);
}
arsort($regeln);
printf("%-34s %8s\n", 'Regel', 'Funde');
printf("%s\n", str_repeat('-', 44));
foreach ($regeln as $regel => $anzahl) {
printf("%-34s %8d\n", $regel, $anzahl);
}
$gruppen = array_filter($gruppen);
arsort($gruppen);
printf("\n%-52s %8s\n", 'Pfad', 'Funde');
printf("%s\n", str_repeat('-', 62));
foreach ($gruppen as $gruppe => $anzahl) {
printf("%-52s %8d\n", mb_strlen($gruppe) > 52 ? '…' . mb_substr($gruppe, -51) : $gruppe, $anzahl);
}
printf("%s\n", str_repeat('-', 62));
printf("%-52s %8d\n", 'Gesamt', $gesamt);
exit($gesamt === 0 ? 0 : 1);