|
|
|
@@ -7,7 +7,7 @@ Es ist anzumerken, dass das aus \fullref{chap:anforderungserfassung} hervorgehen
|
|
|
|
|
opportunistischer Gespräche mit dem \ac{PO} geringfügige Änderungen erfahren hat.
|
|
|
|
|
|
|
|
|
|
\section{Setup einer TYPO3-Extension}
|
|
|
|
|
TYPO3-Extensions werden via Composer installiert \cite{bib:typo3-docs-managing-extensions}.
|
|
|
|
|
TYPO3-Extensions werden via Composer installiert \break\cite{bib:typo3-docs-managing-extensions}.
|
|
|
|
|
Um eine TYPO3-Extension zu erstellen, muss also ein Composer-Paket erstellt werden.
|
|
|
|
|
Um vermeidbare Komplexität zu verhindern, wird das Composer-Paket, welches die hier betrachtete
|
|
|
|
|
TYPO3-Extension darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt.
|
|
|
|
@@ -23,8 +23,8 @@ Spezifisch ist der \enquote{vergleichbare Funktionsumfang}, dass es Datenmodelle
|
|
|
|
|
Frontendlogik in Bezug auf die zuvor genannten Datenmodelle gibt.
|
|
|
|
|
|
|
|
|
|
\section{Digitization}
|
|
|
|
|
Die Phase der Digitizion nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten der realen Welt
|
|
|
|
|
in einer Art und Weise, sodass diese elektronisch weiterverarbeitet werden können\\\cite{bib:dougherty, bib:loebbecke}.
|
|
|
|
|
Die Phase der Digitizion nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten aus der realen Welt
|
|
|
|
|
in einer Art und Weise, die ermöglicht, dass diese elektronisch weiterverarbeitet werden können\break\cite{bib:dougherty, bib:loebbecke}.
|
|
|
|
|
Des Weiteren befasst sich diese Phase mit der Automatisierung und Befüllung dieser Daten,
|
|
|
|
|
wie zum Beispiel Web-Formularen \cite{bib:verhoef}.
|
|
|
|
|
Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werden.
|
|
|
|
@@ -137,7 +137,9 @@ Accountregistrierungen werden über den
|
|
|
|
|
Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} so angedacht:
|
|
|
|
|
\quotecite{Note: Login and a I forgot my password function is part of the core and not part of femanager.}
|
|
|
|
|
\cite{bib:typo3-docs-femanager}.
|
|
|
|
|
Im Folgenden wird der Registrierungsprozess im Detail beschrieben:\\
|
|
|
|
|
Im Folgenden wird der Registrierungsprozess im Detail beschrieben:
|
|
|
|
|
\\
|
|
|
|
|
\\
|
|
|
|
|
Grundlegend gibt es drei relevante Nutzerzustände vor der Registrierung:
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item Kein Mitglied
|
|
|
|
@@ -158,7 +160,7 @@ Stammdatenformular konfrontiert. Dabei handelt es sich um Angaben zum teilnehmen
|
|
|
|
|
Wird dieses Formular abgeschickt, ist die Teilnehmerregistrierung abgeschlossen.
|
|
|
|
|
|
|
|
|
|
\subsubsection*{Mitglied, mit Konto}
|
|
|
|
|
Ist ein Nutzer ein \ac{WN}-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite
|
|
|
|
|
Ist ein Nutzer ein \ac{WM}-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite
|
|
|
|
|
\enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular.
|
|
|
|
|
Hier kann sich das Mitglied anmelden. Tut es dies erfolgreich, erstellt der Controller einen neuen
|
|
|
|
|
Teilnehmer-Eintrag für den Frontend-Nutzer und fügt den Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} hinzu.
|
|
|
|
@@ -184,14 +186,15 @@ realisiert.
|
|
|
|
|
Anpassungen der versendeten Emails erfolgen durch Überschreiben der Email-Templates von Femanager.
|
|
|
|
|
Weiterleitungen zu bestimmten Seiten, nachdem ein Nutzer spezielle Events ausgelöst hat, können über TypoScript
|
|
|
|
|
konfiguriert werden \cite{bib:typo3-docs-femanager}. Logins werden über das TYPO3-Native Loginformular
|
|
|
|
|
gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden.
|
|
|
|
|
\cite{bib:typo3-docs-felogin}.
|
|
|
|
|
gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden
|
|
|
|
|
\break\cite{bib:typo3-docs-felogin}.
|
|
|
|
|
Für alle funktionalen Belange wird ein TYPO3-Plugin registriert. Dieses Plugin verfügt über einen
|
|
|
|
|
ActionController, der Nutzeranfragen an PHP-Funktionen (\enquote{Actions})
|
|
|
|
|
bindet.
|
|
|
|
|
In diesen Actions werden Fehlerbehandlungen durchgeführt, Datenmodelle der Domäne erstellt und in der
|
|
|
|
|
Datenbank persistiert, sowie Daten für die Anzeige im Frontend aufbereitet \cite{bib:typo3-docs-extbase}.
|
|
|
|
|
Neue Datenobjekte werden in Repositories registriert \cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers,
|
|
|
|
|
Neue Datenobjekte werden in Repository-Objekten registriert
|
|
|
|
|
\break\cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers,
|
|
|
|
|
werden jedoch nach dem \enquote{Inversion of Control}-Prinzip via Dependency Injection instanziiert und
|
|
|
|
|
der ActionController-Klasse über Methode übergeben \cite{bib:typo3-docs-di}.
|
|
|
|
|
Als problematisch erweisen sich hierbei bidirektionale Verbindungen zwischen Datenmodellen, wenn die Foreign Keys
|
|
|
|
@@ -256,7 +259,7 @@ Die Formfeldwerte können unverändert in der Datenbank persistiert werden.
|
|
|
|
|
\paragraph*{SelectSingle} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus
|
|
|
|
|
anderen Datenbanktabellen geben. Der Nutzer muss sich für genau ein Element entscheiden.
|
|
|
|
|
Beispiele für SelectSingle-Formfelder sind: Weinlage, Qualitätsstufe, Rebsorte und Geschmacksangabe.
|
|
|
|
|
SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet. Der TYPO3-Form-ViewHelper für
|
|
|
|
|
\break{}SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet. Der TYPO3-Form-ViewHelper für
|
|
|
|
|
\enquote{Select} akzeptiert eine Liste an Auswahlmöglichkeiten und erstellt selbstständig Option-HTML-Tags
|
|
|
|
|
für diese.
|
|
|
|
|
Die Formfeldwerte von SelectSingle-Formfeldern sind die
|
|
|
|
@@ -269,7 +272,8 @@ Somit sind diese nicht mehr sichtbar.
|
|
|
|
|
\\
|
|
|
|
|
\\
|
|
|
|
|
Eine komplexe Ausnahme stellt das SelectSingle-Formfeld \enquote{Category} dar, da TYPO3-Kategorien
|
|
|
|
|
Baumstrukturen sind \cite{bib:typo3-docs-sys-category}.
|
|
|
|
|
als Baumstrukturen abgebildet werden
|
|
|
|
|
\break\cite{bib:typo3-docs-sys-category}.
|
|
|
|
|
Um die Eltern-Kind-Beziehung der Baumstruktur erstichtlich zu machen, werden die Option-HTML-Tags einzeln rekursiv gerendert. Zunächst werden sämtliche Kategorien, deren
|
|
|
|
|
\ac{PID} 0 ist, dargestellt. Diese Elemente sind direkte Kinder des unsichtbaren Wurzelelementes. Für jede dieser Kategorien $a$ wird nun ein
|
|
|
|
|
Fluid-Partial aufgerufen,
|
|
|
|
@@ -302,7 +306,7 @@ Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitk
|
|
|
|
|
\caption*{Quelle: Eigene Darstellung}
|
|
|
|
|
\label{fig:timecomplexity-category}
|
|
|
|
|
\end{nicepic}
|
|
|
|
|
|
|
|
|
|
\clearpage
|
|
|
|
|
|
|
|
|
|
Auf Optgroup-HTML-Tags wurde bewusst verzichtetet.
|
|
|
|
|
Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown auswählbar sind.
|
|
|
|
@@ -313,10 +317,11 @@ von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unt
|
|
|
|
|
Baumblättern und -Zweigen nicht ohne weiteres möglich wäre. Diese Entscheidung wäre jedoch
|
|
|
|
|
benötigt, um zwischen einem Optgroup-Tag und einem Option-Tag abzuwägen.
|
|
|
|
|
|
|
|
|
|
\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus einer anderen
|
|
|
|
|
Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Anzahl dieser, eingeschlossen null, entscheiden.
|
|
|
|
|
Ein Beispiel für SelectMultiple-Formfelder ist: Weineigenschaften.
|
|
|
|
|
TYPO3-Fluid implementiert hierfür keinen ViewHelper \cite{bib:typo3-docs-fluid-form-viewhelpers},
|
|
|
|
|
\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ verschiedenen Elementen aus einer anderen
|
|
|
|
|
Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Auswahl dieser, eingeschlossen keine, entscheiden.
|
|
|
|
|
Ein Beispiel für SelectMultiple-Formfelder sind Weineigenschaften.
|
|
|
|
|
TYPO3-Fluid implementiert hierfür keinen ViewHelper
|
|
|
|
|
\break\cite{bib:typo3-docs-fluid-form-viewhelpers},
|
|
|
|
|
also wurde eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen.
|
|
|
|
|
Für alle Elemente $a \in A$
|
|
|
|
|
wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{<a.title>} und den
|
|
|
|
@@ -338,11 +343,11 @@ entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \en
|
|
|
|
|
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
|
|
|
|
|
|
|
|
|
|
\subsection{PDF- und QR-Code-Generierung}
|
|
|
|
|
Das dynamische Erstellen und Ausgeben des Versandbeilageblattes als PDF ist ein essenzieller Bestandteil des
|
|
|
|
|
Das dynamische Erstellen und Ausgeben des Datenblattes als PDF ist ein essenzieller Bestandteil des
|
|
|
|
|
Jahresauswahlprobenwerkzeuges, da dieses PDF die Schnittstelle zwischen ankommenden Weinen und dem System darstellt.
|
|
|
|
|
Daher ist der Gewinn, der durch dieses Werkzeug generiert wird, ohne dieses PDF stark eingeschränkt, da
|
|
|
|
|
Daher ist der Gewinn, der durch dieses Werkzeug generiert wird, ohne dieses Dokument stark eingeschränkt, da
|
|
|
|
|
einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten.
|
|
|
|
|
Wie im \fullref{chap:stand-der-forschung} erläutert, werden für die dynamische
|
|
|
|
|
Wie im \fullref{chap:stand-der-forschung} erläutert wird, werden für die dynamische
|
|
|
|
|
Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
|
|
|
|
\enquote{mpdf/mpdf} herangezogen und über Composer installiert.
|
|
|
|
|
|
|
|
|
@@ -354,7 +359,7 @@ Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} ei
|
|
|
|
|
Um Resourcen zu sparen und somit den Gewinn zu erhöhen, wird der QR-Code zu einem Base64-kodiertem Bild gerendert.
|
|
|
|
|
Das ist der Standardrückgabewert des QR-Code-Generators
|
|
|
|
|
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein Base64-kodiertes Bild als Quell-URL eines
|
|
|
|
|
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Hier wird der Gewinn erhöht, indem Arbeitszeit gespart wird,
|
|
|
|
|
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Das spart Arbeitszeit,
|
|
|
|
|
die sonst in das anderweitige Einbetten eines Bildes in einem PDF mit \enquote{mpdf} fließen müsste.
|
|
|
|
|
Die QR-Codegenerierung funktioniert konkret, indem ein neues QRCode-Objekt der QRCode-Klasse erstellt wird.
|
|
|
|
|
Diese Klasse nimmt ein QROptions-Objekt im Konstruktor, das in diesem Falle einige Stilattribute mit sich trägt.
|
|
|
|
|