getPathname());
if (isModalOrForm($path)) {
continue;
}
$source = $file->getContents();
// Look only INSIDE
…
: a field in a table cell is an inline
// editor by definition. Fields elsewhere on the page are a form.
foreach (preg_split('##', $source) as $segment) {
$open = strrpos($segment, '
is page, not row. Without this the whole file counted as
// one cell and every ordinary form failed.
if ($open === false) {
continue;
}
$cell = substr($segment, $open);
if (preg_match('#<(input|textarea)\b(?![^>]*type="(checkbox|radio|hidden)")#', $cell, $m)) {
$offenders[$path][] = trim(strtok(ltrim($cell), "\n") ?: $m[0]);
}
}
// Und dasselbe in
…
.
//
// Nachgetragen am 31.7.2026, weil genau hier ein Verstoß durchrutschte:
// die Liste der geplatzten Zahlungen trug je Zeile ein Textfeld für die
// Begründung und einen Knopf, der eine Methode am Seiten-Bauteil rief.
// Beides steht wörtlich in R20 unter „Verboten" — die Prüfung sah nur
//
und damit den Buchstaben statt des Sinns.
//
// Checkbox, Radio und