diff --git a/chapters/konzeption-entwicklung.tex b/chapters/konzeption-entwicklung.tex index 8bd3546..ed60c25 100644 --- a/chapters/konzeption-entwicklung.tex +++ b/chapters/konzeption-entwicklung.tex @@ -286,14 +286,15 @@ Damit sieht das Drop-Down-Menü aus wie eine Baumstruktur. Diese Herangehensweise erzeugt schlüssigen und lesbaren Programmcode und lässt sich unkompliziert umsetzen. Das senkt Entwicklungskosten und erhöht den Profit des Endkunden, da hierdurch weniger Zeit aufgewandt wird. Rekursiv aufgerufene For-Schleifen, die sich selbst erneut für alle Elemente aufrufen, -können jedoch zu einem Performanzproblem führen \cite{bib:schwarzer-vorlesung-alg}. +können zu einem Performanzproblem führen \cite{bib:schwarzer-vorlesung-alg}. Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachtet. Grundlegend, kann für diese Funktion kein Master-Theorem angewandt werden, -da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt \cite{bib:schwarzer-vorlesung-alg}. +da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt. Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird, sondern gleich groß bleibt. -Das verletzt die Bedingung $b>1$ des Master-Theorem, dargestellt als $T(n) = a*T(\frac{n}{b})+f(n)$. -Betrachten wir den Algortihmus, besteht er aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen +Das verletzt die Bedingung $b>1$ des Master-Theorem, definiert als $T(n) = a*T(\frac{n}{b})+f(n)$ +\cite{bib:schwarzer-vorlesung-alg}. +Der Algortihmus besteht aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen gleicher Länge. Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen. @@ -306,12 +307,12 @@ Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitk Auf Optgroup-HTML-Tags wurde bewusst verzichtetet. -Grund dafür ist, dass Optgroup-Titel an sich nicht als Option auswählbar sind. +Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown auswählbar sind. Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling}, die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte, auch direkt auswählbar sein sollte. Zudem besitzen Kategorie-Elemente kein Attribut das auf die Präsenz von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unterscheidung zwischen -Baumblättern und -Zweigen nicht ohne weiteres möglich ist. Diese Entscheidung wäre jedoch +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 @@ -368,7 +369,7 @@ das an \enquote{mpdf} gereicht wird. Um die Gestaltung und die Präsentation von kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten, wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird, diese mit TYPO3-Fluid befüllt wird und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten. -Hierfür wird ein TYPO3-StandaloneView instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben, +Hierfür wird ein TYPO3-StandaloneView des instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben, die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert \cite{bib:typo3-ref-standalone-view}. Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor @@ -379,3 +380,45 @@ Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird e Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser Header sind Content-Type und Content-Length. Abschließend werden als Response-Body die Bytes des generierten PDFs abgeschickt. Damit ist die Verbindung beendet und das PDF zum Nutzer übertragen. + +\subsection{Schnittstelle QR-Code-Scanner} +Es ist angedacht, dass Mitarbeiter über die App \enquote{QRBot} den QR-Code auf dem Einlieferungsschein einscannen. +Diese App ermöglicht es Nutzern für jeden eingescannten Code eine URL zu öffnen und den Wert des QR-Codes anstelle eines Platzhalters +in der URL einzufügen. +Hierfür bietet das Jahresauswahlprobenwerkzeug eine Schnittstelle bzw. eine Seite an, die eine Wein-\ac{UID} als +URL-kodierten GET-Parameter annimmt und diesen Wein als \enquote{eingegangen} markiert. +Um sicherzustellen, dass Weine nicht unautorisiert markiert werden, müssen sich Mitarbeiter mit einem Nutzerkonto +authentifizieren. Dieses Nutzerkonto muss Teil einer Mitarbeiter-Nutzergruppe sein. +Das Nutzerkonto wird von Redakteuren oder Administratoren im TYPO3-Backend erstellt und benötigt keiner Registrierung. +Nach einer Anmeldung bleibt diese Sitzung aktiv und verfällt erst nach längerer Inaktivität. +Wird ein Wein als \enquote{eingegangen} markiert, wird der betroffene Teilnehmer per Email informiert. +Hierzu wird die FluidEmail-Klasse des TYPO3-Cores herangezogen. +Sollte ein Wein bereits als \enquote{eingegangen} markiert sein, wird keine Email verschickt und dem Mitarbeiter wird kommuniziert, +dass keine Änderungen vorgenommen wurden. +Abschließend werden im Frontend allgemeine Daten über den Wein angezeigt, damit Mitarbeiter sich sicher sein können, +den richtigen Wein eingescanned zu haben. + +\subsection{Jahresauswahlproben- und Wein-Detailansichten} +Weine und Jahresauswahlproben sollen unter bestimmten Gegebenheiten einsichtig sein. +Hierzu gibt es eine Auflistung aller Jahresauswahlproben. Diese sind anklickbar, um eine Detailansicht der ausgewählten +Jahresauswahlprobe zu öffnen. Hier wird neben Metadaten der Jahresauswahlprobe eine Liste aller zur Einsicht berechtiger Weine +angezeigt. Diese Weine sind anklickbar, um auf eine Detailansicht der Weine zu gelangen. +Die Detailansichten für Jahresauswahlproben und Weine benötigen spezieller Autorisierung. +Diese sind: Jahresauswahlproben sind nur einsichtig, wenn sich das aktuelle Datum innerhalb des +Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet. +Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig. +Nach Abschluss einer Jahresauswahlprobe sind alle ihr angehörigen Weine öffentlich einsichtig. +Das hat den Hintergrund, dass Jahresauswahlproben Blindverkostungen sind +und niemand die Möglichkeit haben sollte, im Voraus Informationen über die teilnehmenden Weine in Erfahrung zu bringen. +Die Ergebnisse der Jahresauswahlproben sind öffentlich, also sind es die Weine nach Abschluss einer \ac{JAP} auch. +Mitarbeiter von Weinland Mosel, wenn mit einem solchen Account angemeldet, haben immer Einsicht in Wein-Detailansichten. +Die Wein-Detailseite verfügt außerdem über einen \enquote{Versandetikett drucken}-Button, der auf das Versand-PDF verlinkt. +Dieser Button ist nur für den zugehörigen Teilnehmer und Mitarbeiter verfügbar. +Diese Daten, Fakten und Restriktionen werden serverseitig kontrolliert, um Manipulationen des Nutzers auszuschließen. +Um das zu realisieren werden Daten mit Fluid-Templates konditionell dargestellt und über Fluid-ViewHelper Links +zu anderen Ansichten generiert. Diese ViewHelper übergeben Parameter. Die hierfür relevanten Parameter der verschiedenen +Ansichten sind beispielsweise Wein-\acp{UID} und \ac{JAP}-\acp{UID}. Um Informationen über den angemeldeten Nutzer, +wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigkeit, zu erlangen, wird sich +der Extbase-nativej Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}. + +\subsection{CSV-Export} diff --git a/dexes/literature.bib b/dexes/literature.bib index f63c531..2c79459 100644 --- a/dexes/literature.bib +++ b/dexes/literature.bib @@ -462,3 +462,11 @@ year = {2023}, note = {Zugriff: März 2023} } + +@misc{bib:typo3-ref-extbase-model-feuser, + author = {{TYPO3 Contributors}}, + howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_domain_1_1_model_1_1_frontend_user.html}", + title = {{TYPO3\\CMS\\Extbase\\Domain\\Model\\FrontendUser Class Reference}}, + year = {2023}, + note = {Zugriff: März 2023} +} diff --git a/images/class-diagram.png b/images/class-diagram.png index c70e0be..dc7effd 100644 Binary files a/images/class-diagram.png and b/images/class-diagram.png differ diff --git a/images/class-diagram.puml b/images/class-diagram.puml index 5b5a4e4..63924fa 100644 --- a/images/class-diagram.puml +++ b/images/class-diagram.puml @@ -156,6 +156,8 @@ class Jahresauswahlprobe #IMPLEMENTED_COLOR { -dateAllowRegistration_end: Date -dateAllowShow_start: Date -dateAllowShow_end: Date + -date_start: Date + -date_end: Date +getAllowedCategories(): List +setAllowedCategories(allowedCategories: List): void +getName(): String @@ -170,6 +172,10 @@ class Jahresauswahlprobe #IMPLEMENTED_COLOR { +setDateAllowShowStart(dateAllowShowStart: Date): void +getDateAllowShowEnd(): Date +setDateAllowShowEnd(dateAllowShowEnd: Date): void + +getDateStart(): Date + +setDateStart(dateStart: Date): void + +getDateEnd(): Date + +setDateEnd(dateEnd: Date): void +getUid(): Int +setUid(uid: Int): void } diff --git a/main.pdf b/main.pdf index 6d44c0d..676acfc 100644 Binary files a/main.pdf and b/main.pdf differ