diff --git a/app/HTML.php b/app/HTML.php
deleted file mode 100644
index ff4715a..0000000
--- a/app/HTML.php
+++ /dev/null
@@ -1,249 +0,0 @@
- als
Geschrieben.
- private $StatusMeldung = " "; //Falls Vorhenden eine Statusmeldung vom Script im HTML Text.
- private $DasMenu = " "; //Beinhaltet das Fertige Men�
- private $DerInhalt = " "; //Beinhaltet den Fertigen Inhalt
- private $HTMLDatei = " "; //Der inhalt der eingelesen wurde.
- private $HTMLHeader = " "; //Der HTML HEADER der eingelesen wurde.
- private $FertigesHTML = " "; //Das Fertige HTML bereit zum Ausgeben.
- private $isBuild = false; //Hier wird festgehalten ob $FertigesHTML aktuell ist oder nicht.
-
- //Der wird Generiert.(%%EchoTitle%%)
- //Dieser wird im HTML Code sp�ter als %%HTMLTitle%% aufgerufen.
-
- public function setHTMLTitle($neuerTitle){
- //Der Bisherige Title wird komplett �berschrieben und gleichzeitig ein neuer Gesetzt.
- $this->HTMLTitle = $neuerTitle;
- $this->isBuild = false;
- }
-
- public function addHTMLTitle($Hinzufugen){
- //Zu dem Bisherigen Titel wird noch etwas am ende hinzugef�gt.
- $this->HTMLTitle = $this->HTMLTitle.$Hinzufugen;
- $this->isBuild = false;
- }
-
- public function RemoveHTMLTitle(){
- //Der Titel wird Komplett gel�scht.
- $this->HTMLTitle = " ";
- $this->isBuild = false;
- }
-
-
- //Der HTML HEADER wird Generiert.(%%echoHeader%%)
- //Dieser wird im HTML Code sp�ter als %%echoHeader%% aufgerufen.
-
- public function setHTMLHeader($neuerHeader){
- //Der Bisherige Header wird komplett �berschrieben und gleichzeitig ein neuer Gesetzt.
- $this->HTMLHeader = $neuerHeader;
- $this->isBuild = false;
- }
-
- public function addHTMLHeader($Hinzufugen){
- //Zu dem Bisherigen Header wird noch etwas am ende hinzugef�gt.
- $this->HTMLHeader = $this->HTMLHeader.$Hinzufugen;
- $this->isBuild = false;
- }
-
- public function RemoveHTMLHeader(){
- //Der Header wird Komplett gel�scht.
- $this->HTMLHeader = " ";
- $this->isBuild = false;
- }
-
- public function importHTMLHeader($file){
- global $RUNTIME;
- //Der HTML Header wird aus einer Datei eingelesen und der bisherige gel�scht.
- $this->HTMLHeader = file_get_contents($RUNTIME['BASEDIR'].'/templates/'.$file);
- $this->isBuild = false;
- }
-
- //Der StatusText wird ge�ndert.(%%StatusMeldung%%)
- //Dieser wird im HTML Code sp�ter als %%StatusMeldung%% aufgerufen.
-
- public function setStatusMeldung($neueMeldung){
- //Die bisherige Status meldung wird komplett �berschrieben und gleichzeitig ein neuer Gesetzt.
- $this->StatusMeldung = $neueMeldung;
- $this->isBuild = false;
- }
-
- public function RemoveStatusMeldung(){
- //Die Meldung wird Komplett gel�scht.
- $this->StatusMeldung = " ";
- $this->isBuild = false;
- }
-
- //Ab hier wird das Men� Zusammengebaut. (%%EchoMenu%%)
-
- public function importTextMenu($neuesMenu){
- //Das Komplette Men� wird direkt importiert und das alte �berschreiben.
- $this->DasMenu = $neuesMenu;
- $this->isBuild = false;
- }
-
- public function importHTMLMenu($file){
- global $RUNTIME;
- //Das Komplette Men� wird aus einer Datei ausgelesen und das alte �berschrieben.
- $this->DasMenu = file_get_contents($RUNTIME['BASEDIR'].'/templates/'.$file);
- $this->isBuild = false;
- }
-
- public function addToMenu($html){
- //Es wird noch etwas ans Men� angehengt.
- $this->DasMenu = $this->DasMenu.$html;
- $this->isBuild = false;
- }
-
-
-
- //Der Seiten HTML Quelcode wird eingelesen.
-
- public function importHTML($file){
- global $RUNTIME;
- //Der HTML Quelltext wird aus einer Datei eingelesen.
- $this->HTMLDatei = file_get_contents($RUNTIME['BASEDIR'].'/templates/'.$file);
- $this->isBuild = false;
- }
-
- public function setHTML($htmlCode){
- //Der HTML Quelltext wird direkt gesetzt.
- $this->HTMLDatei = $htmlCode;
- $this->isBuild = false;
- }
-
- public function addNachHTML($htmlCode){
- //Der HTML Quelltext wird direkt gesetzt.
- $this->HTMLDatei = $this->HTMLDatei.$htmlCode;
- $this->isBuild = false;
- }
-
- public function addVorHTML($htmlCode){
- //Der HTML Quelltext wird direkt gesetzt.
- $this->HTMLDatei = $htmlCode.$this->HTMLDatei;
- $this->isBuild = false;
- }
-
- public function DeleteHTML(){
- //Der HTML Quelltext wird gel�scht.
- $this->HTMLDatei = " ";
- $this->isBuild = false;
- }
-
- //Der inhalt der Seite wird zusammen gesetzt (nicht der quelltext) (%%EchoInhalt%%)
-
- public function importSeitenInhalt($file){
- global $RUNTIME;
- //L�d einen fertigen Text aus einer datei.
- $this->DerInhalt = file_get_contents($RUNTIME['BASEDIR'].'/templates/'.$file);
- $this->isBuild = false;
- }
-
- public function setSeitenInhalt($html){
- //Setz den Seiteninhalt und L�scht den alten Komplett.
- $this->DerInhalt = $html;
- $this->isBuild = false;
- }
-
- public function importAndAddSeitenInhalt($file){
- global $RUNTIME;
- //L�d einen fertigen Text aus einer datei.
- $this->DerInhalt = $this->DerInhalt.file_get_contents($RUNTIME['BASEDIR'].'/templates/'.$file);
- $this->isBuild = false;
- }
-
- public function addToSeitenInhalt($html){
- //Es wird noch weitere Text an den Seiteninhalt angeh�ngt.
- $this->DerInhalt = $this->DerInhalt.$html;
- $this->isBuild = false;
- }
-
- public function GetSeitenInhalt(){
- //Der Seiteninhalt wird zur�ckgegeben.
- return $this->DerInhalt;
- }
-
- public function DeleteSeitenInhalt(){
- //L�scht den Seiten inhalt.
- $this->DerInhalt = " ";
- $this->isBuild = false;
- }
-
- public function ReplaceSeitenInhalt($tag, $text){
- //Ersezt Seiten Inhalt
- $this->DerInhalt = str_replace($tag, $text, $this->DerInhalt);
- }
-
- public function ReplaceLayoutInhalt($tag, $text){
- //Ersezt Layout Inhalt
- $this->HTMLDatei = str_replace($tag, $text, $this->HTMLDatei);
- }
-
- public function CompressHTML(){
- if($this->isBuild){
- $this->FertigesHTML = str_replace(" ", "", $this->FertigesHTML);
-
- $this->FertigesHTML = str_replace(" ", "", $this->FertigesHTML);
- }else{
- die("Es kann nur Fertiger HTML Code kompremiert werden.");
- return false;
- }
- }
-
- //Hier wird der Fertige HTML Code generiert.
- //Und alle 3 Teile, Men� Titel und inhalt zusammengef�gt.
- public function build(){
- //Der HTML Code wird zusammen gesetzt.
-
- $this->FertigesHTML = null; //Der Speicher wird gellert, falls schon einmal Quelltext generiert wurde.
- $this->FertigesHTML = $this->HTMLDatei; //Und der Unverarbeitete HTML Quelltext eingelesen.
-
- //Das Men� wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%EchoMenu%%", $this->DasMenu, $this->FertigesHTML);
-
- //Der inhalt wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%EchoInhalt%%", $this->DerInhalt, $this->FertigesHTML);
-
- //Die Status Meldung wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%StatusMeldung%%", $this->StatusMeldung, $this->FertigesHTML);
-
- //Der Titel wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%EchoTitle%%", $this->HTMLTitle, $this->FertigesHTML);
-
- //Der HTML Header wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%echoHeader%%", $this->HTMLHeader, $this->FertigesHTML);
-
- //Der Titel wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%datum%%", date("Y-m-dTH:i+2"), $this->FertigesHTML);
-
- //Der Counter wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%GET_SITE%%", isset($_GET['seite']) ? $_GET['seite'] : ' ', $this->FertigesHTML);
-
- //Die IP Adresse wird in den HTML Quellcode eingef�gt.
- $this->FertigesHTML = str_replace("%%GET_IP%%", isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER['REMOTE_ADDR'] : ' ', $this->FertigesHTML);
-
- // Add CSRF token
- $this->FertigesHTML = str_replace("%%CSRF%%", '', $this->FertigesHTML);
-
- $this->isBuild = true;
- }
-
- //Hier wird der Fertige HTML ausgegeben
- public function ausgabe(){
- if($this->isBuild){
- return $this->FertigesHTML;
- }else{
- die("Bitte erst den HTML Code zusammensetzen.");
- return false;
- }
- }
-
- }
-?>
\ No newline at end of file
diff --git a/app/TemplateBuilder.php b/app/TemplateBuilder.php
new file mode 100644
index 0000000..5feb870
--- /dev/null
+++ b/app/TemplateBuilder.php
@@ -0,0 +1,59 @@
+basedir = $basedir;
+ $this->name = $name;
+ }
+
+ public function parent(string $parent): TemplateBuilder
+ {
+ $this->parent = $parent;
+ return $this;
+ }
+
+ public function vars(array $vars): TemplateBuilder
+ {
+ foreach ($vars as $key => $val) {
+ $this->vars[$key] = htmlspecialchars(strval($val));
+ }
+ return $this;
+ }
+
+ public function var(string $key, string $val): TemplateBuilder
+ {
+ $this->vars[$key] = htmlspecialchars($val);
+ return $this;
+ }
+
+ public function unsafeVar(string $key, string $val): TemplateBuilder
+ {
+ $this->vars[$key] = $val;
+ return $this;
+ }
+
+ public function render(): void
+ {
+ $v = new TemplateVarArray($this->vars);
+ $basepath = $this->basedir.DIRECTORY_SEPARATOR;
+ if ($this->parent == null) {
+ require $basepath.$this->name;
+ } else {
+ $v['child-template'] = $basepath.$this->name;
+ require $basepath.$this->parent;
+ }
+ }
+}
diff --git a/app/util/TemplateVarArray.php b/app/util/TemplateVarArray.php
new file mode 100644
index 0000000..4a11959
--- /dev/null
+++ b/app/util/TemplateVarArray.php
@@ -0,0 +1,39 @@
+vars = $vars;
+ }
+
+ public function offsetExists(mixed $offset): bool
+ {
+ return true;
+ }
+
+ public function offsetGet(mixed $offset): mixed
+ {
+ return isset($this->vars[$offset]) ? $this->vars[$offset] : '';
+ }
+
+ public function offsetSet(mixed $offset, mixed $value): void
+ {
+ $this->vars[$offset] = $value;
+ }
+
+ public function offsetUnset(mixed $offset): void
+ {
+ unset($this->vars[$offset]);
+ }
+}