Die Implementation wurde nach folgenden Schritten vollzogen:
\begin{enumerate}
	\item Server einrichten 
	\item Template erstellen
	\item Layout erstellen
	\item  Inhalt der Seitenelemente erstellen
\end{enumerate}



\subsection{Server}
Das Einrichten des Servers erfolgte durch die Installation und Konfiguration folgender  \\ Komponenten:
\begin{enumerate}\itemsep0pt
	\item Apache (Apache Software)  Foundation\footnote{\url{http://www.apache.org/}} 
	\item PHP (The PHP Group)\footnote{\url{http://www.php.net/}}
	\item MySQL (Oracle Corporation)\footnote{\url{http://dev.mysql.com/}}
	\item phpMyAdmin (\href{http://www.phpmyadmin.net/home_page/team.php}{phpMyAdmin development team})\footnote{\url{http://www.phpmyadmin.net/home_page/}}
	\item Aufgabenplanung zur Synchronisation (MySQL \textless ---\textgreater \ AD)
\end{enumerate}



\subsubsection{Apache}
Apache ist ein Webserver der Apache Software Foundation\footnote{\url{http://www.apache.org/foundation/}}. Er steht für viele Betriebssysteme zur Verfügung und ist einer der meistbenutzten Webserver der Welt. Die Installation kann problemlos über den Installer erfolgen. Installiert wurde die Version 2.2 für Windows. 

Abweichend zur Standardkonfiguration wurden in der Datei \emph{httpd.conf} Änderungen vorgenommen, um den Server auf die Gegebenheiten, wie Verzeichnisse, Servernamen und Zugangsberechtigungen einzustellen. 

Des Weiteren war die Konfiguration so zu verändern, dass PHP verwendet werden kann, der \emph{Rewrite} von den Adressen \emph{go} und \emph{webspace} auf die Adresse \emph{webspace.jena-optronik.de} durchgeführt wird und die Möglichkeit zur Verfügung steht die Software phpMyAdmin aus einem Browser heraus aufzurufen. 

Eine Aufzählung der Änderungen an der Standardkonfiguration des Apache finden Sie im Anhang \ref{apache_config}.



\subsubsection{PHP}
Als serverbasierte Programmiersprache kommt die Skriptsprache \emph{Hypertext Preprocessor} (PHP) zur Anwendung. Die Installation erfolgt auch hier über einen Installer und war ohne Probleme möglich. 

Die Konfiguration von PHP erfolgt über die Datei \emph{php.ini}. Mit der Installation wurde diese Datei jedoch nicht angelegt. Es wurden lediglich zwei Beispieldateien mitgeliefert (php.ini-development; php.ini-production). Diese Dateien können als Grundlage genutzt werden und müssen nur zu \emph{php.ini} umbenannt werden. 

Für die Anwendung im hier zu erstellenden Webportal, waren lediglich Änderungen die Verzeichnisse betrafen und Änderungen an den Einstellungen der Session erforderlich. Eine genaue Auflistung der Abweichungen zur Standardkonfiguration finden sich im Anhang \ref{php_config}. 



\subsubsection{MySQL}
MySQL ist ein relationales Datenbanksystem der Oracle Corporation. Das Datenbanksystem kann als Open-Source-Software, aber auch als Enterpriseversion käuflich erworben werden. Hier kommt die Open-Source-Version 5.5.25a zur Anwendung. 

MySQL wird ebenfalls über einen Installer installiert. Diesem sind bestimmte Fragen zu beantworten und damit ist das MySQL-Datenbanksystem auch schon konfiguriert. 

Für das Webportal ist nun eine Datenbank mit der Bezeichnung \emph{jop\_intern} anzulegen. JOP\_intern ist ein Synonym für \glqq Jena-Optronik internes Webportal\grqq . 

\newpage

Der Datenbank wurden folgende Tabellen hinzugefügt:
\begin{itemize}\itemsep0pt
	\item departments (verbindet die Kurzbezeichnungen der Abteilungen mit der Langbezeichnung)
	\item links (Linksammlung)
	\item news
	\item rooms (Verbindet die Raumnummer bzw. -bezeichnung mit einer Telefonnummer für das Telefonverzeichnis)
	\item termine
	\item whoiswho (Daten der Mitarbeiter)
	\item banned (Liste von Mitarbeiter, welche nicht im Who is Who angezeigt werden sollen.)
\end{itemize}
Die Struktur der Tabellen ist dem Anhang \ref{mysql_config} zu entnehmen.



\subsubsection{phpMyAdmin}
Das Datenbankverwaltungsprogramm \emph{phpMyAdmin} ist als zip-Datei herunterzuladen. Diese Datei enthält die Quellcode-Dateien des Programms. Es handelt sich um eine Browseranwendung. Die zip-Datei ist in das Verzeichnis, über welches auch der Aufruf der Anwendung erfolgen soll, zu entpacken. Anschließend ist die Konfigurationsdatei \emph{config.sample.inc.php} in \emph{config.inc.php} umzubenennen. Die Datei \emph{config.sample.inc.php} ist eine Beispieldatei, wie eine Konfiguration aussehen könnte. Ausgehend von dieser Konfiguration sind nun, in der Datei \emph{config.inc.php} Änderungen an den Eigenschaftswerten vorzunehmen, um \emph{phpMyAdmin} auf die Serverumgebung einzustellen. Eine Auflistung dieser Änderungen sind dem Anhang \ref{phpmyadmin_config} zu entnehmen.



\subsubsection{Aufgabenplanung zur Synchronisation}
\label{update}
Mit der MMC-Snap-In Aufgabenplanung können automatisierte Aufgaben geplant werden, die Aktionen zu bestimmten Zeiten oder beim Auftreten bestimmter Ereignisse ausführen.\footnote{\url{http://technet.microsoft.com/de-de/library/cc721871\%28v=ws.10\%29.aspx}} 

Die Aufgabenplanung wird benötigt, damit einmal innerhalb von 24 Stunden die Synchronisation zwischen Active Directory und MySQL-Datenbank stattfindet. Dazu ist eine Aufgabe in der Aufgabenplanung zu erstellen. Wie dies funktioniert ist der Anleitung von Microsoft auf folgender Website zu entnehmen.  \\ \\ \url{http://technet.microsoft.com/de-de/library/cc748993\%28v=ws.10\%29.aspx} \\ \\ Für den Trigger\footnote{\url{http://technet.microsoft.com/de-de/library/cc748841\%28v=ws.10\%29.aspx}} ist die Zeit auf 01:00 Uhr einzustellen und täglich anzugeben. Für die Einstellungen der Aktion\footnote{\url{http://technet.microsoft.com/de-de/library/cc722129\%28v=ws.10\%29.aspx}} ist \emph{Programm starten} zu wählen, in der Skriptzeile ist \\ \\ \emph{C:\textbackslash wp\textbackslash php\textbackslash php.exe} \\ \\ und in der Argumentzeile \\ \\ \emph{-f c:\textbackslash wp\textbackslash Apache2.2\textbackslash htdocs\textbackslash update.php} \\ \\ einzutragen.



\subsection{Template}
\label{templates_description}
Das Template ist das Grundgerüst der Website. Es besteht aus einer HTML-Datei, welche einen prinzipiellen Aufbau der Website beinhaltet. Hinzukommen sogenannte \emph{Subparts}. Diese stellen Platzhalter dar, die von Typo3 mit anderem Inhalt ausgetauscht werden. In Typo3 wurde dazu die Startseite angelegt und ein Template, als Haupttemplate, dieser hinzugefügt.

In Typo3 werden die Seiten in einer Baumstruktur angelegt, wie die Abbildung \ref{image_baumstruktur} zeigt. 
\begin{figure} [!ht] 
	\center\includegraphics[scale=1.0]{images/Seitenbaum.png}
	\captionsetup{font=small}
	\caption{Baumstruktur des Webportals}
	\label{image_baumstruktur}
\end{figure}

\newpage

Die oberste Seite ist hier also die Startseite und somit die Wurzel (Root). Alle weiteren Seiten wurden unterhalb der Startseite angelegt. Somit ist das Template der Startseite auch für diese Seiten bindend. Es wurden für die Unterseiten lediglich \glqq extension Templates\grqq erstellt, um das Haupttemplate auf die Gegebenheiten der Unterseite einzustellen.
Das Haupttemplate enthält:
\begin{itemize}
	\item Typo3 - Konfiguration
	\item Typo3 - Setup
	\item Einstellungen zur Mehrsprachigkeit
	\item Informationen zum Einbinden von CSS- und Javascript-Dateien
	\item HTML-Objekt für das Logo
	\item Hauptmenü-Objekt
	\item HTML-Objekt für die Fußzeile
	\item Template-Objket
\end{itemize}

Die Abbildung \ref{image_template_main} zeigt das Grundgeräst jeder Seite des Webportals, welches durch das Haupttemplate festgelegt wird.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.48]{images/Box-Modell-main-template.jpg}
	\captionsetup{font=small}
	\caption{Grundgerüst der Website}
	\label{image_template_main}
\end{figure}

Ein vollständiges Listing des Haupttemplates und der extension Templates ist dem Anhang \ref{templates} zu entnehmen.



\subsection{Layout}
Der nächste Schritt der Implementation lag darin, dass genaue Layout festzulegen. Dazu wurde die Startseite mit typischem Inhalt, als Platzhalter für die jeweiligen Seitenelemente, gefüllt. Anschließend wurden diese Inhalte dem vorgesehenen Layout angepasst.

Die Grundlage für das Layout sind die Farben des Unternehmens. Für den Aufbau wurde sich an der öffentlichen Webpräsenz der Jena-Optronik GmbH\footnote{\url{http://www.jena-optronik.de}} orientiert. Somit bleibt das Corporate Design gewahrt. Die Abbildung \ref{layout_image} zeigt beispielhaft das Layout des Webportals.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.48]{images/startseite.png}
	\captionsetup{font=small}
	\caption{Website in der Browseransicht}
	\label{layout_image}
\end{figure}


Für das Layout wurde das Verfahren \emph{Cascading Style Sheets} (CSS)\footnote{\url{http://www.w3.org/Style/CSS/}}, in der W3C-Spezifikation 2.1\footnote{\url{http://www.w3.org/TR/CSS2/}}, angewandt. Mithilfe der externen Stylesheets wird
eine Trennung der inhaltlichen Gestaltung und der Darstellung vorgenommen. Jedes Seitenelement bringt so ein eigenes CSS mit. 



\subsection{Inhalt}
Dem Grundgerüst aus Abschnitt \ref{templates_description} ist zu entnehmen, dass es Elemente gibt, welche auf jeder Seite erscheinen und welche nur auf bestimmten Seiten erscheinen. Jede Seite enthält dafür drei Container. Diese Container sind:

\begin{itemize}
	\item content\_left - linke Seitenleiste
	\item content\_center - zentraler Container
	\item content\_right - rechte Seitenleiste
\end{itemize}

Die linke und rechte Seitenleiste enthalten die Elemente, welche auf allen Seiten erscheinen. Für die linke Seitenleiste sind dies die Elemente \emph{news\_sidebar} und \emph{termine\_sidebar}. Die rechte Seitenleiste beinhaltet die Elemente \emph{login} und \emph{links}. Der Container \emph{content\_center} ist das zentrale Element, welches die Seitenelemente enthält, welche nur auf bestimmten Seiten vorhanden sind. 

In den folgenden Abschnitte werden die Inhalte und die funktionellen Eigenschaften der einzelnen Seitenelemente näher erläutert.



\subsubsection{Elemente der linken Seitenleiste} 
Für die Seitenelmente der linken Seitenleiste wurde eine Typo3-Erweiterung, mithilfe der \\ Extension \emph{kickstarter} erstellt. Sie trägt den Namen \emph{left\_content} und ist im Verzeichnis  \\ \ \\ 
\emph{c:\textbackslash wp\textbackslash Apache2.2\textbackslash htdocs\textbackslash typo3conf \textbackslash ext\textbackslash left\_content\textbackslash pi1} \\ \ \\
durch die Datei \\ \ \\
\emph{class.tx\_leftcontent\_pi1.php} \\ \ \\
und der darin enthaltenen Klasse \\ \ \\
\emph{tx\_leftcontent\_pi1} \\ \ \\
repräsentiert. Die Klasse bringt die Methode \emph{main} mit, in welcher der Inhalt des Seitenelementes zu erzeugen und mittels der Variablen \emph{content} zu übergeben ist. Die Erweiterung ersetzt über das Haupttemplate den Subpart \glqq CONTENT\_LEFT\grqq .
\begin{quote}\begin{lstlisting}[breaklines=true, basicstyle=\scriptsize]
subparts.CONTENT_LEFT < plugin.tx_leftcontent_pi1
\end{lstlisting}\end{quote}

Die linke Seitenleiste enthält immer die Seitenelemente \glqq NEWS\_SIDEBAR\grqq \ und \\ \glqq TERMINE\_SIDEBAR\grqq . Diese zeigen jeweils die aktuellsten fünf Nachrichten bzw. Termine an. Sie werden durch die gleichnamigen Klassen repräsentiert. 
\begin{figure} [!ht] 
	\centering 
	\subfigure[NEWS\_SIDEBAR]{\includegraphics[scale=1.0]{images/news_sidebar.png}}
	\subfigure[TERMINE\_SIDEBAR]{\includegraphics[scale=1.0]{images/termine_sidebar.png}}
	\caption{Seitenelemente der linken Seitenleiste}
\end{figure}

Das Abrufen des Inhaltes eines Seitenelementes erfolgt immer nach demselben Schema. Dies ist natürlich in der entsprechenden PHP-Klasse so vorzusehen. Zunächst ist ein Objekt der Klasse, welche das Seitenelement repräsentiert, zu erstellen. Anschließend kann der Inhalt des Seitenelementes über den Aufruf der Methode \emph{getCONTENT} abgerufen werden. Mithilfe der Funktion \emph{echo} kann dieser Inhalt ausgegeben werden. Als Beispiel, hier das Listing, aus der Methode main, zum Einbinden des Inhaltes des Seitenelemente \glqq NEWS\_SIDEBAR\grqq .
\begin{quote}\begin{lstlisting}[breaklines=true, language=PHP, basicstyle=\scriptsize]
// News
require_once("fileadmin/php/class.NEWS_SIDEBAR.php");
$site = new NEWS_SIDEBAR();
$content .= $site->getCONTENT();
\end{lstlisting}\end{quote}



\newpage
\subsubsection{Elemente der rechten Seitenleiste}
Für die rechte Seitenleiste gilt das Gleiche wie für die linke Seitenleiste. Auch hier wurde mithilfe der Extension \emph{kickstarter} eine Typo3-Erweiterung erzeugt. Diese Erweiterung wird durch die Klasse, \\ \ \\
\emph{tx\_rightcontent\_pi1} \\ \ \\
in der Datei \\ \ \\
\emph{class.tx\_rightcontent\_pi1.php}, \\ \ \\
welche im Verzeichnis \\ \ \\
\emph{c:\textbackslash wp\textbackslash Apache2.2\textbackslash htdocs\textbackslash typo3conf\textbackslash ext\textbackslash right\_content} \\ \ \\
liegt, repräsentiert. Die rechte Seitenleiste enthält die Seitenelemente \glqq LOGIN\grqq \ und \glqq LINKS\grqq . 
\begin{figure} [!ht] 
	\centering 
	\subfigure[LOGIN - Anmeldung]{\includegraphics[scale=0.8]{images/anmeldung_formular.png}}
	\subfigure[LOGIN - Abmeldung]{\includegraphics[scale=0.8]{images/abmeldung_formular.png}}
	\subfigure[LINKS]{\includegraphics[scale=1.0]{images/links_ansicht.png}}
	\caption{Seitenelemente der linken Seitenleiste}
\end{figure}

Auch hier wird der Variablen \emph{content} der Methode \emph{main} der Inhalt der Seitenlemente \\ \glqq LOGIN\grqq \ und \glqq LINKS\grqq \ zugewiesen. Dieser Inhalt ersetzt den Subpart \emph{CONTENT\_RIGHT}, wie folgender Auszug aus dem Haupttemplate zeigt.
\begin{quote}\begin{lstlisting}[breaklines=true, basicstyle=\scriptsize]
subparts.CONTENT_RIGHT < plugin.tx_rightcontent_pi1
\end{lstlisting}\end{quote}

\newpage

Das Seitenelement \glqq LOGIN\grqq \ prüft ob der Anwender angemeldet ist. Ist dies der Fall, so wird ein Formular zum Abmelden ausgegeben. Ist er jedoch noch nicht angemeldet, so wird ein Formular zum Anmelden ausgegeben. 

Die Anmeldung erfolgt über das Active Directory (AD) mithilfe des Lightweight Directory Access Protocol (LDAP). Hier wird eine Verbindung zum AD aufgebaut und versucht eine Bindung über die Anmeldedaten des Anwenders zu erreichen. Kann keine Bindung erreicht werden, so ist davon auszugehen, dass die Daten falsch sind und der Anwender nicht autorisiert ist. Konnte eine Bindung erreicht werden, so ist der Anwender autorisiert und in der Session wird eine Variable \emph{username} angelegt und der Anmeldename des Anwenders dort hinterlegt. Des Weiteren wird ein Cookie mit der Session-ID erzeugt und im Browser hinterlegt. So ist es möglich den Anwender, bei einem erneuten Aufruf, wieder zu erkennen. 

Beim Abmelden wird die Variable \emph{username} aus der Session entfernt und die Session zerstört. Das Cookie im Browser wird auf ein Datum vor dem aktuellen Datum gesetzt, womit es nicht mehr gültig ist und vom Browser somit entfernt wird.

Das Seitenelement \glqq LOGIN\grqq \ ist durch die Klasse \emph{LOGIN} repräsentiert. Die Klasse ist in der Datei \emph{class.LOGIN.php} hinterlegt. 

Das Seitenelement \glqq LINKS\grqq \ gibt eine Liste mit Links aus. Klickt der Anwender auf einen dieser Links wird eine neue Registerkarte im Browser geöffnet und die entsprechende Website wird aufgerufen.
Die Adressen und mehrsprachigen Linktexte sind in der Tabelle \emph{links} (siehe Anhang \ref{mysql_config}) hinterlegt und werden von dort abgerufen und ein HTML-Link wird aus den \\ Daten geformt und zu einer Liste von Links zusammengestellt. Das Seitenelement \glqq LINKS\grqq wird durch die gleichnamige Klasse repräsentiert.



\newpage
\subsubsection{Elemente des \emph{Content Centers}}
Im \emph{Center Content} werden die eigentlichen Hauptseitenelemente dargestellt. Dabei können es für eine Seite auch mehrere sein, wie es bei der Startseite der Fall ist, denn hier werden die Seitenelemente \glqq WHOISWHO\_START\grqq \ und \glqq WELCOME\grqq \ eingebunden. In den folgenden Abschnitten werden die jeweiligen Seitenelemente den Seiten zugeordnet und die Funktionalität erläutert. 

\paragraph{WHOISWHO\_START} \ \\ \ \\
Das Seitenelement \glqq WHOISWHO\_START\grqq \ zeigt Informationen eines bestimmten Mitarbeiters an. Dabei gibt es zwei Ansichten. Die Erste ist die eingeklappte Ansicht, wie sie die Abbildung \ref{whoiswho_start_eingeklappt} zeigt. 

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/whoiswho_start_eingeklappt}
	\captionsetup{font=small}
	\caption{WHOISWHO\_START eingeklappte Ansicht}
	\label{whoiswho_start_eingeklappt}
\end{figure}

Diese zeigt nur bestimmte Informationen. Die zweite Ansicht ist die aufgeklappte Ansicht, wie sie die Abbildung \ref{whoiswho_start_ausgeklappt} zeigt. Hier werden alle Informationen angezeigt. Hat der Mitarbeiter zu bestimmten Datenfeldern keine Angabe gemacht, so wird dieses Datenfeld weggelassen. 

\newpage

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/whoiswho_start_ausgeklappt}
	\captionsetup{font=small}
	\caption{WHOISWHO\_START ausgeklappte Ansicht}
	\label{whoiswho_start_ausgeklappt}	
\end{figure}

Des Weiteren wird um die E-Mail-Adresse ein Link gelegt. Wird dieser angeklickt, so öffnet sich das verwendete E-Mail-Programm mit dem Formular zum Versenden einer E-Mail. Das Eingabefeld für den Empfänger wird auf die angeklickte E-Mail-Adresse eingestellt.

Ist der Anwender derjenige dessen Who is Who - Daten angezeigt werden, so wird dem Formular ein Link zum Bearbeiten der Daten hinzugefügt. Klickt der Anwender auf diesen, so wird er auf die Seite zum Bearbeiten der Who is Who - Daten weitergeleitet.

Das Seitenelement \glqq WHOISWHO\_START\grqq \ ist in die Seiten \emph{Startseite} und \emph{Who is Who - Info} eingebunden. Die Seite \emph{Who is Who - Info} wird immer dann aufgerufen, wenn auf einen Link mit einem Namen eines Mitarbeiters geklickt wird. Dabei wird an das Seitenelement \\ \glqq WHOISWHO\_START\grqq \ der Anmeldename des Mitarbeiters übergeben, dessen Daten angezeigt werden sollen. Dies geschieht über den GET-Parameter \emph{s} (z.B. s=juergen.doeffinger). Der Parameter \emph{s} wird an die Linkadresse angehängt. 



\newpage
\paragraph{WHOISWHO\_EDIT} \ \\ \ \\
Das Seitenelement \glqq WHOISWHO\_EDIT\grqq \ stellt dem Mitarbeiter ein Formular zur Verfügung in der er seine Who is Who - Daten ändern kann, wie es die Abbildung \ref{whoiswho_edit_form} zeigt. 

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.6]{images/whoiswho_edit_formular}
	\captionsetup{font=small}
	\caption{Formular zum bearbeiten der Who is Who - Daten}
	\label{whoiswho_edit_form}
\end{figure}

Dabei erfolgt das Hochladen oder Löschen eines Bildes unabhängig von der Änderung anderer Daten. 

Bevor ein Bild übernommen wird oder Daten gespeichert werden, wird eine Validierung des Bildes bzw. der Daten vorgenommen. So wird beim Bild überprüft, ob es sich um eine JPG-Datei handelt, das Bild nicht größer als 130x167 Pixel ist und ein Datenvolumen von 100 kB nicht überschritten wird. 

Bei den Eingabefeldern wird geprüft, ob der Mitarbeiter bestimmte Zeichen eingegeben hat, welche nicht verwendet werden dürfen. Beim Firmeneintritt wird geprüft, ob das angegebene Datum ein gültiges Datum ist. Ein nicht gültiges  Datum wäre beispielsweise der 30. Februar. Bei den Telefonnummer wird geprüft, ob diese in einem bestimmten Format angegeben wurden. So wird beispielsweise bei der Mobilrufnummer geprüft, ob der Anwender eine führende Null angegeben hat. Dies darf er nicht, da die Rufnummern nach ITU-Standard E.123\footnote{\url{http://www.itu.int/rec/T-REC-E.123-200805-I!Amd1}} in der internationalen Schreibweise angegeben werden. Bei dieser Schreibweise wird der internationalen Vorwahl ein Plus-Zeichen vorangestellt und die führenden Nullen weggelassen. Danach folgt die nationale Vorwahl ohne führende Null. Weiter folgen die Ortskennzahl und die Teilnehmernummer. Die Blöcke sind durch Leerzeichen zu trennen. Bei der Telefonnummer und Faxnummer muss der Anwender sich keine Gedanken machen, da er hier nur die jeweilige Teilnehmernummer einträgt. Bei Personalnummer und Raumnummer wird geprüft, ob nur Ziffern eingegeben wurden. Da die Felder \emph{Vorname} und \emph{Nachname} Pflichtfelder sind, wird hier zusätzlich geprüft, ob eine Eingabe erfolgt ist. Alle Fehler die festgestellt werden, werden zu einer Fehlermeldung zusammengefasst und dem Anwender als eine einzige Fehlermeldung angezeigt. 

Nach der Validierung der Daten werden diese in das Active Directory (AD) geschrieben. Kam es hier zu einem Fehler wird der gesamte Speichervorgang abgebrochen und eine entsprechende Fehlermeldung dem Anwender angezeigt. War die Speicherung ins AD erfolgreich, so werden die Daten in der Datenbank aktualisiert. Auch hier wird der Vorgang mit einer Fehlermeldung abgebrochen, wenn ein Fehler auftrat. Nach der Änderung der Daten in der Datenbank wird eine Erfolgsmeldung ausgegeben und auf die Startseite weitergeleitet. Die Erfolgsmeldung ist für den Fall gedacht, dass die Weiterleitung nicht funktioniert. 

Eine weitere Funktion, die dem Anwender zur Verfügung steht, ist die Hilfefunktion. Hier wird per Javascript eine weitere div-Box angelegt, welche einen Hilfetext enthält, wie es die Abbildung \ref{helpWindow} zeigt. 

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/whoiswho_edit_helpWindow.png}
	\captionsetup{font=small}
	\caption{Hilfefenster im Formular \emph{Who is Who - Daten bearbeiten}}
	\label{helpWindow}
\end{figure}

Welcher Hilfetext angezeigt wird, hängt davon ab, welchen Hilfe-Button der Anwender angeklickt hat oder in welches Eingabefeld er wechselt. Das Fenster muss nicht geschlossen und erneut aufgerufen werden. Wechselt der Anwender in ein anderes Eingabefeld, so wird der Hilfetext ausgetauscht, mit dem für das Eingabefeld in das er gewechselt ist. Damit das Fenster die Sicht auf ein Eingabefeld nicht versperrt, kann es innerhalb des inneren Browserfensters bewegt werden. Dazu muss der Anwender nur mit dem Maus-Cursor über das Fenster gehen, dann die linke Maustaste drücken und gedrückt halten und die Maus bewegen. Das Fenster bewegt sich mit der Mausbewegung mit. Lässt er die linke Maustaste wieder los, so bleibt das Fenster an der letzten Position stehen, auch wenn es geschlossen wird. Das heißt, ruft der Anwender nach Schließen des Hilfefensters,  dieses erneut auf, so wird es an der letzten Position erzeugt. Dies funktioniert aber nur solange die Seite nicht neu aufgerufen wurde.



\paragraph{WHOISWHO\_SUFU} \ \\ \ \\
Das Seitenelement \glqq WHOISWHO\_SUFU\grqq \ wird immer dann eingebunden, wenn im Menü der Menüeintrag \emph{Who is Who} ausgewählt wird, denn damit wird die \emph{Who is Who - Suchfunktion} aufgerufen, welche durch das Seitenelement \glqq WHOISWHO\_SUFU\grqq \ repräsentiert wird. Hier besteht nun für den Anwender die Möglichkeit einen Suchbegriff einzugeben. Anhand diesen, erfolgt eine Datenbankabfrage. Diese Abfrage liefert ein Ergebnis in Abhängigkeit davon, was als Suchkriterium angegeben wurde. Wurde hier \emph{Volltextsuche} ausgewählt, so werden alle Felder der Tabelle \emph{whoiswho} durchsucht. Wird jedoch etwas anderes ausgewählt, so wird nur dieses Feld durchsucht. Dabei werden nur die Datensätze als Ergebnis angezeigt, welche eine Übereinstimmung mit der Zeichenfolge aufweisen, die als Suchbegriff vorgegeben wurde. Das heißt, stehen in der Datenbank die Vornamen Heinz, Reinhard und Michael und wird als Suchkriterium \emph{Vorname} und als Suchbegriff nur der Buchstabe \emph{h} vorgegeben, so werden alle drei Vornamen als Ergebnis angezeigt, da die Suche nicht case-sensitive ist. Wird jedoch als Suchbegriff \emph{he} vorgegeben, so wird als Ergebnis nur der Datensatz von Heinz angezeigt. Um zu zeigen, wo der Treffer im Suchergebnis liegt, wird die Zeichenfolge des Suchbegriffes im Ergebnis gelb eingefärbt (siehe dazu Abbildung \ref{whoiswho_sufu}).

\newpage

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/whoiswho_sufu_treffer.png}
	\captionsetup{font=small}
	\caption{Who is Who - Suchfunktion mit Treffer}
	\label{whoiswho_sufu}
\end{figure}

Bei der Anzeige der Suchergebnisse wird auch hier zwischen eingeklappter und aufgeklappter Darstellung unterschieden. Lag ein Treffer beispielsweise in einem Feld das nur in ausgeklappter Darstellung angezeigt wird, so wird die ausgeklappte Darstellung angezeigt, ansonsten die Eingeklappte. Es ist aber trotzdem möglich sich die ausgeklappte Darstellung anzeigen zu lassen. Dazu muss der Anwender nur den Link \glqq mehr Informationen\grqq \ anklicken. Ebenfalls ist es möglich, wenn man seine eigenen Daten als Treffer angezeigt bekommt, diese zu Bearbeiten. Dazu muss der Anwender nur den Link \glqq Daten bearbeiten\grqq \ anklicken. Klickt der Anwender den Namen eines Mitarbeiters an, so wird er auf die \glqq Who is Who - Informationsseite\grqq \ weitergeleitet. Dort wird im der Datensatz, als Einziger, angezeigt.

Solange Javascript vorhanden bzw. nicht abgeschaltet ist, erfolgt die Suchanfrage per \\ HTTPRequest. Dazu wird in Javascript ein \emph{XMLHTTPRequest}-Objekt erzeugt. Dieses fordert dann den Inhalt des Seitenelementes \glqq WHOISWHO\_SUFU\grqq \ über den Aufruf der Datei \emph{request.php} an. In der Datei \emph{request.php} erfolgt der Aufruf des Seitenelementes ein wenig anders. Es kommt noch folgende Zeile hinzu, bevor die Methode \emph{getCONTENT} aufegerufen wird.
\begin{quote}
\begin{lstlisting}[breaklines=true, language=PHP, basicstyle=\scriptsize]
$projekte->setRequest(true);
\end{lstlisting}
\end{quote}
Mit dem Aufruf der Methode \emph{setRequest} und der Parameterübergabe \emph{true} wird der Klasse \emph{WHOISWHO\_SUFU} mitgeteilt, dass die Anfrage von einem HTTPRequest stammt. Mit der Information wird nicht der komplette Seiteninhalt zurückgegeben, sondern nur der Teil der die Suchergebnisse auflistet. Dieser wird dann in Javascript mit dem bisherigen Suchergebnis ausgetauscht. Ein weiterer Parameter ist der Datei \emph{request.php} zu übergeben. Es handelt sich um den Parameter \emph{r}. Dahinter verbirgt sich eine Nummer, über dass das angeforderte Seitenelement referenziert wird. Das hat den Hintergrund, dass die Datei \emph{request.php} für alle HTTPRequests des Webportals verwendet wird und in einer Switch-Case-Anweisung dieser Parameter ausgewertet wird. 

Eine andere Herangehensweise stellt sich bei nicht vorhandenem oder abgeschalteten \\ Javascript dar. Hier wird im Suchformular zusätzlich ein Button \emph{Suchen} hinzugefügt. Dieser muss angeklickt werden, um die Suche auszulösen.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/whoiswho_sufu_noscript.png}
	\captionsetup{font=small}
	\caption{Formular der Who is Who - Suchfunktion ohne Javascript}
\end{figure}



\paragraph{WELCOME} \ \\ \ \\
Das Seitenelement \glqq WELCOME\grqq \ kommt nur auf der Startseite zur Anwendung und zeigt einen Willkommensgruß mit diversen Hinweisen. Da dieser ziemlich statisch ist und sich kaum ändert, wurde hier darauf verzichtet die Texte auszulagern. Der Text ist also in den Quellcode integriert.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/welcome_ansicht.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{WELCOME}}
\end{figure}



\newpage
\paragraph{NEWS\_OVERVIEW} \ \\ \ \\
Das Seitenelement \glqq NEWS\_OVERVIEW \grqq \ wird in die Seite \emph{News - Overview} eingebunden und gibt eine Liste aller gültigen Nachrichten aus. Mit gültigen Nachrichten sind die Nachrichten gemeint, bei denen das aktuelle Datum im Gültigkeitszeitraum liegt.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/news_overview.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{NEWS\_OVERVIEW}}
\end{figure}

In Abhängigkeit ob der Anwender angemeldet ist und Nachrichten bereits verfasst hat, wird im oberen Bereich ein Formular angezeigt, bei dem der Anwender die Möglichkeit hat Nachrichten zu bearbeiten oder hinzuzufügen. 

Weiterhin hat der Anwender die Möglichkeit über einen klick auf den Titel der Nachricht zur vollständigen Ansicht der Nachricht zu wechseln. Klickt er auf den Namen des Verfassers, so wechselt er zur Ansicht der Who is Who - Daten des Verfassers. 



\paragraph{NEWS\_EDIT} \ \\ \ \\ 
Das Seitenelement \glqq NEWS\_EDIT\grqq \ wird in die Seite zum Hinzufügen oder Bearbeiten einer Nachricht eingebunden. Es stellt ein Formular zur Verfügung mit dem eine Nachricht erstellt oder bearbeitet werden kann.

\newpage

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/news_edit.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{NEWS\_EDIT}}
\end{figure}

Wie man sieht, gibt es die Möglichkeit der Nachricht ein Bild hinzuzufügen, eine Überschrift, Kurztext und einen Nachrichtentext einzugeben. Weiterhin kann man einen Gültigkeitszeitraum für die Nachricht vorgeben. Nur in diesem Zeitraum wird die Nachricht in den entsprechenden Seitenelementen angezeigt. Des Weiteren hat man die Möglichkeit auch ein vorhandenes Bild zu entfernen oder die Nachricht komplett zu löschen. Der Kurztext wird in den Listen angezeigt und der Nachrichtentext in der vollständigen Ansicht der Nachricht.

Das Hochladen und Löschen eines Bildes funktioniert auf die gleiche Weise wie beim Hochladen oder Löschen eines Bildes im \emph{Who is Who}. Es werden auch hier die gleichen Prüfungen vorgenommen. Allerdings darf das Bild hier eine Größe von 490x245 Pixel aufweisen.

Beim Speichern der Nachricht werden auch hier die Daten zunächst validiert. Allerdings beschränkt sich hier die Prüfung darauf, dass alle Felder ausgefüllt sind. Beim Gültigkeitszeitraum ist die Validierung schon aufwendiger. Hier wird geprüft, dass beide Daten ein gültiges Datum sind. Anschließend wird geprüft, ob das Ende des Gültigkeitszeitraums vor dem aktuellen \\ Datum liegt. Dann geht es weiter mit der Prüfung ob das Ende des Gültigkeitszeitraumes vor dem Beginn liegt. Wird eines dieser Kriterien erfüllt, so wird eine Fehlermeldung ausgegeben und das Speichern abgebrochen. 



\paragraph{NEWS\_ARTICLE} \ \\ \ \\
Das Seitenelement \glqq NEWS\_ARTICLE\grqq \ wird in die Seite \emph{News Artikel} eingebunden. Wie die Abbildung \ref{news_article} zeigt, wird auf dieser Seite eine Nachricht vollständig angezeigt.

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/news_artikel.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{NEWS\_ARTICLE}}
	\label{news_article}
\end{figure}



\paragraph{TERMINE\_OVERVIEW} \ \\ \ \\
Das Seitenelement \glqq TERMINE\_OVERVIEW \grqq \ wird in die Seite \emph{Termine - Overview} eingebunden und gibt eine Liste aller gültigen Termine aus. Mit gültigen Termine sind die Termine gemeint, bei denen das aktuelle Datum im Gültigkeitszeitraum liegt.
\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/termine_overview.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{TERMINE\_OVERVIEW}}
\end{figure}

In Abhängigkeit ob der Anwender angemeldet ist und Termine bereits verfasst hat, wird im oberen Bereich ein Formular angezeigt, bei dem der Anwender die Möglichkeit hat Termine zu bearbeiten oder hinzuzufügen. 

Weiterhin hat der Anwender die Möglichkeit über einen klick auf den Titel des Termins zur vollständigen Ansicht des Termins zu wechseln. Klickt er auf den Namen des Verfassers, so wechselt er zur Ansicht der Who is Who - Daten des Verfassers. 



\paragraph{TERMINE\_EDIT} \ \\ \ \\
Das Seitenelement \glqq TERMINE\_EDIT\grqq \ wird in die Seite zum Hinzufügen oder Bearbeiten eines Termins eingebunden. Es stellt ein Formular zur Verfügung mit dem ein Termin erstellt oder bearbeitet werden kann.

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/termine_edit.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{TERMINE\_EDIT}}
\end{figure}

Wie man sieht, gibt es die Möglichkeit dem Termin ein Bild hinzuzufügen, eine Überschrift, Kurztext und einen Text zum Termin einzugeben. Weiterhin kann man einen Gültigkeitszeitraum für den Termin vorgeben. Nur in diesem Zeitraum wird der Termin in den entsprechenden Seitenelementen angezeigt. Des Weiteren hat man die Möglichkeit auch ein vorhandenes Bild zu entfernen oder den Termin komplett zu löschen. Der Kurztext wird in den Listen angezeigt und der Text zum Termin in der vollständigen Ansicht des Termins.

Das Hochladen und Löschen eines Bildes funktioniert auf die gleiche Weise wie beim Hochladen oder Löschen eines Bildes im Who is Who. Es werden auch hier die gleichen Prüfungen vorgenommen. Allerdings darf das Bild hier eine Größe von 490x245 Pixel aufweisen.

Beim Speichern des Termins werden auch hier die Daten zunächst validiert. Allerdings beschränkt sich hier die Prüfung darauf, dass alle Felder ausgefüllt sind. Beim Gültigkeitszeitraum ist die Validierung schon aufwendiger. Hier wird geprüft, dass beide Daten ein gültiges Datum sind. Anschließend wird geprüft, ob das Ende des Gültigkeitszeitraums vor dem aktuellen Datum liegt. Dann geht es weiter mit der Prüfung ob das Ende des Gültigkeitszeitraumes vor dem Beginn liegt. Wird eines dieser Kriterien erfüllt, so wird eine Fehlermeldung ausgegeben und das Speichern abgebrochen. 



\paragraph{TERMINE\_ARTICLE} \ \\ \ \\
Das Seitenelement \glqq TERMINE\_ARTICLE\grqq \ wird in die Seite \emph{Termine Artikel} eingebunden. Wie die Abbildung \ref{termine_article} zeigt, wird auf dieser Seite ein Termin vollständig angezeigt.

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/termine_artikel.png}
	\captionsetup{font=small}
	\caption{Inhalt des Seitenelemtens \emph{TERMIN\_ARTICLE}}
	\label{termine_article}
\end{figure}



\paragraph{TVZ} \ \\ \ \\
Die Bezeichnung \glqq TVZ\grqq \ steht für Telefonverzeichnis. Das Seitenelement wird also in die Seite \emph{Telefonverzeichnis} eingebunden. Das Telefonverzeichnis (TVZ) stellt eine Suchfunktion dar und besteht aus einer Untermenge der \emph{Who is Who} - Daten.

Es besteht die Möglichkeit in folgenden Feldern suchen zu lassen:
\begin{itemize}
	\item Nachname bzw. Raumnummer
	\item Telefonnummer
	\item Abteilung
\end{itemize}
Im Ergebnis werden auch nur diese drei Felder angezeigt. Die Sortierung erfolgt nach der Angabe des Suchkriteriums. Auch die Liste wird danach gestalten, wie die folgenden Abbildungen zeigen.

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/tvz_name.png}
	\captionsetup{font=small}
	\caption{TVZ - Suchergebnis sortiert nach Nachname bzw. Raumnummer}
\end{figure}

\ \\

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/tvz_nummer.png}
	\captionsetup{font=small}
	\caption{TVZ - Suchergebnis sortiert nach Telefonnummer}
\end{figure}

\ \\

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/tvz_department.png}
	\captionsetup{font=small}
	\caption{TVZ - Suchergebnis sortiert nach Abteilung}
\end{figure}

\newpage

Wie bei der \emph{Who is Who} - Suchfunktion wird auch hier über einen HTTPRequest, dass Suchergebnis abgefragt und der entsprechende Seiteninhalt ausgetauscht. Steht Javascript nicht zur Verfügung oder wurde abgeschaltet, so wird auch hier ein Button \glqq Suchen\grqq \ angezeigt, wie es die Abbildung \ref{tvz_noscript} zeigt. Wird dieser angeklickt so wird die Suche ausgelöst. Allerdings wird dabei nicht ein bestimmter Seiteninhalt ausgetauscht, sondern die Seite komplett neu geladen.

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/tvz_noscript.png}
	\captionsetup{font=small}
	\caption{TVZ - Formular ohne Javascript}
	\label{tvz_noscript}
\end{figure}

Möchte man genauere Informationen zu einem Mitarbeiter bekommen, so kann dessen Name angeklickt werden und man wird zur Seite \emph{Who is Who - Info} weitergeleitet, auf der die \emph{Who is Who} - Daten des entsprechenden Mitarbeiters angezeigt werden.



\paragraph{PROJEKTE} \ \\ \ \\
Auch das Seitenelement \glqq PROJEKTE\grqq ist eine Suchfunktion und wird in die Seite \emph{Projekte} bzw. \emph{Projektgruppen}\footnote{Der Titel der Seite stand zur Zeit der Niederschrift noch nicht endgültig fest.} eingebunden. Hier kann durch Angabe einer Zeichenkette, nach der Bezeichnung eines Projektes gesucht werden. Je nach Eingabe eines Suchbegriffes erhält man eine Liste mit Projektnamen. Wählt man einen Projektnamen aus, so werden weitere Informationen zu diesem Projekt angezeigt, wie es die Abbildung \ref{projekte} zeigt. 

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/projekte.png}
	\captionsetup{font=small}
	\caption{Seitenelement - Projekte}
	\label{projekte}
\end{figure}

Diese Informationen sind die Anzahl der Mitglieder, die Beschreibungen und eine Liste der Mitglieder des Projektes. Die Liste gibt dabei den Vor- und Zunamen und den Anmeldenamen des Mitglieds wieder. Klickt man den Namen eines Mitgliedes an, so wird man auf die Seite \emph{Who is Who - Info} weitergeleitet und bekommt die \emph{Who is Who} - Daten des Mitglieds angezeigt.

Die Suche wird auch hier durch einen HTTPRequest ausgelöst und es wird wiederum nur der entsprechende Seiteninhalt ausgetauscht. Fehlt Javascript oder ist es abgeschaltet, so werden zwei Buttons zusätzlich angezeigt, wie es die Abbildung \ref{projekte_noscript} zeigt.  

\begin{figure} [!ht] 
	\center\includegraphics[scale=0.8]{images/projekte_noscript.png}
	\captionsetup{font=small}
	\caption{Seitenelement - Projekte ohne Javascript}
	\label{projekte_noscript}
\end{figure}

Der obere Button \glqq Suchen\grqq \ ist dafür zuständig die Suche, mithilfe des eingegebenen Suchbegriffes, nach Projektnamen auszulösen und somit die Liste mit Projektnamen neu zu laden. Klickt man auf den Button \glqq Daten anzeigen\grqq \ so werden die Informationen zu dem Projekt angezeigt, welches man vorher ausgewählt hat. In beiden Fällen wird nicht ein bestimmter Seiteninhalt ausgetauscht, sondern die Seite vollständig neu geladen.



\newpage
\subsection{Mehrsprachigkeit}
Die Mehrsprachigkeit wird durch die Klasse \glqq WP\_MESSAGES\grqq , welche in alle Seitenelemente einzubinden ist, sichergestellt. Diese Klasse stellt Methoden zur Verfügung, mit der ein Datenfeld für die Fehlermeldungen und ein Datenfeld für die jeweiligen Texte abgerufen werden kann. Die Datenfelder sind gleich aufgebaut. Es handelt sich um zweidimensionale Datenfelder. Mit der ersten Dimension wird der Text bzw. die Fehlermeldung referenziert und mit der Zweiten die Sprache. Dabei ist die Sprache durch einen Ländercode anzugeben. Dies ist für Deutsch \emph{de} und für Englisch \emph{en}. Ob die Seite in Deutsch oder Englisch angefordert wurde kann aus dem übergebenen GET-Parameter \emph{L} erkannt werden. Hier gilt 0 für Deutsch und 2 für Englisch. Wird kein Parameter \emph{L} beim Seitenaufruf übergeben, so wird standardmäßig die Null für Deutsch eingestellt. Es obliegt aber der jeweiligen Methode zu entscheiden, in welcher Sprache ein Text oder Fehlermeldung angezeigt werden soll. So sind beide Sprachen in den Datenfeldern enthalten.

Dem Konstruktor der Klasse \glqq WP\_MESSAGES\grqq \ ist, für die Texte, der Dateiname der xml-Datei zu übergeben, welche die Texte enthält. Dabei ist die Erweiterung \glqq .xml\grqq \ wegzulassen. Der Konstruktor  sorgt nun dafür, dass die entsprechenden Methoden aufgerufen werden, welche die Texte und Fehlermeldungen aus der angegebenen Datei und der Datei \emph{errors.xml} ausliest und in die Datenfelder parst.

Die XML-Dateien für die sprachspezifischen Texte ist nach folgender Struktur aufgebaut:
\begin{quote}\begin{lstlisting}[language=XML, basicstyle=\scriptsize]
<beliebiger Bezeichner>
	<msg>
		<id></id>
		<de></de>
		<en></en>
	</msg>
</beliebiger Bezeichner>
\end{lstlisting}\end{quote}
Die Datei \emph{errors.xml}, welche die Fehlermeldungen enthält, ist ähnlich aufgebaut.
\begin{quote}\begin{lstlisting}[language=XML, basicstyle=\scriptsize]
<errors>
	<error>
		<id></id>
		<de></de>
		<en></en>
	</error>
</errors>
\end{lstlisting}\end{quote}
Das Tag \emph{id} ist die Nummer der ersten Dimension des Datenfeldes und \emph{de} bzw. \emph{en} werden für das assoziative Array der zweiten Dimension als Schlüssel übernommen und erhalten als Wert den Text der von den Tags eingeschlossen wird. 

\newpage

Das folgende Listing zeigt exemplarisch einen Auszug aus der Datei \emph{errors.xml}.
\begin{quote}\begin{lstlisting}[language=XML, basicstyle=\scriptsize, breaklines=true]
<errors>
	<error>
		<id>100</id>
		<de>Es konnte keine Verbindung mit dem LDAP-Server hergestellt werden. (100)</de>
		<en>A connection with the LDAP-server could not be established. (100)</en>
	</error>
		.
		.
		.
</errors>
\end{lstlisting}\end{quote}
Wollte man nun diese Fehlermeldung abrufen, um sie anzuzeigen und würde das Datenfeld die Bezeichnung \glqq ErrorMessages\grqq \ haben, so würde dies wie folgt aussehen:
\begin{quote}\begin{lstlisting}[language=PHP, basicstyle=\scriptsize, breaklines=true]
echo ErrorMessages[100]['en'];
\end{lstlisting}\end{quote}

Die Programmierung des Parsers und der Seitenelemente bzw. der Klasse \glqq WP\_MESSAGES\grqq \ ist so gestaltet, dass es ohne großen Aufwand möglich ist weitere Sprachen der Seite hinzuzufügen. Eine Anleitung dazu wurde im Wiki der Firma Jena-Optronik GmbH hinterlegt.



\newpage
\subsection{Synchronisation MySQL-Datenbank \textless ---\textgreater \ Active Directory }
Wie im Abschnitt \ref{update} auf Seite \pageref{update} bereits beschrieben wurde, wird für die Synchronisation die Aufgabenplanung des Betriebssystems Microsoft Windows Server 2008 RC2 verwendet. Diese ist so eingestellt, dass die Synchronisation jede Nacht um 01:00 Uhr durchgeführt wird. Dazu wird das Script in der Datei \emph{update.php} ausgeführt.

Das Script erzeugt eine Instanz der Klasse \glqq UPDATE\grqq \ und ruft die Methode \emph{run} auf. Die Methode \emph{run} führt nun folgende Schritte durch:
\begin{enumerate}
	\item Prüfen ob alle Tabellen angelegt sind und wenn nicht diese anlegen und ggf. mit Standardwerten füllen.
	\item Benutzerdaten zwischen Active Directory und Datenbank vergleichen und bei Unterschieden die Daten in der Datenbank mit denen des Active Directory überschreiben. Ist noch kein Datensatz in der Datenbank vorhanden, dann einen Datensatz mit den Daten aus dem Active Directory anlegen. Bei beiden Maßnahmen ist zu prüfen, dass der Mitarbeiter nicht in der Tabelle \glqq banned\grqq \ gelistet ist. Ist er dort gelistet, so ist kein Update durchzuführen bzw. kein Datensatz anzulegen.
	\item In der Datenbank nach Datensätzen von aus dem Active Directory entfernten Mitarbeitern suchen und diese entfernen.
	\item In der Datenbank nach Datensätzen von in der Tabelle \emph{banned} gelisteten Mitarbeitern suchen und entfernen.
	\item Mitarbeiterbilder von nicht mehr vorhandenen Mitarbeitern entfernen.
	\item Nachrichten deren Gültigkeit abgelaufen sind, aus der Datenbank entfernen.
	\item Termine deren Gültigkeit abgelaufen sind, aus der Datenbank entfernen.
	\item Für Mitarbeiter die Geburtstag haben, einen Termin mit einem Geburtstagsgruß anlegen.
\end{enumerate}







