Zum Inhalt

Altlasten im Template-Baum

Historischer Kontext

Diese Seite listet typische Altlasten-Muster im Sachpool-Template-Baum auf: auskommentierte Legacy-Varianten, FastpublishCMS-Relikte, wiederkehrende Anti-Pattern. Sie ist nicht vollständig, sondern sammelt exemplarische Funde aus dem Code-Audit 2026-04 als Nachschlagewerk für zukünftige Aufräumarbeiten.

Für offene Handlungspunkte mit konkretem Fix-Vorschlag siehe die interne Datei HANDLUNGSEMPFEHLUNGEN.md im Repo-Root (nicht publiziert).

Typologie der Altlasten

Im Laufe der FastpublishCMS→WebEdition-Migration (2020–2025) sind vier wiederkehrende Muster entstanden:

  1. Auskommentierte FastpublishCMS-Blöcke — alter Code in <!-- ... --> oder <we:comment>-Wrappern, zur Referenz belassen.
  2. PHP5-mysql_*-Reliktemysql_query(), mysql_real_escape_string(), @mysql_fetch_array aus der PHP 5/7-Migrationsphase.
  3. Doppelte / parallele Code-Pfade — eine moderne Variante und ein alter Block im selben Template, verbunden durch einen Toggle (z. B. $useNew).
  4. Copy-Paste-Duplizierung — 2–4× identischer Block für unterschiedliche Ansichten statt gemeinsamem Include.

Beispiele

FastpublishCMS-Blöcke

searchmask.tmpl (Vertragsauskunft) enthält mehrere <we:comment>-Blöcke mit Referenzen auf drucken2.php — einer laut Migrationsgeschichte abgelösten Legacy-Druckmaske.

_detail-vergleichsportal.tmpl — auskommentierter alter Lizenz-Badge-Code per cfilter, auskommentierte link-rechner/link-download-Buttons, kommentierte prepareSQL="true"-Variante.

PHP5-Relikte

covomo.tmpl (Vergleichsportal Covomo) enthält einen großen auskommentierten Block mit mysql_query() / mysql_real_escape_string() / @mysql_fetch_array — PHP5-Datenbankzugriff. Der aktive Code nutzt bereits SachPoolDB::getInstance().

weiterbildung/frontend/weiterbildungs-funktionen.tmpl — kommentierte $_GET['id']-Zugriffe neben $_REQUEST['id'], Versionsreste aus drei Refactoring-Runden.

Doppelte Code-Pfade

contractdetails.tmpl (Vertragsauskunft, Template 158):

Der komplette switch über SPARTE_ID (KFZ / Hausrat / Haftpflicht / Gebäude / Rechtsschutz / Unfall) läuft identisch — einmal vor dem HTML-Block (Z. 72–114), einmal im HTML (Z. 254–294). Alle DB-Queries werden dadurch doppelt abgesetzt.

_detail-tarifrechner.tmpl (Tarifrechner) — Partner-Objekt wird zweimal per <we:object> geladen (Zeilen 9–14 und 26–92). Erster Block nur zum Kopieren der Werbefelder in Globals.

Copy-Paste-Duplizierung

kennzeichen-uebersicht.tmpl (Backend 238): Vier Ansichten (alle / sortiert / reserviert / frei) sind Copy-Paste — inklusive 4× dupliziertem Tablesorter-Init.

werbung-iteration.tmpl (Werbeeinblendung): 10 identische Banner-Blöcke (werbebanner1werbebanner10), statt Schleife.

Legacy-Debug-Reste

Debug-Toggles

searchstart.tmpl (Vertragsauskunft): $debug = false; als manueller Toggle, mehrere #echo var_dump(...)-Kommentare.

available-functions.tmpl (Template 214, Weiterbildung-Tools):

<?php var_dump($_SESSION["user"]["ID"]); ?>
— im Produktiv-Template! Zusätzlich in <we:comment> auskommentierte, aber leicht reaktivierbare print_r(get_defined_functions())-Aufrufe.

Debug-Echos in Fehlerpfaden

thinksurance.tmpl (Vergleichsportal): bei API-Fehler print '<pre>'; print_r($response); print '</pre>'; — Tokens und Nutzerdaten landen im HTML.

appriori.tmpl (Template 194): identisches Pattern im Fehlerpfad; gibt zusätzlich $api_key als Teil des Request-Objekts aus. Credential-Leak im Fehlerfall.

_detail-vergleichsportal.tmpl: Debug-Echo auskommentiert, nicht entfernt:

<?php //echo "x: " . $sach_lizenzname . " :y:" . $current_license . ":z"; ?>

Das Link-Modul mit %SACHUSER%-Platzhaltern stammt ursprünglich aus FastpublishCMS. Historisch auch %SACHPASS% — heute als „nicht verwenden, Sicherheitsrisiko" markiert, aber in mrmoney.tmpl (Vergleichsportal MrMoney) noch aktiv im Einsatz:

$link = str_replace("PASSWORT", $sach_pass, $link);

Dokument-/Template-Altablagen

  • /_login/vertragsauskunft/_del/ (ID 2487) — Altablage mit unveröffentlichten Dateien im Produktivsystem.
  • /loign-_3.html — Root-Dokument mit Tippfehler (loign statt login), unveröffentlicht.
  • 2541.html, 2542.html, edit.php, sidebar.php, entry.php — Root-Dokumente unklarer Herkunft, unveröffentlicht.

Tippfehler als Altlast

  • Template-Ordner sachpool-portal/compatiblity-layer (statt compatibility) — weit verbreitet in Includes.
  • Ordner sachpool-portal/gdv-abrechnungen-courtage-daten/cron/benachrichtung/ (statt benachrichtigung).
  • Template _kontaktormular-inc.tmpl (fehlt das „f").
  • DB-Feld Fahrzeug_Identfiz_Nr in Moped_bestellungen (statt Identifiz).
  • Objektklasse dasboard (statt dashboard, 0 Objekte).

Umgang mit Altlasten

Die Doku behält Altlasten sichtbar, damit bei Refactoring-Arbeiten nachvollziehbar ist, welche Muster historisch gewachsen sind. Neue Funktionen sollen die Muster nicht fortschreiben — stattdessen:

  • SQL immer über SachPoolDB::getInstance() + Prepared Statements.
  • Bootstrap-4 statt EasyUI für neues Frontend.
  • Config / Secrets in separate Dateien außerhalb des Docroot.
  • Auth-Checks immer mit $sach_userid-Vergleich gegen Objekt-Autoren.

Siehe auch