323

VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor
Page 2: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 2

1. Inhaltsverzeichnis

1. Inhaltsverzeichnis ...................................................................................................................... 2

2. Vorwort ...................................................................................................................................... 3

3. Technologie ............................................................................................................................... 5

4. Benutzersystem ......................................................................................................................... 8

5. Programme .............................................................................................................................. 10

5.1 Dateisystem ............................................................................................................................. 12

5.1.1. Laden von Dateien ................................................................................................................... 14

5.1.2. Freigabe von Verzeichnissen ................................................................................................... 22

5.1.3. Standardaktionen .................................................................................................................... 28

Erstellen von Verzeichnissen ........................................................................................................ 28

Kopieren/Verschieben von Dateien und Verzeichnissen .............................................................. 29

Löschen von Dateien und Verzeichnissen ..................................................................................... 31

Umbenennen von Dateien oder Verzeichnissen .......................................................................... 31

5.1.4. Download von Dateien ............................................................................................................ 32

5.1.5. Upload von Dateien ................................................................................................................. 33

5.1.6. JavaScript- und HTML-Dateien ................................................................................................ 35

5.2 Kontakte .................................................................................................................................. 36

5.2.1. Exportieren von Kontakten ...................................................................................................... 37

5.2.2. Bearbeiten von Kontakten ....................................................................................................... 40

5.3 Kalender ................................................................................................................................... 43

5.3.1. Laden der Einträge ................................................................................................................... 45

Bearbeiten von Einträgen ............................................................................................................. 48

Freigabe von Kalendern ................................................................................................................ 49

Anzeigen von Erinnerungen .......................................................................................................... 49

5.4 Chat.......................................................................................................................................... 51

5.5 „Datei speichern/öffnen“-Dialoge ........................................................................................... 55

6. Anhang ..................................................................................................................................... 57

Page 3: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 3

2. Vorwort

Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen

Vater, der im Sektor Informationstechnologie tätig ist, wurde mein Interesse an elektronischer

Datenverarbeitung noch weiter verstärkt. So hatte ich im Laufe der Jahre die Möglichkeit, auf dem

firmeneigenen Webserver Homepages zu testen und mein Wissen zu erweitern. In der 5. Klasse, wieder

im Unterricht am BRG Kepler, kam ich erstmals mit der serverseitigen Programmiersprache PHP in

Berührung. Es entstanden erste PHP-Seiten und bald darauf durfte ich auch unseren SQL-Server

uneingeschränkt nutzen. Mit den daraus resultierenden Möglichkeiten entstanden erste

„professionelle“ Websites, wie zum Beispiel www.regattateam.at, durch die ich meine beiden großen

Leidenschaften, Programmieren und Segeln, vereinen konnte.

Doch rasch stiegen meine Anforderungen und ich begann mich intensiv mit JavaScript zu beschäftigen,

um meinen Websites durch dynamische Funktionen zu erweitern. Selbstverständlich machte ich auch

Versuche mit Flash und Java, doch schon bald erkannte ich, dass diese Programmiersprachen nicht dem

entsprachen, was ich mir vorstellte.

Ich experimentierte in der folgenden Zeit mit JavaScript und entwickelte zahlreiche kleine Scripts, die

mir in meiner Fachbereichsarbeit von Nutzen sein sollten. Bisher hatte mir immer die Möglichkeit

gefehlt, diese einzelnen Scripts sinnvoll in einer Website zu kombinieren. Erst im Herbst 2006, als ich

meine eigene Homepage neu gestalten wollte, konnten all diese Methoden eingesetzt werden. Zu

diesem Zeitpunkt gab es in meiner Klasse, der damaligen 7b, immer wieder Diskussionen rund um das

damals in der ersten Beta-Version erschienene Betriebssystem Windows Vista. Ich hatte bereits die

Vorabversion des neuen Betriebssystems in Verwendung und versuchte nun, dessen Desktop-

Oberfläche als Website nachzubauen. In meiner Planung sollte das Startmenü als Hauptmenü der

Website verwendet werden und die einzelnen Seiten in ein „Fenster“ geladen werden. Nachdem das

Menü und die Desktopoberfläche fertig gestellt waren, ging ich den rechtlich korrekten Weg und schrieb

eine E-Mail an Microsoft Austria bevor ich die Seite veröffentlichte. Ich bat darum, das Design, welches

durch ein Copyright geschützt ist, verwenden zu dürfen. Die Antwort, die ich zurückbekam, war jedoch

recht deutlich. Die Website musste umgehend aus dem Internet genommen werden, da jede Verletzung

des Copyrights von Microsoft, auch zu nicht kommerziellen Zwecken, strafrechtlich geahndet wird.

Daher entfernte ich den Ordner mit der Website von unserem Webserver. Schon kurz darauf beschloss

ich aber, die Website doch zu veröffentlichen, diesmal jedoch mit selbst gestalteten Grafiken. Nach

mehreren Wochen, im Spätherbst 2006, war die erste Webapplikation entstanden, die in ihrer

Funktionalität der nun fertig gestellten Web-Oberfläche „VirtualPC“ ähnelt. Doch leider war das ganze

Projekt in der Zwischenzeit unübersichtlich geworden, und nachdem ich in einer einzelnen, mehrere

tausend Zeilen langen Datei einen Fehler selbst nach mehreren Stunden nicht finden konnte, stellte ich

die Arbeit kurzerhand wieder ein. Zum damaligen Zeitpunkt hatte ich ein, so schien es mir,

unüberwindbares Problem entdeckt: Da bei jedem Klick beinahe die gesamte Seite neu geladen werden

musste, entstand ein unglaublicher organisatorischer Aufwand und ein durch die hohen Ladezeiten

verursachtes Problem. Erst im Frühjahr 2007, während des Bewerbungsgespräches für einen Ferialjob,

sprach mein zukünftiger Arbeitgeber den Namen jener Technologie aus, mit der ich mich in den

folgenden Monaten intensiv beschäftigen sollte: AJAX. Noch am selben Tag informierte ich mich mit

Hilfe der freien Enzyklopädie Wikipedia und begann mit der Suche nach geeigneten Tutorials, die mir

den Einstieg erleichtern sollten. Nachdem ich fündig geworden war, stürzte ich mich in die Arbeit und

hatte wenige Wochen später ein voll funktionstüchtiges System zur Verwaltung der einzelnen Fenster.

Damit war der erste Grundstein des Projekts „VirtualPC“ gelegt. Im März 2007 war ich schließlich auf

einem sehr viel professionellerem Weg an jenem Punkt angekommen, an den ich bereits im Herbst des

Page 4: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 4

vorangegangen Jahres gelangt war. Doch erst zu Beginn der Sommerferien konnte ich eine erste Version

vorlegen, die ich meinem Informatiklehrer vorführte. Dieser willigte ein, das Projekt im Rahmen einer

Fachbereichsarbeit weiter zu betreuen. Fünf Wochen später glaubte ich mich bereits kurz vor der

Fertigstellung, zahlreiche „Programme“ waren in der Zwischenzeit entstanden. Zufrieden war ich

dennoch nicht. Erneut lief ich Gefahr, in dem Projekt, das inzwischen aus einem unübersichtlichen

Wirrwarr aus Codezeilen bestand, den Überblick zu verlieren. Um Ladezeiten zu verringern, wurden in

dieser ersten Version die „Programme“ erst beim Starten nachgeladen, was zu einigen Problemen führte.

Also entschloss ich mich im August, mit einer zweiten Version zu beginnen, in der der gesamte Code

bereits zu Beginn geladen werden sollte. Rasch stellte sich heraus, dass dadurch einige Probleme bereits

im Vorhinein ausgeschaltet wurden. Selbstverständlich wurde ich durch diese Umstellung um einige

Monate zurückgeworfen, da ich mit der Programmierung vollkommen von vorne beginnen musste und

nur die Struktur übernehmen konnte. Bis zur Abgabe meiner Disposition schaffte ich es dennoch, das

System erneut auf einen vorzeigbaren Stand zu bringen.

Im Laufe der folgenden Monate erneuerte ich zahlreiche Programme und verbesserte das Grundsystem.

Als Ergebnis dieser Arbeit entstand schließlich die Weboberfläche „VirtualPC“, die es registrierten

Benutzern erlaubt, Daten und Dateien über eine intuitiv zu bedienende Weboberfläche zu verwalten. Im

Vordergrund steht hierbei die Benutzerfreundlichkeit. Daher erinnert die Oberfläche oft an gängige

Systeme und Applikationen um den Nutzern einen einfachen Umstieg zu ermöglichen. Beispielsweise ist

die Startleiste, von der aus die einzelnen „Programme“ gestartet werden können, der Oberfläche des

Betriebssystems Apple Macintosh X nachempfunden, während sich die Taskleiste - die am oberen Rand

plaziert ist - an Windows- und Linux-Betriebssystemen orientiert.

Durch die Kombination der Funktionalität, der Möglichkeit zur einfachen Erweiterung und der

Benutzerfreundlichkeit ist es mir somit gelungen, eine hoffentlich erfolgreiche Erweiterung des World

Wide Web zu entwickeln, die auch andere Entwickler einlädt, das System noch weiter zu verbessern.

Zumindest zeigt dieses Projekt das Potential der weit verbreiteten Programmiersprache JavaScript, die

leider oft unterschätzt und ihren Konkurrenten Java und Flash untergeordnet wird.

Das Projekt ist unter folgender Adresse im Internet im zu erreichen: http://paul.laufer.at/virtualpc

Page 5: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 5

3. Technologie

Bei diesem Projekt kamen sich in erster Linie die Programmiersprachen PHP und JavaScript sowie die

Umgebungsbeschreibungssprache HTML zum Einsatz. Doch die wichtigste Technologie, die dieses

Projekt erst möglich machte, ist AJAX. Die Abkürzung steht für „Asynchronous JavaScript and XML“.

Diese Technologie fand erst in den letzten Jahren Einzug in die gängigen Webbrowser. Die Basis stellt

JavaScript dar, welches um ein einziges Objekt erweitert wurde, genannt XmlHttpRequest. Dieses Objekt

erlaubt es, mit Hilfe der Client-seitigen Programmiersprache JavaScript Inhalte in erster Linie im XML-

Format von einem Webserver nachzuladen. Dadurch ergeben sich folgende Möglichkeiten: Ein Benutzer

kann in seinem Webbrowser eine JavaScript-Funktion aufrufen, die eine Verbindung zu einem

Webserver herstellt. Währenddessen bleiben jedoch alle weiteren Funktionalitäten der Website

erhalten. Die besagte Funktion bekommt schließlich eine vom Server generierte Datei zurück. Somit

können - ohne lästiges Reloaden der Seite - Inhalte asynchron nachgeladen werden.

1Abbildung 1

1 Abbildung von: Online im Internet: URL: http://de.wikipedia.org/wiki/Bild:Ajax-vergleich.svg [Stand: 2007-11-

17]

Page 6: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 6

Durch die Möglichkeiten von AJAX ergeben sich selbstverständlich zahlreiche Vorteile gegenüber

klassischen Web-Anwendungen: Einerseits können die Ladezeiten erheblich verkürzt werden, da die

Seite nur einmal aufgebaut werden muss und lediglich der Inhalt nachträglich geändert wird. Des

Weiteren können Design und Funktionalität noch strenger getrennt werden, da eine klare Aufteilung in

Client-, bzw. Server-seitige Scripts vorliegt.

Der wesentliche Nachteil der neuen Technologie ist hingegen die unterschiedliche Implementierung in

verschiedenen Browsern, wodurch sich ein erheblicher technischer Aufwand ergibt, um eine Website

browserunabhängig zu gestalten. Natürlich gibt es bereits seit längerem Ansätze für einen asynchronen

Datenaustausch mit dem Webserver, nur waren solche Technologien bisher immer an PlugIns gebunden.

So existieren nach wie vor Java, Flash und andere Technologien, die es ermöglichen, eine Website

dynamisch zu gestalten.

Es entstehen jedoch durch alle diese Lösungsmethoden einige unvermeidliche Nachteile gegenüber

herkömmlichen Anwendungen: So nähern sich Web-Applikationen zwar immer mehr herkömmlichen

Desktop-Applikationen an, doch ist es beinahe unmöglich, einzelne Seiten sinnvoll zu verlinken bzw.

Lesezeichen zu erstellen. Weiters sind derartige Applikationen auf grafische Browser zugeschnitten und

bieten meistens keine Möglichkeit für stark sehbehinderte Benutzer. Damit können die Richtlinien für

barrierefreies Internet nur sehr schwer eingehalten werden.

Das folgende Beispiel zeigt, wie das Laden einer XML-Datei mit Hilfe des JavaScript-Objekts

XmlHttpRequest programmtechnisch aussieht:

In Zeile 1 wird ein neues XMLHttpRequest-Objekt erstellt, welches eine Verbindung zum Server herstellt.

Dieses Objekt ist der Grundstein jeder AJAX-Anwendung. Da das Objekt in den verschiedenen Browsern

auf unterschiedliche Weise erzeugt werden muss, erfolgt gleich hier eine Abfrage, welche Methode der

verwendete Browser unterstützt. Interessant ist auch, dass das Objekt bis zum Internet Explorer 7.0 als

ActiveX-Komponente zur Verfügung stand, und noch keine eigentliche Implementierung in JavaScript

hatte.2

In der zweiten Zeile wird die Funktion „open()“ des Objekts mit drei Parametern aufgerufen. Der erste

Parameter gibt an, ob die Argumente mittels „POST“ oder „GET“ übertragen werden. Als zweiter

Parameter wird die URL der Webadresse angegeben, von welcher die Inhalte geladen werden sollen.

Der dritte Parameter ist eine boolsche Variable mit den möglichen Werten „true“ oder „false“. Hier wird

festgelegt, ob der Aufruf asynchron oder synchron ablaufen soll. Wird dieser Wert auf „false“ gesetzt,

verhindert dies ein weiteres Ausführen der Seite bis zum Empfang der geladenen Werte.

var request = window.XMLHttpRequest ? new XMLHttpRequest() : new

ActiveXObject("MSXML2.XMLHTTP.3.0");

request.open("POST", url, true);

request.onreadystatechange = function() {

if(request.readyState == 4 && request.status == 200) {

callbackFunction(request.responseXML);

}

}

request.send(vars);

1

2

3

4

5

6

7

8

Page 7: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 7

In der dritten Zeile wird die Funktion „onreadystatechange()“ des XMLHttpRequest-Objekts definiert.

Diese Funktion wird vom Objekt aufgerufen, sobald sich seine readyState-Eigenschaft ändert. Hat diese

den Wert 4 erreicht, ist die vollständige Antwort auf die Anfrage übertragen. Diese wird in dem

Unterobjekt „responseXML“ gespeichert und kann von diesem verwendet werden.

In Zeile acht erfolgt nun der eigentliche Aufruf, der über die Funktion „send()“ initialisiert wird. Dieser

Funktion werden die zu übermittelnden Variablen übergeben.

Obwohl diese Technologie relativ neu ist, gibt es bereits zahlreiche namhafte Anwendungen, die sie

einsetzen und verwenden. So verwendet zum Beispiel die Web-Oberfläche „Microsoft Outlook Web

Access“ bereits seit mehreren Jahren einen Vorgänger der Technologie. Des Weiteren werden die

Möglichkeiten von der interaktiven Weltkarte „Google Maps“ ebenso genutzt, wie von dem

erfolgreichen Bookmark-System „del.icio.us“. Eines der beeindruckendsten Beispiele liefert jedoch das

noch nicht vollständig ausgearbeitete Projekt AjaxWrite welches eine, dem Textverarbeitungsprogramm

Microsoft Word ähnliche Oberfläche bietet.

Page 8: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 8

4. Benutzersystem

Hinter dem gesamten System der Weboberfläche „VirtualPC“ steht eine MySQL-Datenbank, auf die über

PHP zugegriffen wird. Auch die Benutzerdaten und die MD5-verschlüsselten Passwörter sind in dieser

gespeichert. Zusätzlich wird für jeden User ein Ordner angelegt, in dem sich unter anderem das

Dateisystem befindet.

Unter dem Hauptordner, der nichts mit der

eigentlichen Web-Applikation zu tun hat, gibt es

einen Unterordner „chats“, der als temporärer

Puffer für Chat-Nachrichten dient.

Im zweiten Unterordner „filesystem“ befinden

sich die gesamten Dateistrukturen aller User.

Jeder User wird durch einen Ordner

repräsentiert, der als Namen die jeweilige

UserID trägt. Diese ist in der Datenbank

abgespeichert und kann somit mit den

Benutzerdaten verknüpft werden.

In jedem dieser Benutzer-Ordner findet man

dieselbe Struktur vor:

Im Ordner „data“ befinden sich die Dateien, die

der User in sein Dateisystem hochgeladen hat.

Parallel dazu findet man im Ordner

„permissions“ die Lese- und Schreibrechte, auf

die später noch genauer eingegangen wird.

Im Ordner „Desktop“ werden alle Dateien abgelegt, die der User auf seinem Desktop speichert. Diese

Funktionalität ist zum derzeitigen Zeitpunkt noch nicht vollständig implementiert.

Im letzten Unterordner „contacts“ werden alle Kontakt-Bilder als JPEG-Dateien abgespeichert. Als

Namen tragen sie die Kontakt-Id. Zuletzt existiert noch eine Grafik-Datei namens „user.jpg“, in der das

Anzeigebild des jeweiligen Benutzers gespeichert ist.

Page 9: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 9

Um die Dateienfreigabe genauer zu erläutern, nehmen wir folgendes Beispiel zur Hand: Benutzer 1

erstellt in seinem Verzeichnis einen Ordner „my_share“. Schon beim Erstellen wird parallel ein Ordner

„my_share“ im Verzeichnis „permissions“ angelegt. Zusätzlich wird eine Textdatei erstellt, welche die

Lese- und Schreibrechte für dieses Verzeichnis enthält.

Der User gibt nun den erstellten Ordner dem Benutzer Test User (UserID: 2) frei und erlaubt ihm, seinen

Inhalt zu lesen und zu schreiben, nicht jedoch, ihn zu löschen. Dadurch entsteht am Server folgende

Dateistruktur:

In der Datei „my_share.txt“ steht folgender Inhalt:

In der ersten Zeile sind die Rechte für den User gespeichert, welcher den Ordner erstellt hat (Benutzer

1), er hat die UserID 1 und volle Schreib- und Leserechte (111). Die zweite Zeile repräsentiert die

gesetzten Werte für den Benutzer Test User (UserID 2). Er verfügt nicht über die Berechtigung, Dateien

zu löschen - daher ist der letzte Wert 0.

Jede Zeile in einer für die Rechte der einzelnen Benutzer zustänigden Textdatei setzt sich

folgendermaßen zusammen: Zuerst steht die UserID, welche durch ein Leerzeichen von einem drei

Zeichen langen Code getrennt ist, der die zugehörigen Rechte beinhaltet. Er besteht aus Nullen und

Einsen in der Reihenfolge lesen, schreiben und löschen.

Lädt nun ein Benutzer eine Datei in den Ordner „my_share“, werden die Rechte des Ordners für diese

Datei übernommen. Benutzer 1 hat daher keine Einschränkungen, während Test User Dateien nicht

löschen kann.

1 111

2 110

1

2

Page 10: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 10

5. Programme

Alle Fenster, die auf der Oberfläche von „VirtualPC“ gestartet werden, bauen auf einem JavaScript-

Objekt auf, welches die grundlegenden Funktionen bereitstellt und das Fenster erzeugt. Dieses Objekt

trägt den Namen „OBJ_BASEWINDOW“.

Wie in JavaScript üblich, wird ein Objekt als Funktion definiert. Anschließend wird ein Prototyp dieses

Objekts definiert, der die Funktionen und Variablen beinhaltet, auf die später zugegriffen werden kann.

Das Objekt „OBJ_BASEWINDOW“ stellt zahlreiche Funktionen zur Verfügung, die von den einzelnen

Programmen, beziehungsweise von der Oberfläche genutzt werden - so zum Beispiel die Funktion

„init()“ in Zeile 6, welche die Starteigenschaften wie Höhe, Breite, ID und z-Index ermittelt und den DIV-

Container erzeugt, der das Fenster anschließend beinhaltet.

In Zeile 66 wird noch ein neues Objekt des Typs „OBJ_TASKBARITEM“ erstellt, auf das hier nicht näher

eingegangen werden soll. Die notwendigen Eigenschaften „iconpath“, „id“ und „text“ werden gesetzt

und der Funktion „add()“ des globalen Objekts „TaskBar“ wird das neu erstellte Objekt vom Typ

„OBJ_TASKBARITEM“ übergeben. Damit wird das Fenster in der Taskleiste angezeigt und kann über

diese den Fokus erhalten.

var tobj = new OBJ_TASKBARITEM();

tobj.iconpath = this.iconpath;

tobj.id = this.id;

tobj.text = this.title;

TaskBar.add(tobj);

66

67

68

69

70

OBJ_BASEWINDOW.prototype = {

type: "OBJ_BASEWINDOW",

init: function()

{

4

5

6

7

function OBJ_BASEWINDOW() {

}

1

2

Page 11: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 11

Die zweite und beinahe genau so wichtige Funktion ist jene zum Schließen eines Fensters, die in Zeile 88

definiert wird. In den folgenden Zeilen wird das Parent-Objekt ermittelt, welches aus dem globalen

Array „Windows“ ausgelesen wird. Anschließend wird in Zeile 103 überprüft, ob das Parent-Objekt

selbst eine Funktion „close()“ besitzt. Sollte dies der Fall sein, wird diese Funktion aufgerufen. Dies ist

notwendig um es den Programmen zu erlauben, selbst Code auszuführen bevor sie geschlossen werden.

In Zeile 106 werden mit einer for-Schleife alle Unterfenster ermittelt. Es wird erneut das Fenster aus

dem globalen Array „Windows“ ausgelesen und in Zeile 114 die Funktion „close()“ des zugehörigen

Objekts vom Typ „OBJ_BASEWINDOW“ aufgerufen. Als Parameter wird die ID des Objekts übergeben.

In Zeile 115 wird die Funktion „remove()“ des globalen Objekts „TaskBar“ aufgerufen. Übergeben wird

die Fenster-ID. Damit wird das Fenster aus der Taskbar entfernt. In Zeile 117 wird das Objekt aus dem

globalen Windows-Array entfernt genau wie in der folgenden Zeile das HTML-Div-Objekt, welches das

Fenster repräsentiert.

Weitere wichtige Funktionen des Objekts „OBJ_BASEWINDOW“ sind „minimize()“, „maximize()“,

„bringToFront()“ und „titlechange()“, auf die hier jedoch nicht weiter eingegangen wird, da sie soweit

selbsterklärend sind und keine wesentlichen Neuerungen aufzeigen.

close: function(id)

{

...

if(WindowObj.close != null) WindowObj.close();

else

{

for(var i=0; i<WindowObj.base.subwindows.length; i++)

{

var subid = -1;

for(var j = 0; j<Windows.length; j++)

if(Windows[j].base.id ==

WindowObj.base.subwindows[i].base.id) subid = j;

if(subid != -1)

WindowObj.base.subwindows[i].base.close(subid);

}

TaskBar.remove(WindowObj.base.id);

Windows.splice(index, 1);

MainDiv.removeChild(WindowObj.base.obj);

}

88

89

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

Page 12: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 12

5.1 Dateisystem

Die Dateienverwaltung von „VirtualPC“ wird über ein Objekt vom Typ

„OBJ_FILESYSTEMWINDOW“ angesprochen.

Wie alle Programme hat auch das OBJ_FILESYSTEMWINDOW eine Eigenschaft „type“ über die es

eindeutig zugeordnet werden kann. In Zeile 7 wird eine Funktion „init()“ definiert, welche die Startwerte

setzt und ein Objekt vom Typ „OBJ_BASEWINDOW“ erstellt. In Zeile 9 wird das aktuelle Verzeichnis auf

das root-Verzeichnis (Eigene Dateien) gesetzt. In der darauf folgenden Zeile werden die Rechte für

dieses Verzeichnis gesetzt, die selbstverständlich vorerst noch uneingeschränkt sind. Anschließend wird

eine Instanz des Objekts „OBJ_BASEWINDOW“ als Unterobjekt erstellt und die entsprechenden Werte

für das Programm-Icon und den Titel gesetzt. Wie in Zeile 12 ersichtlich, müssen alle Namen in Deutsch

und Englisch angegeben werden - eine Auswahl erfolgt dann automatisch nach der beim Einloggen

gewählten Sprache.

Nachdem die entsprechenden Werte gesetzt sind, wird die Funktion „init()“ des Unterobjekts

aufgerufen, die unter Kapitel 5 beschrieben ist. In Zeile 18 wird das Objekt zum globalen Array

„Windows“ hinzugefügt.

Anschließend wird der HTML-String erstellt, der in den entsprechenden DIV-Container des

Unterobjektes geschrieben wird.

In weiterer Folge wird das Programm noch „dynamisch“ gestaltet, d.h. den Buttons werden nach

folgendem Schema Aktionen zugeordnet:

this.base.content_obj.innerHTML = str;

51

OBJ_FILESYSTEMWINDOW.prototype = {

type: "OBJ_FILESYSTEMWINDOW",

init: function()

{

if(this.CurrentDir== null) this.CurrentDir = '/';

if(this.Permissions == null) this.Permissions = '111';

this.base = new OBJ_BASEWINDOW();

this.base.title = {de:'Dateisystem', en:'Filesystem'};

this.base.iconpath = 'images/icons/filesystem.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Page 13: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 13

Wie in Zeile 69 ersichtlich, bezieht sich „this“ innerhalb der Funktion nicht mehr auf das Objekt vom Typ

„OBJ_FILESYSTEM“ sondern auf das DIV-Element, welches die Funktion aufgerufen hat. In Zeile 71 wird

hingegen mit „this.ChangeUpwards“ auf die Funktion „ChangeUpwards()“ des Programm-Objekts

verwiesen.

document.getElementById('Window'+this.base.id+'_

UpwardsDiv').onmouseout = function() {

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_

UpwardsDiv').onclick = this.ChangeUpwards;

68

69

70

71

Page 14: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 14

5.1.1. Laden von Dateien

Nachdem die Oberfläche der Dateienverwaltung erstellt wurde, werden beim Initialisieren des Objekts

vom Typ „OBJ_FILESYSTEMWINDOW“ zwei Funktionen aufgerufen: „LoadFiles()“ und „LoadTree()“

In dieser Fachbereichsarbeit wird nur die weitaus umfassendere Funktion „LoadFiles()“ behandelt. Der

Aufbau des Navigationsbaums erfolgt ohnedies nach einem ähnlichen Schema.

Am Anfang der Funktion wird ermittelt, ob es sich beim aufrufenden Objekt um ein HTML-Objekt oder,

wie beim Laden, um ein Objekt vom Typ „OBJ_FILESYSTEMWINDOW“ handelt. Es wird eine Variable

„obj“ definiert, die nun das JavaScript-Window-Objekt repräsentiert, entweder über „this“ (falls es sich

um einen internen Aufruf handelt) oder über die globale Funktion „GetWindowObj()“, die das

zugehörige JavaScript-Objekt zum jeweiligen HTML-Element ermittelt.

Anschließend wird in Zeile 86 die Adresse zusammengestellt, über die in Zeile 87 mit Hilfe der globalen

Funktion „getXmlFile()“ eine XML-Datei geladen wird. In Zeile 88 wird das Array „CurrentItems“ mit

einem leeren Array überschrieben, zu dem in weiterer Folge die Dateien als JavaScript-Objekte

hinzugefügt werden. In der darauf folgenden Zeile wird die Variable „root“ auf den Hauptknoten der

XML-Datei gesetzt Der Aufbau der Datei wird auf Seite 18 noch genauer beschrieben.

Über die URL wird eine PHP-Seite aufgerufen, welche die in der URL übergebenen Parameter verwertet

und eine XML-Datei erstellt. Wie in jeder PHP-Datei des Projekts, wird zuerst überprüft, ob der User

angemeldet ist. Wenn ja, wird weiterer Code ausgeführt.

In Zeile 8 wird der Content-Typ der Seite mittels der Funktion „header()“ auf eine XML-Datei gesetzt.

Nur so erkennt der Browser, dass es sich nicht um eine statische Website mit HTML-Code handelt. In der

var url = 'programs/filesystem/get_files.php?path='+obj.CurrentPath

+'&type='+obj.DirType+'&user_id='+obj.UserId;

var myXML = getXmlFile(url);

obj.CurrentItems = new Array();

var root = myXML.documentElement;

86

87

88

89

LoadFiles: function()

{

var obj = null;

if(this.type == "OBJ_FILESYSTEMWINDOW") obj = this;

else {

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

76

77

78

79

80

81

82

83

84

85

this.LoadFiles();

this.LoadTree(); 73

74

Page 15: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 15

folgenden Zeile wird die Datei „settings.php“ importiert, welche die notwendigen lokalen Pfade

gespeichert hat, wie zum Beispiel das Verzeichnis, in dem die Userdaten liegen.

Nachdem die über die URL übergebenen Parameter aktuelles Verzeichnis, Typ des Ordners und die

zugehörige UserID (nötig bei Freigaben) ausgelesen wurden, wird der Verzeichnispfad zusammengesetzt.

Hier wird natürlich nach dem Typ des Ordners unterschieden.

Zuerst soll hier das normale Auslesen von Ordnern gezeigt werden:

Anfangs liest die Funktion „GetPermission()“ die Rechte des aktuellen Verzeichnisses aus. Diese Funktion

befindet sich in der Datei „permissions.php“ und wird später noch genauer behandelt. Wichtig ist nur,

dass sie einen, wie in Kapitel 4 beschrieben, drei Zeichen langen String zurückgibt, der die Rechte im

Verzeichnis beinhaltet. In Zeile 235 wird abgefragt, ob der User ein Leserecht besitzt. Nur dann wird in

Zeile 237 der Rückgabewert der Funktion „getFiles()“ in die Variable „$files“ geschrieben.

default:

$permission = GetPermission($path, $datadir);

if($permission[0]==1)

{

$files = getFiles($path, $permission);

233

234

235

236

237

if($type=='Personal')

{

if(substr($getPath, 0,1) == '/') $path =

$datadir.$_SESSION['user_id'].'/data'.$getPath;

else $path = $datadir.$_SESSION['user_id'].'/data/'.$getPath;

}

elseif($type=='Share') $path = $datadir.$userid.'/data'.$getPath;

elseif($type=='ShareMain') $path = $datadir.$userid."/permissions/";

elseif($type=='Desktop') $path = $datadir.$userid."/Desktop/";

elseif($type=='Shares') $path = $datadir.'/';

20

21

22

23

24

25

26

27

28

header('Content-type:text/xml;');

include "settings.php";

8

9

Page 16: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 16

Zu Beginn der Funktion „getFiles()“ werden einige Variablen importiert, auf die man sonst innerhalb der

Funktion keinen Zugriff hätte. Anschließend wird in Zeile 58 ein neues Array definiert. In Zeile 59 wird

mit der Funktion „opendir()“ versucht, das gewünschte Verzeichnis zu öffnen. Ab der Zeile 61 werden

schließlich in einer Schleife alle Dateien ausgelesen. Die Dateinamen . oder .. repräsentieren das aktuelle

beziehungsweise das übergeordnete Verzeichnis und werden deshalb in Zeile 63 ausgefiltert. In Zeile 65

wird der Typ der Datei mittels der Funktion „filetype()“ ausgelesen. Mögliche Rückgabewerte dieser

Funktion sind „file“ oder „dir“, je nachdem, ob es sich um ein weiteres Unterverzeichnis oder um eine

Datei handelt. Ist letzteres der Fall, wird der Code ab Zeile 68 ausgeführt.

In Zeile 68 wird über die Dateiendung der Typ ermittelt. In den folgenden Zeilen wird der Name des

Dateityps aus einer Datenbanktabelle ausgelesen und zugeordnet. In Zeile 74 werden als Rechte

schließlich die Rechte des übergeordneten Verzeichnis gesetzt, die beim Funktionsaufruf mitübergeben

wurden.

$filetype = strrchr($path."/".$file, ".");

$query = "SELECT text FROM fs_filetypes WHERE filetype='".$filetype

."'";

$result = mysql_query($query);

$row = mysql_fetch_array($result);

$typetext = $row[0];

if($typetext == "") $typetext = "Unbekannter Dateityp";

$permission = $getPerm;

68

69

70

71

72

73

74

function getFiles($path, $getPerm)

{

global $size;

global $programdir;

global $loc;

global $getPath;

global $username;

global $datadir;

global $userid;

$files = array();

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($path."/".$file);

if($type == "file")

{

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

Page 17: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 17

In Zeile 85 wird mit der Funktion „filectime()“ das Erstellungs-Datum der Datei ausgelesen. Anschließend

wird das Datum in ein übliches Format umgewandelt. In den Zeilen 87-89 wird die Dateigröße ermittelt

und der Ästhetik wegen in eine passende Einheit umgerechnet.

In den Zeilen 91 bis 95 wird überprüft, ob eine zum Dateiformat passende Grafik existiert. Ist dies nicht

der Fall, wird die Datei „unbekannt.png“ angegeben, die ein leeres Datei-Icon zeigt.

Nachdem alle Werte ausgelesen wurden, wird ein eigenes PHP-Objekt für jede Datei erzeugt, dass dem

Array „$files“ hinzugefügt wird. Dieses Array ist schlussendlich der Rückgabewert der Funktion und wird

in Zeile 238, nach dem Funktionsaufruf in einer Schleife ausgelesen. Hierbei wird auf die im Array

vorhandenen PHP-Objekte zugegriffen.

foreach($files as $file)

{

echo '<file>';

echo '<name>'.$file->name.'</name>';

echo '<type>'.$file->type.'</type>';

echo '<dirtype>'.$file->type.'</dirtype>';

echo '<typedes>'.$file->type_des.'</typedes>';

echo '<action>'.$file->action.'</action>';

echo '<size>'.$file->size.'</size>';

echo '<creationtime>'.$file->creationtime.'</creationtime>';

echo '<image>'.$file->image.'</image>';

echo '<ext>'.$file->type.'</ext>';

echo '<path>'.$file->path.'</path>';

echo '<user_id>'.$file->userid.'</user_id>';

echo '<permissions>'.$file->permissions.'</permissions>';

echo '</file>';

}

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

$ts = filectime($path."/".$file);

$filecreationtime = date(d, $ts).".".date(m, $ts).".".date(Y, $ts)

." ".date(H, $ts).":".date(i, $ts);

$kilobytes = round((filesize($path."/".$file)/1024), 1);

if($kilobytes < 1024) $filesize = $kilobytes.' KB';

else $filesize = round($kilobytes/1024)." MB";

$image = substr($filetype, 1, strlen($filetype)-1).'.png';

if(!file_exists('../../images/filesystem/formats/big/'.$image))

{

$image = 'unbekannt.png';

}

85

86

87

88

89

90

91

92

93

94

95

Page 18: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 18

Die erstellte XML-Datei könnte schließlich folgenden Aufbau haben:

In diesem Beispiel ist in dem Verzeichnis nur ein Ordner mit dem Namen „abcd“ vorhanden. Der vorhin

erwähnte Hauptknoten der XML-Datei wäre in diesem Fall <files>. Der gesamte Inhalt befindet sich

zwischen diesem einleitenden und dem zugehörigen End-Tag </files>.

Innerhalb der Funktion „LoadFiles()“ des JavaScript-Objekts werden die einzelnen „<file>“-Unterknoten

in Zeile 94 mit der Funktion „getElementsByTagName()“ gesammelt ermittelt. Sie werden anschließend

in einer Schleife durchlaufen und ihre Werte in dem in Zeile 98 neu erstellten Objekt gespeichert.

Ausgelesen werden sie über die Eigenschaft „nodeValue“ des zugehörigen Knotens.

In den folgenden Zeilen wird der HTML-Code zusammengestellt, der in einer Tabelle die Dateien

darstellt. Mit den in der Funktion „load()“ beim Seitenaufruf ermittelten Werte „WindowWidth“ und

„WindowHeight“ wird errechnet, wie viele Elemente pro Zeile dargestellt werden können und ab wann

var values = myXML.getElementsByTagName("file");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

fobj = new Object();

fobj.id = i;

if(cv.getElementsByTagName('name')[0].hasChildNodes())

fobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('type')[0].hasChildNodes())

fobj.type =

cv.getElementsByTagName("type")[0].firstChild.nodeValue;

....

94

95

96

97

98

99

100

101

102

103

104

<?xml version="1.0" encoding="ISO-8859-1"?>

<files>

<file>

<name>abcd</name>

<type>dir</type>

<dirtype>Personal</dirtype>

<typedes>Ordner</typedes>

<action></action>

<size>0.1 KB</size>

<creationtime>30.10.2007 20:42</creationtime>

<image>ir.png</image>

<ext>dir</ext>

<path>/abcd</path>

<user_id>2</user_id>

<permissions>111</permissions>

</file>

</files>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Page 19: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 19

auf die Verwendung kleiner Datei-Icons zurückgegriffen werden muss. Nachdem der HTML-Code zur

Seite hinzugefügt wurde, werden die Ereignisbehandlungsroutinen definiert. Interessant ist hierbei das

Event „oncontextmenu“, welches ausgelöst wird, wenn der Benutzer mit der rechten Maustaste auf ein

Element klickt. Leider ist dieses Element nicht in allen Browsern umfassend implementiert, was die

Möglichkeit eines Ausbaus des VirtualPC weiter einschränkt.

In den Zeilen 187 und 188 wird, wie bereits erklärt, das zugehörige Window-Objekt zu dem die Funktion

aufrufenden HTML-Element ermittelt. In Zeile 189 wird überprüft, ob die HooverObj-Variable gesetzt

wurde. Dies ist der Fall, wenn sich ein Element im Drag&Drop-Modus befindet. Klickt man während

dieses Vorgangs mit der rechten Maustaste, soll selbstverständlich nichts ausgelöst werden. Andernfalls

wird in Zeile 192 überprüft, ob das window.event-Objekt existiert. Diese Abfrage ist notwendig, um auf

die browserspezifischen Eigenheiten einzugehen. Der InternetExplorer lässt die Mauskoordinaten nur

über dieses Element ermitteln, während ein Mozilla Firefox das Objekt nicht kennt. Notwendig sind die

Mauskoordinaten für die Anzeige eines Menüs. Für dieses gibt es ein speziell entwickeltes JavaScript-

Objekt namens OBJ_CONTEXTMENU, auf das hier nicht näher eingegangen wird.

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

if(parent.HoverObj == null)

{

var set;

if(window.event) {

set = {x:window.event.clientX, y:window.event.clientY,

zIndex:Window.base.zIndex, targetWindow:Window};

}

else {

set = {x:e.pageX, y:e.pageY, zIndex:Window.base.zIndex,

targetWindow:Window};

}

var myMenu = new OBJ_CONTEXTMENU(set);

187

188

189

190

191

192

193

194

195

196

197

198

Page 20: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 20

Im obenstehenden Code handelt es sich um das Hinzufügen eines „Einfügen“-Menüeintrags. In Zeile 201

wird ermittelt, ob sich überhaupt Elemente in der Zwischenablage befinden. Anschließend werden alle

Elemente in einer Schleife durchlaufen. Nur wenn sie vom Typ „file“ oder „dir“ (Datei oder Verzeichnis)

sind, ist ein „Einfügen“-Eintrag überhaupt sinnvoll. In Zeile 209 wird die Funktion „add()“ des Objekts

„myMenu“ vom Typ „OBJ_CONTEXTMENU“ aufgerufen. Ihr wird ein Objekt übergeben, welches in

var ok = true;

if(parent.ClipBoardData.length == 0) ok = false;

for(var i = 0; i<parent.ClipBoardData.length; i++)

{

if(parent.ClipBoardData[i].type != 'file' &&

parent.ClipBoardData[i].type != 'dir') ok = false;

}

if(ok)

{

myMenu.add({

id:0,

text:{de:'Einfügen', en:'Paste'},

iconpath:'images/contextmenu/paste.png',

click:function() {

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

for(var i = 0; i<ClipBoardData.length; i++)

{

if(parent.ClipBoardType == 'copy')

{

var url = 'programs/filesystem/copy.php?from='

+ClipBoardData[i].path+'&from_user_id='

+ClipBoardData[i].user_id+'&to='

+Window.CurrentPath+'&to_user_id='

+Window.UserId;

setRequest(url);

}

else

{

...

}

}

Window.LoadFiles();

Window.LoadTree();

ClipBoardData = new Array();

myMenu.hide();

}

});

}

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

128

219

220

221

222

223

224

227

228

229

230

231

232

233

234

235

Page 21: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 21

diesem Fall implizit erzeugt wird. Dieses Objekt besitzt die Eigenschaften „id“, „text“ und „iconpath“,

sowie eine Funktion „click()“, die aufgerufen wird, sobald man auf den Menüeintrag klickt. Innerhalb

dieser Funktion wird wie gewohnt das Eltern-Fenster ermittelt. Ab Zeile 216 werden in einer Schleife alle

Dateien in der Zwischenablage durchlaufen. Derzeit ist es nur möglich, ein einzelnes Objekt zur

Zwischenablage hinzuzufügen, doch um spätere Erweiterungen zu erleichtern, wurde hier bereits die

Möglichkeit mehrerer Objekte Rücksicht vorbereitet.

In Zeile 220 wird die HTTP-Adresse für die PHP-Datei zusammengestellt, welche für das Kopieren

zuständig ist. In Zeile 221 wird diese Seite über die globale Funktion „setRequest()“ aufgerufen. Diese

PHP-Seite wird über die globale Funktion setRequest in Zeile 221 aufgerufen. In den Zeilen 225-227 wird

dasselbe Verfahren zum Verschieben von Dateien angewandt.

Nachdem die Website aufgerufen wurde, werden die Dateien und der Baum eines Objekts vom Typ

„OBJ_FILESYSTEMWINDOW“ neu geladen, um die Veränderungen auch im Fenster sichtbar zu machen.

In diesem Fall wird das „Array“ ClipBoardData, das die Zwischenablage repräsentiert, mit einem leeren

Array überschrieben. Schlussendlich wird noch die Funktion „hide()“ des Objekts myMenu aufgerufen,

welche das Menü wieder entfernt.

Nach dem gleichen Schema werden auch andere Menüeinträge hinzugefügt, bis die Funktion

„show()“ aufgerufen wird, die das Menü einblendet.

In weiterer Folge werden die Aktionen für das Event „ondblclick“ gesetzt, das bei einem Doppelklick auf

ein Objekt ausgelöst wird. Hier wird in JavaScript unterschieden, welche Funktion bei welcher Datei

aufgerufen wird.

Zuletzt werden noch Funktionen für die Events „onmouseover“ und „onmouseout“ definiert, die nicht

nur das Datei-Icon blau unterlegen, sondern die aktuelle Datei zur Zwischenablage hinzufügen, wenn

man mit gedrückter Maustaste vom Dateinamen oder Icon wegfährt.

myMenu.show(); 248

Page 22: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 22

5.1.2. Freigabe von Verzeichnissen

Da das JavaScript-Objekt, welches das Fenster zur Verwaltung der Ordnerfreigaben behandelt, ähnlich

aufgebaut ist wie jedes andere Fenster, wird in diesem Kapitel nur mehr auf programmspezifische

Besonderheiten eingegangen. Details dazu finden sich im Anhang.

Der erste grundlegende Unterschied des „OBJ_SECURITYWINDOW“ zu „normalen“ Programmfenstern

ist, dass sich das Fenster immer über allen anderen befindet und erst geschlossen werden muss, bevor

ein Benutzer weiterarbeiten kann. Diese Sonderheit ist durch zwei Schritte gewährleistet: Erstens wird

die Eigenschaft zIndex des Unterobjekts vom Typ „OBJ_BASEWINDOW“ auf 4000 gesetzt. Dies ist ein

willkürlich gewählter Wert, welcher von den anderen Programmfenstern in der Praxis nie erreicht wird.

Zusätzlich wird ein eigener DIV-Container eingeblendet, der sich über die gesamte Seite spannt. Die z-

Index Eigenschaft dieses Containers hat den Wert 3999, er ist somit praktisch über allen anderen

Fenstern, die er verdeckt.

Nachdem in üblicher Vorgehensweise zuerst der HTML-String erzeugt und die Funktionen für die

Ereignisse „onclick“ der Buttons definiert wurden, ruft das Objet vom Typ

„OBJ_SECURITYWINDOW“ ähnlich wie beim Dateisystem zwei Funktionen auf, welche die Daten über

eine eigens erzeugte XML-Datei vom Server laden.

Beim Laden der Rechte werden wie schon im vorigen Kapitel der Pfad des Verzeichnisses und die UserID

an den Server geschickt. Dadurch wird eine eindeutige Zuordnung ermöglicht. In der zugehörigen PHP-

Datei wird anschließend eine Instanz der PHP-Klasse „FilePath“ erzeugt, welche den Pfad der

Permissions-Datei ermittelt.

Diese Klasse prüft bereits beim Erstellen einer neuen Instanz die Werte auf ihre Richtigkeit. Um den Pfad

der Rechte-Datei zu bekommen wird zuerst geprüft, ob es sich bei dem übermittelten Pfad überhaupt

um ein Verzeichnis handelt. In weiterer Folge wird im Pfad das Verzeichnis „data“ durch

„permissions“ ersetzt (siehe Kapitel 4) und die Endung „.txt“ angehängt.

Über die Funktion „file()“ werden die Zeilen der Permissions-Datei in ein PHP-Array geschrieben,

welches von Zeile 20 abwärts durchlaufen wird.

$lines = file($file->permissions_path.'.txt');

foreach($lines as $line)

{

19

20

21

$file = new FilePath($_GET['path'], $_GET['user_id']); 14

HideDiv.style.visibility = 'visible'; 9

this.base.zIndex = 4000; 17

Page 23: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 23

In Zeile 22 wird überprüft, ob es sich bei der aktuellen Zeile um die Rechte des angemeldeten Benutzers

handelt, die nicht veränderbar sind und deshalb auch nicht in der XML-Datei verwendet werden.

Ab Zeile 24 wird diese Datei erzeugt, die folgendermaßen aussehen könnte:

Wie schon beim Laden der Dateien werden auch hier die Daten in einzelnen JavaScript-Objekten

gespeichert, die einem Array hinzugefügt werden. Hier wird jedoch eine eigene Funktion aufgerufen, die

aus den Elementen anschließend HTML-Code erzeugt, der in der Website verwendet werden kann.

Im zweiten Bereich des Programmfensters werden die bekannten anderen Benutzer und Gruppen des

angemeldeten Users gezeigt. Diese werden über PHP mittels zwei SQL-Strings aus der Datenbank

geladen. Zuerst werden alle User geladen, die der Benutzer als Kontakt in seinem Kontakt-Programm

hinzugefügt hat.

Anschließend werden die Gruppen aus der Datenbank gelesen. Hierbei muss aber überprüft werden, ob

sich in einer Gruppe auch andere VirtualPC-Nutzer befinden und nicht nur „gewöhnliche“ Kontakte.

$qusers = mysql_query("SELECT forename, surname, vpc_id FROM

contacts WHERE user_id='".$_SESSION['user_id']."' AND

vpc_id!='0'");

14

<permissions>

<permission>

<type>User</type>

<id>2</id>

<name>Test User</name>

<read>1</read>

<write>0</write>

<delete>0</delete>

</permission>

</permissions>

1

2

3

4

5

6

7

8

9

10

if(substr($line, 0, strpos($line, ' '))!=$_SESSION['user_id'])

{

echo '<permission>';

22

23

24

Page 24: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 24

Diese geladenen User und Gruppen werden wieder über eine eigene Funktion in HTML-Code

umgewandelt.

Ein weiterer wesentlicher Bestandteil des „OBJ_SECURITYWINDOW“ ist die Suchfunktion, deren

Algorithmus auch in vielen anderen Programmen Verwendung findet. Aufgerufen wird die Funktion

„SearchItem()“ über das Event „onkeyup“ des Suchfeldes. Dieses wird ausgelöst, sobald der Benutzer bei

fokussiertem Eingabefeld eine beliebige Taste loslässt. Dadurch kann eine „Echtzeit“-Suche realisiert

werden, die ein lästiges Klicken auf einen eigenen Such-Button überflüssig macht.

$qgroups = mysql_query("SELECT id, name, contact_ids FROM groups

WHERE user_id='".$_SESSION['user_id']."'");

while($group_row = mysql_fetch_array($qgroups))

{

$quserstr = "SELECT COUNT(*) FROM contacts WHERE group_id LIKE

'%".$group_row['id'].";%' AND vpc_id!='0'";

$quser = mysql_query($quserstr);

$user_count = mysql_fetch_array($quser);

if($user_count[0] != 0) $has_vpc_contact = true;

if($has_vpc_contact == true)

{

23

24

25

26

27

28

29

30

31

Page 25: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 25

Zuallererst wird in Zeile 352 das Array „SearchItems“ neu überschrieben um die Ergebnisse aller alten

Suchvorgänge zu entfernen. In den folgenden Zeilen wird der Suchstring in die lokale Variable

„string“ eingelesen und die restlichen notwendigen Variablen werden definiert.

Die Schleife ab Zeile 357 durchläuft alle Elemente, die beim Laden in das Array „AllItems“ geschrieben

wurden. Ist der Suchstring, der in Zeile 360 überprüft wird, gleich dem Namen der gesuchten Gruppe

oder Person, wird das Element zum Array „SearchedItems“ hinzugefügt. Andernfalls wird überprüft, ob

SearchItem:function()

{

this.SearchedItems = new Array();

var string = this.SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.AllItems.length; i++)

{

obj = this.AllItems[i];

if(obj.name.toLowerCase() == string.toLowerCase())

this.SearchedItems.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start,string.length)

.toLowerCase() == string.toLowerCase())

{

if(!added)

{

this.SearchedItems.push(obj);

added = true;

}

}

start++;

}

}

}

}

if(string.length == 0) this.SearchedItems = this.AllItems;

this.DrawItems();

},

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

Page 26: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 26

der Name des Elements länger ist als der Suchbegriff, da ein Vergleich in diesem Fall sinnlos wäre. In

einer „while“-Schleife werden alle möglichen Werte überprüft. Dies kann folgendermaßen

veranschaulicht werden:

Suchbegriff: oma

Name des aktuellen Elements in der Schleife: Thomas

oma == tho X

oma == hom X

oma == oma + (Übereinstimmung gefunden)

oma == mas X

Falls der Begriff im Namen vorkommt, wird er, sofern nicht schon bei einem früheren Vergleich eine

Übereinstimmung festgestellt wurde, dem Array „SearchedItems“ hinzugefügt.

In Zeile 383 wird zuletzt noch der mögliche Fall überprüft, dass das Suchfeld leer ist. Dies wird zum

Beispiel beim Loslassen der Delete-Taste ausgelöst. In einem solchen Fall sollen alle Elemente angezeigt

werden. Für dieses Anzeigen ist schließlich die Funktion „DrawItems()“ zuständig, die in Zeile 384

aufgerufen wird.

Für das Speichern der Werte ist im Objekt vom Typ „OBJ_SECURITYWINDOW“s keine eigene Funktion

vorgesehen, der Code hierfür steht direkt im Aufruf des Events „onclick“ des Speichern-Buttons.

An die Adresse der PHP-Datei werden wie schon beim Laden die entsprechenden Parameter angehängt.

Hierfür werden ab Zeile 72 alle hinzugefügten Elemente in einer Schleife durchlaufen und mit einem

durchnummerierten Index versehen zur URL hinzugefügt. Diese wird in Zeile 82 mittels der globalen

Funktion „setRequest()“ aufgerufen. In PHP werden diese Werte ausgelesen und die Permissions-Datei

vollständig überschrieben, wobei beachtet werden muss, dass die Rechte für den aktuellen Benutzer

erst hinzugefügt werden müssen, da diese nie von JavaScript verwendet und damit auch nicht in der URL

übergeben werden können. Zu guter Letzt wird das Programm in Zeile 83 noch geschlossen, indem die

Funktion „close()“ des zugehörigen Objekts vom Typ „OBJ_BASEWINDOW“ aufgerufen wird. Wie in

Kapitel 5 beschrieben, verweist diese Funktion aber auf die Funktion „close()“ des Elternobjekts, falls

diese vorhanden ist. Im Falle des Objekts vom Typ „OBJ_SECURITYWINDOW“ ist dies der Fall, da der DIV-

var url = 'programs/security/set_permissions.php?';

url+= 'path='+Window.Path;

var permissionsstring;

for(var i = 0; i <Window.Items.length; i++)

{

url+='&id'+i+'='+Window.Items[i].user_id;

url+='&type'+i+'='+Window.Items[i].type;

permissionsstring = '';

permissionsstring+= Window.Items[i].read;

permissionsstring+= Window.Items[i].write;

permissionsstring+= Window.Items[i].delete;

url+= '&permissions'+i+'='+permissionsstring;

}

setRequest(url);

Window.base.close(Window.base.id);

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

Page 27: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 27

Container, der sich zwischen das Programmfenster und den Rest der Applikation schiebt, noch entfernt

werden muss. Nachdem dies in Zeile 386 veranlasst wurde, müssen die restlichen Aufgaben, die im

Normalfall die Funktion „close()“ des Unterobjekts vom Typ „OBJ_BASEWINDOW“ übernommen hätte,

explizit ausgeführt werden.

close: function()

{

HideDiv.style.visibility = 'hidden';

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++)

if(this.base.id == Windows[i].id) Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

384

385

386

387

388

389

390

391

Page 28: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 28

5.1.3. Standardaktionen

Erstellen von Verzeichnissen

Unter den Menüeinträgen des Kontextmenüs, das erscheint, wenn man mit der rechten Maustaste auf

ein Objekt klickt, findet sich auch ein Button zum Erstellen neuer Verzeichnisse. Hier findet erstmals das

JavaScript-Objekt „OBJ_MESSAGEBOX“ Verwendung, welches, wie der Name schon sagt, für Meldungs-

oder Dialog-Fenster verschiedenster Art zuständig ist. Eingebunden wird das Objekt mit folgenden

Zeilen:

In Zeile 242 wird eine neue Instanz des Objektes erstellt. Die Eigenschaft „returntype“ wird auf

„TEXTINPUT“ gesetzt, andere mögliche Werte sind „OK“, „OKCANCEL“ und „YESNO“. Die

Rückgabefunktion wird auf die Funktion „createFolder()“ des Objekts vom Typ

„OBJ_FILESYSTEMWINDOW“ gesetzt. Anschließend wird die Funktion show der MessageBox mit den

drei Parametern Titel, Text und ID des aktuellen Programmfensters aufgerufen. Auch hier werden die

Werte zweisprachig angegeben, eine Unterscheidung erfolgt dann erst im Objekt „OBJ_MESSAGEBOX“.

createFolder:function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var text = msg.text;

text = text.replace(/ /g, "_");

var err = false;

if(text.indexOf("\\")!=-1) err = true;

if(text.indexOf("/")!=-1) err = true;

if(text.indexOf(":")!=-1) err = true;

if(text.indexOf("?")!=-1) err = true;

if(text.indexOf("*")!=-1) err = true;

if(text.indexOf("<")!=-1) err = true;

if(text.indexOf(">")!=-1) err = true;

if(text.indexOf("|")!=-1) err = true;

if(err == true)

{

612

613

614

615

616

617

618

619

620

621

622

623

624

625

626

627

628

629

630

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returntype = 'TEXTINPUT';

MsgBox.returnfunc = Window.createFolder;

MsgBox.show({de:'Ordner anlegen', en:'Create Directory'},

{de:'Geben Sie einen Ordnernamen an:', en:'Please type in a

foldername:'}, Window.base.id);

242

243

244

245

Page 29: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 29

Die Funktion „createFolder()“ bekommt vom Objekt MsgBox ein Objekt übergeben, dessen Eigenschaft

„value“ angibt, welchen Button der User in der DialogBox geklickt hat. In Zeile 614 wird diese

Eigenschaft auf den Wert „OK“ geprüft. Anschließend wird das zugehörige Window-Objekt ermittelt und

der neue Ordnername aus der Eigenschaft „text“ des übergebenen Objekts ausgelesen. In Zeile 619

werden die Leerzeichen aus dem Namen entfernt, da sich das System auf einem Linux-Server befindet

und Komplikationen bei der Namensgebung vermieden werden müssen. In den Zeilen 621 bis 628 wird

der Name auf Sonderzeichen geprüft. Ist eines dieser Zeichen vorhanden, wird ab Zeile 631 eine neue

DialogBox erstellt und angezeigt, um den Namen zu ändern.

Falls der neue Ordnername verwendet werden kann, wird in den Zeilen 641 bis 644 zuerst Client-seitig

überprüft, ob bereits ein Verzeichnis mit demselben Namen existiert. Diese Überprüfung wird auch am

Server durchgeführt, doch auf diesem Weg wird der unnötige Datenaustausch schon im Vorhinein

vermieden. Sollte der Ordner nicht existieren, wird die PHP-Datei „mkdir.php“ mit den benötigten

Parametern aufgerufen.

Ab Zeile 651 wird, falls der Ordner bereits existiert, eine neue DialogBox erzeugt, um den User einen

anderen Namen wählen zu lassen.

In der PHP-Datei wird wie in Kapitel 5.1.2 bereits in Verwendung, eine Instanz der PHP-Klasse

„FilePath“ erzeugt. Mit Hilfe dieser wird überprüft, ob das Verzeichnis schon existiert. Ist dies nicht der

Fall, werden das Verzeichnis und die zugehörige Permissions-Datei erzeugt.

Kopieren/Verschieben von Dateien und Verzeichnissen

click:function() {

parent.ClipBoardType = 'copy';

parent.ClipBoardData = new Array(1);

parent.ClipBoardData[0] = file;

myMenu.hide();

}

478

479

480

481

482

483

for(var i = 0; i<Window.CurrentItems; i++)

{

if(Window.CurrentItems[i].name == text) exists = true;

}

if(!exists)

{

setRequest('programs/filesystem/mkdir.php?path='+

Window.CurrentPath+text+'&user_id='+Window.UserId);

Window.LoadFiles();

}

else

{

641

642

643

644

645

646

647

648

649

650

651

Page 30: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 30

Beim Kopieren von Dateien wird zuerst nur Code in JavaScript abgehandelt, eine PHP-Seite wird erst

beim Einfügen einer Datei oder eines Verzeichnisses aufgerufen. Da es derzeit nur möglich ist, eine

einzelne Datei beziehungsweise ein Verzeichnis zu kopieren, wird die Zwischenablage in Zeile 480 mit

einem neuen Array überschrieben, das lediglich ein Element beinhaltet. Die Variable „file“, die in Zeile

481 verwendet wird, ist ein JavaScript-Objekt, welches die notwendigen Informationen zum Kopieren

gespeichert hat. In Zeile 482 wird das Kontextmenü ausgeblendet.

Die PHP-Datei, die beim Klicken auf den Einfügen-Button aufgerufen wird, erzeugt zu Beginn zwei neue

Instanzen der Klasse „FilePath“.

In Zeile 58 wird überprüft, ob die zu kopierende Datei überhaupt existiert. Anschließend werden die

Rechte überprüft. Der Benutzer benötigt zumindest Leserechte auf der zu kopierenden Datei und

Schreibrechte für die noch nicht existierende Zieldatei.

In Zeile 65 wird die Dateiendung in die Variable „$ext“ geschrieben. In Zeile 71 wird, falls die Datei

bereits vorhanden ist, ein veränderter Dateiname in die Eigenschaft „filename“ des Objekts

„$from“ geschrieben. Dieser Name setzt sich aus dem eigentlichen Dateinamen, einer Zählvariable

„$i“ und der Endung zusammen.

Falls es sich um eine Datei handelt, wird die Ursprungsdatei nun einfach mit dem PHP-Befehl

„copy()“ kopiert. Andernfalls muss eine eigene Permissions-Datei erstellt werden und ein Aufruf der

Funktion „CopyRecursive()“ getätigt werden, welche die Unterverzeichnisse des Ordners ermittelt und

ebenfalls kopiert.

require_once 'class_file.php';

$from = new FilePath($_GET['from'], $_GET['from_user_id']);

$to = new FilePath($_GET['to'], $_GET['to_user_id']);

if($from->file_exists == true)

{

if(($from->permissions[0]==1) && ($to->permissions[1]==1))

{

if(file_exists($to->full_path.'/'.$from->filename))

{

if(substr(strrchr($from->filename, "."), 1) != "")

$ext = ".".substr(strrchr($from->filename, "."), 1);

if($ext == "") $name = $from->filename;

else $name = substr($from->filename, 0,

strpos($from->filename, "."));

$i = 2;

while(file_exists($to->full_path.'/'.$name.$i.$ext))

$i++;

if($to->exists) $from->filename = $name.$i.$ext;

}

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

Page 31: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 31

Das Verschieben von Dateien erfolgt im Wesentlichen auf die selbe Art und Weise, hier ist es jedoch

lediglich notwendig, das Verzeichnis und gegebenenfalls die Permissions-Datei mit dem PHP-Befehl

„rename()“ umzubenennen.

Löschen von Dateien und Verzeichnissen

Für das Löschen der Dateien wird zuerst mit JavaScript eine DialogBox mit dem Rückgabetyp

„YESNO“ erstellt und angezeigt. Im Falle der Bestätigung des Vorgangs löscht die aufgerufene PHP-Seite

die Datei beziehungsweise das gesamte Verzeichnis rekursiv. Des Weiteren werden alle User duchlaufen,

für die der aktuelle Benutzer den gelöschten Ordner freigegeben hat. Haben diese User keinen weiteren

Zugriff auf das Dateisystem des aktuellen Benutzers, muss die MySQL-Datenbank aktualisiert werden,

damit die Freigabe nicht mehr in der Baumansicht der betreffenden User aufscheint.

Umbenennen von Dateien oder Verzeichnissen

Für das Umbenennen wird eine DialogBox vom Typ „TEXTINPUT“ erzeugt und angezeigt. Die

aufgerufene PHP-Seite benennt, ähnlich dem Verfahren beim Verschieben von Dateien/Verzeichnissen,

die Datei um.

Page 32: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 32

5.1.4. Download von Dateien

Beim Klick auf den Menüeintrag „Download“ öffnet JavaScript, wie in Zeile 470 ersichtlich, die

entsprechende PHP-Seite in einem neuen Fenster. Wie üblich werden hierbei die nötigen Parameter

UserID und Pfad übergeben, um eine eindeutige Identifizierung der Datei zu ermöglichen.

In der PHP-Datei wird anschließend folgender Code ausgeführt:

In Zeile 27 wird der „Content-Type“ der Seite gesetzt, der angibt, welches Dateiformat die aufgerufene

Website hat. Während diese Eigenschaft bei herkömmlichen Websites auf den Wert „text/html“ gesetzt

ist, erfolgt hier eine explizite Änderung auf „application/octet-stream“, welche dem Browser signalisiert,

dass es sich hierbei um eine Datei handelt, die zum Download bestimmt ist. In Zeile 28 wird der

Dateiname angegeben. Wäre diese Zeile nicht vorhanden, würde der Browser den Namen der

ausgeführten PHP-Datei verwenden - in diesem Fall demnach „download.php“.

Die folgenden Zeilen setzen die Übertragungsart auf binär und geben die Dateigröße an.In Zeile 31

werden über die Funktion „getPermissions()“, welche die Permissions-Datei öffnet und analysiert, die

Rechte ausgelesen. Nur, wenn der User über Leserechte verfügt, wird der Dateiinhalt in Zeile 34 über die

Funktion „readfile()“ ausgelesen und in den Ausgabepuffer geschrieben.

header('Content-Type: application/octet-stream');

header("Content-Disposition: attachment; filename={$filename}");

header("Content-Transfer-Encoding: binary");

header("Content-Length: ".@filesize($path));

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

readfile($path);

}

27

28

29

30

31

32

33

34

35

window.open('programs/filesystem/download.php?path='+file.path

+'&user_id='+Window.UserId, '_blank');

470

Page 33: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 33

5.1.5. Upload von Dateien

Der Dateiupload stellte insofern eine Herausforderung dar, als die gängigen Standardbrowser aus

Sicherheitsgründen nur sehr eingeschränkte Möglichkeiten bieten. Eine Lösung wäre, dieses System

durch die Implementierung von Java- oder Flash-Elementen zu umgehen, jedoch liegt diese nicht im

Sinne von „VirtualPC“, dessen Idee es war, die gesamte Funktionalität ohne PlugIns zu implementieren.

Das System greift auf die traditionelle Methode des Dateiuploads mit Hilfe eines Formulars zurück. Da

ein laufender Dateiupload aber das weitere Ausführen einer Seite verhindert, musste in diesem Fall auf

den Einsatz eines Inline-Frames zurückgegriffen werden. Dieser wird in den Zeilen 34 bis 36 beim

Erstellen des HTML-Codes für das Dateisystemfenster erzeugt.

Als Start-URL wird die PHP-Datei „upload.php“ angegeben, der die Parameter des aktuellen

Verzeichnisses übergeben werden. Bei jedem Verzeichniswechsel muss diese Seite neu geladen werden.

Die PHP-Datei erzeugt ein Formular, welches die abgeschickten Daten an sich selbst übergibt. Nachdem

überprüft wurde, ob bereits eine Datei mit demselben Namen existiert, ist es weiters nötig zu

überprüfen, ob der User den ihm zugeteilten Speicherplatz nicht bereits vollständig ausnützt. Hierzu

wird in Zeile 44 die Funktion „getSizeFiles()“ aufgerufen, welche die gesamte Verzeichnisstruktur eines

Users in einer Schleife durchläuft, und die einzelnen Dateigrößen addiert.

include "getsize.php";

getSizeFiles($datadir.$userid);

if($CountSize+$datei["size"] > 20000000)

{

echo '

<script type="text/javascript">

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.iconpath = "images/icons/error.png";

MsgBox.show({de:"Fehler", en:"Error"}, {de:"Der

Speicherplatz ist voll.", en:"You don\'t have free space

any more"});

}

</script>';

echo 'Error';

}

43

44

45

46

47

48

49

50

51

52

53

54

55

56

str+= "<iframe src='programs/filesystem/upload.php?loc="

+this.CurrentDir+"&user_id="+this.UserId+"' ";

str+= "id='Window"+this.base.id+"_uploadframe' name='Window"

+this.base.id+"_uploadframe' height='60' width='280'

style='border:0px; vertical-align:top; float:right;

margin-top:3px; visibility:visible;'>";

str+= "</iframe>";

34

35

36

Page 34: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 34

Überschreitet die Summe der Dateigrößen eine in Zeile 45 festgelegte Zahl, wird mittels JavaScript eine

MessageBox anzeigt. Obwohl die Website in einem eigenen Frame platziert ist, kann auf die JavaScript-

Objekte der übergeordneten Seite zugegriffen werden. Zusätzlich wird der Hinweis „Error“ ausgegeben,

der nun den Inhalt des Frames darstellt.

Page 35: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 35

5.1.6. JavaScript- und HTML-Dateien

Um das System von „VirtualPC“ auch für andere Programmierer zugänglich zu machen, können diese

eigene JavaScript-Dateien schreiben, um eigene Programme zu implementieren. Beispiele hierfür sind

im Anhang zu finden.

Beim Klick auf den Menüeintrag „Ausführen“ des Kontextmenüs wird zuerst eine DialogBox mit dem

Rückgabetyp „YESNO“ angezeigt, um abzufragen, ob der User tatsächlich fremden Code ausführen will.

Diese Sicherheitsmaßnahme ist notwendig, um den Benutzer darauf aufmkerksam zu machen, dass

fremder Code auf seine Dateien und Einstellungen zugreifen und diese verändern kann.

Will der Benutzer den Code ausführen und der Rückgabewert der DialogBox ist „YES“, wird über die

Funktion „getHTML()“ in Zeile 574 der Inhalt der JavaScript-Datei geladen. Der Rückgabewert von

„getHTML()“ ist ein String des Inhalts der ausgeführten Textdatei. In Zeile 756 wird mit Hilfe der

Funktion „eval()“ versucht, den geladenen Code auszuführen. Sollte hier ein Fehler auftreten, wird in

den Zeilen 579 bis 581 eine MessageBox angezeigt, um den Benutzer auf den Fehler hinzuweisen.

Die Möglichkeit des Ausführens besteht auch für Dokumente mit der Endung „.htm“ oder „.html“. Hier

wird lediglich die PHP-Datei „get_content.php“ in einem neuen Fenster aufgerufen, in dem die Seite

angezeigt wird.

if(msg.value == 'YES')

{

var url = 'programs/filesystem/get_content.php?path='

+file.path+'&user_id='+file.user_id;

var str = getHTML(url);

try {

eval(str);

}

catch(e) {

var Box = new OBJ_MESSAGEBOX();

Box.returntype = 'OK';

Box.show({de:'Fehler', en:'Error'}, {de:e, en:e},

Window.base.id);

}

}

571

572

573

574

575

756

757

578

579

580

581

582

583

Page 36: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 36

5.2 Kontakte

Wie für die Verwaltung der Dateien wird auch zum Bearbeiten der Kontakte ein eigenes JavaScript-

Objekt initialisiert. Dieses Objekt vom Typ „OBJ_CONTACTSWINDOW“ hat zunächst einen ähnlichen

Aufbau wie ein Objekt vom Typ „OBJ_FILESYSTEMWINDOW“, welches in Kapitel 5.1 beschrieben wurde.

Auch hier liegt ein Objekt vom Typ „OBJ_BASEWINDOW“ zugrunde, das alle wesentlichen Funktionen

zur Verfügung stellt. Nach dem Erstellen der Oberfläche werden schließlich die beiden Objekt-internen

Funktionen „LoadContacts()“ und „LoadUsers()“ aufgerufen.

Da sich das Laden der Benutzer und Kontakte nicht wesentlich vom Laden der Dateien im Objekt

„OBJ_FILESYSTEMWINDOW“ unterscheidet, wird hier nicht näher darauf eingegangen. Erwähnt sei nur,

dass die XML-Dateien in diesem Fall nicht aus der Dateisystruktur des Servers heraus erstellt werden,

sondern aus einer Datenbanktabelle ausgelesen werden.

Im Anschluss werden die Funktionen „DrawContacts()“ und „DrawUsers()“ aufgerufen, welche aus den

geladenen Werten einen HTML-String zusammenstellen. Zusätzlich besitzt das Objekt

„OBJ_CONTACTSWINDOW“ noch eine Funktion „SearchItem()“, welche die Datensätze, genau wie in

Kapitel 5.15.1.2 beschrieben, filtert.

this.LoadContacts();

this.LoadUsers();

95

96

Page 37: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 37

5.2.1. Exportieren von Kontakten

Um das System von „VirtualPC“ zumindest teilweise kompatibel zu Applikationen wie Microsoft Outlook

oder dem Adressbuch von Apple zu gestalten, besteht die Möglichkeit, Kontakte in das weit verbreitete

vCard-Format zu exportieren. Beim Klick auf den Export-Button, der bei jedem Kontakteintrag erscheint,

wird folgender Code ausgeführt:

Wie bereits in Kapitel 5 erklärt, wird in den Zeilen 289 bis 292 das zugehörige Window-Objekt des

entsprechenden HTML-Elements ermittelt. In Zeile 293 wird die Programm-interne KontaktID über den

Dateinamen des HTML-DOM-Objekts ausgelesen. Mit dieser ID kann schließlich auf den Kontakt

zugegriffen werden, der im Array „Contacts“ des Objekts vom Typ

„OBJ_CONTACTSWINDOW“ gespeichert ist. In Zeile 294 wird ein neues JavaScript-Objekt „obj“ vom Typ

„OBJ_SAVEFILEWINDOW“ erstellt, auf das in Kapitel 5.5 noch genauer eingegangen wird. Dem Objekt

wird ein neues Unterobjekt hinzugefügt, um die Export-Optionen zu übergeben. Der in Zeile 298

gesetzte Filter ist notwendig, um nur Dateien mit der Endung „.vcf“ im Dateibrowser des Export-

Fensters anzuzeigen. Der Pfad, welcher durch das Export-Fenster ermittelt wird, soll anschließend, wie

in Zeile 300 festgelegt, an die Funktion „ExportContact()“ des Objekts vom Typ

„OBJ_CONTACTSWINDOW“ zurückgeben werden. Diese Funktion hat den folgenden Aufbau:

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(

this.id.indexOf('_ExportImg')+10));

var obj = new OBJ_SAVEFILEWINDOW();

var contact = Window.Contacts[id];

Window.ExportOptions = new Object();

Window.ExportOptions.id = contact.user_id;

obj.filter = new Array(".vcf");

obj.filter_description = 'VCard-Dateien';

obj.returnfunc = Window.ExportContact;

obj.filename = contact.forename+'_'+contact.surname+'.vcf';

obj.init();

}

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

Page 38: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 38

Das Objekt vom Typ „OBJ_SAVEFILEWINDOW“ übergibt ein JavaScript-Objekt an die Funktion

„ExportContact()“. In diesem sind die gewählten Werte für den Dateinamen, den Pfad und die UserID

gespeichert. Diese Werte werden in das Unterobjekt „ExportOptions“ des Window-Objekts geschrieben.

In Zeile 520 wird anschließend abgefragt, ob die Datei bereits existiert. In diesem Fall wird in den Zeilen

522 bis 526 eine DialogBox des Typs YESNO erstellt und angezeigt, um eine Bestätigung zum

Überschreiben einer bereits vorhandenen Datei mit gleichem Namen zu erhalten. Existiert die Datei

nicht, wird im in Zeile 529 die Funktion „ExportContact2()“ aufgerufen. Dort wird über die globale

Funktion „setRequest()“ eine PHP-Datei aufgerufen, die aus den in der Datenbank gespeicherten Werten

eine vCard-Datei erzeugt. In dieser PHP-Datei wird zuerst überprüft, ob der Benutzer im angegebenen

Ordner über Schreibrechte verfügt, und anschließend die PHP-Funktion vcard aufgerufen, der die

KontaktID übergeben wird.

ExportContact: function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.ExportOptions.path = msg.path+msg.filename;

Window.ExportOptions.user_id = msg.user_id;

if(msg.exists == true)

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returnfunc = Window.ExportContact2;

MsgBox.iconpath = 'images/contextmenu/delete.png';

MsgBox.returntype = 'YESNO';

MsgBox.show({de:'Überschreiben', en:'Overwrite'},

{de:'Die Datei existiert bereits! Wollen Sie

überschreiben?', en:'The file already exists!

Do you really want to overwrite?'}, Window.base.id);

}

else Window.ExportContact2(null);

}

},

512

513

514

515

516

517

518

519

520

521

522

523

524

525

526

528

529

530

531

Page 39: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 39

In dieser Funktion wird lediglich der String zusammengesetzt, der anschließend als Datei im gewählten

Pfad gespeichert wird. Zusätzlich wurde bereits versucht, die Grafik mit Hilfe des base64-Verfahrens zu

kodieren und so in die Datei zu implementieren. Bislang konnte dies jedoch noch nicht umgesetzt

werden.

$str.= "BEGIN:VCARD"."\r\n";

$str.= "VERSION:2.1"."\r\n";

$str.= "N;CHARSET=UTF-8:"

.$row['surname'].";".$row['forename']."\r\n";

$str.= "FN;CHARSET=UTF-8:".$row['forename']." "

.$row['surname']."\r\n";

$str.= "ROLE;CHARSET=UTF-8:".$row['profession']."\r\n";

$str.= "NOTE;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:"

.str_replace("<br>", "=0D=0A=", $row['comment'])."\r\n";

$str.= "TEL;WORK;VOICE:".$row['phone_bus']."\r\n";

$str.= "TEL;HOME;VOICE:".$row['phone_priv']."\r\n";

$str.= "TEL;CELL;VOICE:".$row['phone_add']."\r\n";

$str.= "TEL;WORK;FAX:".$row['fax']."\r\n";

$str.= "ADR;WORK;PREF;CHARSET=UTF-8:;;"

.$row['address_bus'].";".$row['city_bus'].";;"

.$row['postal_bus'].";".$row['country_bus']."\r\n";

$str.= "ADR;HOME;PREF;CHARSET=UTF-8:;;"

.$row['address_priv'].";".$row['city_priv'].";;"

.$row['postal_priv'].";".$row['country_priv']."\r\n";

$str.= "URL;WORK;CHARSET=UTF-8:".$row['web_bus']."\r\n";

$str.= "URL;HOME;CHARSET=UTF-8:".$row['web_priv']."\r\n";

$str.= "BDAY:".substr($row['birthdate'], 0, 4)

.substr($row['birthdate'], 5, 2).substr($row['birthdate'], 8, 2)

."\r\n";

$str.= "EMAIL;PREF;INTERNET:".$row['email_priv']."\r\n";

$str.= "EMAIL;INTERNET:".$row['email_bus']."\r\n";

$str.= "EMAIL;INTERNET:".$row['email_add']."\r\n";

$str.= "END:VCARD";

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Page 40: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 40

5.2.2. Bearbeiten von Kontakten

Soll ein Kontakt bearbeitet, beziehungsweise neu erstellt werden, wird hierzu von einem Objekt vom

Typ „OBJ_CONTACTSWINDOW“ ein neues Objekt namens „obj“ erstellt, in dem die Werte KontaktID

sowie der Vor- und Nachname des Kontakts gesetzt werden.

Die Funktion „init()“ des Objekts „obj“ vom Typ „OBJ_CONTACTWINDOW“ durchläuft in etwa denselben

Prozess wie bei den bereits vorgestellten Window-Objekten. Es wird hier nur bereits beim Erstellen

unterschieden, welche Buttons in der Leiste am oberen Rand angezeigt werden sollen, je nachdem ob es

sich um einen neuen, alten, eigenen oder einen anderen Benutzer repräsentierenden Kontakt handelt.

Nach dem Laden der Daten über eine XML-Datei wird der HTML-String erstellt. Da alle Kontaktdaten

nicht in ein Fenster normaler Auflösung passen, werden hier drei „Registerkarten“ erstellt, die über die

CSS-Eigenschaft „display“ über JavaScript ein-, beziehungsweise ausgeblendet werden.

Auf das Speichern der Kontakte wird hier nicht näher eingegangen, das Schema ist jedoch dasselbe wie

in Kapitel 5.15.1.2. Abgesehen davon stellt das Hinzufügen von Grafiken eine wichtige Rolle dar.

Hierzu wird ein neues JavaScript-Objekt namens „obj“ vom Typ „OBJ_OPENFILEWINDOW“ erstellt, das in

Kapitel 5.5 noch genauer behandelt wird. Als Rückgabefunktion wird die Funktion „addImage()“ des

Window-Objekts angegeben. In dieser wird nach dem Speichern des Pfads im Objekt vom Typ

„OBJ_CONTACTWINDOW“ das Attribut „src“ des HTML-Tags „img“ auf eine relative Adresse gesetzt:

Die PHP-Datei contact_temp_image.php führt folgenden Code aus:

document.getElementById('Window'+this.ParentWindow.base.id

+'_image').src = 'programs/contacts/contact_temp_image.php?path='

+msg.path+'&user_id='+msg.user_id;

505

var obj = new OBJ_OPENFILEWINDOW();

obj.filter = new Array(".jpg", ".gif", ".png");

obj.filter_description = 'Grafik-Dateien(JPG, GIF, PNG)';

obj.returnfunc = Window.addImage;

obj.ParentWindow = Window;

obj.init();

469

470

471

472

473

474

var obj = new OBJ_CONTACTWINDOW();

obj.forename = contact.forename;

obj.surname = contact.surname;

obj.ContactId = contact.user_id;

obj.ContactType = 'personal';

obj.ParentWindow = Window;

obj.New = false;

obj.init();

271

272

273

274

275

276

277

278

Page 41: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 41

$path = $datadir.$_GET['user_id'].'/data'.$_GET['path'];

$File = new FilePath($_GET['path'], $_GET['user_id']);

if(file_exists($path) && $File->permissions[0] == '1') {

$imagedata = getimagesize($path);

$w = $imagedata[0];

$h = $imagedata[1];

if ($h > 120) {

$new_w = (120 / $h) * $w;

$new_h = 120;

}

if($w > 100) {

$new_h = (100 / $w) * $h;

$new_w = 100;

}

if(!isset($new_h)) {

$new_h = $h;

$new_w = $w;

}

$im2 = ImageCreateTrueColor($new_w, $new_h);

$image = null;

if(filesize($path)<13056) {

switch($imagedata[2]) {

case 2:

$image = ImageCreateFromJpeg($path);

break;

case 1:

$image = imagecreatefromgif($path);

break;

case 3:

$image = imagecreatefrompng($path);

break;

}

}

if($image != null) {

imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w,

$new_h, $imagedata[0], $imagedata[1]);

$output = $im2;

echo imagejpeg($output);

}

else {

$path = "../../images/contacts/image_unknown.png";

$handle = fopen($path, "r");

$cont = fread($handle, filesize($path));

fclose($handle);

echo $cont;

}

}

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

Page 42: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 42

Nachdem in Zeile 9 überprüft wurde, ob die angegebene Datei existiert und der Benutzer über

Leserechte verfügt, werden in Zeile 12 über die PHP-Funktion „getimagesize()“ Werte zum Speichern

und Zuschneiden der Grafik ermittelt. In den Zeilen 15 bis 26 werden neue Breiten- und Höhenangaben

ermittelt, um das Verhältnis der beiden Größen beizubehalten. Im Idealfall lässt sich das Bild auf

120x100 Pixel verkleinern.

Leider lassen sich Grafiken in PHP je nach Server nur bis zu einer gewissen Dateigröße einlesen, die im

Falle von „VirtualPC“ bei 13056 Bytes, also etwa 13MB liegt. Um eine Fehlermeldung zu verhindern, wird

dies in Zeile 29 überprüft. Anschließend werden in den Zeilen 30 bis 41 – je nach Grafiktyp - die Bilder

eingelesen. Über die Funktion „ImageCopyResampled()“ wird in Zeile 43 schließlich eine verkleinerte

Instanz des Grafik-Objekts erstellt, die in Zeile 46 mit Hilfe der Funktion „imagejpeg()“ ausgegeben wird.

Sollten während des Vorgangs Komplikationen auftreten, und die Variable „$image“ leer sein, wird ein

Standardbild angezeigt.

Das Speichern des Bildes funktioniert analog, nur wird die Grafik hier nicht ausgegeben, sondern in ein

das Verzeichnis „contacts“ des Benutzers kopiert.

Eine weiterer Unterschied beim Speichern eines Kontakts im Gegensatz zum Speichern anderer Daten

unter „VirtualPC“ besteht aus der Benachrichtigungs-Email, die für neue Kontakte ausgesandt wird. Falls

diese Funktion über das Eigenschaften-Panel aktiviert wurde (Standard), wird für jede eingetragene

Email-Adresse eine Nachricht generiert, die an den jeweiligen Kontakt gesendet wird. In dieser Email

findet der Empfänger einen Link, über den er/sie es dem VirtualPC-User erlauben kann, ihm oder ihr

Nachrichten über das VirtualPC-System zukommen zu lassen. Für jede der drei möglichen Email-

Adressen wird hierfür folgender Code ausgeführt:

Falls die neue Email-Adresse nicht mit der gespeicherten übereinstimmt, wird über die Funktion

„create_code()“ ein bis zu 36 Zeichen langer, eindeutiger Code generiert. Dieser wird in die Datenbank

geschrieben. Zusätzlich wird der Wert des Feldes „email_priv_activated“ auf „false“ gesetzt. Dadurch

wird gewährleistet, dass dem Kontakt, solange er die Nachricht noch nicht bestätigt hat, keine weitere

Email über das VirtualPC-System gesendet wird.

In Zeile 41 wird überprüft, ob in die Eigenschaft „send_mail_to_contacts“ auf „true“ gesetzt ist. In

diesem Fall wird über die Funktion „send_message()“ eine Email-Nachricht erstellt und versandt.

if($r1['email_priv'] != $_GET['email_priv'])

{

$code_priv = create_code();

$query.= "email_priv='".$_GET['email_priv']."',

email_priv_activated='false',

email_priv_code='".$code_priv."', ";

$data['code'] = $code_priv;

if($send_mail[0] == 'true') send_message($_GET['email_priv'],

$data);

}

36

37

38

39

40

41

42

Page 43: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 43

5.3 Kalender

Das Kalenderprogramm von „VirtualPC“ besteht aus insgesamt vier JavaScript-Window-Objekten: Eine

Instanz des Objekts „OBJ_CALENDARWINDOW“ stellt das eigentliche Programmfenster dar. Hier wird

der Kalender angezeigt und alle bis jetzt implementieren Funktionen können aufgerufen werden. Ein

Objekt vom Typ „OBJ_CALENDARITEMWINDOW“ beinhaltet - wie dem Namen bereits zu entnehmen ist

- die Darstellung eines einzelnen Kalendereintrags und die Möglichkeit, diesen zu verändern. In einem

Objekt vom Typ „OBJ_CALENDARSECURITYWINDOW“ kann der Benutzer seine Kalenderdaten oder Teile

davon freigeben. Zuletzt gibt es noch eine Instanz des Objekts „OBJ_CALENDARREMINDGSWINDOW“,

welches aufgerufen wird, um den User an Termine zu erinnern.

Zuerst soll die Funktion „init()“ des Objekts „OBJ_CALENDARWINDOW“ erklärt werden. Im Gegensatz zu

anderen Programmen wird hier nicht nur der HTML-String zusammengesetzt, sondern auch das aktuelle

Datum eingelesen.

Page 44: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 44

In Zeile 21 wird das Monat ermittelt, wobei hier zu beachten ist, dass JavaScript nullbasierend zu zählen

beginnt - daher entspricht der Jänner dem Wert 0. Zudem ist auch die Zählung der Wochentage anders

als möglicherweise angenommen. Dieser Wert wird in den Zeilen 24 und 25 der üblichen Zählweise

angepasst. Des Weiteren kann nicht direkt auf die Anzahl der Tage eines Monats zugegriffen werden,

daher werden diese in Zeile 45 definiert. Zu beachten ist jedoch dass der Februar in einem Schaltjahr

einen Tag mehr hat. Nachdem das Objekt dem globalen Array „Windows“ hinzugefügt wurde, wird der

Titel des Fensters geändert, um das aktuell angezeigte Datum mit einzubeziehen.

var D = new Date();

this.CurrentMonth = D.getMonth()+1;

this.CurrentYear = D.getFullYear();

this.CurrentDate = D.getDate();

this.CurrentWeekDay = D.getDay()-1;

if(this.CurrentWeekDay == -1) this.CurrentWeekDay = 7;

this.DateString = D.getFullYear()+"-";

if(this.CurrentMonth<10) this.DateString+="0"+this.CurrentMonth+"-";

else this.DateString+= this.CurrentMonth+"-";

if(this.CurrentDate < 10) this.DateString+= "0"+this.CurrentDate;

else this.DateString+= this.CurrentDate;

this.MonthNames = [

{de:'Januar', en:'January'},

{de:'Februar', en:'February'},

{de:'März', en:'March'},

{de:'April', en:'April'},

{de:'Mai', en:'May'},

{de:'Juni', en:'June'},

{de:'Juli', en:'July'},

{de:'August', en:'August'},

{de:'September', en:'September'},

{de:'Oktober', en:'October'},

{de:'November', en:'November'},

{de:'Dezember', en:'December'}

];

this.MonthLengths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30,

31, 30, 31);

if(this.CurrentYear % 4 == 0) this.MonthLengths[1] = 29;

this.CurrentMonthLength = this.MonthLengths[this.CurrentMonth-1];

Windows.push(this);

this.base.titlechange(this.base.title[language]+' - '

+this.MonthNames[this.CurrentMonth-1][language]+" "

+this.CurrentYear);

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

Page 45: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 45

5.3.1. Laden der Einträge

Das Laden der Einträge stellt beim Kalender vor allem bei der Server-seitigen Programmierung eine

Herausforderung dar. Da überprüft werden muss, ob der Nutzer über das Leserecht im gewählten

Kalender verfügt, muss auf eine Folge von Abhängigkeiten eingegangen werden. Dafür ist folgende

Funktion zuständig:

Page 46: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 46

function proof_regular($id)

{

$ok = false;

if($_REQUEST['UserId'] == $_SESSION['user_id']) $ok = true;

else {

$query_perm = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['UserId']."'");

while($row_perm = mysql_fetch_array($query_perm)) {

if($row_perm['to_id'] == $_SESSION['user_id'] &&

$row_perm['to_type']=='USER' && $row_perm['permission'][0]==1) {

if(strlen($row_perm['entries_group_id']) != 0) {

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem)

if($id == $arr_elem) $ok = true;

}

}

if($row_perm['to_type'] == 'GROUP') {

$query_group = mysql_query("SELECT contact_ids FROM groups

WHERE id='".$row_perm['to_id']."'");

while($row_group = mysql_fetch_array($query_group)) {

$contact_ids = explode(';', $row_group['contact_ids']);

foreach($contact_ids as $c_id) {

if(strlen($c_id) != 0) {

$q3 = mysql_query("SELECT vpc_id FROM contacts WHERE

id='".$c_id."'");

$r3 = mysql_fetch_array($q3);

$user_id = $r3[0];

if($user_id == $_SESSION['user_id']) {

if($row_perm['permission'][0] == '1') {

if(strlen($row_perm['entries_group_id']) != 0) {

$arr = explode(';',

$row_perm['entries_group_id']);

foreach($arr as $arr_elem)

if($arr_elem == $id)

$ok = true;

}

}

}

}

}

}

}

}

}

return $ok;

}

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

Page 47: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 47

In Zeile 39 wird zuerst überprüft, ob es sich nicht ohnehin um den Kalender des momentan

angemeldeten Benutzers handelt. Ist dies der Fall, wird die Variable „$ok“, die den Rückgabewert der

Funktion speichert, auf true gesetzt. Andernfalls wird der Code ab Zeile 41 ausgeführt. Zuerst werden

aus der SQL-Datenbank alle Freigaben des Users geladen, dessen Kalenderdaten angefordert wurden.

Falls eine direkte Freigabe für den aktuellen Benutzer besteht und dieser über allgemeine Leserechte

verfügt, wird der Code in der Abfrage ab Zeile 45 weiter ausgeführt. Da Freigaben nur für Einträge mit

einer bestimmten Farbzuweisung gelten können, wird hier überprüft, ob die der Funktion übergebene

Farb-ID mit einer der eingetragenen IDs übereinstimmt.

Ist der Kalender einer ganzen Gruppe von Kontakten freigegeben, werden in den Zeilen 51 bis 53 die

Kontakt-Mitglieder der jeweiligen Gruppe ausgelesen. Erschwerend kommt noch hinzu, dass ein

Kontakt-Eintrag nicht identisch mit einem registrierten VirtualPC-Benutzer ist Diese Maßnahme ist

notwendig um Kontaktdaten auch zu behalten, wenn ein Benutzer seinen Account zum Beispiel löscht.

Deshalb müssen die UserIDs, die in der Spalte „vpc_id“ eingetragen sind, aus der Datenbank ausgelesen

werden. Wenn diese UserID mit der UserID des angemeldeten Benutzers übereinstimmt, wie in Zeile 59

überprüft wird, und die Gruppe zudem über Leserechte verfügt sowie die FarbID des aktuellen Eintrags

freigegeben wurde, wird die Variable „$ok“ auf „true“ gesetzt. Aufgerufen wird diese Funktion

„proof_regular()“ nun mit jedem Kalendereintrag, der ausgelesen wird.

Client-seitig werden die Kalenderdaten, die über eine größere Zeitspanne als notwendig vom Server

geladen werden, gefiltert und ausgegeben. Rücksicht muss hier darauf genommen werden, dass bei der

Monatsansicht sowie Wochenansicht auch Termine im vorhergegangenen Monat beziehungsweise in

der vorhergegangenen Woche angezeigt werden müssen, da die Tabelle nach Wochentagen sortiert ist.

Page 48: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 48

In der Variable „until“ wird in Zeile 548 der aktuelle Wochentag gespeichert. Hier gilt: Montag entspricht

1, Dienstag entspricht 2, usw. In den Zeilen 553 bis 557 wird überprüft, ob der vorhergehende Monat

nicht bereits im vorhergehenden Jahr liegt. Einige wenige Zeilen später, in den Zeilen 568 und 569 wird

auch die Länge dieses Monats ausgelesen. Der erste Tag des aktuellen Monats wird in Zeile 570 als

Datumsobjekt erstellt. Der Wochentag dieses Tages wird in Zeile 572 ermittelt, wobei hier erneut auf die

Problematik mit der unterschiedlichen Nummerierung Acht genommen werden muss. In einer Schleife

werden die übriggebliebenen Wochentage vor dem ersten Tag des Monats in Zeile 573 durchlaufen. Die

Einträge des jeweiligen Tages werden dann wie auch später für den eigentlichen Monat mit der Funktion

„Window.CreateMonthTd()“ ausgelesen.

Das Suchen nach Einträgen erfolgt beim Kalender am Server, da für die normale Ansicht nicht alle

Kalenderdaten geladen werden. Anschließend erfolgt eine dem Kontakte-Fenster ähnliche Darstellung

der Suchergebnisse.

Bearbeiten von Einträgen

Soll die Detailansicht eines Termins geladen werden, wird zunächst eine neue Instanz des Objekts

„OBJ_CALENDARENTRYWINDOW“ erstellt, in der anschließend die UserID und die EintragsID gesetzt

var weekday = 1;

var until = Window.CurrentWeekDay;

var daystr = "";

var lastmonthlength;

var last_month = Window.CurrentMonth-1;

var last_year = Window.CurrentYear;

if(last_month == 0)

{

last_month == 12;

last_year--;

}

...

if(Window.CurrentMonth == 1) lastmonthlength = 31;

else lastmonthlength = Window.MonthLengths[Window.CurrentMonth-2];

var FirstDayDate = new Date(Window.CurrentYear,

Window.CurrentMonth-1, 1);

var Days = [6,0,1,2,3,4,5];

var FirstWeekDay = Days[FirstDayDate.getDay()];

for(var i=lastmonthlength-FirstWeekDay+1;i<=lastmonthlength;i++)

{

str+= Window.CreateMonthTd(i, last_month, last_year);

weekday++;

}

547

548

549

550

551

552

553

554

555

556

557

568

569

570

571

572

573

574

575

576

577

Page 49: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 49

werden. Zudem wird bereits vor dem Aufruf der Funktion „init()“ der Titel des Fensters festgelegt. Mit

diesen Informationen ist das Objekt vom Typ „OBJ_CALENDARENTRYWINDOW“ nun in der Lage, die

Daten vom Server zu laden. Selbstverständlich muss auch hier wieder der weiter vorne angeführte

Algorithmus durchlaufen werden, um zu prüfen, ob der User über Leserechte verfügt. Anschließend wird

der HTML-String zur Darstellung zusammengesetzt.

Zum Auswählen des Start- beziehungsweise Enddatums stellt ein Objekt vom

Typ „OBJ_CALENDARENTRYWINDOW“ eine verkleinerte Version der

Monatsansicht dar. Dieser Kalender wird in einem eigenen DIV-Container

rechts unter dem ausgelösten Event „onclick“ angezeigt.

Derselbe Container wird außerdem dazu verwendet, die Einstellungen für

eine mögliche Wiederkehr eines Termins festzulegen.

Freigabe von Kalendern

Ähnlich wie Verzeichnisse im Dateisystem, besteht für User von „VirtualPC“ auch die Möglichkeit, ihre

Kalendereinträge mit anderen zu teilen. Sie können hier genau spezifizieren, welche Einträge von

anderen Usern gesehen werden dürfen und welche Rechte der ausgewählte Nutzer darauf besitzt.

Anzeigen von Erinnerungen

Die beim Laden der Seite aufgerufene Funktion „load()“ startet das automatische Aufrufen der Funktion

„LoadCalRemindings()“, die alle 60 Sekunden ausgeführt wird.

LoadCalRemindingsInterval =

window.setInterval("LoadCalRemindings()", 60000);

110

Page 50: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 50

In dieser Funktion wird ein Datumsstring zusammengestellt, der an den Server geschickt wird. Dort wird

einerseits überprüft, ob er mit einem der Erinnerungen übereinstimmt und andererseits nach bereits

vergangenen Erinnerungen gesucht, die noch nicht aufgerufen wurden. Diese werden anschließend als

XML-Datei an den Client zurückgesandt. Es wird ein Objekt vom Typ

„OBJ_CALENDARREMINDINGSWINDOW“ erstellt, welches die Daten auswertet und anzeigt. Der

Benutzer kann nun auswählen, ob er erneut an den Kalendereintrag erinnert werden will, diesen öffnen

oder die Erinnerung verwerfen.

Page 51: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 51

5.4 Chat

Das Hauptfenster des Programms „Chat“ wird durch ein Objekt vom Typ „OBJ_CHATWINDOW“ erzeugt,

welches andere User anzeigt – allerdings nur jene, die zu den persönlichen Kontakten hinzugefügt

wurden. Zudem kann der Benutzer hier seinen Status und Anzeigetext ähnlich wie bei bekannten

Produkten, z.B. dem MSN-Messenger oder ICQ verändern. Die Anzeige der Kontakte benötigt hier

jedoch bereits externen Code, der, genau wie beim Laden der Erinnerungs-Funktion des Kalenders, in

einem diesmal sekündlichen Intervall ausgeführt wird. Der Algorithmus ist hier sehr simpel. Es werden

lediglich alle geöffneten Fenster durchlaufen, und bei einem geöffnetem Chat-Fenster wird die Funktion

„LoadUsers()“ aufgerufen.

Die beiden weiteren externen Funktionen „WaitForChatRequest()“ und

„WaitForChatMessage()“ werden dazu benötigt, beim Starten einer Unterhaltung durch einen anderen

Benutzer oder beim Einkommen einer Nachricht die entsprechenden Schritte einzuleiten.

Das eigentliche Chat-Fenster wird durch ein anderes JavaScript-Objekt vom Typ

„OBJ_CHATCONVERSATIONWINDOW“ erzeugt. Nachdem der HTML-String generiert wurde, weist das

Eingeben der Nachricht eine Besonderheit auf: Da das HTML-DOM Element „textarea“ keinen

automatischen Zeilenumbruch erzeugt, wenn das Ende der Zeile erreicht ist, sondern eine horizontale

Scrollbar einblendet, wird hier mit JavaScript der Text umgebrochen.

function LoadChatUsers()

{

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].type == 'OBJ_CHATWINDOW')

{

Windows[i].LoadUsers();

}

}

}

60

61

62

63

64

65

66

67

68

69

Page 52: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 52

Beim Event „onkeydown“ des Elements „textarea“ wird mit Hilfe der Eigenschaft „keyCode“ des

übermittelten Parameters in Zeile 41 überprüft, ob es sich um das Drücken der Enter-Taste handelt. In

diesem Fall wird die Funktion „Write()“ des Objekts vom Typ

„OBJ_CHATCONVERSATIONWINDOW“ aufgerufen, und die Nachricht an den Server geschickt.

Andernfalls wird überprüft, ob bereits ein Zeilenumbruch innerhalb des Textes stattgefunden hat. Falls

nicht, wird nach dem 37. Zeichen ein solcher angehängt. Existieren bereits Zeilenumbrüche, wird in Zeile

55 vorerst festgestellt, ob seit dem letzten Zeilenumbruch bereits 37 neue Zeichen eingegeben wurden.

document.getElementById('Window'+this.base.id+'_TextInput').onkeydow

n = function(evt)

{

if(evt.keyCode == 13)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.Write(this.value);

}

else

{

if(this.value.indexOf("\n") == -1)

{

if(String(this.value).length == 37) this.value += "\n";

}

else

{

if(String(this.value.substr(this.value.

lastIndexOf("\n")+4)).length == 37) this.value+= "\n";

}

}

};

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

Page 53: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 53

In der Funktion „Write()“ wird zuerst in Zeile 62 beim Server nachgefragt, ob der User, mit dem die

Unterhaltung geführt wird, überhaupt online ist. Ist dies nicht der Fall, wird über die Funktion

„writeText()“ in Zeile 84 eine entsprechende Meldung in das Nachrichtenfenster geschrieben. Falls er

online ist, wird in Zeile 64 überprüft, ob die Unterhaltung bereits begonnen wurde. Das Starten der

Unterhaltung erfolgt in Zeile 73 erst beim Abschicken der ersten Nachricht. Dieser Vorgang erfolgt in

Zeile 77 durch einen Aufruf der PHP-Datei „write.php“ mit den entsprechenden Parametern, welche die

Nachricht in die Datenbank schreibt.

Write: function(text) {

var url5 = "programs/chat/user_is_online.php?id="

+this.OtherUserId;

var req5 = getHTML(url5);

if(req5 == 'true') {

if(this.Started == false) {

var url1 = "programs/chat/start_conversation.php?id="

+this.OtherUserId;

var resp1 = getHTML(url1);

this.Id = resp1;

this.Started = true;

}

var url2 = "programs/chat/conversation_is_open.php?id="

+this.Id;

var resp2 = getHTML(url2);

if(resp2 == 'closed') {

var url3 = "programs/chat/start_conversation.php?id="

+this.OtherUserId;

var resp3 = getHTML(url3);

this.Id = resp3;

}

var url4 = 'programs/chat/write.php?id='+this.Id+'&text='

+text;

setRequest(url4);

document.getElementById('Window'+this.base.id+'_TextInput')

.value = '';

}

else

{

var user_not_online_text = {de:'Der User ist nicht online!',

en:'The user is not online!'};

this.writeText(user_not_online_text[language], 0);

}

},

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

Page 54: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 54

Ein weiteres Objekt des Chat-Systems, welches jedoch nur über zweitrangige Priorität besitzt, ist das

Objekt „OBJ_CHATLOGWINDOW“. Mit Hilfe dieses Fensters kann der Benutzer den bisherigen

Nachrichtenverlauf mit einem anderen User betrachten.

Page 55: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 55

5.5 „Datei speichern/öffnen“-Dialoge

Der „Datei speichern“-Dialog wird durch ein Objekt namens „OBJ_SAVEFILEWINDOW“ erstellt. Als Basis

dient auch hier ein Objekt vom Typ „OBJ_BASEWINDOW“. Zudem sind einige der Funktionen aus dem

Objekt „OBJ_FILESYSTEMWINDOW“ bekannt, auf die hier nicht mehr eingegangen wird. Die beiden

wesentlichen Unterschiede bestehen darin, dass nur die über die Eigenschaft „filter“ eigengrenzten

Dateitypen angezeigt werden. Des Weiteren wird bei jeder vom Benutzer ausgeführten Aktion, die ein

Schließen des Fensters nach sich zieht (Datei durch Doppelklick auswählen, Klick auf den Öffnen-Button

oder Schließen des Fensters), die Rückgabefunktion aufgerufen.

Nachdem in Zeile 361 überprüft wurde, ob eine Rückgabefunktion definiert wurde, wird in den Zeilen 364

und 365 der Dateiname ausgelesen, mit der die Datei gespeichert werden soll. Anschließend wird in Zeile

366 die Rückgabefunktion mitaufgerufen, der ein neues JavaScript-Objekt übergeben wird. In den Zeilen

376 bis 380 werden schließlich jene Aufgaben durchgeführt, für die normalerweise die Funktion

„close()“ des Unterobjekts vom Typ „OBJ_BASEWINDOW“ zuständig ist. Dies ist notwendig, da das Objekt

„OBJ_SAVEFILEWINDOW“ selbst eine Funktion „close()“ besitzt, auf die verwiesen werden würde, da auch

hier ein Wert an die Rückgabefunktion weitergegeben werden muss.

Das Speichern selbst obliegt nun dem Programm, welches die Instanz des

„OBJ_SAVEFILEWINDOW“ aufgerufen hat.

if(WindowObj.returnfunc != null)

{

var text = '';

if(document.getElementById("Window"+WindowObj.base.id

+"_TextInput"))

text = document.getElementById("Window"

+WindowObj.base.id+"_TextInput").value;

WindowObj.returnfunc({

path:WindowObj.CurrentPath+'/'+WindowObj.SelectedItem.name,

type: 'OBJ_OPENFILEWINDOWRETURN',

path: this.SelectedItem.path,

filename: this.SelectedItem.name,

user_id: this.SelectedItem.user_id,

value: 'OK',

exists: true

});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++)

if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

Page 56: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 56

Der Aufbau „Datei öffnen“-Dialog ist im Wesentlichen gleich aufgebaut wie das Objekt

„OBJ_SAVEFILEWINDOW“ und wird hier nicht weiter erklärt.

Page 57: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 57

6. Anhang

Code-Beispiel – Erstellen eines neuen Fensters ..................................................................................... 58

Quellenverzeichnis ................................................................................................................................. 60

Abstract .................................................................................................................................................. 61

Quelltext ................................................................................................................................................. 62

Page 58: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 58

Code-Beispiel – Erstellen eines neuen Fensters

Defintion eines neuen Objektes

Defintion des Prototypen, des eigentlichen Objekts:

Festlegen der Eigenschaften des Objekts:

Nun kann der HTML-String erstellt werden, der den sichtbaren Inhalt des Objekts beschreibt. Es wird

empfohlen, zumindest für Objekte, dessen Ereignisse Funktionen aufrufen sollen, eine ID zu vergeben

die sich folgendermaßen zusammensetzt: „Window“+this.base.id+“_MeinName“. Des Weiteren ist es

von Vorteil, Texte von Anfang an zweisprachig zu verwalten. Die aktuelle Sprache kann über die globale

Variable „language“ abgerufen werden. Anschließend wird der HTML-String in das DOM-Objekt

geschrieben, welches das Fenster repräsentiert.

var str = "";

str+= "<button id='Window"+this.base.id+"_Button1'>";

var button1_text = {de:'Klick mich', en:'Click me'};

str+= button1_text[language];

str+= "</button>";

this.base.content_obj.innerHTML = str;

19

20

21

22

23

24

25

this.base = new OBJ_BASEWINDOW();

this.base.title = {de:'Fenstername', en:'Windowname'};

this.base.iconpath = 'images/logos/error.png';

this.base.iconpath = 'http://paul.laufer.at/image.gif';

this.base.init();

this.MyVar = 'this is a text';

Windows.push(this);

11

12

13

14

15

16

17

OBJ_MYWINDOW.prototype = {

/* type-Eigenschaft: Notwendig zum Erkennen des Objekts */

type: "OBJ_MYWINDOW",

/* init-Funktion: wird aufgerufen um das Objekt zu

initialisieren */

init: function()

{

4

5

6

7

8

9

10

function OBJ_MYWINDOW() {

}

1

2

Page 59: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 59

Hinzufügen des Codes für den Aufruf des Events „onclick“ des erstellten Buttons:

Das aktuelle Window-Objekt (OBJ_MYWINDOW) wird über die globale Funktion „getWindowObj()“

ermittelt Hier ist die genormte Eigenschaft „id“ des Objekts notwendig. Anschließend wird die

objektspezifische Funktion „MyFunction()“ des Window-Objekts aufgerufen.

Definition einer eigenen Funktion sowie einer Variable innerhalb des Window-Objekts:

Erstellen einer Instanz des Objekts erstellt und Aufruf der Funktion „init()“:

var obj = new OBJ_MYWINDOW();

obj.init();

41

42

MyFunction: function()

{

var text = {de:'Hurra, geschafft!', en:'Got it!'};

alert(text[language]);

},

33

34

35

36

37

document.getElementById('Window'+this.base.id+'_Button1').

onclick = function() {

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.MyFunction();

};

},

27

28

29

30

31

32

Page 60: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 60

Quellenverzeichnis

Zum Zeitpunkt der Einstellung dieser Fachbereichsarbeit wurden Informationen von Web-Seiten

herangezogen, die unter den folgenden Adressen zu finden waren. Aufgrund der sich immer wieder

ändernden Adressstruktur im Internet kann aber nicht gewährleistet werden, dass die Inhalte auch zu

einem späteren Zeitpunkt dort zu finden sind.

TEIA Ajax Kurs:

http://www.teialehrbuch.de/Kostenlose-Kurse/AJAX/20824-XMLHttpRequest.html

Test für XmlHttpRequestEmulator:

http://blog.cdonat.de/archives/4-Test-fuer-XMLHttpRequest-Emulator.html

php.net:

http://www.php.net

JavaScript-Objektorientierung:

http://www.fbi.h-da.de/~a.schuette/Vorlesungen/JavaScript/Objektorientierung.htm

AJAX-Community Forum:

http://www.ajax-community.de/

Page 61: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 61

Abstract

The aim of this FBA was to develop a web interface which offers a simple, location-independent possibility

of managing files and data. Though in current days, it becomes more and more important to provide a

high level of usability, a user should immediately find their way without having to search or ask for help.

Therefore I aimed for a simple graphical user interface similar to the ones that the user might be familiar

with. However, this should not affect the functionality, particularly not the possibility of expanding the

range of provided actions.

Considering these points, after having developed the basic system, I started to write a file browser, which

probably is the most important part of the work. The interface resembles of a file browser in most

operating systems. This is not without any reason, since a user should be able to perform the common file

operations right from the beginning. This resumes from the main intend/intention of the FBA which is to

start the development of a system that is able to replace the location-bound necessity of a desktop

computer by the independence of the World Wide Web. The technical background sets up on a technique

called “AJAX”, which allows a website to dynamically load data from a web server during the user’s

interaction. With these options, I was able to create a system of which functionality and simplicity of/in

handling come close to the standard of common desktop applications.

Other important programs I was able to finish off until now are a contact manager, a calendar and an

instant messaging system. An editor, a collection of small games and an email system are about to be

developed in near future. Anyway, all these other parts are more or less independent from the basic

system. This segregation is necessary to allow a self-contained improvement of each part of the project

without curtailing the others. Moreover, this method implements the basis for another feature of

VirtualPC: Other developers can easily create own applications that work within the system and use all of

its provided functions. On (the) one hand they can write simple scripts that can be run out from the file

browser and on the other hand they have the possibility of designing rich applications including graphics

and accessing the file system.

With this FBA, I created the first version of a hopefully successful enrichment of the World Wide Web and

I hope that other developers will follow, helping to improve this system. At least I could build an example

of the power of the widespread programming language JavaScript, which is often underestimated and

subordinated to its competitors Java and Flash.

Page 62: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 62

Quelltext

load.js

var MainDiv = document.getElementById('MainDiv');

var WindowsCount = 0;

var WindowWidth = 0;

var WindowHeight = 0;

var Windows = new Array();

var TaskBar = new OBJ_TASKBAR();

var HideDiv = null;

var ClipBoardData = new Array();

var ClipBoardType = 'copy';

var HoverObj = null;

var MouseIsDown = false;

var IsDragDrop = false;

var WindowResize = false;

var CurrentWindowResizeWindow = null;

var MoveWindowMouseInBar = null;

var WEATHERWINDOW = new OBJ_WEATHERWINDOW();

function onResize()

{

var OldWidth = WindowWidth;

var OldHeight = WindowHeight;

if(window.innerWidth)

{

WindowWidth = window.innerWidth;

WindowHeight = window.innerHeight;

}

else

{

WindowWidth = document.body.clientWidth;

WindowHeight = document.body.clientHeight;

}

var resized_x, resized_y;

for(var i = 0; i< Windows.length; i++)

{

resized = false;

if(Windows[i].base.width >= WindowWidth)

{

Windows[i].base.width = WindowWidth;

Windows[i].base.obj.style.width = WindowWidth;

resized_x = true;

}

if(Windows[i].base.height >= WindowHeight)

{

Windows[i].base.height = WindowHeight;

Windows[i].base.obj.style.height = WindowHeight;

Windows[i].base.content_obj.style.top = WindowHeight-23;

resized_y = true;

}

if(Windows[i].base.left + Windows[i].base.width >= WindowWidth && resized_x == false)

{

Windows[i].base.left -= (OldWidth-WindowWidth);

Windows[i].base.obj.style.left = Windows[i].base.left;

}

if(Windows[i].base.top + Windows[i].base.height >= WindowHeight && resized_y == false)

{

Windows[i].base.top -= (OldHeight - WindowHeight);

Windows[i].base.obj.style.top = Windows[i].base.top;

Windows[i].base.content_obj.style.top = Windows[i].base.top-23;

}

Page 63: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 63

}

document.getElementById('StartBar').style.left = (WindowWidth-700)/2;

}

document.onmousemove = function(e)

{

if(MouseIsDown && IsDragDrop)

{

if(ClipBoardData.length > 0)

{

var iconpath = "images/icons/default.png";

if(ClipBoardData.length == 1) {

if(ClipBoardData[0].type == 'file')

{

iconpath =

"images/filesystem/formats/big/"+ClipBoardData[0].image.toLowerCase();

} }

else

{

}

var obj = document.getElementById('DragDropDiv');

obj.style.visibility = 'visible';

obj.innerHTML = "<img src='"+iconpath+"' />";

if(window.event)

{ obj.style.left = window.event.clientX+10;

obj.style.top = window.event.clientY+10;

}

else

{

obj.style.left = e.pageX+10;

obj.style.top = e.pageY+10;

}

}

}

else if(MouseIsDown && WindowResize != false)

{

var Window = CurrentWindowResizeWindow;

var top, left;

if(window.event)

{

top = window.event.clientY;

left = window.event.clientX;

}

else

{

top = e.pageY;

left = e.pageX;

}

if(Window != null)

{

var width = Window.base.width;

var height = Window.base.height;

switch(WindowResize)

{

case "Top":

height = Window.base.top - top + Window.base.height;

left = Window.base.left;

break;

case "Bottom":

height = top - Window.base.top;

top = Window.base.top;

left = Window.base.left;

break;

Page 64: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 64

case "Left":

width = Window.base.left - left + Window.base.width;

top = Window.base.top;

break;

case "Right":

width = left - Window.base.left;

top = Window.base.top;

left = Window.base.left;

break;

case "Move":

left-= MoveWindowMouseInBar.x;

top-= MoveWindowMouseInBar.y;

break;

}

if(width < 300) width = 300;

Window.base.height = height;

Window.base.obj.style.height = height;

Window.base.obj.style.width = width;

Window.base.width = width;

Window.base.top = top;

Window.base.obj.style.top = top;

Window.base.obj.style.left = left;

Window.base.left = left;

Window.base.content_obj.style.height = height-23;

if(Window.onresize) Window.onresize();

}

}

};

document.onmousedown = function(e){

var ok = false;

if(e == null) if(event.button==1) ok = true;

if(e != null) if(e.button==0) ok = true;

if(ok) MouseIsDown = true;

else MouseIsDown = false;

};

document.onmouseup = function() {

MouseIsDown = false;

WindowResize = false;

if(document.getElementById('DragDropDiv').style.visibility == 'visible') ClipBoardData =

new Array();

document.getElementById('DragDropDiv').style.visibility = 'hidden';

};

function loadPage()

{

document.body.oncontextmenu = function() { return false; }

var AddDivs = [

{id:"TaskBar", string:"<div id='TaskBar'><div id='HideTaskBarDiv'></div></div>"},

{id:"StartBar", string:"<div id='StartBar'><div id='StartBarItems'></div></div>"},

{id:"DragDropDiv", string:"<div id='DragDropDiv' style='visibility:hidden;left:0px;

top:0px;'></div>"},

{id:"ContextMenu", string:"<div id='ContextMenu' style='left:0px; top:0px;z-

index:0;visibility:hidden;'>adsfasdfasdf</div>"}

];

for(var i = 0; i<AddDivs.length;i++)

{

TempDiv.innerHTML = AddDivs[i].string;

var obj = document.getElementById(AddDivs[i].id);

document.getElementsByTagName('body')[0].appendChild(obj);

TempDiv.innerHTML = "";

}

MainDiv = document.getElementById('MainDiv');

if(window.innerWidth)

Page 65: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 65

{

WindowWidth = window.innerWidth;

WindowHeight = window.innerHeight;

}

else

{

WindowWidth = document.body.clientWidth;

WindowHeight = document.body.clientHeight;

}

document.getElementById('StartBar').style.left = (WindowWidth-700)/2;

MainDiv.style.height = WindowHeight-21;

FillStartBar();

TaskBar.obj = document.getElementById('TaskBar');

HideDiv = document.getElementById('HideDiv')

document.oncontextmenu = function() {

var bool = false;

return bool;

};

LoadCalRemindings();

//SET Intervalls

LoadCalRemindingsInterval = window.setInterval("LoadCalRemindings()", 60000);

LoadChatUsersInterval = window.setInterval("LoadChatUsers()", 1000);

WaitForChatRequestInterval = window.setInterval("WaitForChatRequest()", 1000);

WaitForChatMessageInterval = window.setInterval("WaitForChatMessage()", 1000);

document.getElementById("LoadingDiv").style.visibility = 'hidden';

}

function getWindowObj(item)

{

if(item.id)

{

var itemid = String(item.id);

var WindowObj = null;

var id = itemid.substr(6,itemid.indexOf('_')-6);

var index = 0;

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].base.id == id)

{

WindowObj = Windows[i];

index = i;

}

}

return {index:index, obj:WindowObj};

}

else return null;

}

Page 66: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 66

constant_requests.js

var LoadCalRemindingsInterval = null;

var LoadChatUsersInterval = null;

var WaitForChatRequestInterval = null;

var WaitForChatMessageInterval = null;

function LoadCalRemindings()

{

var d = new Date();

var datetime = d.getFullYear()+'-';

var m = (d.getMonth())+1;

if(m<10) datetime+= '0'+m+'-';

else datetime+= m+'-';

var day = d.getDate();

if(day<10) datetime+= '0'+day+' ';

else datetime+= day+' ';

var h = d.getHours();

if(h<10) datetime+= '0'+h+':';

else datetime+= h+':';

var min = d.getMinutes();

if(min<10) datetime+= '0'+min;

else datetime+= min;

datetime+= ':00';

var url = 'programs/calendar/get_remindings.php?datetime='+datetime;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("entry");

var id = 0;

var obj = null;

var Items = new Array();

if(values.length != 0)

{

for(var i = 0; i<values.length; i++)

{

obj = new Object();

var cv = values[i];

if(cv.getElementsByTagName('id')[0].hasChildNodes())obj.id =

parseInt(cv.getElementsByTagName("id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('user_id')[0].hasChildNodes())obj.user_id =

parseInt(cv.getElementsByTagName("user_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('title')[0].hasChildNodes())obj.title =

cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())obj.text =

cv.getElementsByTagName("text")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color_name')[0].hasChildNodes())obj.color_name =

cv.getElementsByTagName("color_name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('start')[0].hasChildNodes())obj.start =

cv.getElementsByTagName("start")[0].firstChild.nodeValue;

Items.push(obj);

}

var window = new OBJ_CALENDARREMINGSWINDOW();

window.Items = Items;

window.init();

}

}

function LoadChatUsers()

{

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].type == 'OBJ_CHATWINDOW')

{

Windows[i].LoadUsers();

Page 67: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 67

}

}

}

function WaitForChatRequest()

{

var url = 'programs/chat/has_conversation.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("conversation");

if(values.length != 0)

{

var from_id = 0;

var id = 0;

var from_name = '';

var is_open = false;

for(var i = 0; i<values.length; i++)

{

is_open = false;

var cv = values[i];

if(cv.getElementsByTagName('id')[0].hasChildNodes())id =

parseInt(cv.getElementsByTagName("id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('from_id')[0].hasChildNodes())from_id =

parseInt(cv.getElementsByTagName("from_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('from_name')[0].hasChildNodes())from_name =

cv.getElementsByTagName("from_name")[0].firstChild.nodeValue;

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].type == 'OBJ_CHATCONVERSATIONWINDOW')

{

if(Windows[i].Id == id)

{

is_open = true;

}

}

}

if(!is_open)

{

var obj = new OBJ_CHATCONVERSATIONWINDOW();

obj.OtherUserId = from_id;

obj.Id = id;

obj.Started = true;

obj.OtherUserName = from_name;

obj.init();

WaitForChatMessage();

}

}

}

}

function WaitForChatMessage()

{

var url = 'programs/chat/receive_message.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("message");

if(values.length != 0)

Page 68: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 68

{

var from_id = 0;

var chat_id = 0;

var from_name = '';

var text = '';

var color = '#000000';

var font = 'Arial';

for(var i = 0; i<values.length; i++)

{

var cv = values[i];

if(cv.getElementsByTagName('chat_id')[0].hasChildNodes())chat_id =

parseInt(cv.getElementsByTagName("chat_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('from_id')[0].hasChildNodes())from_id =

parseInt(cv.getElementsByTagName("from_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('from_name')[0].hasChildNodes())from_name =

cv.getElementsByTagName("from_name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())text =

cv.getElementsByTagName("text")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())color =

cv.getElementsByTagName("from_color")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())font =

cv.getElementsByTagName("from_font")[0].firstChild.nodeValue;

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].type == 'OBJ_CHATCONVERSATIONWINDOW')

{

if(Windows[i].Id == chat_id)

{

var width = Windows[i].base.width-40;

var write_text =

{

de:'schreibt',

en:'writes'

};

var texts = from_name+' '+write_text[language]+':<div style="margin-

left:8px;color:'+color+';font-family:'+font+'; max-width:'+width+'px;">'+text+"</div>";

Windows[i].writeText(texts, from_id);

}

}

}

}

}

}

Page 69: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 69

xmlrequest.js

function getXmlFile(url)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open('GET', url, false);

xmlhttpReq.send(null);

var xmlFile = xmlhttpReq.responseXML;

return xmlFile;

}

function getXmlFileAsync(url, returnfunc)

{

var xmlhttpReqa = new XMLHttpRequest();

xmlhttpReqa.open('GET', url, true);

xmlhttpReqa.onreadystatechange = function()

{

if(xmlhttpReqa.readyState==4 && xmlhttpReqa.status == 200)

{

var xmlFile = xmlhttpReqa.responseXML;

returnfunc(xmlFile);

}

};

xmlhttpReqa.send(null);

}

function getHTML(url)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open('GET', url, false);

xmlhttpReq.send(null);

var html = xmlhttpReq.responseText;

return html;

}

function setRequest(url)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open('GET', url, true);

xmlhttpReq.onreadystatechange = function() {

if(xmlhttpReq.readyState == 4 && xmlhttpReq.status == 200)

{

if(xmlhttpReq.responseText != "")

{

var MyBox = new OBJ_MESSAGEBOX();

MyBox.returntype = 'OK';

MyBox.show({de:'Hinweis', en:'Notice'}, {de:xmlhttpReq.responseText,

en:xmlhttpReq.responseText}, 'notice'); }

}

};

xmlhttpReq.send(null);

}

function setXMLRequest(url, xml)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open('POST', url, true);

xmlhttpReq.onreadystatechange = function() {

if(xmlhttpReq.readyState == 4 && xmlhttpReq.status == 200)

{

if(xmlhttpReq.responseText != "")

{

var MyBox = new OBJ_MESSAGEBOX();

MyBox.returntype = 'OK';

MyBox.show({de:'Hinweis', en:'Notice'}, {de:xmlhttpReq.responseText,

en:xmlhttpReq.responseText}, 'notice'); }

}

Page 70: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 70

};

xmlhttpReq.send(xml);

}

function setRequestWait(url)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open('GET', url, false);

xmlhttpReq.send(null);

}

function setXmlRequest(url, xml)

{

var xmlhttpReq = new XMLHttpRequest();

xmlhttpReq.open("POST", url, true);

xmlhttpReq.setRequestHeader("TestAction", 'test');

xmlhttpReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

xmlhttpReq.onreadystatechange = function()

{

if(xmlhttpReq.readyState == 4)

{

}

}

xmlhttpReq.send(xml);

}

function CreateXML(values)

{

var str = "<values>";

for(var i = 0; i<values.length; i++)

{

str+= "<"+values[i].node+">"+PrepareXML(values[i].value)+"</"+values[i].node+">";

}

str+= "</values>";

return str;

}

function PrepareXML(string)

{

var arr = [

["&", "&amp;"],

["'", "&apos;"],

["<", "&lt;"],

[">", "&gt;"],

['"', "&quot;"],

["Ä", "&#196;"],

["Ö", "&#214;"],

["Ü", "&#220;"],

["ä", "&#228;"],

["ö", "&#246;"],

["ü", "&#252;"],

["ß", "&#223;"]

];

for(var i = 0; i < arr.length; i++)

{

string = string.replace(arr[i][0], arr[i][1]);

}

return string;

}

Page 71: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 71

startbar.js

function FillStartBar()

{

var Items = [

{

id: 'logout',

text:

{

de:'Logout',

en:'Logout'

},

image:'logout.png',

onclick: function()

{

window.open('../logout.php', '_self');

}

},

{

id: 'settings',

text:

{

de:'Einstellungen',

en:'Settings'

},

image:'settings.png',

onclick: function()

{

var obj = new OBJ_SETTINGSWINDOW();

obj.init();

}

},

{

id: 'help',

text:

{

de:'Hilfe',

en:'Help'

},

image:'help.png',

onclick: function()

{

var MyBox = new OBJ_MESSAGEBOX();

MyBox.returntype = 'OK';

MyBox.show({de:'Hinweis', en:'Notice'}, {de:'Diese Funktion steht noch nicht zur

Verfügung!', en:'This function is not yet included!'}, 'notice');

}

},

{

id: 'contacts',

text:

{

de:'Kontakte',

en:'Contacts'

},

image:'contacts.png',

Page 72: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 72

onclick: function()

{

var obj = new OBJ_CONTACTSWINDOW();

obj.init();

}

},

{

id: 'calendar',

text:

{

de:'Kalender',

en:'Calendar'

},

image:'calendar.png',

onclick: function()

{

var obj = new OBJ_CALENDARWINDOW();

obj.init();

}

},

{

id: 'chat',

text:

{

de:'Chat',

en:'Chat'

},

image:'chat.png',

onclick: function()

{

var obj = new OBJ_CHATWINDOW();

obj.init();

}

},

{

id: 'tetris',

text:

{

de:'Tetris',

en:'Tetris'

},

image:'tetris.png',

onclick: function()

{

alert('tetris');

}

},

{

id: 'editor',

text:

{

de:'Editor',

en:'Editor'

Page 73: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 73

},

image:'editor.png',

onclick: function()

{

alert('editor');

}

},

{

id: 'viewer',

text:

{

de:'Dateivorschau',

en:'Viewer'

},

image:'viewer.png',

onclick: function()

{

alert('viewer');

}

},

{

id: 'messages',

text:

{

de:'Nachrichten',

en:'Messages'

},

image:'messages.png',

onclick: function()

{

var obj = new OBJ_MESSAGINGWINDOW();

obj.init();

}

},

{

id: 'filesystem',

text:

{

de:'Dateisystem',

en:'Filesystem'

},

image:'filesystem.png',

onclick: function()

{

var obj = new OBJ_FILESYSTEMWINDOW();

obj.init();

}

},

{

id: 'weather',

text:

{

de:'Wetter',

Page 74: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 74

en:'Weather'

},

image:'weather.png',

onclick: function()

{

if(document.getElementById('WeatherWindow')) WEATHERWINDOW.close();

else WEATHERWINDOW.show();

}

}

];

var StartBar = document.getElementById('StartBar');

var str = "<table border='0' align='center'><tr>";

var id,

imageover,

obj;

for(var i = 0; i<Items.length;i++)

{

id = 'startbar-item-'+Items[i].id;

var image_over = Items[i].image.substr(0, Items[i].image.length-4)+'_over.png';

str+= "<td>";

str+= "<div id='"+id+"' class='StartBar-Item'

style='background:url(images/startbar/"+Items[i].image+")' ";

str+= "title='"+Items[i].text[language]+"' ";

str+= "onmouseover='this.style.background="+'"url(images/startbar/'+image_over+')"'+"'

";

str+=

"onmouseout='this.style.background="+'"url(images/startbar/'+Items[i].image+')"'+"' ";

str+= "</td>";

}

str+= "</tr></table>";

StartBar.innerHTML = str;

for(var j = 0; j<Items.length;j++)

{

id = 'startbar-item-'+Items[j].id;

obj = document.getElementById(id);

obj.onclick = Items[j].onclick;

}

}

Page 75: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 75

OBJ_BASEWINDOW.js

function OBJ_BASEWINDOW()

{

}

OBJ_BASEWINDOW.prototype =

{

type: "OBJ_BASEWINDOW",

init: function()

{

if(this.height == "100%") this.height = WindowHeight;

if(this.width == "100%") this.width = WindowWidth;

this.top = (WindowHeight-this.height)/2;

this.left = (WindowWidth-this.width)/2;

this.id = WindowsCount;

WindowsCount++;

if(this.zIndex == null) this.zIndex = Windows.length+1;

var str = "";

str+= " <div id='Window"+this.id+"_Main'";

str+= " class='Window'";

str+= " style='top:"+this.top+";left:"+this.left+";";

str+= " height:"+this.height+";width:"+this.width+";";

str+= " z-index:"+this.zIndex+";'>";

str+= "<div id='Window"+this.id+"_ResizeTop' style='position:absolute; left:0px;

top:0px; width:"+this.width+";height:1px;background:black;cursor:n-resize;'></div>";

str+= "<div id='Window"+this.id+"_ResizeBottom' style='position:absolute; left:0px;

bottom:0px; width:"+this.width+";height:1px;background:black;cursor:n-resize;'></div>";

str+= "<div id='Window"+this.id+"_ResizeRight' style='position:absolute; right:0px;

top:0px; height:"+this.height+";width:1px;background:black;cursor:e-resize;'></div>";

str+= "<div id='Window"+this.id+"_ResizeLeft' style='position:absolute; left:0px;

top:0px; height:"+this.height+";width:1px;background:black;cursor:e-resize;'></div>";

str+= " <div id='Window"+this.id+"_BAR' class='WindowBar'>";

str+= " <div id='left'>";

str+= " <img id='logo' src='"+this.iconpath+"' />";

str+= " </div>";

str+= " <div class='WindowBar_title'

id='Window"+this.id+"_bar_title'>"+this.title[language]+"</div>";

str+= " <div id='right'>";

if(this.minimizeable)

{

str+= "<img id='Window"+this.id+"_button-minimize'";

str+= " onmouseover='this.src=\"images/minimize_over.png\"'";

str+= " onmouseout='this.src=\"images/minimize.png\"'";

str+= " src='images/minimize.png' border='0' />";

}

if(this.resizeable)

{

str+= "<img id='Window"+this.id+"_button-maximize'";

str+= " onmouseover='this.src=\"images/maximize_over.png\"'";

str+= " onmouseout='this.src=\"images/maximize.png\"'";

str+= " src='images/maximize.png' border='0' />";

}

str+= "<img id='Window"+this.id+"_button-close'";

str+= " onmouseover='this.src=\"images/close_over.png\"'";

str+= " onmouseout='this.src=\"images/close.png\"'";

str+= " src='images/close.png' border='0' />";

str+= " </div>";

str+="</div>";

Page 76: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 76

str+= " <div id='Window"+this.id+"_content'";

str+= " style='background:"+this.bgcolor+";width:100%;height:"+(this.height-

23)+";opacity:"+this.opacity+";filter:alpha(opacity="+this.opacity*100+");overflow:auto;'>";

str+= " </div>";

str+= " </div>";

TempDiv.innerHTML = str;

var elem = document.getElementById("Window"+this.id+'_Main');

this.obj = elem;

MainDiv.appendChild(elem);

TempDiv.innerHTML = "";

this.obj.onclick = function()

{

document.getElementById('ContextMenu').style.visibility = 'hidden';

};

var tobj = new OBJ_TASKBARITEM();

tobj.iconpath = this.iconpath;

tobj.id = this.id;

tobj.text = this.title;

TaskBar.add(tobj);

document.getElementById("Window"+this.id+"_button-close").onclick = this.close;

document.getElementById("Window"+this.id+"_BAR").ondblclick = this.maximize;

if(this.minimizeable)

{

document.getElementById("Window"+this.id+"_button-minimize").onclick =

this.minimize;

}

if(this.resizeable)

{

document.getElementById("Window"+this.id+"_button-maximize").onclick =

this.maximize;

}

document.getElementById("Window"+this.id+"_BAR").onmousedown = function(e) {

parent.WindowResize = "Move";

parent.MoveWindowMouseInBar = new Object();

var top, left;

if(window.event)

{

top = window.event.clientY;

left = window.event.clientX;

}

else

{

top = e.pageY;

left = e.pageX;

}

var Window = getWindowObj(this).obj;

parent.MoveWindowMouseInBar.x = left - Window.base.left;

parent.MoveWindowMouseInBar.y = top - Window.base.top;

parent.CurrentWindowResizeWindow = getWindowObj(this).obj;

var Window = getWindowObj(this).obj;

if(document.getElementById("HideDiv").style.visibility == "hidden")

Window.base.bringToFront();

};

if(this.resizeable)

{

document.getElementById("Window"+this.id+"_ResizeTop").onmousedown = function() {

Page 77: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 77

parent.WindowResize = "Top";

};

document.getElementById("Window"+this.id+"_ResizeBottom").onmousedown = function()

{

parent.WindowResize = "Bottom";

};

document.getElementById("Window"+this.id+"_ResizeLeft").onmousedown = function() {

parent.WindowResize = "Left";

};

document.getElementById("Window"+this.id+"_ResizeRight").onmousedown = function()

{

parent.WindowResize = "Right";

};

document.getElementById("Window"+this.id+"_ResizeTop").onmouseout = function()

{

if(parent.MouseIsDown == true && parent.WindowResize == "Top")

{

parent.CurrentWindowResizeWindow = getWindowObj(this).obj;

}

};

document.getElementById("Window"+this.id+"_ResizeBottom").onmouseout = function()

{

if(parent.MouseIsDown == true && parent.WindowResize == "Bottom")

{

parent.CurrentWindowResizeWindow = getWindowObj(this).obj;

}

};

document.getElementById("Window"+this.id+"_ResizeLeft").onmouseout = function()

{

if(parent.MouseIsDown == true && parent.WindowResize == "Left")

{

parent.CurrentWindowResizeWindow = getWindowObj(this).obj;

}

};

document.getElementById("Window"+this.id+"_ResizeRight").onmouseout = function()

{

if(parent.MouseIsDown == true && parent.WindowResize == "Right")

{

parent.CurrentWindowResizeWindow = getWindowObj(this).obj;

}

};

}

this.content_obj = document.getElementById('Window'+this.id+'_content');

},

close: function(id)

{

if(typeof id == "number")

{

var WindowObj, index;

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].base.id == id)

{

WindowObj = Windows[i];

index = i;

}

}

}

else

{

var GetWindowObj = getWindowObj(this);

Page 78: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 78

var WindowObj = GetWindowObj.obj;

var index = GetWindowObj.index;

}

if(WindowObj.close != null) WindowObj.close();

else

{

for(var i = 0; i<WindowObj.base.subwindows.length; i++)

{

var subid = -1;

for(var j = 0; j<Windows.length; j++) if(Windows[j].base.id ==

WindowObj.base.subwindows[i].base.id) subid = j;

if(subid != -1) WindowObj.base.subwindows[i].base.close(subid);

}

TaskBar.remove(WindowObj.base.id);

Windows.splice(index, 1);

MainDiv.removeChild(WindowObj.base.obj);

WindowObj = null;

}

},

minimize: function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

if(WindowObj.base.minimizeable)

{

WindowObj.base.obj.style.visibility = 'hidden';

}

},

maximize: function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

if(WindowObj.base.resizeable)

{

if(WindowObj.base.width == WindowWidth)

{

WindowObj.base.width = WindowWidth*60/100;

WindowObj.base.obj.style.width = WindowWidth*60/100;

WindowObj.base.height = WindowHeight*60/100;

WindowObj.base.obj.style.height = WindowHeight*60/100;

WindowObj.base.content_obj.style.height = WindowHeight*60/100-23;

}

else

{

WindowObj.base.width = WindowWidth;

WindowObj.base.height = WindowHeight;

WindowObj.base.obj.style.height = WindowHeight;

WindowObj.base.obj.style.width = WindowWidth;

WindowObj.base.content_obj.style.height = WindowHeight-23;

WindowObj.base.top = 0;

WindowObj.base.left = 0;

WindowObj.base.obj.style.left = 0;

WindowObj.base.obj.style.top = 0;

}

}

if(WindowObj.onresize) WindowObj.onresize();

},

onresize: function()

{

if(this.resizeable)

{

alert(this.parent.type);

if(parent.onresize)

parent.onresize();

Page 79: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 79

}

},

bringToFront: function()

{

var MaxZIndex = 0;

for(var i = 0; i < Windows.length; i++)

{

if(Windows[i].base.zIndex > this.zIndex)

{

if(Windows[i].base.zIndex > MaxZIndex) MaxZIndex = Windows[i].base.zIndex;

if(Windows[i].base.zIndex > this.zIndex)

{

Windows[i].base.zIndex--;

Windows[i].base.obj.style.zIndex--;

}

}

this.obj.style.zIndex = MaxZIndex;

this.zIndex = MaxZIndex;

this.obj.style.visibility = 'visible';

}

},

titlechange: function(string)

{

document.getElementById('Window'+this.id+'_bar_title').innerHTML = string;

},

left: 0,

top: 0,

height: "100%",

width: "100%",

minimizeable: true,

maximizeable: true,

resizeable: true,

opacity: 1,

bgcolor: "#ffffff",

iconpath: "images/icons/default.png",

title: {de:"Programm", en:"Program"},

id: null,

multiopen: true,

zIndex: null,

obj:null,

content_obj: null,

subwindows: new Array(),

ParentWindow: null

};

Page 80: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 80

OBJ_CALENDARENTRYWINDOW.js

function OBJ_CALENDARENTRYWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CALENDARENTRYWINDOW.prototype =

{

type: "OBJ_CALENDARENTRYWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

if(this.New == true) this.base.title = {de:'Neuer Eintrag', en:'New Entry'};

else this.base.title = {de:this.title, en:this.title};

this.base.iconpath = 'images/logos/calendar.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 800;

this.base.height = 500;

this.base.bgcolor = '#111111';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var D = new Date();

if(this.start == null) this.start = D;

if(this.end == null) this.end = D;

this.CurrentMonth = D.getMonth();

this.CurrentYear = D.getFullYear();

this.CurrentDate = D.getDate();

this.CurrentWeekDay = D.getDay()-1;

if(this.CurrentWeekDay == -1) this.CurrentWeekDay = 7;

this.DateString = D.getFullYear()+"-";

if(this.CurrentMonth<10) this.DateString+= "0"+this.CurrentMonth+"-";

else this.DateString+= this.CurrentMonth+"-";

if(this.CurrentDate < 10) this.DateString+= "0"+this.CurrentDate;

else this.DateString+= this.CurrentDate;

this.MonthNames = [

{de:'Januar', en:'January'},

{de:'Februar', en:'February'},

{de:'März', en:'March'},

{de:'April', en:'April'},

{de:'Mai', en:'May'},

{de:'Juni', en:'June'},

{de:'Juli', en:'July'},

{de:'August', en:'August'},

{de:'September', en:'September'},

{de:'Oktober', en:'October'},

{de:'November', en:'November'},

{de:'Dezember', en:'December'}];

this.MonthLengths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

if(this.CurrentYear % 4 == 0) this.MonthLengths[1] = 29;

this.CurrentMonthLength = this.MonthLengths[this.CurrentMonth-1];

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"; float:none;'>";

if(this.permission[1] == "1")

{

str+= " <div id='Window"+this.base.id+"_SaveDiv' class='CalendarMenuItemDiv'>";

var text_save = {en:'Save', de:'Speichern'};

str+= text_save[language];

str+= " </div>";

str+= "<div class='CalendarMenuItemDiv'>|</div>";

}

if(this.permission[2] == "1" && this.New == false)

Page 81: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 81

{

str+= " <div id='Window"+this.base.id+"_DeleteDiv' class='CalendarMenuItemDiv'>";

var text_delete = {en:'Delete', de:'Löschen'};str+= text_delete[language];

str+= " </div>";

}

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_CalendarDiv' class='Contacts_ContactDiv'

style='width:"+this.base.width+"'>";

var loading_text = {de:'Eintrag wird geladen...', en:'Loading Entry...'};

str+= loading_text[language];

str+= "</div><br />";

str+= "<div id='Window"+this.base.id+"_SmallWindow'

class='Calendar_SmallWindow'>asdfasdfasdf</div>";

this.base.content_obj.innerHTML = str;

this.SmallWindow = document.getElementById('Window'+this.base.id+'_SmallWindow');

if(this.permission[1] == '1') {

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var WString = 'Window'+Window.base.id;

var url = 'programs/calendar/save_entry.php?new='+Window.New;url+=

'&EntryId='+Window.EntryId;

url+= '&UserId='+Window.UserId;

url+= '&title='+document.getElementById(WString+'_title').value;

url+= '&text='+document.getElementById(WString+'_text').value;

var start_string = document.getElementById(WString+'_start_date_input').value;

url+= '&start='+start_string.substr(6,4)+'-'+start_string.substr(3,2)+'-

'+start_string.substr(0,2);

url+= '%20'+document.getElementById(WString+'_start_time').value;

var end_string = document.getElementById(WString+'_end_date_input').value;

url+= '&end='+end_string.substr(6,4)+'-'+end_string.substr(3,2)+'-

'+end_string.substr(0,2);

url+= '%20'+document.getElementById(WString+'_end_time').value;

var remind_diff = document.getElementById(WString+'_remind').value;

var start_hour =

parseFloat(document.getElementById(WString+'_start_time').value.substr(0,2));

var start_min =

parseFloat(document.getElementById(WString+'_start_time').value.substr(3,2));

var start_year =

parseFloat(document.getElementById(WString+'_start_date_input').value.substr(6,4));

var start_month =

parseFloat(document.getElementById(WString+'_start_date_input').value.substr(3,2));

var start_day =

parseFloat(document.getElementById(WString+'_start_date_input').value.substr(0,2));

var remind_min = start_min;

var remind_hour = start_hour;

var remind_day = start_day;

var remind_month = start_month;

var remind_year = start_year;

if(remind_diff.indexOf('Minutes') != -1) remind_min = start_min-

parseFloat(remind_diff.substr(8));

if(remind_diff.indexOf('Hours') != -1) remind_hour = start_hour-

parseFloat(remind_diff.substr(6));

if(remind_diff.indexOf('Days') != -1) remind_day = start_day-

parseFloat(remind_diff.substr(5));

Page 82: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 82

if(remind_diff.indexOf('Weeks') != -1) remind_day = start_day-

(parseFloat(remind_diff.substr(6))*7);

if(remind_min<0)

{

remind_min = 60+remind_min;

remind_hour--;

}

if(remind_hour<0)

{

remind_hour = 24+remind_hour;

remind_day--;

}

if(remind_day < 1)

{

remind_day = Window.MonthLengths[remind_month-2]+remind_day;

remind_month--;

}

if(remind_month == 0)

{

remind_year--;

remind_month = 12;

}

var remind = remind_year+'-';

if(remind_month < 10) remind+= '0'+remind_month;

else remind+= remind_month;

remind+='-';

if(remind_day < 10) remind+= '0'+remind_day;

else remind+= remind_day;

remind+= '%20';

if(remind_hour < 10) remind+= '0'+remind_hour;

else remind+= remind_hour;

remind+= ':';

if(remind_min < 10) remind+= '0'+remind_min;

else remind+= remind_min;

url+= '&remind='+remind;

if(document.getElementById(WString+'_remind').selectedIndex == 0) url+=

'&remind_bool=false';

else url+= '&remind_bool=true';

url+= '&color_id='+Window.category_id;

url+= '&recurring_bool='+Window.recurring_bool;

url+= '&recurring_intervall='+Window.recurring_intervall;url+=

'&recurring_class='+Window.recurring_class;

setRequestWait(url);

if(Window.ParentWindow != null)

{

if(document.getElementById('Window'+Window.ParentWindow.base.id+'_Main'))

{

if(Window.ParentWindow.type == 'OBJ_CALENDARWINDOW')

{

Window.ParentWindow.LoadEntries();

}

}

}

Window.base.close(Window.base.id);

};

}

if(this.permission[2] == '1' && this.New == false)

{

document.getElementById('Window'+this.base.id+'_DeleteDiv').onmouseover =

function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

Page 83: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 83

document.getElementById('Window'+this.base.id+'_DeleteDiv').onmouseout =

function() {

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_DeleteDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var url =

'programs/calendar/delete_entry.php?EntryId='+Window.EntryId+'&UserId='+Window.UserId;setReque

stWait(url);

if(document.getElementById('Window'+Window.ParentWindow.base.id+'_Main'))

{

if(Window.ParentWindow.type == 'OBJ_CALENDARWINDOW')

{

Window.ParentWindow.LoadEntries();

}

}

Window.base.close(Window.base.id);

};

}

if(!this.New) this.LoadEntry();

else this.DrawEntry();

},

LoadEntry: function()

{

var url = 'programs/calendar/get_entry.php?id='+this.EntryId+'&user_id='+this.UserId;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var cv = myXML.getElementsByTagName("entry")[0];

if(cv.getElementsByTagName('user_id')[0].hasChildNodes())

this.UserId = cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('startdatetime')[0].hasChildNodes())

var startdatetime =

cv.getElementsByTagName("startdatetime")[0].firstChild.nodeValue;

this.start = new Date(parseFloat(startdatetime.substr(0,4)),

parseFloat(startdatetime.substr(5,2)), parseFloat(startdatetime.substr(8,2)),

parseFloat(startdatetime.substr(11, 2)), parseFloat(startdatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('enddatetime')[0].hasChildNodes())

var enddatetime = cv.getElementsByTagName("enddatetime")[0].firstChild.nodeValue;

this.end = new Date(parseFloat(enddatetime.substr(0,4)),

parseFloat(enddatetime.substr(5,2)), parseFloat(enddatetime.substr(8,2)),

parseFloat(enddatetime.substr(11, 2)), parseFloat(enddatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('remind')[0].hasChildNodes())

if(cv.getElementsByTagName("remind")[0].firstChild.nodeValue == 'true')

this.remind_bool = true;

else this.remind_bool = false;

if(cv.getElementsByTagName('reminddatetime')[0].hasChildNodes())

var reminddatetime =

cv.getElementsByTagName("reminddatetime")[0].firstChild.nodeValue;

this.remind = new Date(parseFloat(reminddatetime.substr(0,4)),

parseFloat(reminddatetime.substr(5,2)), parseFloat(reminddatetime.substr(8,2)),

parseFloat(reminddatetime.substr(11, 2)), parseFloat(reminddatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('title')[0].hasChildNodes())

this.title = cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())

this.text = cv.getElementsByTagName("text")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color_id')[0].hasChildNodes())

this.color_id = cv.getElementsByTagName("color_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('recurring_bool')[0].hasChildNodes())

if(cv.getElementsByTagName("recurring_bool")[0].firstChild.nodeValue == 'true')

this.recurring_bool = true;

else this.recurring_bool = false;

if(cv.getElementsByTagName('recurring_intervall')[0].hasChildNodes())

Page 84: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 84

this.recurring_intervall =

parseFloat(cv.getElementsByTagName("recurring_intervall")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('recurring_class')[0].hasChildNodes())

this.recurring_class =

parseFloat(cv.getElementsByTagName("recurring_class")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('color')[0].hasChildNodes())

this.category_name = cv.getElementsByTagName("color")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color_id')[0].hasChildNodes())

this.category_id =

parseFloat(cv.getElementsByTagName("color_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('permission')[0].hasChildNodes())

this.permission = cv.getElementsByTagName("permission")[0].firstChild.nodeValue;

this.DrawEntry();

},

DrawEntry: function()

{

if(this.permission[1] == '0')

document.getElementById('Window'+this.base.id+'_SaveDiv').style.display = 'none';

if(this.permission[2] == '0')

document.getElementById('Window'+this.base.id+'_DeleteDiv').style.display = 'none';

var str = "";

str+= "<br /><div class='Contacts_Main'>";

var title_text = {de:'Titel', en:'Title'};

str+= title_text[language]+"&nbsp;&nbsp;<input id='Window"+this.base.id+"_title'

value='"+this.title+"' type='text' size='40' class='Contacts_input' />&nbsp;&nbsp;";

str+= "<br /><br />";

str+= "<table border='0'>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var start_text = {de:'Start', en:'Start'};

var startdatestring = "";

if(this.start.getDate()<10) startdatestring+= "0"+this.start.getDate();

else startdatestring+= this.start.getDate();

startdatestring+= ".";

if((this.start.getMonth()+1)<10) startdatestring+= "0"+(this.start.getMonth()+1);

else startdatestring+= (this.start.getMonth()+1);

startdatestring+= ".";

startdatestring+= this.start.getFullYear();

var change_date_text =

{

de:'Ändere Datum',

en:'Change D};

str+= "<img id='Window"+this.base.id+"_change_start' src='images/logos/calendar.png'

title='"+change_date_text[language]+"' valign='bottom' />&nbsp;&nbsp;";

str+= "<input id='Window"+this.base.id+"_start_date_input' value='"+startdatestring+"'

type='text' readonly size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;";

str+= "<select id='Window"+this.base.id+"_start_time'>";

var startminutestring = "";

if(this.start.getHours()<10) startminutestring+= "0"+this.start.getHours();

else startminutestring+= this.start.getHours();

startminutestring+= ":";

if(this.start.getMinutes()<10) startminutestring+= "0"+this.start.getMinutes();

else startminutestring+= this.start.getMinutes();

var curr_time_string = "";

for(var h = 0; h<24; h++)

{

for(var m = 0; m<60; m+= 15)

{

curr_time_string = "";

if(h<10) curr_time_string+= "0"+h;

else curr_time_string += h;

curr_time_string+= ":";

Page 85: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 85

if(m<10) curr_time_string+= "0"+m;

else curr_time_string+= m;

str+= "<option value='"+curr_time_string+"'";

if(curr_time_string == startminutestring) str+= " selected ";

str+= ">"+curr_time_string+"</option>";

}}

str+= "</select>";

str+= "&nbsp;&nbsp;"+start_text[language];

str+= " </td>";

str+= "<td class='Contact_ContentTd'>";

var remind_text =

{

de:'Erinnerung',

en:'Remind};

var string = null;

if(this.remind_bool == true)

{

string = "";

var diff_in_min = (this.start-this.remind)/1000/60;

if(diff_in_min <= 30) string='Minutes_'+diff_in_min;

if(diff_in_min > 30 && diff_in_min <= 720) string='Hours_'+(diff_in_min)/60;

if(diff_in_min > 720 && diff_in_min <= 5760)string='Days_'+(((diff_in_min)/60/24)+1);

if(diff_in_min > 5760)string='Weeks_'+(((diff_in_min)/60/24)+1)/7;}

str+= "<select id='Window"+this.base.id+"_remind'>";

var none_text =

{

de:'Keine',

en:'N};

var day_text =

{

de:'Tage',

en:'D};

var minutes_text =

{

de:'Minuten',

en:'Minu};

var hours_text =

{

de:'Stunden',

en:'Ho};

var week_text =

{

de:'Wochen',

en:'We};

str+= "<option value='None_0'>"+none_text[language]+'</option>';

for(var m = 0; m<=15; m+= 5)

{

str+= "<option value='Minutes_"+m+"'";

if(string == 'Minutes_'+m) str+= ' selected ';

str+= ">"+m+"&nbsp;"+minutes_text[language]+'</option>';}

str+= "<option value='Minutes_30'";

if(string == 'Minutes_30') str+= ' selected ';

str+= ">30&nbsp;"+minutes_text[language]+'</option>';

for(var h = 1; h<=12; h++)

{

str+= "<option value='Hours_"+h+"'";

if(string == 'Hours_'+h) str+= ' selected ';

str+= ">"+h+"&nbsp;"+hours_text[language]+'</option>';}

for(var d = 1; d<=4; d++)

{

str+= "<option value='Days_"+d+"'";

if(string == 'Days_'+d) str+= ' selected ';

str+= ">"+d+"&nbsp;"+day_text[language]+'</option>';}

for(var w = 1; w<=2; w++)

{

Page 86: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 86

str+= "<option value='Weeks_"+w+"'";

if(string == 'Weeks_'+w) str+= ' selected ';

str+= ">"+w+"&nbsp;"+week_text[language]+'</option>';}

str+= '</select>';

str+= "&nbsp;&nbsp;"+remind_text[language];

str+= "</td>";

str+= "<td rowspan='2' class='Contact_ContentTd' id='Window"+this.base.id+"_category_td'>";

var loading_text =

{

de:'Lade Kategorien...',

en:'Loading Categories};

str+= loading_text[language];

str+= "<td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var end_text =

{

de:'Ende',

en:'};

var enddatestring = "";

if(this.end.getDate()<10) enddatestring+= "0"+this.end.getDate();

else enddatestring+= this.end.getDate();

enddatestring+= ".";

if((this.end.getMonth()+1)<10) enddatestring+= "0"+(this.end.getMonth()+1);

else enddatestring+= (this.end.getMonth()+1);

enddatestring+= ".";

enddatestring+= this.end.getFullYear();

str+= "<img id='Window"+this.base.id+"_change_end' src='images/logos/calendar.png'

title='"+change_date_text[language]+"' valign='bottom' />&nbsp;&nbsp;";

str+= "<input id='Window"+this.base.id+"_end_date_input' value='"+enddatestring+"' type='text'

readonly size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;";

str+= "<select id='Window"+this.base.id+"_end_time'>";

var endminutestring = "";

if(this.end.getHours()<10) endminutestring+= "0"+this.end.getHours();

else endminutestring+= this.end.getHours();

endminutestring+= ":";

if(this.end.getMinutes()<10) endminutestring+= "0"+this.end.getMinutes();

else endminutestring+= this.end.getMinutes();

var curr_time_string = "";

for(var h = 0; h<24; h++)

{

for(var m = 0; m<60; m+= 15)

{

curr_time_string = "";

if(h<10) curr_time_string+= "0"+h;

else curr_time_string += h;

curr_time_string+= ":";

if(m<10) curr_time_string+= "0"+m;

else curr_time_string+= m;

str+= "<option value='"+curr_time_string+"'";

if(curr_time_string == endminutestring) str+= " selected ";

str+= ">"+curr_time_string+"</option>";

}}

str+= "</select>";

str+= "&nbsp;&nbsp;"+end_text[language];

str+= " </td>";

str+= "<td class='Contact_ContentTd'>";

var recurring_text =

{

de:'Wiederkehrend',

en:'Recurr};

var text = "";

var none_text =

Page 87: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 87

{

en:'None',

de:'Ke};

if(this.recurring_bool == false) text = none_text[language];

else

{

var recurring_start_text =

{

de:'Alle',

en:'Ev};

text = recurring_start_text[language]+"&nbsp;";

text+= this.recurring_intervall+"&nbsp;";

var recurring_end_text = [

{

de:'Tage',

en:'D},

{

de:'Wochen',

en:'We},

{

de:'Monate',

en:'Mon},

{

de:'Jahre',

en:'Ye}

];

text+= recurring_end_text[this.recurring_class][language];}

str+= "<input id='Window"+this.base.id+"_recurring_input' value='"+text+"' type='text'

readonly size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;<img id='Window"+this.base.id+"_recurring_button'

title='"+recurring_text[language]+"' src='images/calendar/recurring.png' valign='bottom' />";

str+= "&nbsp;&nbsp;"+recurring_text[language];

str+= "</td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd' colspan='3'>";

str+= "<textarea id='Window"+this.base.id+"_text' class='Contacts_input' cols='100'

rows='8'>";

str+= this.text;

str+= "</textarea>";

str+= " </td>";

str+= "</tr>";

str+= "</table>";

str+= "</div>";

document.getElementById('Window'+this.base.id+'_CalendarDiv').innerHTML = str;

document.getElementById("Window"+this.base.id+"_recurring_button").onclick = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.returninput = document.getElementById("Window"+Window.base.id+"_recurring_input");

var x = 0;

var y = 0;

if(e != null)

{

x = e.screenX-Window.base.left;

y = e.screenY-Window.base.top;

}

else

{

x = window.event.clientX-Window.base.left;

y = window.event.clientY-Window.base.top;

}

Page 88: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 88

Window.SmallWindow.zIndex = Window.base.zIndex+1;

Window.SmallWindow.style.top = y-100;

Window.SmallWindow.style.left = x;

Window.DrawRecurring();

Window.SmallWindow.style.display = 'inline';};

document.getElementById("Window"+this.base.id+"_change_start").onclick = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.returninput = document.getElementById("Window"+Window.base.id+"_start_date_input");

var x = 0;

var y = 0;

if(e != null)

{

x = e.screenX-Window.base.left;

y = e.screenY-Window.base.top;

}

else

{

x = window.event.clientX-Window.base.left;

y = window.event.clientY-Window.base.top;

}

Window.SmallWindow.zIndex = Window.base.zIndex+1;

Window.SmallWindow.style.top = y-100;

Window.SmallWindow.style.left = x;

Window.DrawMonth();

Window.SmallWindow.style.display = 'inline';};

document.getElementById("Window"+this.base.id+"_change_end").onclick = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.returninput = document.getElementById("Window"+Window.base.id+"_end_date_input");

var x = 0;

var y = 0;

if(e != null)

{

x = e.screenX-Window.base.left;

y = e.screenY-Window.base.top;

}

else

{

x = window.event.clientX-Window.base.left;

y = window.event.clientY-Window.base.top;

}

Window.SmallWindow.zIndex = Window.base.zIndex+1;

Window.SmallWindow.style.top = y-100;

Window.SmallWindow.style.left = x;

Window.DrawMonth();

Window.SmallWindow.style.display = 'inline';};

this.LoadCategories},

LoadCategories: function()

{

var str = "";

var url = 'programs/calendar/get_categories.php?UserId='+this.UserId;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("entry");

str+= "<table class='Calendar_CategoriesTable' border='1'>";

str+= "<tr>";

var id = 0;

var color = "black";

var colors = new Array();

var obj = null;

if(values.length != 0)

{

Page 89: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 89

str+= "<td id='Window"+this.base.id+"_SelectedColor' rowspan='2' style='border:1px solid

white;

width:40px;background:url(images/calendar/colors/"+this.category_name+"_strong.png);'>&nbsp;</

td>";

for(var i = 0; i<values.length; i++)

{

if(i == Math.ceil(values.length/2)) str+= "</tr><tr>";

var cv = values[i];

if(cv.getElementsByTagName('id')[0].hasChildNodes())id =

parseInt(cv.getElementsByTagName("id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('name')[0].hasChildNodes())color =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

obj =

{

"id":id,

"color":c};

colors.push(obj);

str+= "<td id='Window"+this.base.id+"_color"+i+"'

style='background:url(images/calendar/colors/"+color+"_strong.png);width:20px;'>&nbsp;</td>";

}}

str+= "</tr>";

str+= "<table>";

document.getElementById("Window"+this.base.id+"_category_td").innerHTML = str;

for(var i = 0; i<colors.length; i++)

{

document.getElementById('Window'+this.base.id+'_color'+i).onclick = function()

{

var id = parseInt(this.id.substr(this.id.indexOf('_color')+6));

var color = colors[id];

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

document.getElementById('Window'+Window.base.id+'_SelectedColor').style.background =

"url(images/calendar/colors/"+color.color+"_strong.png)";

Window.category_id = color.id;

Window.category_name = color.color;

},

DrawRecurring: function()

{

var Window = null;

if(this.type == "OBJ_CALENDARENTRYWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj.obj != null) Window = GetWindowObj.obj;}

if(Window != null)

{

var every_text =

{

de:'Alle',

en:'Ev};

var str = "<br />"+every_text[language];

str+= "&nbsp;";

str+= "<select id='Window"+Window.base.id+"_RecCountSelect'>";

for(var i = 1; i<=10; i++)

{

str+= "<option value='"+i+"'";

if(Window.recurring_intervall == i) str+= ' selected ';

str+= ">"+i+"</option>";

}

str+= "</select>";

str+= "&nbsp;";

str+= "<select id='Window"+Window.base.id+"_RecTypeSelect'>";

var days_text =

{

de:'Tage',

Page 90: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 90

en:'D};

var months_text =

{

de:'Monate',

en:'Mon};

var years_text =

{

de:'Jahre',

en:'Ye};

str+= "<option value='0'";

if(Window.recurring_class == '0') str+= ' selected ';

str+= ">"+days_text[language]+"</option>";

str+= "<option value='2'";

if(Window.recurring_class == '2') str+= ' selected ';

str+= ">"+months_text[language]+"</option>";

str+= "<option value='3'";

if(Window.recurring_class == '3') str+= ' selected ';

str+= ">"+years_text[language]+"</option>";

str+= "</select>";

str+= "<br /><br />";

str+= "<button id='Window"+Window.base.id+"_RecButton'>OK</button>";

var delete_text =

{

de:'Löschen',

en:'Del};

str+= "<button

id='Window"+Window.base.id+"_RecDelButton'>"+delete_text[language]+"</button>";

Window.SmallWindow.innerHTML = str;

document.getElementById("Window"+Window.base.id+"_RecButton").onclick = function()

{

var GetWindowObj = getWindowObj(this);

Window = GetWindowObj.obj;

var every_text =

{

de:'Alle',

en:'Ev};

var str = every_text[language];

str+= " ";

str+= document.getElementById("Window"+Window.base.id+"_RecCountSelect").value+" ";

str+=

document.getElementById("Window"+Window.base.id+"_RecTypeSelect").options[document.getElementB

yId("Window"+Window.base.id+"_RecTypeSelect").selectedIndex].text;

Window.recurring_bool = true;

Window.recurring_class =

document.getElementById("Window"+Window.base.id+"_RecTypeSelect").value;

Window.recurring_intervall =

parseFloat(document.getElementById("Window"+Window.base.id+"_RecCountSelect").value);

Window.returninput.value = str;

Window.SmallWindow.style.display = 'none';

};

document.getElementById("Window"+Window.base.id+"_RecDelButton").onclick = function()

{

var GetWindowObj = getWindowObj(this);

Window = GetWindowObj.obj;

var none_text =

{

de:'Keine',

en:'N};

var str = none_text[language];

Window.recurring_bool = false;

Window.returninput.value = str;

Window.SmallWindow.style.display = 'none';

},

DrawMonth: function()

{

Page 91: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 91

var Window = null;

if(this.type == "OBJ_CALENDARENTRYWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj.obj != null) Window = GetWindowObj.obj;}

if(Window != null)

{

var str = "<table border='1' class='Contacts_Table' style='font-size:11px; color:#dddddd;

height:100%;'>";

str+= "<tr class='Contacts_TR' style='height:10px;'>";

str+= "<td colspan='7' align='right'>";

var month_names = [

{

de:'Jan',

en:'},

{

de:'Feb',

en:'},

{

de:'Mär',

en:'},

{

de:'Apr',

en:'},

{

de:'Mai',

en:'},

{

de:'Jun',

en:'},

{

de:'Jul',

en:'},

{

de:'Aug',

en:'},

{

de:'Sep',

en:'},

{

de:'Okt',

en:'},

{

de:'Nov',

en:'},

{

de:'Dez',

en:'}

];

str+= month_names[Window.CurrentMonth-

1][language]+"&nbsp;"+Window.CurrentYear+"&nbsp;&nbsp;";

str+= "<img id='Window"+Window.base.id+"_Previous' src='images/calendar/prev_small.png'

/>";

Page 92: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 92

str+= "<img id='Window"+Window.base.id+"_Next' src='images/calendar/next_small.png' />";

str+= "</td>";

str+= "</tr>";

str+= "<tr class='Contacts_TR' style='height:10px;'>";

var day_names = [

{

de:'Mo',

en:},

{

de:'Di',

en:},

{

de:'Mi',

en:'},

{

de:'Do',

en:'},

{

de:'Fr',

en:'},

{

de:'Sa',

en:'},

{

de:'So',

en:'}

];

for(var i = 0; i<7; i++)

{

str+= " <td class='Security_Header' style='width:12%'

align='center'>"+day_names[i][language]+"</td>";

}

str+= "</tr>";

str+= "<tr>";

var until = Window.CurrentDate-1;

var weekday = 1;

if(until<0) until += 7;

until = Window.CurrentWeekDay;

var daystr = "";

var lastmonthlength;

var last_month = Window.CurrentMonth-1;

var last_year = Window.CurrentYear;

if(last_month == 0)

{

last_month = 12;

last_year--;

}

var next_month = Window.CurrentMonth+1;

var next_year = Window.CurrentYear;

if(next_month == 13)

{

next_month = 1;

next_year++;

}

if(Window.CurrentMonth == 1) lastmonthlength = 31;

else lastmonthlength = Window.MonthLengths[Window.CurrentMonth-2];

var FirstDayDate = new Date(Window.CurrentYear, Window.CurrentMonth-1, 1);

var Days = [6,

0,

Page 93: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 93

1,

2,

3,

4,

5];

var FirstWeekDay = Days[FirstDayDate.getDay()];

var lines = Math.ceil((Window.CurrentDate-

(Window.CurrentWeekDay+1)+Window.CurrentMonthLength)/7);

var height = 80/lines;

var datestring = "";

for(var i = lastmonthlength-FirstWeekDay+1; i<=lastmonthlength; i++)

{

datestring = last_year+"-"+last_month+"-"+i;

str+= "<td id='Window"+Window.base.id+"_DateTd"+datestring+"'

style='height:"+height+"'>"+i+"</td>";

weekday++;

}

for(var j = 1; j<=Window.CurrentMonthLength; j++)

{

datestring = Window.CurrentYear+"-"+Window.CurrentMonth+"-"+j;

str+= "<td id='Window"+Window.base.id+"_DateTd"+datestring+"'

style='height:"+height+"'>"+j+"</td>";

weekday++;

if(weekday == 8)

{

str+= "</tr><tr>";

weekday = 1;

}

}

var nextmonthday = 1;

for(var k = weekday; k<8; k++)

{

datestring = next_year+"-"+next_month+"-"+nextmonthday;

str+= "<td id='Window"+Window.base.id+"_DateTd"+datestring+"'

style='height:"+height+"'>"+nextmonthday+"</td>";

nextmonthday++;

}

str+= "</tr>";

str+= "</table>";

Window.SmallWindow.innerHTML = str;

for(var l = lastmonthlength-FirstWeekDay+1; l<=lastmonthlength; l++)

{

datestring = last_year+"-"+last_month+"-"+l;

document.getElementById("Window"+Window.base.id+"_DateTd"+datestring).onclick =

Window.SelectDate;

}

for(var m = 1; m<=Window.CurrentMonthLength; m++)

{

datestring = Window.CurrentYear+"-"+Window.CurrentMonth+"-"+m;

document.getElementById("Window"+Window.base.id+"_DateTd"+datestring).onclick =

Window.SelectDate;

}

var nextmonthday = 1;

for(var n = weekday; n<8; n++)

{

datestring = next_year+"-"+next_month+"-"+nextmonthday;

document.getElementById("Window"+Window.base.id+"_DateTd"+datestring).onclick =

Window.SelectDate;

nextmonthday++;

}

document.getElementById('Window'+this.base.id+'_Previous').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

Page 94: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 94

var Window = GetWindowObj.obj;

Window.CurrentMonth = last_month;

Window.CurrentYear = last_year;

Window.DrawMonth();

}

};

document.getElementById('Window'+this.base.id+'_Next').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.CurrentMonth = next_month;

Window.CurrentYear = next_year;

Window.DrawMonth();

}

},

SelectDate: function()

{

var GetWindowObj = getWindowObj(this);

Window = GetWindowObj.obj;

var DateString = this.id.substr(this.id.indexOf('_DateTd')+7);

var str = "";

var month = parseFloat(DateString.substr(DateString.indexOf('-')+1, DateString.lastIndexOf('-

')-DateString.indexOf('-')-1));

var day = parseFloat(DateString.substr(DateString.lastIndexOf('-')+1));

if(day < 10) str+= "0"+day;

else str+= day;

str+= ".";

if(month < 10) str+= "0"+month;

else str+= month;

str+= ".";

str+= DateString.substr(0,4);

Window.returninput.value = str;

Window.SmallWindow.style.display = 'non},

EntryId: 0,

title: '',

New: false,

start: null,

end: null,

remind_bool: false,

remind: new Date(),

remind_value: 0,

returninput: null,

remind_class: 'Minutes',

recurring_bool: false,

recurring_class: 0,

recurring_intervall: 0,

color_id: 1,

UserId: 0,

category_id: 1,

category_name: 'yellow',

text: '',

vpc_id: 0,

permission: '111',

SmallWindow: null,

ParentWindow: null,

CurrentMonth: null,

CurrentYear: null,

CurrentDate: null,

DateString: '',

CurrentMonthLength: 0,

MonthLengths: new Array(),

MonthNames: new Array(),

CurrentWeekDay: };

Page 95: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 95

OBJ_CALENDARREMINDINGSWINDOW.js

function OBJ_CALENDARREMINGSWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CALENDARREMINGSWINDOW.prototype =

{

type: "OBJ_CALENDARREMINDINGSWINDOW",

init: function()

{

HideDiv.style.visibility = 'visible';

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Erinnerungen',

en:'Remindings'

};

this.base.iconpath = 'images/logos/calendar.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.minimizeable = false;

this.base.width = 500;

this.base.height = 300;

this.base.zIndex = 4000;

this.base.bgcolor = '#000000';

this.base.top = 0;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var d = new Date();

this.MonthLengths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

if(d.getFullYear() % 4 == 0) this.MonthLengths[1] = 29;

this.CurrentMonthLength = this.MonthLengths[d.getMonth()];

var str = "";

str+= "<br /><div id='Window"+this.base.id+"_ItemsDiv' class='Calendar_ItemsDiv'

style='width:"+(this.base.width-80)+";max-height:"+((this.base.height-40))+";'>";

var obj = null;

str+= this.DrawItems();

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_SmallWindow' class='Calendar_SmallWindow'

style='height:50px'>asdfasdfasdf</div>";

this.base.content_obj.innerHTML = str;

this.SmallWindow = document.getElementById('Window'+this.base.id+'_SmallWindow');

this.DrawFunctions();

},

DrawItems: function()

{

var str = "";

for(var i = 0; i<this.Items.length; i++)

{

obj = this.Items[i];

str+= "<div id='Window"+this.base.id+"_Item"+obj.id+"'

class='Calendar_RemindingsItemDiv'";

if(i==0) str+= " style='background:url(images/calendar/row.png); float:left;' ";

else str+= " style='color:#888888; float:left;' ";

str+= " title='"+obj.title+"'>";

var title = obj.title;

if(title.length > 23) title = title.substr(0,20)+'...';

str+= "<div style='float:left;'>"+title+"&nbsp;<img

src='images/calendar/colors/"+obj.color_name+"_strong.png' width='10' />";

Page 96: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 96

str+= "&nbsp;&nbsp;<font style='font-

size:.9em'>"+obj.start.substr(8,2)+'.'+obj.start.substr(5,2)+'.'+obj.start.substr(0,4)+'

'+obj.start.substr(11,2)+':'+obj.start.substr(14,2)+"</font>";

str+="</div>";

if(i==0)

{

var close_text =

{

de:'Schließen',

en:'Close'

};

var remind_again_text =

{

de:'Erneut erinnern',

en:'Remind again'

};

str+= "<img style='float:right;padding-left:5px;'

id='Window"+this.base.id+"_RemoveItem"+obj.id+"' src='images/contextmenu/delete.png'

title='"+close_text[language]+"' />";

str+= "<img style='float:right;padding-left:5px;'

id='Window"+this.base.id+"_RemindAgainItem"+obj.id+"' src='images/logos/calendar.png'

title='"+remind_again_text[language]+"' />";

}

str+= "</div>";

}

return str;

},

DrawFunctions:function()

{

document.getElementById("Window"+this.base.id+"_Item"+this.Items[0].id).ondblclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_CALENDARENTRYWINDOW();

obj.New = false;

obj.EntryId = Window.Items[0].id;

obj.UserId = Window.Items[0].user_id;

obj.title = Window.Items[0].title;

Window.close();

obj.init();

};

document.getElementById("Window"+this.base.id+"_RemoveItem"+this.Items[0].id).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.close();

};

document.getElementById("Window"+this.base.id+"_RemindAgainItem"+this.Items[0].id).onclick =

function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.returninput =

document.getElementById("Window"+Window.base.id+"_recurring_input");

var x = 0;

var y = 0;

if(e != null)

Page 97: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 97

{

x = e.screenX-Window.base.left;

y = e.screenY-Window.base.top;

}

else

{

x = window.event.clientX-Window.base.left;

y = window.event.clientY-Window.base.top;

}

Window.SmallWindow.zIndex = Window.base.zIndex+1;

Window.SmallWindow.style.top = y-100;

Window.SmallWindow.style.left = x;

Window.DrawRemindAgain();

Window.SmallWindow.style.display = 'inline';

};

},

DrawRemindAgain:function()

{

var remind_again_text =

{

de:'Erneut erinnern in',

en:'Remind again in'

};

var str = remind_again_text[language];

str+= "<br />";

str+= "<select id='Window"+this.base.id+"_RemindAgainSelect'>";

var day_text =

{

de:'Tage',

en:'Days'

};

var minutes_text =

{

de:'Minuten',

en:'Minutes'

};

var hours_text =

{

de:'Stunden',

en:'Hours'

};

var week_text =

{

de:'Wochen',

en:'Weeks'

};

for(var m = 0; m<=15; m+= 5)

{

str+= "<option value='Minutes_"+m+"'>";

str+= m+"&nbsp;"+minutes_text[language]+'</option>';

}

str+= "<option value='Minutes_30'>";

str+= "30&nbsp;"+minutes_text[language]+'</option>';

for(var h = 1; h<=12; h++)

{

str+= "<option value='Hours_"+h+"'>";

str+= h+"&nbsp;"+hours_text[language]+'</option>';

}

for(var d = 1; d<=4; d++)

Page 98: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 98

{

str+= "<option value='Days_"+d+"'>";

str+= d+"&nbsp;"+day_text[language]+'</option>';

}

for(var w = 1; w<=2; w++)

{

str+= "<option value='Weeks_"+w+"'>";

str+= w+"&nbsp;"+week_text[language]+'</option>';

}

str+= '</select>';

this.SmallWindow.innerHTML = str;

document.getElementById("Window"+this.base.id+"_RemindAgainSelect").onchange =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.SmallWindow.style.display = 'none';

var d = new Date();

var datetime = d.getFullYear()+'-';

var m = (d.getMonth())+1;

if(m<10) datetime+= '0'+m+'-';

else datetime+= m+'-';

var day = d.getDate();

if(day<10) datetime+= '0'+day+' ';

else datetime+= day+' ';

var h = d.getHours();

if(h<10) datetime+= '0'+h+':';

else datetime+= h+':';

var min = d.getMinutes();

if(min<10) datetime+= '0'+min;

else datetime+= min;

datetime+= ':00';

var remind_diff = this.value;

var start_hour = parseFloat(datetime.substr(11,2));

var start_min = parseFloat(datetime.substr(14,2));

var start_year = parseFloat(datetime.substr(0,4));

var start_month = parseFloat(datetime.substr(5,2));

var start_day = parseFloat(datetime.substr(8,2));

var remind_min = start_min;

var remind_hour = start_hour;

var remind_day = start_day;

var remind_month = start_month;

var remind_year = start_year;

if(remind_diff.indexOf('Minutes') != -1)remind_min =

start_min+parseFloat(remind_diff.substr(8));

if(remind_diff.indexOf('Hours') != -1)remind_hour =

start_hour+parseFloat(remind_diff.substr(6));

if(remind_diff.indexOf('Days') != -1)remind_day = start_day-

parseFloat(remind_diff.substr(5));

if(remind_diff.indexOf('Weeks') != -1)remind_day =

start_day+(parseFloat(remind_diff.substr(6))*7);

if(remind_min>60)

{

remind_min = 60-remind_min;

remind_hour++;

}

if(remind_hour>23)

{

remind_hour = 24-remind_hour;

remind_day++;

}

Page 99: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 99

if(remind_day > Window.CurrentMonthLength)

{

remind_day = Window.CurrentMonthLength-remind_day;

remind_month++;

}

if(remind_month == 13)

{

remind_year++;

remind_month = 1;

}

var remind = remind_year+'-';

if(remind_month < 10) remind+= '0'+remind_month;

else remind+= remind_month;

remind+='-';

if(remind_day < 10) remind+= '0'+remind_day;

else remind+= remind_day;

remind+= '%20';

if(remind_hour < 10) remind+= '0'+remind_hour;

else remind+= remind_hour;

remind+= ':';

if(remind_min < 10) remind+= '0'+remind_min;

else remind+= remind_min;

var url =

'programs/calendar/set_remind_again.php?EntryId='+Window.Items[0].id+'&UserId='+Window.Items[0

].user_id+'&remind_datetime='+remind;

setRequest(url);

var ItemsDiv = document.getElementById("Window"+Window.base.id+"_ItemsDiv");

ItemsDiv.removeChild(ItemsDiv.childNodes[0]);

Window.Items.splice(0,1);

if(Window.Items.length != 0)

{

ItemsDiv.innerHTML = Window.DrawItems();

Window.DrawFunctions();

}

else ItemsDiv.innerHTML = "";

if(Window.Items.length == 0)

{

HideDiv.style.visibility = 'hidden';

TaskBar.remove(Window.base.id);

for(var i = 0; i<Windows.length; i++) if(Window.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(Window.base.obj);

}

}

},

close: function()

{

var Window = null;

if(this.type == "OBJ_CALENDARREMINDINGSWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(getWindowObj.obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

Window.SmallWindow.style.display = 'none';

if(Window.Items.length > 0)

Page 100: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 100

{

var url =

'programs/calendar/set_reminded.php?EntryId='+Window.Items[0].id+'&UserId='+Window.Items[0].us

er_id;

setRequest(url);

var ItemsDiv = document.getElementById("Window"+Window.base.id+"_ItemsDiv");

ItemsDiv.removeChild(ItemsDiv.childNodes[0]);

Window.Items.splice(0,1);

if(Window.Items.length != 0)

{

ItemsDiv.innerHTML = Window.DrawItems();

Window.DrawFunctions();

}

else ItemsDiv.innerHTML = "";

}

if(Window.Items.length == 0)

{

HideDiv.style.visibility = 'hidden';

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

}

}

},

Items: new Array(),

SmallWindow: null,

MonthLengths: new Array(),

CurrentMonthLength: 0

};

Page 101: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 101

OBJ_CALENDARSECURITYWINDOW.js

function OBJ_CALENDARSECURITYWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CALENDARSECURITYWINDOW.prototype =

{

type: "OBJ_CALENDARSECURITYWINDOW",

init: function()

{

HideDiv.style.visibility = 'visible';

TaskBar.overlay();

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Sicherheit',

en:'Security'

};

this.base.iconpath = 'images/contextmenu/security.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 650;

this.base.height = 400;

this.base.zIndex = 4000;

this.base.bgcolor = '#000000';

this.base.top = 0;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_SaveDiv' class='SecurityMenuItemDiv'

style='float:right'>";

var text_save =

{

en:'Save',

de:'Speichern'

};

str+= text_save[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_Permissions_Div' class='Security_PermissionsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";position:absolute;

left:0px; top:51px; color:white;'>";

var loading_text =

{

de:'User und Gruppen werden geladen...',

en:'Loading Users and Groups...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"; position:absolute;

left:0px; top:"+((this.base.height-40)/2)+";'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Security_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

Page 102: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 102

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ItemsDiv' class='Security_ItemsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+"; position:absolute;

left:0px; top:"+(((this.base.height-40)/2)+29)+";'>";

var loading_text =

{

de:'User und Gruppen werden geladen...',

en:'Loading Users and Groups...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseover = function()

{

this.style.background = 'url(images/security/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var url = 'programs/security/set_cal_permissions.php?action=save';

var permissionsstring;

for(var i = 0; i <Window.Items.length; i++)

{

url+='&id'+i+'='+Window.Items[i].user_id;

url+='&type'+i+'='+Window.Items[i].type;

permissionsstring = '';

permissionsstring+= Window.Items[i].permission;

url+= '&permission'+i+'='+permissionsstring;

url+= '&colors'+i+'=';

for(var j = 0; j<Window.Items[i].colors.length; j++)

{

url+= Window.Items[i].colors[j]+';';

}

}

setRequest(url);

Window.base.close(Window.base.id);

}

};

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.SearchString = this.value;

Window.SearchItem();

}

};

this.LoadColors();

Page 103: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 103

this.LoadPermissions();

this.LoadUsersAndGroups();

},

LoadColors: function()

{

var url = 'programs/calendar/get_categories.php?UserId='+this.UserId;

var myXML = getXmlFile(url);

this.colors = new Array();

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("entry");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

var colors = null;

pobj = new Object();

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.id =

parseFloat(cv.getElementsByTagName("id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

this.colors.push(pobj);

}

},

LoadPermissions: function()

{

var url = 'programs/security/get_cal_shares.php';

var myXML = getXmlFile(url);

this.Items = new Array();

var root = myXML.documentElement;

var permissions = new Array();

var values = myXML.getElementsByTagName("permission");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

var colors = new Array();

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('to_id')[0].hasChildNodes())pobj.user_id =

parseFloat(cv.getElementsByTagName("to_id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('to_type')[0].hasChildNodes())pobj.type =

cv.getElementsByTagName("to_type")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('colors')[0].hasChildNodes())colors =

cv.getElementsByTagName("colors")[0].firstChild.nodeValue.split(';');

if(cv.getElementsByTagName('permissions')[0].hasChildNodes())pobj.permission =

cv.getElementsByTagName("permissions")[0].firstChild.nodeValue;

pobj.colors = new Array();

for(var j = 0; j<colors.length; j++) if(colors[j].length != 0)

pobj.colors.push(parseFloat(colors[j]));

this.Items.push(pobj);

}

this.DrawPermissions();

},

DrawPermissions: function()

{

var Window = null;

if(this.type == "OBJ_CALENDARSECURITYWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

Page 104: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 104

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var read_text =

{

de:'Lesen',

en:'Read'

};

var write_text =

{

de:'Schreiben',

en:'Write'

};

var delete_text =

{

de:'Löschen',

en:'Delete'

};

var groupuser_text =

{

GROUP:

{

de:'Gruppe',

en:'Group'

},

USER:

{

de:'Benutzer',

en:'User'

}

};

str+= " <td class='Security_Header'

width='100'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= " <td class='Security_Header'>"+read_text[language]+"</td>";

str+= " <td class='Security_Header'>"+write_text[language]+"</td>";

str+= " <td class='Security_Header'>"+delete_text[language]+"</td>";

str+= " <td class='Security_Header' colspan='2'>&nbsp;</td>";

str+= "</tr>";

var remove_text =

{

de:'Entfernen',

en:'Remove'

};

for(var i = 0; i<Window.Items.length; i++)

{

var pobj = Window.Items[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row_big.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row'>";

Page 105: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 105

str+= " <img src='images/security/"+pobj.type.toLowerCase()+".png'

title='"+groupuser_text[pobj.type][language]+"' />";

str+= " </td>";

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemRead"+i+"' ";

if(pobj.permission[0] == '1') str+= "checked ";

str+= " />";

str+= " </td>";

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemWrite"+i+"' ";

if(pobj.permission[1] == '1') str+= "checked ";

str+= " />";

str+= " </td>";

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemDelete"+i+"' ";

if(pobj.permission[2] == '1') str+= "checked ";

str+= " />";

str+= " </td>";

str+= " <td class='Security_Row'>";

str+= " <img src='images/security/delete.png' title='"+delete_text[language]+"'

";

str+= " id='Window"+Window.base.id+"_RemoveImg"+i+"' />";

str+= " </td>";

str+= "<td class='Security_Row' style='border-left:1px solid #aaaaaa; padding-

left:5px;'>";

str+= "<table border='0'>";

str+= "<tr>";

for(var k = 0; k<Window.colors.length; k++)

{

str+= "<td align='center'><img

src='images/calendar/colors/"+Window.colors[k].name+"_strong.png' width='15' /></td>";

}

str+= "</tr><tr>";

for(var l = 0; l<Window.colors.length; l++)

{

str+= "<td align='center'><input

id='Window"+Window.base.id+"_Color"+Window.colors[l].id+"_Item"+i+"' type='checkbox'

id='Window"+Window.base.id+"_Color"+Window.colors[l].id+"' ";

for(var j = 0; j<pobj.colors.length; j++) if(pobj.colors[j] ==

Window.colors[l].id) str+= 'checked ';

str+= "/></td>";

}

str+= "</tr>";

str+= "</table>";

str+= "</td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_Permissions_Div').innerHTML =

str;

for(var i = 0; i<this.Items.length; i++)

{

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseover =

function()

{

this.src = 'images/security/delete_over.png';

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseout =

function()

{

this.src = 'images/security/delete.png';

Page 106: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 106

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_RemoveImg')+10));

Window.Items.splice(id, 1);

Window.DrawPermissions();

}

};

for(var j = 0; j<Window.colors.length; j++)

{

document.getElementById('Window'+Window.base.id+'_Color'+Window.colors[j].id+'_Item'+i).onchan

ge = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var item_id = parseInt(this.id.substr(this.id.indexOf('_Item')+5));

var color_id =

parseFloat(this.id.substr(this.id.indexOf('_Color')+6), this.id.indexOf('_Item'));

if(this.checked) Window.Items[item_id].colors.push(color_id);

else

{

for(var k = 0; k<Window.Items[item_id].colors.length; k++)

{

if(Window.Items[item_id].colors[k] == color_id)

Window.Items[item_id].colors.splice(k, 1);

}

}

Window.DrawPermissions();

}

};

}

document.getElementById("Window"+Window.base.id+"_ItemRead"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemRead')+9));

var read = 0;

if(this.checked) read = 1;

Window.Items[id].permission =

read+Window.Items[id].permission.substr(1,2);

Window.DrawPermissions();

}

};

Page 107: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 107

document.getElementById("Window"+Window.base.id+"_ItemWrite"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemWrite')+10));

var wr = 0;

if(this.checked) wr = 1;

Window.Items[id].permission =

Window.Items[id].permission.substr(0,1)+wr+Window.Items[id].permission.substr(2,1);

Window.DrawPermissions();

}

};

document.getElementById("Window"+Window.base.id+"_ItemDelete"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemDelete')+11));

var del = 0;

if(this.checked) del = 1;

Window.Items[id].permission =

Window.Items[id].permission.substr(0,2)+del;

Window.DrawPermissions();

}

};

}

}

},

LoadUsersAndGroups:function()

{

var url = 'programs/security/get_users_and_groups.php';

var myXML = getXmlFile(url);

this.AllItems = new Array();

var root = myXML.documentElement;

var items = new Array();

var values = myXML.getElementsByTagName("item");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('type')[0].hasChildNodes())pobj.type =

cv.getElementsByTagName("type")[0].firstChild.nodeValue.toUpperCase();

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

this.AllItems.push(pobj);

}

this.SearchedItems = this.AllItems;

this.DrawItems();

Page 108: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 108

},

DrawItems:function()

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var add_text =

{

de:'Hinzufügen',

en:'Add'

};

var groupuser_text =

{

GROUP:

{

de:'Gruppe',

en:'Group'

},

USER:

{

de:'Benutzer',

en:'User'

}

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= "</tr>";

for(var i = 0; i<this.SearchedItems.length; i++)

{

var pobj = this.SearchedItems[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row'>";

str+= " <img src='images/security/"+pobj.type.toLowerCase()+".png'

title='"+groupuser_text[pobj.type][language]+"' />";

str+= " </td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/security/add.png' title='"+add_text[language]+"' ";

str+= " id='Window"+this.base.id+"_AddImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+this.base.id+'_ItemsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedItems.length; i++)

{

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseover = function()

{

this.src = 'images/security/add_over.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseout = function()

{

Page 109: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 109

this.src = 'images/security/add.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_AddImg')+7));

var already_exists = false;

var obj = new Object();

obj.name = Window.AllItems[id].name;

obj.type = Window.AllItems[id].type;

obj.user_id = Window.AllItems[id].user_id;

for(var j = 0; j<Window.Items.length; j++)

{

if(Window.Items[j].user_id = obj.user_id && Window.Items[j].type ==

obj.type)

{

already_exists = true;

}

}

if(!already_exists)

{

obj.permission = '100';

obj.colors = new Array();

obj.colors.push(1);

Window.Items.push(obj);

Window.DrawPermissions();

}

}

};

}

},

SearchItem:function()

{

this.SearchedItems = new Array();

var string = this.SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.AllItems.length; i++)

{

obj = this.AllItems[i];

if(obj.name.toLowerCase() == string.toLowerCase()) this.SearchedItems.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

Page 110: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 110

{

this.SearchedItems.push(obj);

added = true;

}

}

start++;

}

}

}

}

if(string.length == 0) this.SearchedItems = this.AllItems;

this.DrawItems();

},

close: function()

{

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

Path: null,

Items: new Array(),

AllItems: new Array(),

SearchedItems: new Array(),

SearchString: '',

colors: new Array()

};

Page 111: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 111

OBJ_CALENDARWINDOW.js

function OBJ_CALENDARWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CALENDARWINDOW.prototype =

{

type: "OBJ_CALENDARWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Kalender',

en:'Calendar'

};

this.base.iconpath = 'images/logos/calendar.png';

this.base.resizeable = true;

this.base.maximizeable = true;

this.base.bgcolor = '#bbbbbb';

this.base.init();

this.base.subwindows = new Array();

this.SearchedItems = new Array();

this.Items = new Array();

this.CurrentUserId = parent.UserId;

var D = new Date();

this.CurrentMonth = D.getMonth()+1;

this.CurrentYear = D.getFullYear();

this.CurrentDate = D.getDate();

this.CurrentWeekDay = D.getDay()-1;

if(this.CurrentWeekDay == -1) this.CurrentWeekDay = 7;

this.DateString = D.getFullYear()+"-";

if(this.CurrentMonth<10) this.DateString+= "0"+this.CurrentMonth+"-";

else this.DateString+= this.CurrentMonth+"-";

if(this.CurrentDate < 10) this.DateString+= "0"+this.CurrentDate;

else this.DateString+= this.CurrentDate;

this.MonthNames = [

{

de:'Januar',

en:'January'

},

{

de:'Februar',

en:'February'

},

{

de:'März',

en:'March'

},

{

de:'April',

en:'April'

},

{

de:'Mai',

en:'May'

},

{

Page 112: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 112

de:'Juni',

en:'June'

},

{

de:'Juli',

en:'July'

},

{

de:'August',

en:'August'

},

{

de:'September',

en:'September'

},

{

de:'Oktober',

en:'October'

},

{

de:'November',

en:'November'

},

{

de:'Dezember',

en:'December'

}

];

this.MonthLengths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

if(this.CurrentYear % 4 == 0) this.MonthLengths[1] = 29;

this.CurrentMonthLength = this.MonthLengths[this.CurrentMonth-1];

Windows.push(this);

this.base.titlechange(this.base.title[language]+' -

'+this.MonthNames[this.CurrentMonth-1][language]+" "+this.CurrentYear);

this.DrawWindow();

},

DrawWindow: function()

{

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Calendar_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_NewEntryDiv' class='CalendarMenuItemDiv'>";

var text_new_entry =

{

en:'New Entry',

de:'Neuer Eintrag'

};

str+= text_new_entry[language];

Page 113: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 113

str+= " </div>";

str+= "<div class='CalendarMenuItemDiv'>|</div>";

str+= " <div id='Window"+this.base.id+"_TodayDiv' class='CalendarMenuItemDiv'>";

var text_today =

{

en:'Today',

de:'Heute'

};

str+= text_today[language];

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_DayDiv' class='CalendarMenuItemDiv'>";

var text_day =

{

en:'Day',

de:'Tag'

};

str+= text_day[language];

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_WeekDiv' class='CalendarMenuItemDiv'>";

var text_week =

{

en:'Week',

de:'Woche'

};

str+= text_week[language];

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_MonthDiv' class='CalendarMenuItemDiv'>";

var text_month =

{

en:'Month',

de:'Monat'

};

str+= text_month[language];

str+= " </div>";

str+= "<div class='CalendarMenuItemDiv'>|</div>";

str+= " <div id='Window"+this.base.id+"_SelectCalendarDiv'

class='CalendarMenuItemDiv'>";

var text_my_calendar =

{

en:'My Calendar',

de:'Mein Kalender'

};

str+= "<select id='Window"+this.base.id+"_SelectCalendar'>";

str+= "<option value='"+parent.UserId+"'>"+text_my_calendar[language]+"</option>";

str+= "</select>";

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_SecurityDiv' class='CalendarMenuItemDiv'>";

var text_security =

{

en:'Security',

de:'Sicherheit'

};

str+= text_security[language];

str+= " </div>";

str+= "<div class='CalendarMenuItemDiv'>|</div>";

str+= " <div id='Window"+this.base.id+"_PreviousDiv' class='CalendarMenuItemDiv'

style='padding-top:0px;'>";

var text_back =

{

en:'Back',

de:'Zurück'

};

str+= " <img id='Window"+this.base.id+"_Previous' src='images/calendar/prev.png'

title='"+text_back[language]+"' />";

str+= " </div>";

Page 114: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 114

str+= " <div id='Window"+this.base.id+"_NextDiv' class='CalendarMenuItemDiv'

style='padding-top:0px;'>";

var text_next =

{

en:'Next',

de:'Weiter'

};

str+= " <img id='Window"+this.base.id+"_Next' src='images/calendar/next.png'

title='"+text_next[language]+"' />";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_CalendarContentDiv' class='Calendar_ContentDiv'

style='width:"+(this.base.width)+";height:"+(this.base.height-40)+";'>";

var loading_text =

{

de:'Kalenderdaten werden geladen...',

en:'Loading Calendar-entries...'

};

str+= loading_text[language];

str+= "</div><br />";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_NewEntryDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_NewEntryDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_TodayDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_TodayDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_DayDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_DayDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_WeekDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_WeekDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_MonthDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

Page 115: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 115

};

document.getElementById('Window'+this.base.id+'_MonthDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SecurityDiv').onmouseover = function()

{

this.style.background = 'url(images/calendar/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SecurityDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_Previous').onmouseover = function()

{

this.src = 'images/calendar/prev_over.png';

};

document.getElementById('Window'+this.base.id+'_Previous').onmouseout = function()

{

this.src = 'images/calendar/prev.png';

};

document.getElementById('Window'+this.base.id+'_Next').onmouseover = function()

{

this.src = 'images/calendar/next_over.png';

};

document.getElementById('Window'+this.base.id+'_Next').onmouseout = function()

{

this.src = 'images/calendar/next.png';

};

document.getElementById('Window'+this.base.id+'_NewEntryDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_CALENDARENTRYWINDOW();

obj.New = true;

obj.UserId = Window.CurrentUserId;

obj.ParentWindow = Window;

obj.init();

};

document.getElementById('Window'+this.base.id+'_TodayDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var D = new Date();

Window.CurrentMonth = D.getMonth()+1;

Window.CurrentYear = D.getFullYear();

Window.CurrentDate = D.getDate();

Window.DateString = D.getFullYear()+"-";

if(Window.CurrentMonth<10) Window.DateString+= "0"+Window.CurrentMonth+"-";

else Window.DateString+= Window.CurrentMonth+"-";

if(Window.CurrentDate < 10) Window.DateString+= "0"+Window.CurrentDate;

else Window.DateString+= Window.CurrentDate;

Window.CurrentMonthLength = Window.MonthLengths[Window.CurrentMonth-1];

Window.CurrentWeekDay = D.getDay()-1;

;

Page 116: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 116

if(Window.CurrentWeekDay == -1) Window.CurrentWeekDay = 7;

if(Window.CurrentYear % 4 == 0) Window.MonthLengths[1] = 29;

else Window.MonthLengths[1] = 28;

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_DayDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.CurrentType = 'DAY';

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_WeekDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.CurrentType = 'WEEK';

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_MonthDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.CurrentType = 'MONTH';

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.SearchItems(this.value);

}

};

document.getElementById('Window'+this.base.id+'_SecurityDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var SWindow = new OBJ_CALENDARSECURITYWINDOW();

SWindow.ParentWindow = Window;

SWindow.init();

Page 117: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 117

}

};

document.getElementById('Window'+this.base.id+'_SelectCalendar').onchange = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.CurrentUserId = this.value;

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_Previous').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

if(Window.CurrentType == 'MONTH')

{

Window.CurrentMonth--;

if(Window.CurrentMonth == 0)

{

Window.CurrentMonth = 12;

Window.CurrentYear--;

}

}

if(Window.CurrentType == 'WEEK')

{

if(Window.CurrentDate-7 < 0)

{

if(Window.CurrentMonth != 1) Window.CurrentDate ==

Window.MonthLengths[Window.CurrentMonth-2]-Window.CurrentDate;

else Window.CurrentDate = 31-Window.CurrentDate;

Window.CurrentMonth--;

if(Window.CurrentMonth == 0)

{

Window.CurrentMonth == 12;

Window.CurrentYear--;

}

}

else Window.CurrentDate-= 7;

}

if(Window.CurrentType == 'DAY')

{

if(Window.CurrentDate == 1)

{

if(Window.CurrentMonth != 1) Window.CurrentDate ==

Window.MonthLengths[Window.CurrentMonth-2];

else Window.CurrentDate = 31;

Window.CurrentMonth--;

if(Window.CurrentMonth == 0)

{

Window.CurrentMonth == 12;

Window.CurrentYear--;

}

Page 118: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 118

}

else Window.CurrentDate--;

}

var D = new Date(Window.CurrentYear, Window.CurrentMonth, Window.CurrentDate);

Window.DateString = D.getFullYear()+"-";

if(Window.CurrentMonth<10) Window.DateString+= "0"+Window.CurrentMonth+"-";

else Window.DateString+= Window.CurrentMonth+"-";

if(Window.CurrentDate < 10) Window.DateString+= "0"+Window.CurrentDate;

else Window.DateString+= Window.CurrentDate;

Window.CurrentMonthLength = Window.MonthLengths[Window.CurrentMonth-1];

Window.CurrentWeekDay = D.getDay()-1;

;

if(Window.CurrentWeekDay == -1) Window.CurrentWeekDay = 7;

if(Window.CurrentYear % 4 == 0) Window.MonthLengths[1] = 29;

else Window.MonthLengths[1] = 28;

Window.LoadEntries();

}

};

document.getElementById('Window'+this.base.id+'_Next').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

if(Window.CurrentType == 'MONTH')

{

Window.CurrentMonth++;

if(Window.CurrentMonth == 13)

{

Window.CurrentMonth = 1;

Window.CurrentYear++;

}

}

if(Window.CurrentType == 'WEEK')

{

if(Window.CurrentDate+7 > Window.CurrentMonthLength)

{

if(Window.CurrentMonth != 12) Window.CurrentDate ==

Window.MonthLengths[Window.CurrentMonth]-Window.CurrentDate;

else Window.CurrentDate = 31-Window.CurrentDate;

Window.CurrentMonth++;

if(Window.CurrentMonth == 13)

{

Window.CurrentMonth == 1;

Window.CurrentYear++;

}

}

else Window.CurrentDate+= 7;

}

if(Window.CurrentType == 'DAY')

{

if(Window.CurrentDate == Window.CurrentMonthLength)

{

Window.CurrentDate == 1;

Window.CurrentMonth++;

if(Window.CurrentMonth == 13)

Page 119: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 119

{

Window.CurrentMonth == 1;

Window.CurrentYear++;

}

}

else Window.CurrentDate++;

}

var D = new Date(Window.CurrentYear, Window.CurrentMonth, Window.CurrentDate);

Window.DateString = D.getFullYear()+"-";

if(Window.CurrentMonth<10) Window.DateString+= "0"+Window.CurrentMonth+"-";

else Window.DateString+= Window.CurrentMonth+"-";

if(Window.CurrentDate < 10) Window.DateString+= "0"+Window.CurrentDate;

else Window.DateString+= Window.CurrentDate;

Window.CurrentMonthLength = Window.MonthLengths[Window.CurrentMonth-1];

Window.CurrentWeekDay = D.getDay()-1;

if(Window.CurrentWeekDay == -1) Window.CurrentWeekDay = 7;

if(Window.CurrentYear % 4 == 0) Window.MonthLengths[1] = 29;

else Window.MonthLengths[1] = 28;

Window.LoadEntries();

}

};

this.LoadEntries();

this.LoadOtherCalendars();

},

LoadOtherCalendars:function()

{

var str = "";

var url = 'programs/calendar/get_other_calendars.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("entry");

var id = 0;

var name = "";

var user_id = "";

var calendar_text =

{

en:'Calendar',

de:'Kalender'

};

if(values.length != 0)

{

for(var i = 0; i<values.length; i++)

{

if(i == Math.ceil(values.length/2)) str+= "</tr><tr>";

var cv = values[i];

if(cv.getElementsByTagName('id')[0].hasChildNodes())id =

parseInt(cv.getElementsByTagName("id")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('name')[0].hasChildNodes())name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('from_id')[0].hasChildNodes())user_id =

cv.getElementsByTagName("from_id")[0].firstChild.nodeValue;

str+= "<option value='"+user_id+"'>"+name+"'s

"+calendar_text[language]+"</option>";

}

}

document.getElementById("Window"+this.base.id+"_SelectCalendar").innerHTML += str;

},

Page 120: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 120

LoadEntries: function()

{

var Window = null;

if(this.type == "OBJ_CALENDARWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(getWindowObj.obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = 'programs/calendar/get_entries.php?UserId='+Window.CurrentUserId;

url+='&start='+Window.CurrentYear+"-";

if(Window.CurrentMonth<10) url+= "0"+Window.CurrentMonth;

else url+= Window.CurrentMonth;

url+= '-01';

var string = '';

var year = Window.CurrentYear;

var month = Window.CurrentMonth;

var day = Window.CurrentDate;

switch(Window.CurrentType)

{

case 'MONTH':if(Window.CurrentMonth == 12)

{

month = 1;

year++;

}

else month++;

break;

case 'WEEK':if(day+7 > Window.CurrentMonthLength)

{

month++;

day = Window.CurrentMonthLength-(day+7);

}

else day+= 7;

if(month>12)

{

year++;

month = 1;

}

break;

case 'DAY':if(day+1 > Window.CurrentMonthLength)

{

month++;

day = 1;

}

else day++;

if(month > 12)

{

year++;

month = 1;

}

break;

}

url+= "&end="+year+"-";

if(month < 10) url+= "0"+month+"-";

else url+= month+"-";

if(day < 10) url+= "0"+day;

Page 121: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 121

else url+= day;

var myXML = getXmlFile(url);

Window.Items = new Array();

var root = myXML.documentElement;

var entries = new Array();

var values = myXML.getElementsByTagName("entry");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('start')[0].hasChildNodes())pobj.start =

cv.getElementsByTagName("start")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('end')[0].hasChildNodes())pobj.end =

cv.getElementsByTagName("end")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('remind_bool')[0].hasChildNodes())pobj.remind_bool

= Boolean(cv.getElementsByTagName("remind_bool")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('remind')[0].hasChildNodes())pobj.remind =

cv.getElementsByTagName("remind")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('title')[0].hasChildNodes())pobj.title =

cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('wholeday')[0].hasChildNodes())pobj.wholeday =

Boolean(cv.getElementsByTagName("wholeday")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('recurring_bool')[0].hasChildNodes())pobj.recurring_bool =

Boolean(cv.getElementsByTagName("recurring_bool")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('recurring_intervall')[0].hasChildNodes())pobj.recurring_intervall

= cv.getElementsByTagName("recurring_intervall")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('recurring_class')[0].hasChildNodes())pobj.recurring_class =

cv.getElementsByTagName("recurring_class")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('other_users')[0].hasChildNodes())pobj.other_users

= cv.getElementsByTagName("other_users")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color')[0].hasChildNodes())pobj.color =

cv.getElementsByTagName("color")[0].firstChild.nodeValue;

Window.Items.push(pobj);

}

Window.SearchedItems = Window.Items;

switch(Window.CurrentType)

{

case 'MONTH':Window.base.titlechange(Window.BaseTitle[language]+' -

'+Window.MonthNames[Window.CurrentMonth-1][language]+" "+Window.CurrentYear);

Window.DrawMonth();

break;

case 'WEEK':Window.base.titlechange(Window.BaseTitle[language]+' -

'+Window.MonthNames[Window.CurrentMonth-1][language]+" "+Window.CurrentYear);

break;

case 'DAY':var day = Window.CurrentDate;

if(day < 10) day = "0"+day;

Window.base.titlechange(Window.BaseTitle[language]+' -

'+day+"."+Window.MonthNames[Window.CurrentMonth-1][language]+" "+Window.CurrentYear);

Window.DrawDay();

break;

}

}

},

DrawMonth: function()

{

Page 122: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 122

var Window = null;

if(this.type == "OBJ_CALENDARWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj.obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

Window.CurrentEntryDivIds = new Array();

var str = "<table border='1' class='Contacts_Table' style='color:black;

height:"+(Window.base.height-140)+";'>";

str+= "<tr class='Contacts_TR' style='height:20px;'>";

var day_names = [

{

de:'Montag',

en:'Monday'

},

{

de:'Dienstag',

en:'Tuesday'

},

{

de:'Mittwoch',

en:'Wednesday'

},

{

de:'Donnerstag',

en:'Thursday'

},

{

de:'Freitag',

en:'Friday'

},

{

de:'Samstag',

en:'Saturday'

},

{

de:'Sonntag',

en:'Sunday'

}

];

for(var i = 0; i<7; i++)

{

str+= " <td class='Security_Header' style='width:12%'

align='center'>"+day_names[i][language]+"</td>";

}

str+= "</tr>";

str+= "<tr>";

var until = Window.CurrentDate-1;

var weekday = 1;

if(until<0) until += 7;

until = Window.CurrentWeekDay;

var daystr = "";

var lastmonthlength;

var last_month = Window.CurrentMonth-1;

Page 123: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 123

var last_year = Window.CurrentYear;

if(last_month == 0)

{

last_month == 12;

last_year--;

}

var next_month = Window.CurrentMonth+1;

var next_year = Window.CurrentYear;

if(next_month == 13)

{

next_month = 1;

next_year++;

}

if(Window.CurrentMonth == 1) lastmonthlength = 31;

else lastmonthlength = Window.MonthLengths[Window.CurrentMonth-2];

var FirstDayDate = new Date(Window.CurrentYear, Window.CurrentMonth-1, 1);

var Days = [6,

0,

1,

2,

3,

4,

5];

var FirstWeekDay = Days[FirstDayDate.getDay()];

for(var i = lastmonthlength-FirstWeekDay+1; i<=lastmonthlength; i++)

{

str+= Window.CreateMonthTd(i, last_month, last_year);

weekday++;

}

for(var j = 1; j<=Window.CurrentMonthLength; j++)

{

str+= Window.CreateMonthTd(j, Window.CurrentMonth, Window.CurrentYear);

weekday++;

if(weekday == 8)

{

str+= "</tr><tr>";

weekday = 1;

}

}

var nextmonthday = 1;

for(var k = weekday; k<8; k++)

{

str+= Window.CreateMonthTd(nextmonthday, next_month, next_year);

nextmonthday++;

}

str+= "</tr>";

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_CalendarContentDiv').innerHTML

=str;

for(var m = 0; m<Window.CurrentEntryDivIds.length; m++)

{

document.getElementById(Window.CurrentEntryDivIds[m]).onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseFloat(this.id.substr(this.id.indexOf('Entry')+5));

var obj = new OBJ_CALENDARENTRYWINDOW();

obj.New = false;

obj.EntryId = id;

Page 124: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 124

obj.UserId = Window.CurrentUserId;

for(var i = 0; i<Window.Items.length; i++)

{

if(Window.Items[i].user_id == id) obj.title = Window.Items[i].title;

}

obj.ParentWindow = Window;

obj.init();

}

}

var datestrings = new Array(3);

for(var d = 1; d<=31; d++)

{

if(last_month < 10) datestrings[0] = last_year+"0"+last_month;

else datestrings[0] = last_year+""+last_month;

if(this.CurrentMonth < 10) datestrings[1] =

this.CurrentYear+"0"+this.CurrentMonth;

else datestrings[1] = this.CurrentYear+""+this.CurrentMonth;

if(next_month < 10) datestrings[2] = next_year+"0"+next_month;

else datestrings[2] = next_year+""+next_month;

for(var i = 0; i<3; i++)

{

if(d<10) datestrings[i]+= "0"+d;

else datestrings[i]+= ""+d;

if(document.getElementById("Window"+this.base.id+"_MonthTD"+datestrings[i]))

{

document.getElementById("Window"+this.base.id+"_MonthTD"+datestrings[i]).ondblclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var year = parseInt(this.id.substr((this.id.length-8), 4));

var month = parseInt(this.id.substr((this.id.length-4), 2));

var day = parseInt(this.id.substr((this.id.length-2), 2));

var obj = new OBJ_CALENDARENTRYWINDOW();

obj.New = true;

obj.UserId = Window.CurrentUserId;

obj.start = new Date(year, (month-1), day);

obj.end = new Date(year, (month-1), day);

obj.init();

};

}

}

}

}

},

CreateMonthTd: function(day, month, year)

{

var now = new Date();

var str = "";

var datestring = String(year);

if(month < 10) datestring+= "0"+month;

else datestring+= month;

if(day < 10) datestring+= "0"+day;

else datestring+= day;

Page 125: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 125

datestring = parseInt(datestring);

str+= "<td style='background:url(images/calendar/days/"+day+".png) no-repeat";

if(now.getDate()==day && now.getMonth() == month-1 && now.getFullYear() == year) str+=

" orange";

var lines = Math.ceil((this.CurrentDate-

(this.CurrentWeekDay+1)+this.CurrentMonthLength)/7)+1;

str+= "; background-position:"+((this.base.width/7)-40)/2+"px 10px;

height:"+(this.base.height-140)/lines+"px;'";

str+= " id='Window"+this.base.id+"_MonthTD"+datestring+"'>";

var startstring,

endstring;

var count = 0;

var enough = false;

for(var i = 0; i<this.Items.length; i++)

{

var item = this.Items[i];

startstring = item.start.substr(0,4);

startstring+= item.start.substr(5,2);

startstring+= item.start.substr(8,2);

startstring = parseInt(startstring);

endstring = item.end.substr(0,4);

endstring+= item.end.substr(5,2);

endstring+= item.end.substr(8,2);

endstring = parseInt(endstring);

if(startstring <= datestring && endstring >= datestring)

{

if(count == 5) enough = true;

if(!enough)

{

this.CurrentEntryDivIds.push("Window"+this.base.id+"_"+datestring+"Entry"+item.user_id);

str+= "<div id='Window"+this.base.id+"_"+datestring+"Entry"+item.user_id+"'

style='background:url(images/calendar/colors/"+item.color+".png);padding-left:2px; '>";

str+= item.title;

str+= "</div>";

count++;

}

}

else if(item.recurring_bool && item.recurring_class == "3" &&

parseFloat(String(startstring).substr(4)) <= parseFloat(String(datestring).substr(4)) &&

parseFloat(String(endstring).substr(4)) >= parseFloat(String(datestring).substr(4)))

{

if(count == 5) enough = true;

if(!enough)

{

this.CurrentEntryDivIds.push("Window"+this.base.id+"_"+datestring+"Entry"+item.user_id);

str+= "<div id='Window"+this.base.id+"_"+datestring+"Entry"+item.user_id+"'

style='background:url(images/calendar/colors/"+item.color+".png);padding-left:2px; '>";

str+= item.title;

str+= "</div>";

count++;

}

}

}

if(enough)

{

str+= "<div style='background:url(images/calendar/colors/white.png);padding-

left:2px; '>";

str+= '...';

Page 126: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 126

str+= "</div>";

}

str+="</td>";

return str;

},

DrawWeek: function()

{

var Window = null;

if(this.type == "OBJ_CALENDARWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj.obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

Window.CurrentEntryDivIds = new Array();

var str = "<table border='1' class='Contacts_Table' style='color:black;

height:"+(Window.base.height-140)+";'>";

str+= "<tr class='Contacts_TR' style='height:20px;'>";

var day_names = [

{

de:'Montag',

en:'Monday'

},

{

de:'Dienstag',

en:'Tuesday'

},

{

de:'Mittwoch',

en:'Wednesday'

},

{

de:'Donnerstag',

en:'Thursday'

},

{

de:'Freitag',

en:'Friday'

},

{

de:'Samstag',

en:'Saturday'

},

{

de:'Sonntag',

en:'Sunday'

}

];

for(var i = 0; i<7; i++)

{

str+= " <td class='Security_Header' style='width:12%'

align='center'>"+day_names[i][language]+"</td>";

}

Page 127: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 127

str+= "</tr>";

str+= "<tr>";

var until = Window.CurrentDate-1;

var weekday = 1;

if(until<0) until += 7;

until = Window.CurrentWeekDay;

var daystr = "";

var lastmonthlength;

var last_month = Window.CurrentMonth-1;

var last_year = Window.CurrentYear;

if(last_month == 0)

{

last_month == 12;

last_year--;

}

var next_month = Window.CurrentMonth+1;

var next_year = Window.CurrentYear;

if(next_month == 13)

{

next_month = 1;

next_year++;

}

if(Window.CurrentMonth == 1) lastmonthlength = 31;

else lastmonthlength = Window.MonthLengths[Window.CurrentMonth-2];

var FirstDayDate = new Date(Window.CurrentYear, Window.CurrentMonth-1, 1);

var Days = [6,

0,

1,

2,

3,

4,

5];

var FirstWeekDay = Days[FirstDayDate.getDay()];

var start = Window.CurrentDate-Window.CurrentWeekDay+1;

var i = 0;

if(start < 1)

{

for(i = lastmonthlength-start; i<=lastmonthlength; i++)

{

str+= Window.CreateWeekTd(i, last_month, last_year);

weekday++;

}

}

for(var j = start+i; j<=(Window.CurrentDate+(7-Window.CurrentWeekDay)); j++)

{

if(j<=Window.CurrentMonthLength)

{

str+= Window.CreateWeekTd(j, Window.CurrentMonth, Window.CurrentYear);

weekday++;

}

}

var nextmonthday = 1;

for(var k = weekday; k<8; k++)

{

str+= Window.CreateWeekTd(nextmonthday, next_month, next_year);

nextmonthday++;

}

str+= "</tr>";

Page 128: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 128

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_CalendarContentDiv').innerHTML

=str;

for(var m = 0; m<Window.CurrentEntryDivIds.length; m++)

{

}

}

},

CreateWeekTd: function(day, month, year)

{

var now = new Date();

var str = "";

str+= "<td style='background:url(images/calendar/days/"+day+".png) no-repeat";

if(now.getDate()==day && now.getMonth() == month-1 && now.getFullYear() == year) str+=

" orange";

str+= "; background-position:"+((this.base.width/7)-40)/2+"px 10px;

height:"+(this.base.height-140)+"px;'>"+year+'-'+month+'-'+day;

var datestring = String(year);

if(month < 10) datestring+= "0"+month;

else datestring+= month;

if(day < 10) datestring+= "0"+day;

else datestring+= day;

datestring = parseInt(datestring);

var startstring,

endstring;

var count = 0;

var enough = false;

for(var i = 0; i<this.Items.length; i++)

{

var item = this.Items[i];

startstring = item.start.substr(0,4);

startstring+= item.start.substr(5,2);

startstring+= item.start.substr(8,2);

startstring = parseInt(startstring);

endstring = item.end.substr(0,4);

endstring+= item.end.substr(5,2);

endstring+= item.end.substr(8,2);

endstring = parseInt(endstring);

if(startstring <= datestring && endstring >= datestring)

{

if(count == 5) enough = true;

if(!enough)

{

this.CurrentEntryDivIds.push("Window"+this.base.id+"_"+datestring+"Entry"+item.user_id);

str+= "<div id='Window"+this.base.id+"_"+datestring+"Entry"+item.user_id+"'

style='background:url(images/calendar/colors/"+item.color+".png);padding-left:2px; '>";

str+= item.title;

str+= "</div>";

count++;

}

}

else if(item.recurring_bool && item.recurring_class == "3" &&

parseFloat(String(startstring).substr(4)) <= parseFloat(String(datestring).substr(4)) &&

parseFloat(String(endstring).substr(4)) >= parseFloat(String(datestring).substr(4)))

{

if(count == 5) enough = true;

if(!enough)

{

Page 129: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 129

this.CurrentEntryDivIds.push("Window"+this.base.id+"_"+datestring+"Entry"+item.user_id);

str+= "<div id='Window"+this.base.id+"_"+datestring+"Entry"+item.user_id+"'

style='background:url(images/calendar/colors/"+item.color+".png);padding-left:2px; '>";

str+= item.title;

str+= "</div>";

count++;

}

}

}

if(enough)

{

str+= "<div style='background:url(images/calendar/colors/white.png);padding-

left:2px; '>";

str+= '...';

str+= "</div>";

}

str+="</td>";

return str;

},

DrawDay: function()

{

},

SearchItems:function(string)

{

if(string.length == 0) this.LoadEntries();

else

{

var Window = this;

var url =

"programs/calendar/get_searched_entries.php?searchstring="+string+"&UserId="+this.CurrentUserI

d;

var myXML = getXmlFile(url);

Window.Items = new Array();

var root = myXML.documentElement;

var entries = new Array();

var values = myXML.getElementsByTagName("entry");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('start')[0].hasChildNodes())pobj.start =

cv.getElementsByTagName("start")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('end')[0].hasChildNodes())pobj.end =

cv.getElementsByTagName("end")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('remind_bool')[0].hasChildNodes())pobj.remind_bool

= Boolean(cv.getElementsByTagName("remind_bool")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('remind')[0].hasChildNodes())pobj.remind =

cv.getElementsByTagName("remind")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('title')[0].hasChildNodes())pobj.title =

cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('wholeday')[0].hasChildNodes())pobj.wholeday =

Boolean(cv.getElementsByTagName("wholeday")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('recurring_bool')[0].hasChildNodes())pobj.recurring_bool =

Boolean(cv.getElementsByTagName("recurring_bool")[0].firstChild.nodeValue);

Page 130: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 130

if(cv.getElementsByTagName('recurring_intervall')[0].hasChildNodes())pobj.recurring_intervall

= cv.getElementsByTagName("recurring_intervall")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('recurring_class')[0].hasChildNodes())pobj.recurring_class =

cv.getElementsByTagName("recurring_class")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('other_users')[0].hasChildNodes())pobj.other_users

= cv.getElementsByTagName("other_users")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color')[0].hasChildNodes())pobj.color =

cv.getElementsByTagName("color")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('user_id')[0].hasChildNodes())pobj.userID =

cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

Window.Items.push(pobj);

}

Window.SearchedItems = Window.Items;

Window.DrawSearchedItems();

}

},

DrawSearchedItems: function()

{

var Window = this;

var str = "<table border='0' class='Contacts_Table'>";

str+= "<tr class='Contacts_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var start_text =

{

de:'Start',

en:'Start'

};

var end_text =

{

de:'Ende',

en:'End'

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>"+start_text[language]+"</td>";

str+= " <td class='Security_Header'>"+end_text[language]+"</td>";

str+= "</tr>";

for(var i = 0; i<Window.SearchedItems.length; i++)

{

var pobj = Window.SearchedItems[i];

str+= " <tr id='Window"+Window.base.id+"_ContactRow"+i+"'

onmouseover='this.style.background="+'"url(images/calendar/row.png)"'+"'

onmouseout='this.style.background="+'"#888888"'+"' style='background:#888888;'>";

str+= " <td class='Calendar_Row'>";

str+= pobj.title;

str+= " </td>";

str+= " <td class='Calendar_Row'>";

str+= pobj.start;

str+= " </td>";

str+= " <td class='Calendar_Row'>";

str+= pobj.end;

str+= " </td>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_CalendarContentDiv').innerHTML =str;

Page 131: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 131

for(var i = 0; i<this.Items.length; i++)

{

document.getElementById('Window'+Window.base.id+'_ContactRow'+i).ondblclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ContactRow')+11));

var item = Window.Items[id];

var obj = new OBJ_CALENDARENTRYWINDOW();

obj.New = false;

obj.EntryId = item.user_id;

obj.UserId = item.userID;

obj.title = item.title;

obj.ParentWindow = Window;

obj.init();

}

};

}

},

onresize: function()

{

this.DrawWindow();

},

SearchedItems: new Array(),

Items: new Array(),

SearchString: '',

CurrentType: 'MONTH',

CurrentMonth: null,

CurrentYear: null,

CurrentDate: null,

CurrentUserId: 0,

DateString: '',

CurrentMonthLength: 0,

MonthLengths: new Array(),

MonthNames: new Array(),

CurrentWeekDay: null,

CurrentEntryDivIds: new Array(),

BaseTitle:

{

de:'Kalender',

en:'Calendar'

}

};

Page 132: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 132

OBJ_CHATCONVERSATIONWINDOW.js

function OBJ_CHATCONVERSATIONWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CHATCONVERSATIONWINDOW.prototype =

{

type: "OBJ_CHATCONVERSATIONWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:this.OtherUserName,

en:this.OtherUserName

};

this.base.iconpath = 'images/logos/chat.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.width = 450;

this.base.height = 350;

this.base.bgcolor = '#ffffff';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_ConversationDiv' class='Chat_ContentDiv'

style='padding:5px; margin:5px; overflow:auto; border:1px solid #cccccc; font-size:.8em;

width:"+(this.base.width-10-140)+";height:"+((this.base.height-140))+";float:left;'>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ImageDiv' class='Chat_Image'

style='width:100px;float:left; margin:5px;'>";

str+= "<img src='programs/contacts/contact_image.php?type=vpc&id="+this.OtherUserId+"'

/>";

str+= "</div><br />";

str+= "<div id='Window"+this.base.id+"_ControlPanel' class='Chat_ContentDiv'

style='padding:5px; margin:5px; border:1px solid #cccccc; font-size:.8em;

width:"+(this.base.width-30)+";height:60px;float:left;'>";

str+= "<div style='float:left;'>";

str+= "<textarea id='Window"+this.base.id+"_TextInput' cols='60' rows='2' style='font-

size:.9em;overflow:-moz-scrollbars-vertical;'>";

str+= "</textarea>";

str+= "</div>";

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById("Window"+this.base.id+"_TextInput").focus();

document.getElementById('Window'+this.base.id+'_TextInput').onkeydown = function(evt)

{

if(evt.keyCode == 13)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.Write(this.value);

}

else

{

if(this.value.indexOf("\n") == -1)

{

if(String(this.value).length == 37) this.value += "\n";

}

else

Page 133: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 133

{

if(String(this.value.substr(this.value.lastIndexOf("\n")+4)).length == 37)

this.value+= "\n";

}

}

};

},

Write: function(text)

{

var url5 = "programs/chat/user_is_online.php?id="+this.OtherUserId;

var req5 = getHTML(url5);

if(req5 == 'true')

{

if(this.Started == false)

{

var url1 = "programs/chat/start_conversation.php?id="+this.OtherUserId;

var resp1 = getHTML(url1);

this.Id = resp1;

this.Started = true;

}

var url2 = "programs/chat/conversation_is_open.php?id="+this.Id;

var resp2 = getHTML(url2);

if(resp2 == 'closed')

{

alert('DF');

var url3 = "programs/chat/start_conversation.php?id="+this.OtherUserId;

var resp3 = getHTML(url3);

this.Id = resp3;

}

var url4 = 'programs/chat/write.php?id='+this.Id+'&text='+text;

setRequest(url4);

document.getElementById('Window'+this.base.id+'_TextInput').value = '';

}

else

{

var user_not_online_text =

{

de:'Der User ist nicht online!',

en:'The user is not online!'

};

this.writeText(user_not_online_text[language], 0);

}

},

writeText: function(text, user_id)

{

document.getElementById('Window'+this.base.id+'_ConversationDiv').innerHTML+= "<br

/>"+text;

document.getElementById('Window'+this.base.id+'_ConversationDiv').scrollTop = 40000000;

},

close: function()

{

var Window = null;

if(this.type == "OBJ_CHATCONVERSATIONWINDOW") Window = this;

else

{

Page 134: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 134

var GetWindowObj = getWindowObj(this);

if(GetWindowObj.obj != null) Window = GetWindowObj.obj;

}

setRequest('programs/chat/stop_conversation.php?id='+Window.Id);

HideDiv.style.visibility = 'hidden';

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

Id: 0,

OtherUserId: 0,

OtherUserName: '',

Started: false

};

OBJ_CHATLOGWINDOW.js

function OBJ_CHATLOGWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CHATLOGWINDOW.prototype =

{

type: "OBJ_CHATLOGWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Nachrichtenverlauf',

en:'Chat Log'

};

this.base.iconpath = 'images/logos/chat.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.width = parent.WindowWidth - 200;

this.base.height = parent.WindowHeight - 200;

this.base.bgcolor = '#eeeeee';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

var chat_log_text =

{

de:'Nachrichtenverlauf',

en:'Chat Log'

};

str+= "<div id='Window"+this.base.id+"_TitleDiv' style='width:"+(this.base.width-10)+";

padding-left:10px; background:#bbbbbb; font-size:13px;'>";

str+= chat_log_text[language]+": "+this.forename+" "+this.surname;

str+= "</div>";

Page 135: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 135

str+= "<div id='Window"+this.base.id+"_Conversations' style='margin:5px;

height:"+(this.base.height-70)+"; overflow:scroll; font-size:12px; border:1px solid #dddddd;

padding:3px;'>";

var loading_text =

{

de:'Einträge werden geladen...',

en:'Loading Entries...'

};

str+= loading_text[language];

str+= "</div><br />";

this.base.content_obj.innerHTML = str;

this.LoadConversations();

},

LoadConversations: function()

{

var str = "";

var url = 'programs/chat/get_chat_log.php?id='+this.UserId;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var values = myXML.getElementsByTagName("conversation");

if(values.length != 0)

{

var conversation_of_text =

{

de:'Gespräch vom',

en:'Conversation at'

};

var started = '';

var messages = new Array();

var messages_node = null;

var msg = null;

var from_id = 0;

var wrote_text =

{

de:'schrieb',

en:'wrote'

};

var datetime = "";

var at_text =

{

de:'um',

en:'at'

};

var color = "";

var font = "";

var text = "";

for(var i = 0; i<values.length; i++)

{

var cv = values[i];

if(cv.getElementsByTagName('started')[0].hasChildNodes())started =

cv.getElementsByTagName("started")[0].firstChild.nodeValue;

str+= "<div style='padding-left:3px;

background:#dddddd;'>"+conversation_of_text[language]+" ";

str+= started.substr(8,2)+'.'+started.substr(5,2)+'.'+started.substr(0,4)+'

'+started.substr(11,8)+"</div>";

if(cv.getElementsByTagName('messages')[0].hasChildNodes())

{

messages_node = cv.getElementsByTagName("messages")[0];

messages = myXML.getElementsByTagName("message");

if(messages.length != 0)

{

for(var j = 0; j<messages.length;j++)

{

text = "";

Page 136: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 136

msg = messages[j];

if(msg.getElementsByTagName('from_id')[0].hasChildNodes())from_id =

msg.getElementsByTagName("from_id")[0].firstChild.nodeValue;

if(msg.getElementsByTagName('datetime')[0].hasChildNodes())datetime

= msg.getElementsByTagName("datetime")[0].firstChild.nodeValue;

if(msg.getElementsByTagName('color')[0].hasChildNodes())color =

msg.getElementsByTagName("color")[0].firstChild.nodeValue;

if(msg.getElementsByTagName('font')[0].hasChildNodes())font =

msg.getElementsByTagName("font")[0].firstChild.nodeValue;

if(msg.getElementsByTagName('text')[0].hasChildNodes())text =

msg.getElementsByTagName("text")[0].firstChild.nodeValue;

if(parseInt(from_id) == this.UserId) str+= this.forename+'

'+this.surname+' '+wrote_text[language];

else str+= parent.UserForename+' '+parent.UserSurname+'

'+wrote_text[language]+" "+at_text[language];

str+= " "+datetime.substr(11,8)+":<br />";

str+= "<div style='margin-left:8px;color:"+color+";font-

family:"+font+"'>"+text+"</div>";

}

}

}

}

}

document.getElementById("Window"+this.base.id+"_Conversations").innerHTML = str;

},

forename: '',

surname: '',

ContactId: 0,

UserId: 0

};

Page 137: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 137

OBJ_CHATWINDOW.js

function OBJ_CHATWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CHATWINDOW.prototype =

{

type: "OBJ_CHATWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Chat',

en:'Chat'

};

this.base.iconpath = 'images/logos/chat.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.width = 350;

this.base.height = 300;

this.base.bgcolor = '#ffffff';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div class='SecurityMenuItemDiv' style='float:left;'>";

str+= "<input type='text' maxlength='200' id='Window"+this.base.id+"_DisplayTextInput'

/>";

str+= " </div>";

str+= " <div class='SecurityMenuItemDiv' style='float:right;padding:0px;'>";

str+= "<select id='Window"+this.base.id+"_SelectStatus'>";

var online_text =

{

de:'Online',

en:'Online'

};

var absent_text =

{

de:'Abwesend',

en:'Absent'

};

var busy_text =

{

de:'Beschäftigt',

en:'Busy'

};

var right_back_text =

{

de:'Gleich zurück',

en:'Right back'

};

var show_as_offline_text =

{

de:'Als offline anzeigen',

en:'Appear as offline'

};

str+= "<option value='1' style='background:url(images/chat/status/1.png) no-repeat;'

class='Chat_SelectStatus'>"+online_text[language]+"</option>";

str+= "<option value='2' style='background:url(images/chat/status/2.png) no-repeat;'

class='Chat_SelectStatus'>"+absent_text[language]+"</option>";

Page 138: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 138

str+= "<option value='3' style='background:url(images/chat/status/3.png) no-repeat;'

class='Chat_SelectStatus'>"+busy_text[language]+"</option>";

str+= "<option value='4' style='background:url(images/chat/status/4.png) no-repeat;'

class='Chat_SelectStatus'>"+right_back_text[language]+"</option>";

str+= "<option value='5' style='background:url(images/chat/status/5.png) no-repeat;'

class='Chat_SelectStatus'>"+show_as_offline_text[language]+"</option>";

str+= "</select>";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_UserDiv' class='Chat_ItemsDiv'

style='width:"+(this.base.width-10)+";height:"+((this.base.height-40))+";'>";

var loading_text =

{

de:'User werden geladen...',

en:'Loading Users...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_DisplayTextInput').onblur = function()

{

var url = 'programs/chat/set_text.php?text='+this.value;

setRequest(url);

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

};

document.getElementById('Window'+this.base.id+'_SelectStatus').onchange = function()

{

var url = 'programs/chat/set_status.php?id='+this.value;

setRequest(url);

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

};

this.LoadSettings();

this.LoadUsers();

},

LoadSettings: function()

{

var url = 'programs/chat/load_settings.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var text = root.getElementsByTagName("text")[0].firstChild.nodeValue;

document.getElementById('Window'+this.base.id+'_DisplayTextInput').value = text;

var status_id = root.getElementsByTagName("status")[0].firstChild.nodeValue;

var selectobj = document.getElementById('Window'+this.base.id+'_SelectStatus');

for(var i = 0; i<selectobj.options.length; i++)

{

if(selectobj.options[i].value == status_id)

{

selectobj.selectedIndex = i;

}

}

},

LoadUsers:function()

{

var url = 'programs/chat/get_users.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var items = new Array();

Page 139: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 139

var values = myXML.getElementsByTagName("item");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('contact_id')[0].hasChildNodes())pobj.contact_id =

cv.getElementsByTagName("contact_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('chat_status')[0].hasChildNodes())pobj.status =

cv.getElementsByTagName("chat_status")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('forename')[0].hasChildNodes())pobj.forename =

cv.getElementsByTagName("forename")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('surname')[0].hasChildNodes())pobj.surname =

cv.getElementsByTagName("surname")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('chat_text')[0].hasChildNodes())pobj.text =

cv.getElementsByTagName("chat_text")[0].firstChild.nodeValue;

items.push(pobj);

}

items.sort(this.SortByStatus);

if(this.Items != items) this.Items = items;

this.DrawItems();

},

DrawItems: function()

{

var str = "";

var user = null;

for(var i = 0; i<this.Items.length; i++)

{

user = this.Items[i];

str+= "<div id='Window"+this.base.id+"_ChatUser"+i+"' class='Chat_UserItem'>";

str+= "<div class='Chat_DisplayText'>"+user.text+"</div>";

str+= "<img src='images/chat/status/"+user.status+".png' style='vertical-

align:middle;' />&nbsp;";

str+= user.name;

str+= "</div>";

}

document.getElementById('Window'+this.base.id+'_UserDiv').innerHTML = str;

for(var i = 0; i<this.Items.length; i++)

{

var contact = this.Items[i];

document.getElementById("Window"+this.base.id+"_ChatUser"+i).ondblclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.StartConversation(Window.Items[parseFloat(this.id.substr(this.id.indexOf("_ChatUser")+9

))]);

};

document.getElementById("Window"+this.base.id+"_ChatUser"+i).oncontextmenu =

function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var set;

if(window.event)

{

Page 140: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 140

set =

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

var myMenu = new OBJ_CONTEXTMENU(set);

if(parseInt(contact.status) != 0)

{

myMenu.add({id:0,text:{de:'Konversation starten', en:'Start

Conversation'},iconpath:'images/logos/chat.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window =

GetWindowObj.obj;Window.StartConversation(contact);myMenu.hide();}});

}

myMenu.add({id:0,text:{de:'Kontakt bearbeiten', en:'Edit

Contact'},iconpath:'images/logos/contacts.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;var obj = new

OBJ_CONTACTWINDOW();obj.forename = contact.forename;obj.surname =

contact.surname;obj.ContactId = contact.contact_id;obj.ContactType = 'personal';obj.New =

false;myMenu.hide();obj.init();}});

myMenu.add({id:0,text:{de:'Nachrichtenverlauf', en:'Display Chat

Log'},iconpath:'images/logos/editor.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;var obj = new

OBJ_CHATLOGWINDOW();obj.forename = contact.forename;obj.surname =

contact.surname;obj.ContactId = contact.contact_id;obj.UserId =

contact.user_id;obj.init();myMenu.hide();}});

myMenu.show();

};

}

},

SortByStatus: function(a, b)

{

var x = a.status;

var y = b.status;

return ((x < y) ? -1 : ((x > y) ? 1 : 0));

},

StartConversation: function(contact)

{

var url1 = "programs/chat/user_is_online.php?id="+contact.user_id;

var req1 = getHTML(url1);

if(req1 == 'true')

{

var obj = new OBJ_CHATCONVERSATIONWINDOW();

obj.OtherUserId = contact.user_id;

obj.OtherUserName = contact.name;

obj.init();

Page 141: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 141

}

},

close: function()

{

window.clearInterval(LoadChatUsersInterval);

HideDiv.style.visibility = 'hidden';

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

Items: new Array(),

LoadingInterval: null

};

OBJ_CONTACTGROUPWINDOW.js

function OBJ_CONTACTGROUPWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CONTACTGROUPWINDOW.prototype =

{

type: "OBJ_CONTACTGROUPWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Gruppen',

en:'Groups'

};

this.base.iconpath = 'images/security/group.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 300;

this.base.height = 300;

this.base.bgcolor = '#000000';

this.base.top = 0;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

this.Items = new Array();

this.AllItems = new Array();

var str = "";

str+= "<div id='Window"+this.base.id+"_AddedGroupsDiv' class='Security_PermissionsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";'>";

var loading_text =

{

de:'User geladen...',

en:'Loading Groups...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Security_SearchDiv'>";

Page 142: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 142

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_AllGroupsDiv' class='Security_ItemsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";'>";

var loading_text =

{

de:'Gruppen werden geladen...',

en:'Loading Groups...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.SearchString = this.value;

Window.SearchItem();

}

};

this.LoadAddedGroups();

this.LoadGroups();

},

LoadAddedGroups: function()

{

var obj;

for(var i = 0; i<this.ParentWindow.group_ids.length; i++)

{

if(this.ParentWindow.group_ids[i].length != 0)

{

obj = new Object();

obj.name =

getHTML('programs/contacts/get_group.php?id='+this.ParentWindow.group_ids[i]);

obj.id = this.ParentWindow.group_ids[i];

this.Items.push(obj);

}

}

this.DrawAddedGroups();

},

DrawAddedGroups: function()

{

var Window = null;

if(this.type == "OBJ_CONTACTGROUPWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

Page 143: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 143

}

if(Window != null)

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

str+= " <td class='Security_Header'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp</td>";

str+= "</tr>";

var remove_text =

{

de:'Entfernen',

en:'Remove'

};

for(var i = 0; i<Window.Items.length; i++)

{

var pobj = Window.Items[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/security/delete.png' title='"+remove_text[language]+"'

";

str+= " id='Window"+Window.base.id+"_RemoveImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_AddedGroupsDiv').innerHTML = str;

for(var i = 0; i<this.Items.length; i++)

{

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseover =

function()

{

this.src = 'images/security/delete_over.png';

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseout =

function()

{

this.src = 'images/security/delete.png';

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_RemoveImg')+10));

var obj = Window.Items[id];

for(var j = 0; j<Window.ParentWindow.group_ids.length; j++)

{

if(Window.ParentWindow.group_ids[j] == obj.id)

{

Window.ParentWindow.group_ids.splice(j, 1);

Page 144: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 144

}

}

var inpobj =

document.getElementById('Window'+Window.ParentWindow.base.id+'_group_names');

var text = inpobj.value;

text = text.replace(obj.name+"; ", "");

inpobj.value = text;

Window.Items.splice(id, 1);

Window.DrawAddedGroups();

}

};

}

}

},

LoadGroups:function()

{

var url = 'programs/contacts/get_groups.php';

var myXML = getXmlFile(url);

this.AllItems = new Array();

var root = myXML.documentElement;

var items = new Array();

var values = myXML.getElementsByTagName("item");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

this.AllItems.push(pobj);

}

this.SearchedItems = this.AllItems;

this.DrawGroups();

},

DrawGroups:function()

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var add_text =

{

de:'Hinzufügen',

en:'Add'

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= "</tr>";

for(var i = 0; i<this.SearchedItems.length; i++)

{

Page 145: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 145

var pobj = this.SearchedItems[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/security/add.png' title='"+add_text[language]+"' ";

str+= " id='Window"+this.base.id+"_AddImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+this.base.id+'_AllGroupsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedItems.length; i++)

{

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseover = function()

{

this.src = 'images/security/add_over.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseout = function()

{

this.src = 'images/security/add.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_AddImg')+7));

var already_exists = false;

var obj = new Object();

obj.name = Window.AllItems[id].name;

obj.user_id = Window.AllItems[id].user_id;

for(var j = 0; j<Window.Items.length; j++)

{

if(Window.Items[j].user_id = obj.user_id && Window.Items[j].type ==

obj.type)

{

already_exists = true;

}

}

if(!already_exists)

{

Window.Items.push(obj);

Window.ParentWindow.group_ids.push(obj.user_id);

document.getElementById('Window'+Window.ParentWindow.base.id+'_group_names').value+=

obj.name+'; ';

Window.DrawAddedGroups();

}

}

};

}

Page 146: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 146

},

SearchItem:function()

{

this.SearchedItems = new Array();

var string = this.SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.AllItems.length; i++)

{

obj = this.AllItems[i];

if(obj.name.toLowerCase() == string.toLowerCase()) this.SearchedItems.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

{

this.SearchedItems.push(obj);

added = true;

}

}

start++;

}

}

}

}

if(string.length == 0) this.SearchedItems = this.AllItems;

this.DrawGroups();

},

Path: null,

Items: new Array(),

AllItems: new Array(),

SearchedItems: new Array(),

SearchString: ''

};

Page 147: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 147

OBJ_CONTACTSGROUPWINDOW.js

function OBJ_CONTACTSGROUPWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CONTACTSGROUPWINDOW.prototype =

{

type: "OBJ_CONTACTSGROUPWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Gruppen',

en:'Groups'

};

this.base.iconpath = 'images/security/group.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 300;

this.base.height = 300;

this.base.bgcolor = '#000000';

this.base.top = 0;

this.base.init();

this.base.subwindows = new Array();

this.DeletedItems = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_AddGroupDivMain' class='Security_SearchDiv'>";

var add_group_text =

{

de:'Hinzufügen',

en:'Add'

};

str+= " <div id='Window"+this.base.id+"_AddGroupDiv' class='ContactsMenuItemDiv'>";

str+= add_group_text[language]+'&nbsp;';

str+= " </div>";

str+= " <input id='Window"+this.base.id+"_AddGroupInput' type='text' size='20' ";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_AllGroupsDiv' class='Security_ItemsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";float:left;'>";

var loading_text =

{

de:'Gruppen werden geladen...',

en:'Loading Groups...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_AddGroupDiv').onmouseover = function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_AddGroupDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_AddGroupDiv').onclick = function()

Page 148: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 148

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = document.getElementById('Window'+Window.base.id+'_AddGroupInput');

if(obj.value != '')

{

var pobj = new Object();

pobj.id = Window.AllItems.length;

pobj.user_id = 'new';

pobj.name = obj.value;

Window.AllItems.push(pobj);

obj.value = '';

Window.DrawGroups();

}

};

this.LoadGroups();

},

LoadGroups:function()

{

var url = 'programs/contacts/get_groups.php';

var myXML = getXmlFile(url);

this.AllItems = new Array();

var root = myXML.documentElement;

var items = new Array();

var values = myXML.getElementsByTagName("item");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

this.AllItems.push(pobj);

}

this.SearchedItems = this.AllItems;

this.DrawGroups();

},

DrawGroups:function()

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var del_text =

{

de:'Löschen',

en:'Delete'

};

var edit_text =

{

de:'Umbenennen',

en:'Edit'

};

str+= " <td class='Security_Header'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header' colspan='2' width='20'>&nbsp;</td>";

Page 149: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 149

str+= "</tr>";

for(var i = 0; i<this.SearchedItems.length; i++)

{

var pobj = this.SearchedItems[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/contacts/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row' id='Window"+this.base.id+"_NameTd"+i+"'>";

str+= pobj.name;

str+= "</td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/security/delete.png' title='"+del_text[language]+"' ";

str+= " id='Window"+this.base.id+"_DelImg"+i+"' />";

str+= " </td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/contacts/edit.png' title='"+edit_text[language]+"' ";

str+= " id='Window"+this.base.id+"_EditImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+this.base.id+'_AllGroupsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedItems.length; i++)

{

document.getElementById('Window'+this.base.id+'_DelImg'+i).onmouseover = function()

{

this.src = 'images/security/delete_over.png';

};

document.getElementById('Window'+this.base.id+'_DelImg'+i).onmouseout = function()

{

this.src = 'images/security/delete.png';

};

document.getElementById('Window'+this.base.id+'_EditImg'+i).onmouseover =

function()

{

this.src = 'images/contacts/edit_over.png';

};

document.getElementById('Window'+this.base.id+'_EditImg'+i).onmouseout = function()

{

this.src = 'images/contacts/edit.png';

};

document.getElementById('Window'+this.base.id+'_DelImg'+i).onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_DelImg')+7));

var item = Window.AllItems[id];

if(item.user_id == 'new') Window.AllItems.splice(id, 1);

else

{

Window.DeletedItems.push(Window.AllItems[id].user_id);

Window.AllItems.splice(id, 1);

}

Window.DrawGroups();

}

Page 150: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 150

};

document.getElementById('Window'+this.base.id+'_EditImg'+i).onclick =

this.EditItem;

}

},

EditItem: function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_EditImg')+8));

var obj = document.getElementById("Window"+Window.base.id+"_NameTd"+id);

var str = "";

str+= "<input type='text' id='Window"+Window.base.id+"_NameInput"+id+"'

value='"+obj.innerHTML+"' />";

obj.innerHTML = str;

this.src = 'images/contacts/save.png';

var save_text =

{

de:'Speichern',

en:'Save'

};

this.title = save_text[language];

this.onmouseover = function()

{

this.src = 'images/contacts/save_over.png';

};

this.onmouseout = function()

{

this.src = 'images/contacts/save.png';

};

this.onclick = function()

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_EditImg')+8));

var obj = document.getElementById("Window"+Window.base.id+"_NameTd"+id);

var str =

document.getElementById("Window"+Window.base.id+"_NameInput"+id).value;

Window.AllItems[id].name = str;

obj.innerHTML = str;

this.src = 'images/contacts/edit.png';

var edit_text =

{

de:'Umbenennen',

en:'Edit'

};

this.title = edit_text[language];

this.onmouseover = function()

{

this.src = 'images/contacts/edit_over.png';

};

this.onmouseout = function()

{

this.src = 'images/contacts/edit.png';

};

this.onclick = Window.EditItem;

};

Page 151: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 151

}

},

close: function()

{

if(this.type == 'OBJ_CONTACTSGROUPWINDOW') var Window = this;

else

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = "programs/contacts/save_groups.php?";

var item = null;

for(var i = 0; i<Window.AllItems.length; i++)

{

if(i != 0) url+= "&";

item = Window.AllItems[i];

url+= "id"+i+"="+item.user_id+"&name"+i+"="+item.name;

}

for(var j = i; j<Window.DeletedItems.length+i; j++)

{

if(i != 0) url+= "&";

url+= "id"+j+"=delete&name"+j+"="+Window.DeletedItems[j-i];

}

setRequest(url);

var WindowObj,

index;

for(var i = 0; i<Windows.length; i++)

{

if(Windows[i].base.id == Window.base.id)

{

WindowObj = Windows[i];

index = i;

}

}

for(var i = 0; i<Window.base.subwindows.length; i++)

{

var subid = null;

for(var j = 0; j<Windows.length; j++) if(Windows[j].base.id ==

Window.base.subwindows[i].base.id) subid = j;

if(subid != null) Window.base.subwindows[i].base.close(subid);

}

TaskBar.remove(Window.base.id);

Windows.splice(index, 1);

MainDiv.removeChild(Window.base.obj);

}

},

AllItems: new Array(),

DeletedItems: new Array()

};

Page 152: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 152

OBJ_CONTACTSWINDOW.js

function OBJ_CONTACTSWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CONTACTSWINDOW.prototype =

{

type: "OBJ_CONTACTSWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Kontakte',

en:'Contacts'

};

this.base.iconpath = 'images/logos/contacts.png';

this.base.resizeable = true;

this.base.maximizeable = true;

this.base.bgcolor = '#111111';

this.base.init();

this.base.subwindows = new Array();

this.SearchedContacts = new Array();

this.SearchedUsers = new Array();

this.Users = new Array();

this.Contacts = new Array();

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_MenuBar' class='Menu_Bar'

style='width:"+(this.base.width-5)+"; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Contacts_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_NewContactDiv' class='ContactsMenuItemDiv'>";

var text_new_contact =

{

en:'New Contact',

de:'Neuer Kontakt'

};

str+= text_new_contact[language];

str+= " </div>";

str+= "<div class='ContactsMenuItemDiv'>|</div>";

str+= " <div id='Window"+this.base.id+"_ManageGroupsDiv' class='ContactsMenuItemDiv'>";

var text_manage_groups =

{

en:'Manage Groups',

de:'Gruppen verwalten'

};

str+= text_manage_groups[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ContactsDiv' class='Contacts_ContactsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-63)/2)+";'>";

var loading_text =

{

Page 153: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 153

de:'Kontakte werden geladen...',

en:'Loading Contacts...'

};

str+= loading_text[language];

str+= "</div><br />";

str+= "<div id='Window"+this.base.id+"_UsersDiv' class='Contacts_UserDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-63)/2)+";'>";

var loading_text =

{

de:'User werden geladen...',

en:'Loading Users...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_NewContactDiv').onmouseover =

function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_NewContactDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_ManageGroupsDiv').onmouseover =

function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_ManageGroupsDiv').onmouseout =

function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_NewContactDiv').onclick = function()

{

var obj = new OBJ_CONTACTWINDOW();

obj.New = true;

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

obj.ParentWindow = Window;

obj.init();

};

document.getElementById('Window'+this.base.id+'_ManageGroupsDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_CONTACTSGROUPWINDOW();

obj.ParentWindow = Window;

Window.base.subwindows.push(obj);

obj.init();

};

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.SearchString = this.value;

Page 154: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 154

Window.SearchItem();

}

};

this.LoadContacts();

this.LoadUsers();

},

LoadContacts: function()

{

var Window = null;

if(this.type == "OBJ_CONTACTSWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = 'programs/contacts/get_contacts.php';

var myXML = getXmlFile(url);

Window.Contacts = new Array();

var root = myXML.documentElement;

var contacts = new Array();

var values = myXML.getElementsByTagName("contact");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('forename')[0].hasChildNodes())pobj.forename =

cv.getElementsByTagName("forename")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('surname')[0].hasChildNodes())pobj.surname =

cv.getElementsByTagName("surname")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_priv')[0].hasChildNodes())pobj.email_priv =

cv.getElementsByTagName("email_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_bus')[0].hasChildNodes())pobj.email_bus =

cv.getElementsByTagName("email_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_add')[0].hasChildNodes())pobj.email_add =

cv.getElementsByTagName("email_add")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_priv')[0].hasChildNodes())pobj.phone_priv =

cv.getElementsByTagName("phone_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_bus')[0].hasChildNodes())pobj.phone_bus =

cv.getElementsByTagName("phone_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_priv_activated')[0].hasChildNodes())pobj.email_priv_activate

d = cv.getElementsByTagName("email_priv_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_bus_activated')[0].hasChildNodes())pobj.email_bus_activated

= cv.getElementsByTagName("email_bus_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_add_activated')[0].hasChildNodes())pobj.email_add_activated

= cv.getElementsByTagName("email_add_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('vpc_id')[0].hasChildNodes())pobj.vpc_id =

parseInt(cv.getElementsByTagName("vpc_id")[0].firstChild.nodeValue);

pobj.name = pobj.forename+' '+pobj.surname;

Window.Contacts.push(pobj);

}

Window.SearchedContacts = Window.Contacts;

Window.DrawContacts();

Page 155: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 155

}

},

DrawContacts: function()

{

var Window = null;

if(this.type == "OBJ_CONTACTSWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var str = "<table border='0' class='Contacts_Table'>";

str+= "<tr class='Contacts_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var email_priv_text =

{

de:'Email (Privat)',

en:'Email (Privat)'

};

var email_bus_text =

{

de:'Email (Geschäftlich)',

en:'Email (Business)'

};

var phone_priv_text =

{

de:'Telefon (Privat)',

en:'Phone (Privat)'

};

var phone_bus_text =

{

de:'Telefon (Geschäftlich)',

en:'Phone (Business)'

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>"+email_priv_text[language]+"</td>";

str+= " <td class='Security_Header'>"+email_bus_text[language]+"</td>";

str+= " <td class='Security_Header'>"+phone_priv_text[language]+"</td>";

str+= " <td class='Security_Header'>"+phone_bus_text[language]+"</td>";

str+= " <td class='Security_Header' colspan='3' width='70'>&nbsp;</td>";

str+= "</tr>";

var delete_text =

{

de:'Löschen',

en:'Delete'

};

var export_text =

{

de:'Kontakt exportieren',

en:'Export Contact'

};

var mail_text =

{

de:'Nachricht senden',

en:'Send Message'

Page 156: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 156

};

var undefined_text =

{

de:'<div class="Undefined">[Nicht angegeben]</div>',

en:'<div class="Undefined">[Undefined]</div>'

};

for(var i = 0; i<Window.SearchedContacts.length; i++)

{

var pobj = Window.SearchedContacts[i];

str+= " <tr id='Window"+Window.base.id+"_ContactRow"+i+"'

onmouseover='this.style.background="+'"url(images/contacts/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Contacts_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.email_priv) str+= pobj.email_priv;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.email_bus) str+= pobj.email_bus;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.phone_priv) str+= pobj.phone_priv;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.phone_bus) str+= pobj.phone_bus;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

str+= " <img src='images/contacts/export.png' title='"+export_text[language]+"'

";

str+= " id='Window"+Window.base.id+"_ExportImg"+i+"' />";

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.email_priv_activated == 'true' || pobj.email_bus_activated == 'true' ||

pobj.email_add_activated == 'true' || pobj.vpc_id != 0)

{

str+= " <img src='images/contacts/send_mail.png'

title='"+mail_text[language]+"' ";

str+= " id='Window"+Window.base.id+"_MailImg"+i+"' />";

}

else str+= '&nbsp;';

str+= " </td>";

str+= " <td class='Contacts_Row'>";

str+= " <img src='images/security/delete.png' title='"+delete_text[language]+"'

";

str+= " id='Window"+Window.base.id+"_DeleteImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_ContactsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedContacts.length; i++)

{

if(document.getElementById('Window'+Window.base.id+'_MailImg'+i))

{

document.getElementById('Window'+Window.base.id+'_MailImg'+i).onmouseover =

function()

{

this.src = 'images/contacts/send_mail_over.png';

Page 157: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 157

};

document.getElementById('Window'+Window.base.id+'_MailImg'+i).onmouseout =

function()

{

this.src = 'images/contacts/send_mail.png';

};

document.getElementById('Window'+Window.base.id+'_MailImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_MailImg')+8));

var contact = Window.Contacts[id];

var text = "";

if(contact.vpc_id != 0) text = contact.forename+"

"+contact.surname;

else

{

if(contact.email_add_activated == 'true' &&

contact.email_add.length != 0) text = contact.email_add;

if(contact.email_bus_activated == 'true' &&

contact.email_bus.length != 0) text = contact.email_bus;

if(contact.email_priv_activated == 'true' &&

contact.email_priv.length != 0) text = contact.email_priv;

}

if(text.length != 0)

{

var obj = new OBJ_MESSAGEWINDOW();

obj.To = new Array();

obj.To.push(text);

obj.init();

}

}

};

}

document.getElementById('Window'+Window.base.id+'_DeleteImg'+i).onmouseover =

function()

{

this.src = 'images/security/delete_over.png';

};

document.getElementById('Window'+Window.base.id+'_DeleteImg'+i).onmouseout =

function()

{

this.src = 'images/security/delete.png';

};

document.getElementById('Window'+Window.base.id+'_DeleteImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_DeleteImg')+10));

var c_id = Window.Contacts[id].user_id;

Page 158: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 158

var url = 'programs/contacts/delete_contact.php?id='+c_id;

setRequestWait(url);

Window.LoadContacts();

Window.DrawContacts();

}

};

document.getElementById('Window'+Window.base.id+'_ContactRow'+i).ondblclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ContactRow')+11));

var contact = Window.SearchedContacts[id];

var obj = new OBJ_CONTACTWINDOW();

obj.forename = contact.forename;

obj.surname = contact.surname;

obj.ContactId = contact.user_id;

obj.ContactType = 'personal';

obj.ParentWindow = Window;

obj.New = false;

obj.init();

}

};

document.getElementById('Window'+Window.base.id+'_ExportImg'+i).onmouseover =

function()

{

this.src = 'images/contacts/export_over.png';

};

document.getElementById('Window'+Window.base.id+'_ExportImg'+i).onmouseout =

function()

{

this.src = 'images/contacts/export.png';

};

document.getElementById('Window'+Window.base.id+'_ExportImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ExportImg')+10));

var obj = new OBJ_SAVEFILEWINDOW();

var contact = Window.Contacts[id];

Window.ExportOptions = new Object();

Window.ExportOptions.id = contact.user_id;

obj.filter = new Array(".vcf");

obj.filter_description = 'VCard-Dateien';

obj.returnfunc = Window.ExportContact;

obj.filename = contact.forename+'_'+contact.surname+'.vcf';

obj.init();

}

};

}

Page 159: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 159

}

},

LoadUsers:function()

{

var url = 'programs/contacts/get_users.php';

var myXML = getXmlFile(url);

this.Items = new Array();

var root = myXML.documentElement;

var contacts = new Array();

var values = myXML.getElementsByTagName("contact");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('forename')[0].hasChildNodes())pobj.forename =

cv.getElementsByTagName("forename")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('surname')[0].hasChildNodes())pobj.surname =

cv.getElementsByTagName("surname")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_priv')[0].hasChildNodes())pobj.email_priv =

cv.getElementsByTagName("email_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_bus')[0].hasChildNodes())pobj.email_bus =

cv.getElementsByTagName("email_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_priv')[0].hasChildNodes())pobj.phone_priv =

cv.getElementsByTagName("phone_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_bus')[0].hasChildNodes())pobj.phone_bus =

cv.getElementsByTagName("phone_bus")[0].firstChild.nodeValue;

pobj.name = pobj.forename+' '+pobj.surname;

this.Users.push(pobj);

}

this.SearchedUsers = this.Users;

this.DrawUsers();

},

DrawUsers:function()

{

var Window = null;

if(this.type == "OBJ_CONTACTSWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var str = "<table border='0' class='Contacts_Table'>";

str+= "<tr class='Contacts_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

var email_priv_text =

{

de:'Email (Privat)',

en:'Email (Privat)'

};

var email_bus_text =

{

de:'Email (Geschäftlich)',

Page 160: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 160

en:'Email (Business)'

};

var phone_priv_text =

{

de:'Telefon (Privat)',

en:'Phone (Privat)'

};

var phone_bus_text =

{

de:'Telefon (Geschäftlich)',

en:'Phone (Business)'

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>"+email_priv_text[language]+"</td>";

str+= " <td class='Security_Header'>"+email_bus_text[language]+"</td>";

str+= " <td class='Security_Header'>"+phone_priv_text[language]+"</td>";

str+= " <td class='Security_Header'>"+phone_bus_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= "</tr>";

var add_text =

{

de:'Zu persönlichen Kontakten hinzufügen',

en:'Add to personal Contacts'

};

var undefined_text =

{

de:'<div class="Undefined">[Nicht angegeben]</div>',

en:'<div class="Undefined">[Undefined]</div>'

};

for(var i = 0; i<Window.SearchedUsers.length; i++)

{

var pobj = Window.SearchedUsers[i];

str+= " <tr id='Window"+Window.base.id+"_ContactRowUser"+i+"'

onmouseover='this.style.background="+'"url(images/contacts/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Contacts_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.email_priv) str+= pobj.email_priv;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.email_bus) str+= pobj.email_bus;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.phone_priv) str+= pobj.phone_priv;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

if(pobj.phone_bus) str+= pobj.phone_bus;

else str+= undefined_text[language];

str+= " </td>";

str+= " <td class='Contacts_Row'>";

str+= " <img src='images/security/add.png' title='"+add_text[language]+"' ";

str+= " id='Window"+Window.base.id+"_AddToPersonalImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_UsersDiv').innerHTML = str;

for(var i = 0; i<this.SearchedUsers.length; i++)

Page 161: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 161

{

document.getElementById('Window'+Window.base.id+'_AddToPersonalImg'+i).onmouseover =

function()

{

this.src = 'images/security/add_over.png';

};

document.getElementById('Window'+Window.base.id+'_AddToPersonalImg'+i).onmouseout = function()

{

this.src = 'images/security/add.png';

};

document.getElementById('Window'+Window.base.id+'_AddToPersonalImg'+i).onclick

= function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id =

parseInt(this.id.substr(this.id.indexOf('_AddToPersonalImg')+17));

var user = Window.SearchedUsers[id];

var url = 'programs/contacts/add_to_personal.php?id='+user.user_id;

setRequestWait(url);

Window.LoadContacts();

Window.DrawContacts();

}

};

document.getElementById('Window'+Window.base.id+'_ContactRowUser'+i).ondblclick

= function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id =

parseInt(this.id.substr(this.id.indexOf('_ContactRowUser')+15));

var contact = Window.SearchedUsers[id];

var obj = new OBJ_CONTACTWINDOW();

obj.forename = contact.forename;

obj.surname = contact.surname;

obj.ContactId = contact.user_id;

obj.ContactType = 'vpc';

obj.ParentWindow = Window;

obj.New = false;

obj.init();

}

};

}

}

},

SearchItem:function()

{

this.SearchedContacts = new Array();

var string = this.SearchString;

var obj = null;

Page 162: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 162

var start = 0;

var added = false;

for(var i = 0; i< this.Contacts.length; i++)

{

obj = this.Contacts[i];

if(obj.name.toLowerCase() == string.toLowerCase()) this.SearchedContacts.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

{

this.SearchedContacts.push(obj);

added = true;

}

}

start++;

}

}

}

}

if(string.length == 0) this.SearchedContacts = this.Contacts;

this.DrawContacts();

this.SearchedUsers = new Array();

var string = this.SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.Users.length; i++)

{

obj = this.Users[i];

if(obj.name.toLowerCase() == string.toLowerCase()) this.SearchedUsers.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

{

this.SearchedUsers.push(obj);

added = true;

}

}

start++;

Page 163: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 163

}

}

}

}

if(string.length == 0) this.SearchedUsers = this.Users;

this.DrawUsers();

},

ExportContact: function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.ExportOptions.path = msg.path+msg.filename;

Window.ExportOptions.user_id = msg.user_id;

if(msg.exists == true)

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returnfunc = Window.ExportContact2;

MsgBox.iconpath = 'images/contextmenu/delete.png';

MsgBox.returntype = 'YESNO';

MsgBox.show({de:'Überschreiben', en:'Overwrite'}, {de:'Die Datei existiert

bereits! Wollen Sie überschreiben?', en:'The file already exists! Do you really want to

overwrite?'}, Window.base.id);

}

else Window.ExportContact2(null);

}

},

ExportContact2: function(msg)

{

if(msg == null || msg.value == 'YES')

{

if(this.type == 'OBJ_CONTACTSWINDOW') var Window = this;

else

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

}

setRequest('programs/contacts/export.php?path='+Window.ExportOptions.path+'&user_id='+Window.E

xportOptions.user_id+'&contact_id='+Window.ExportOptions.id);

}

},

onresize: function()

{

document.getElementById("Window"+this.base.id+"_ContactsDiv").style.height =

(this.base.height-63)/2;

document.getElementById("Window"+this.base.id+"_UsersDiv").style.height =

(this.base.height-63)/2;

document.getElementById("Window"+this.base.id+"_ContactsDiv").style.width =

this.base.width;

document.getElementById("Window"+this.base.id+"_UsersDiv").style.width =

this.base.width;

Page 164: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 164

document.getElementById("Window"+this.base.id+"_MenuBar").style.width =

this.base.width-5;

this.DrawUsers();

this.DrawContacts();

},

Contacts: new Array(),

Users: new Array(),

SearchedUsers: new Array(),

SearchedContacts: new Array(),

SearchString: '',

ExportOptions: null

};

OBJ_CONTACTWINDOW.js

function OBJ_CONTACTWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_CONTACTWINDOW.prototype =

{

type: "OBJ_CONTACTWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

if(this.New == true) this.base.title =

{

de:'Neuer Kontakt',

en:'New Contact'

};

else this.base.title =

{

de:this.forename+' '+this.surname,

en:this.forename+' '+this.surname

};

this.base.iconpath = 'images/logos/contacts.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 900;

this.base.height = 500;

this.base.bgcolor = '#111111';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"; float:none;'>";

if(this.ContactType == 'personal')

{

str+= " <div id='Window"+this.base.id+"_SaveDiv' class='ContactsMenuItemDiv'>";

var text_save =

{

en:'Save',

de:'Speichern'

};

str+= text_save[language];

str+= " </div>";

str+= "<div class='ContactsMenuItemDiv'>|</div>";

}

Page 165: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 165

if(this.ContactType == 'personal' && this.New == false)

{

str+= " <div id='Window"+this.base.id+"_DeleteDiv' class='ContactsMenuItemDiv'>";

var text_delete =

{

en:'Delete',

de:'Löschen'

};

str+= text_delete[language];

str+= " </div>";

}

if(this.ContactType != 'personal')

{

str+= " <div id='Window"+this.base.id+"_AddToPersonalDiv'

class='ContactsMenuItemDiv'>";

var text_add =

{

en:'Add to Personal Contacts',

de:'Zu eigenen Kontakten hinzufügen'

};

str+= text_add[language];

str+= " </div>";

}

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ContactDiv' class='Contacts_ContactDiv'

style='width:"+this.base.width+"'>";

var loading_text =

{

de:'Kontakt wird geladen...',

en:'Loading Contact...'

};

str+= loading_text[language];

str+= "</div><br />";

this.base.content_obj.innerHTML = str;

if(this.ContactType == 'personal')

{

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseover = function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var WString = 'Window'+Window.base.id;

var url = 'programs/contacts/save_contact.php?new='+Window.New;

url+= '&id='+Window.ContactId;

url+= '&forename='+document.getElementById(WString+'_forename').value;

url+= '&surname='+document.getElementById(WString+'_surname').value;

url+= '&email_priv='+document.getElementById(WString+'_email_priv').value;

url+= '&email_bus='+document.getElementById(WString+'_email_bus').value;

url+= '&email_add='+document.getElementById(WString+'_email_add').value;

url+= '&phone_priv='+document.getElementById(WString+'_phone_priv').value;

url+= '&phone_bus='+document.getElementById(WString+'_phone_bus').value;

url+= '&phone_add='+document.getElementById(WString+'_phone_add').value;

url+= '&address_priv='+document.getElementById(WString+'_address_priv').value;

url+= '&address_bus='+document.getElementById(WString+'_address_bus').value;

Page 166: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 166

url+= '&postal_priv='+document.getElementById(WString+'_postal_priv').value;

url+= '&postal_bus='+document.getElementById(WString+'_postal_bus').value;

url+= '&city_priv='+document.getElementById(WString+'_city_priv').value;

url+= '&city_bus='+document.getElementById(WString+'_city_bus').value;

url+= '&country_priv='+document.getElementById(WString+'_country_priv').value;

url+= '&country_bus='+document.getElementById(WString+'_country_bus').value;

url+= '&web_priv='+document.getElementById(WString+'_web_priv').value;

url+= '&web_bus='+document.getElementById(WString+'_web_bus').value;

url+= '&profession='+document.getElementById(WString+'_profession').value;

url+= '&birthdate='+document.getElementById(WString+'_birthdate_year').value+'-

'+document.getElementById(WString+'_birthdate_month').value+'-

'+document.getElementById(WString+'_birthdate_day').value;

url+= '&comment='+document.getElementById(WString+'_comment').value;

url+= '&fax='+document.getElementById(WString+'_fax').value;

url+= '&group_ids=';

for(var j = 0; j<Window.group_ids.length; j++) if(Window.group_ids[j].length !=

0) url+=Window.group_ids[j]+';';

url+='&image='+Window.image;

url+='&image_user_id='+Window.image_user_id;

url+='&image_path='+Window.imagepath;

setRequestWait(url);

alert(Window.imagepath);

if(document.getElementById('Window'+Window.ParentWindow.base.id+'_Main'))

{

if(Window.ParentWindow.type == 'OBJ_CONTACTSWINDOW')

{

Window.ParentWindow.LoadContacts();

Window.ParentWindow.DrawContacts();

}

}

Window.base.close(Window.base.id);

};

}

if(this.ContactType == 'personal' && this.New == false)

{

document.getElementById('Window'+this.base.id+'_DeleteDiv').onmouseover =

function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_DeleteDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_DeleteDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var url = 'programs/contacts/delete_contact.php?id='+Window.ContactId;

setRequestWait(url);

if(document.getElementById('Window'+Window.ParentWindow.base.id+'_Main'))

{

if(Window.ParentWindow.type == 'OBJ_CONTACTSWINDOW')

{

Window.ParentWindow.LoadContacts();

Window.ParentWindow.DrawContacts();

}

Page 167: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 167

}

Window.base.close(Window.base.id);

};

}

if(this.ContactType != 'personal')

{

document.getElementById('Window'+this.base.id+'_AddToPersonalDiv').onmouseover =

function()

{

this.style.background = 'url(images/contacts/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_AddToPersonalDiv').onmouseout =

function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_AddToPersonalDiv').onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var url = 'programs/contacts/add_to_personal.php?id='+Window.ContactId;

setRequestWait(url);

if(document.getElementById('Window'+Window.ParentWindow.base.id+'_Main'))

{

if(Window.ParentWindow.type == 'OBJ_CONTACTSWINDOW')

{

Window.ParentWindow.LoadContacts();

Window.ParentWindow.DrawContacts();

}

}

Window.base.close(Window.base.id);

};

}

if(!this.New) this.LoadContact();

else this.DrawContact();

},

LoadContact: function()

{

var url =

'programs/contacts/get_contact.php?id='+this.ContactId+'&type='+this.ContactType;

var myXML = getXmlFile(url);

this.Items = new Array();

var root = myXML.documentElement;

var contacts = new Array();

var values = myXML.getElementsByTagName("contact");

if(values.length != 0)

{

var cv = values[0];

if(cv.getElementsByTagName('forename')[0].hasChildNodes())this.forename =

cv.getElementsByTagName("forename")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('surname')[0].hasChildNodes())this.surname =

cv.getElementsByTagName("surname")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_priv')[0].hasChildNodes())this.email_priv =

cv.getElementsByTagName("email_priv")[0].firstChild.nodeValue;

Page 168: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 168

if(cv.getElementsByTagName('email_bus')[0].hasChildNodes())this.email_bus =

cv.getElementsByTagName("email_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_add')[0].hasChildNodes())this.email_add =

cv.getElementsByTagName("email_add")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_priv')[0].hasChildNodes())this.phone_priv =

cv.getElementsByTagName("phone_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_bus')[0].hasChildNodes())this.phone_bus =

cv.getElementsByTagName("phone_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('phone_add')[0].hasChildNodes())this.phone_add =

cv.getElementsByTagName("phone_add")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('address_priv')[0].hasChildNodes())this.address_priv =

cv.getElementsByTagName("address_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('postal_priv')[0].hasChildNodes())this.postal_priv =

cv.getElementsByTagName("postal_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('city_priv')[0].hasChildNodes())this.city_priv =

cv.getElementsByTagName("city_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('country_priv')[0].hasChildNodes())this.country_priv =

cv.getElementsByTagName("country_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('address_bus')[0].hasChildNodes())this.address_bus =

cv.getElementsByTagName("address_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('postal_bus')[0].hasChildNodes())this.postal_bus =

cv.getElementsByTagName("postal_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('city_bus')[0].hasChildNodes())this.city_bus =

cv.getElementsByTagName("city_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('country_bus')[0].hasChildNodes())this.country_bus =

cv.getElementsByTagName("country_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('profession')[0].hasChildNodes())this.profession =

cv.getElementsByTagName("profession")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('web_priv')[0].hasChildNodes())this.web_priv =

cv.getElementsByTagName("web_priv")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('web_bus')[0].hasChildNodes())this.web_bus =

cv.getElementsByTagName("web_bus")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('birthdate')[0].hasChildNodes())this.birthdate =

cv.getElementsByTagName("birthdate")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_priv_activated')[0].hasChildNodes())this.email_priv_activate

d = cv.getElementsByTagName("email_priv_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_bus_activated')[0].hasChildNodes())this.email_bus_activated

= cv.getElementsByTagName("email_bus_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('email_add_activated')[0].hasChildNodes())this.email_add_activated

= cv.getElementsByTagName("email_add_activated")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('comment')[0].hasChildNodes())this.comment =

cv.getElementsByTagName("comment")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('fax')[0].hasChildNodes())this.fax =

cv.getElementsByTagName("fax")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('vpc_id')[0].hasChildNodes())this.vpc_id =

cv.getElementsByTagName("vpc_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('group_ids')[0].hasChildNodes())this.groups_string =

cv.getElementsByTagName("group_ids")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('image')[0].hasChildNodes())this.image =

cv.getElementsByTagName("image")[0].firstChild.nodeValue;

}

this.DrawContact();

},

DrawContact: function()

{

var str = "";

var menu_items = new Array({de:'Kommunikation', en:'Communication'},{de:'Adressen',

en:'Adresses'},{de:'Allgemein', en:'General'});

str+= "<div class='Contacts_SubMenuDiv'>";

str+= " <table border='0' style='border-collapse:collapse;' align='center'>";

Page 169: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 169

str+= " <tr>";

for(var i = 0; i<3; i++)

{

str+= "<td class='Contacts_SubMenuItemDiv'

id='Window"+this.base.id+"_SubMenuItem"+i+"' style='

background:url(images/contacts/row.png);'>"+menu_items[i][language]+"</td>";

}

str+= " </tr>";

str+= " </table>";

str+= "</div><br />";

str+= "<div class='Contacts_Main'>";

var forename_text =

{

de:'Vorname',

en:'Forename'

};

str+= forename_text[language]+" <input id='Window"+this.base.id+"_forename'

value='"+this.forename+"' type='text' size='20' class='Contacts_input' />&nbsp;&nbsp;";

var surname_text =

{

de:'Nachname',

en:'Surname'

};

str+= surname_text[language]+" <input id='Window"+this.base.id+"_surname'

value='"+this.surname+"' type='text' size='20' class='Contacts_input' />";

str+= "<br /><br /><br />";

str+= "<div id='Window"+this.base.id+"_ContactsContent0' class='Contacts_Content'

style='display:inline'>";

str+= "<table border='0'>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var email_priv_text =

{

de:'Email (Privat)',

en:'Email (Privat)'

};

str+= "<input id='Window"+this.base.id+"_email_priv' value='"+this.email_priv+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+email_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var phone_priv_text =

{

de:'Telefon (Privat)',

en:'Phone (Privat)'

};

str+= "<input id='Window"+this.base.id+"_phone_priv' value='"+this.phone_priv+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+phone_priv_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var email_bus_text =

{

de:'Email (Geschäftlich)',

en:'Email (Business)'

};

str+= "<input id='Window"+this.base.id+"_email_bus' value='"+this.email_bus+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+email_bus_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var phone_bus_text =

Page 170: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 170

{

de:'Telefon (Geschäftlich)',

en:'Phone (Business)'

};

str+= "<input id='Window"+this.base.id+"_phone_bus' value='"+this.phone_bus+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+phone_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var email_add_text =

{

de:'Email (Zusätzlich)',

en:'Email (Additional)'

};

str+= "<input id='Window"+this.base.id+"_email_add' value='"+this.email_add+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+email_add_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var phone_add_text =

{

de:'Telefon (Zusätzlich)',

en:'Phone (Additional)'

};

str+= "<input id='Window"+this.base.id+"_phone_add' value='"+this.phone_add+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+phone_add_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>&nbsp;</td>";

str+= " <td class='Contact_ContentTd'>";

var fax_text =

{

de:'Fax',

en:'Fax'

};

str+= "<input id='Window"+this.base.id+"_fax' value='"+this.fax+"' type='text'

size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+fax_text[language];

str+= " </td>";

str+= "</tr>";

str+= "</table>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ContactsContent1' class='Contacts_Content'

style='display:none'>";

str+= "<table border='0'>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var address_priv_text =

{

de:'Addresse (Privat)',

en:'Address (Privat)'

};

str+= "<input id='Window"+this.base.id+"_address_priv' value='"+this.address_priv+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+address_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var address_bus_text =

{

de:'Adresse (Geschäftlich)',

en:'Address (Business)'

Page 171: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 171

};

str+= "<input id='Window"+this.base.id+"_address_bus' value='"+this.address_bus+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+address_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var postal_priv_text =

{

de:'Postleitzahl (Privat)',

en:'Postal Code (Privat)'

};

str+= "<input id='Window"+this.base.id+"_postal_priv' value='"+this.postal_priv+"'

type='text' size='10' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+postal_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var postal_bus_text =

{

de:'Postleitzahl (Geschäftlich)',

en:'Postal Code (Business)'

};

str+= "<input id='Window"+this.base.id+"_postal_bus' value='"+this.postal_bus+"'

type='text' size='10' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+postal_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var city_priv_text =

{

de:'Ort (Privat)',

en:'City (Privat)'

};

str+= "<input id='Window"+this.base.id+"_city_priv' value='"+this.city_priv+"'

type='text' size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+city_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var city_bus_text =

{

de:'Ort (Geschäftlich)',

en:'City (Business)'

};

str+= "<input id='Window"+this.base.id+"_city_bus' value='"+this.city_bus+"'

type='text' size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+city_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var country_priv_text =

{

de:'Land (Privat)',

en:'Country (Privat)'

};

str+= "<input id='Window"+this.base.id+"_country_priv' value='"+this.country_priv+"'

type='text' size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+country_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var country_bus_text =

{

de:'Land (Geschäftlich)',

Page 172: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 172

en:'Country (Business)'

};

str+= "<input id='Window"+this.base.id+"_country_bus' value='"+this.country_bus+"'

type='text' size='15' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+country_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>";

str+= "<tr>";

str+= " <td class='Contact_ContentTd'>";

var web_priv_text =

{

de:'URL (Privat)',

en:'URL (Privat)'

};

str+= "<input id='Window"+this.base.id+"_web_priv' value='"+this.web_priv+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+web_priv_text[language];

str+= " </td>";

str+= " <td class='Contact_ContentTd'>";

var web_bus_text =

{

de:'URL (Geschäftlich)',

en:'URL (Business)'

};

str+= "<input id='Window"+this.base.id+"_web_bus' value='"+this.web_bus+"' type='text'

size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+web_bus_text[language];

str+= " </td>";

str+= "</tr>";

str+= "</table>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ContactsContent2' class='Contacts_Content'

style='display:none'>";

var profession_text =

{

de:'Beruf',

en:'Profession'

};

str+= "<input id='Window"+this.base.id+"_profession' value='"+this.profession+"'

type='text' size='25' class='Contacts_input' />";

str+= "&nbsp;&nbsp;"+profession_text[language]+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

var birthdate_text =

{

de:'Geburtstag',

en:'Birthdate'

};

str+= "<select id='Window"+this.base.id+"_birthdate_day' class='Contacts_select'>";

for(var i = 1; i<=31; i++)

{

var day = String(i);

if(day.length == 1) day = "0"+day;

str+= "<option value='"+day+"'";

if(parseInt(this.birthdate.substr(8,2)) == i) str+= ' selected ';

str+= ">"+day+"</option>";

}

str+= "</select>";

str+= "<select id='Window"+this.base.id+"_birthdate_month' class='Contacts_select'>";

for(var i = 1; i<=12; i++)

{

var month = String(i);

if(month.length == 1) month = "0"+month;

str+= "<option value='"+month+"'";

if(parseInt(this.birthdate.substr(5,2)) == i) str+= ' selected ';

Page 173: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 173

str+= ">"+month+"</option>";

}

str+= "</select>";

str+= "<select id='Window"+this.base.id+"_birthdate_year' class='Contacts_select'>";

var date = new Date();

for(var i = date.getFullYear(); i>=1920; i--)

{

var year = String(i);

str+= "<option value='"+year+"'";

if(parseInt(this.birthdate.substr(0,4)) == i) str+= ' selected ';

str+= ">"+year+"</option>";

}

str+= "</select>";

str+= "&nbsp;&nbsp;"+birthdate_text[language]+"<br /><br />";

this.group_ids = this.groups_string.split(';');

var name_string = '';

for(var i = 0; i<this.group_ids.length; i++)

{

if(this.group_ids[i].length != 0)

{

name_string+=

getHTML('programs/contacts/get_group.php?id='+this.group_ids[i])+'; ';

}

}

var groups_text =

{

de:'Gruppen',

en:'Groups'

};

str+= groups_text[language]+"<br />";

str+= "<input id='Window"+this.base.id+"_group_names' value='"+name_string+"'

type='text' size='30' class='Contacts_input' style='height:35px;' readonly />&nbsp;&nbsp;";

var edit_groups =

{

de:'Gruppen bearbeiten',

en:'Edit Groups'

};

str+= "<img id='Window"+this.base.id+"_edit_groups' src='images/security/group.png'

title='"+edit_groups[language]+"' style='vertical-align:bottom' />";

str+= "<br /><br />";

var comment_text =

{

de:'Kommentar',

en:'Comment'

};

str+= comment_text[language]+"<br />";

str+= "<textarea id='Window"+this.base.id+"_comment' class='Contacts_input' rows='4'

cols='60'>";

str+= this.comment+"</textarea>";

str+= "</div>";

str+= "<div class='Contacts_ImageDiv'>";

var src = '';

var date = new Date();

if(this.image == 'true')

src='programs/contacts/contact_image.php?id='+this.ContactId+'&type='+this.ContactType+'&times

tamp='+date.getSeconds()+date.getDate();

else src = 'images/contacts/unknown.png';

str+= " <img id='Window"+this.base.id+"_image' src='"+src+"' style='border:1px solid

#555555;' />";

str+= " <br />";

var search_image_text =

Page 174: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 174

{

de:'Bild suchen',

en:'Search Image'

};

str+= " <img id='Window"+this.base.id+"_search_image' src='images/filesystem/tree.png'

title='"+search_image_text[language]+"' />";

str+= "</div>";

str+= "</div>";

document.getElementById('Window'+this.base.id+'_ContactDiv').innerHTML = str;

document.getElementById('Window'+this.base.id+'_edit_groups').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_CONTACTGROUPWINDOW();

obj.ParentWindow = Window;

Window.base.subwindows.push(obj);

obj.init();

};

document.getElementById('Window'+this.base.id+'_search_image').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_OPENFILEWINDOW();

obj.filter = new Array(".jpg", ".gif", ".png");

obj.filter_description = 'Grafik-Dateien(JPG, GIF, PNG)';

obj.returnfunc = Window.addImage;

obj.ParentWindow = Window;

obj.init();

};

for(var i = 0; i<3; i++)

{

document.getElementById('Window'+this.base.id+'_SubMenuItem'+i).onmouseover =

function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SubMenuItem'+i).onmouseout =

function()

{

this.style.background = 'url(images/contacts/row.png)';

};

document.getElementById('Window'+this.base.id+'_SubMenuItem'+i).onclick =

function()

{

var id = parseInt(this.id.substr(this.id.indexOf('_SubMenuItem')+12));

var display;

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

for (var j = 0; j<3; j++)

{

if(j == id) display = 'inline';

else display = 'none';

document.getElementById('Window'+Window.base.id+'_ContactsContent'+j).style.display = display;

}

};

}

Page 175: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 175

},

addImage:function(msg)

{

if(msg.value == 'OK')

{

document.getElementById('Window'+this.ParentWindow.base.id+'_image').src =

'programs/contacts/contact_temp_image.php?path='+msg.path+'&user_id='+msg.user_id;

this.ParentWindow.imagepath = msg.path;

this.ParentWindow.image = true;

this.ParentWindow.image_user_id = msg.user_id;

}

},

ContactId: 0,

ContactType: 'personal',

New: false,

forename: '',

surname: '',

phone_priv: '',

phone_bus: '',

phone_add: '',

email_priv: '',

email_bus: '',

email_add: '',

address_priv: '',

address_bus: '',

postal_priv: '',

postal_bus: '',

city_priv: '',

city_bus: '',

country_priv: '',

country_bus: '',

web_priv: '',

web_bus: '',

fax: '',

email_priv_activated: false,

email_bus_activated: false,

email_add_activated: false,

comment: '',

birthdate: '',

fax: '',

groups_string: '',

group_ids: new Array(),

group_names: new Array(),

vpc_id: 0,

profession: '',

image: false,

image_user_id:0,

imagepath: '',

ParentWindow: null

};

Page 176: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 176

OBJ_CONTEXTMENU.js

function OBJ_CONTEXTMENU(get)

{

this.obj = document.getElementById('ContextMenu');

this.obj.style.left = get.x;

this.obj.style.top = get.y;

this.obj.style.zIndex = get.zIndex;

this.items = new Array();

this.TargetWindow = get.targetWindow;

}

OBJ_CONTEXTMENU.prototype =

{

type: "OBJ_CONTEXTMENU",

add:function(obj)

{

this.items.push(obj);

},

hide:function()

{

this.obj.style.visibility = 'hidden';

},

show:function()

{

var str="";

var id = this.TargetWindow.base.id;

for(var i = 0; i<this.items.length; i++)

{

if(i==0) str+= "<div class='ContextMenuItemTop'

id='Window"+id+"_ContextMenuItem"+i+"'>";

else if(i==this.items.length-1) str+= "<div class='ContextMenuItemBottom'

id='Window"+id+"_ContextMenuItem"+i+"'>";

else str+= "<div class='ContextMenuItem' id='Window"+id+"_ContextMenuItem"+i+"'>";

str+= "<img src='"+this.items[i].iconpath+"' style='vertical-align:bottom'

/>&nbsp;";

str+= this.items[i].text[language];

str+= "</div>";

}

this.obj.innerHTML = str;

this.obj.style.visibility = 'visible';

for(var i = 0; i<this.items.length; i++)

{

document.getElementById('Window'+id+'_ContextMenuItem'+i).onclick =

this.items[i].click;

document.getElementById('Window'+id+'_ContextMenuItem'+i).onmouseover = function()

{

if(this.id.substr(this.id.length-1)=='0') this.style.background =

'url(images/contextmenu/bg_top_over.png) no-repeat;';

else if(parseInt(this.id.substr(this.id.length-1))==i-1) this.style.background

= 'url(images/contextmenu/bg_bottom_over.png) no-repeat;';

else this.style.background = 'url(images/contextmenu/bg_middle_over.png) no-

repeat;';

};

document.getElementById('Window'+id+'_ContextMenuItem'+i).onmouseout = function()

{

if(this.id.substr(this.id.length-1)=='0') this.style.background =

'url(images/contextmenu/bg_top.png) no-repeat;';

else if(parseInt(this.id.substr(this.id.length-1))==i-1) this.style.background

= 'url(images/contextmenu/bg_bottom.png) no-repeat;';

Page 177: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 177

else this.style.background = 'url(images/contextmenu/bg_middle.png) no-

repeat;';

};

}

},

obj: null,

items: new Array()

};

function OBJ_CONTEXTMENUITEM()

{

}

OBJ_CONTEXTMENUITEM.prototype =

{

type: "OBJ_CONTEXTMENUITEM",

id: null,

obj: null,

text:'',

iconpath: 'images/icons/default.png',

click:null

};

OBJ_FILESYSTEMWINDOW.js

function OBJ_FILESYSTEMWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_FILESYSTEMWINDOW.prototype =

{

type: "OBJ_FILESYSTEMWINDOW",

init: function()

{

if(this.CurrentDir== null) this.CurrentDir = '/';

if(this.Permissions == null) this.Permissions = '111';

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Dateisystem',

en:'Filesystem'

};

this.base.iconpath = 'images/icons/filesystem.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+this.base.width+"'>";

str+= " <div id='PathDiv"+this.base.id+"' class='FS_PathDiv'>";

str+= " <input id='Window"+this.base.id+"_LocationInput' type='text' size='60'

value='"+this.CurrentPath+"'";

str+= " style='margin-top:2px' />";

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_ReloadDiv' class='FSMenuItemDiv'>";

Page 178: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 178

var text_reload =

{

en:'Reload',

de:'Reload'

};

str+= text_reload[language];

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_UpwardsDiv' class='FSMenuItemDiv'>";

var text_upwards =

{

en:'Upwards',

de:'Aufwärts'

};

str+= text_upwards[language];

str+= " </div>";

str+= "<iframe

src='programs/filesystem/upload.php?loc="+this.CurrentDir+"&user_id="+this.UserId+"' ";

str+= "id='Window"+this.base.id+"_uploadframe'

name='Window"+this.base.id+"_uploadframe' height='60' width='280' style='border:0px; vertical-

align:top; float:right; margin-top:3px; visibility:visible;'>";

str+= "</iframe>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_FilesDiv' class='FS_FilesDiv'

style='width:"+(this.base.width-250)+";height:"+(this.base.height-140)+";'>";

var loading_text =

{

de:'Dateien werden geladen...',

en:'Loading Files...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_TreeDiv' class='FS_TreeDiv'>";

var loading_text =

{

de:'Baum wird geladen...',

en:'Loading Tree...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

GetWindowObj.obj.LoadFiles();

GetWindowObj.obj.LoadTree();

};

document.getElementById('Window'+this.base.id+'_UpwardsDiv').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_UpwardsDiv').onmouseout = function()

{

this.style.background = '';

Page 179: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 179

};

document.getElementById('Window'+this.base.id+'_UpwardsDiv').onclick =

this.ChangeUpwards;

this.LoadFiles();

this.LoadTree();

},

LoadFiles: function()

{

var obj = null;

if(this.type == "OBJ_FILESYSTEMWINDOW") obj = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var url =

'programs/filesystem/get_files.php?path='+obj.CurrentPath+'&type='+obj.DirType+'&user_id='+obj

.UserId;

var myXML = getXmlFile(url);

obj.CurrentItems = new Array();

var root = myXML.documentElement;

var files = new Array();

var values = myXML.getElementsByTagName("file");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

fobj = new Object();

fobj.id = i;

if(cv.getElementsByTagName('name')[0].hasChildNodes()) fobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('type')[0].hasChildNodes()) fobj.type =

cv.getElementsByTagName("type")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('typedes')[0].hasChildNodes()) fobj.type_des =

cv.getElementsByTagName("typedes")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('action')[0].hasChildNodes()) fobj.action =

cv.getElementsByTagName("action")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('size')[0].hasChildNodes()) fobj.size =

cv.getElementsByTagName("size")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('creationtime')[0].hasChildNodes())

fobj.creationtime = cv.getElementsByTagName("creationtime")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('image')[0].hasChildNodes()) fobj.image =

cv.getElementsByTagName("image")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('path')[0].hasChildNodes()) fobj.path =

cv.getElementsByTagName("path")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('permissions')[0].hasChildNodes()) fobj.permissions

= cv.getElementsByTagName("permissions")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('user_id')[0].hasChildNodes()) fobj.user_id =

cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('dirtype')[0].hasChildNodes()) fobj.dirtype =

cv.getElementsByTagName("dirtype")[0].firstChild.nodeValue;

obj.CurrentItems.push(fobj);

}

var str = "";

var width = obj.base.width-250;

var elemperrow = 0;

while(elemperrow*160 <= width) elemperrow++;

str+="<table border='0'>";

var pos = 0;

var file = null;

Page 180: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 180

var txt = null;

var elempercol = 0;

while(elempercol*200 <= WindowHeight-250) elempercol++;

if(obj.CurrentItems.length>elempercol*elemperrow) var size = "small";

else size = "big";

if(size=="small") elemperrow--;

for(var i = 0; i<obj.CurrentItems.length; i++)

{

file = obj.CurrentItems[i];

if(pos==0) str+="<tr>";

pos++;

var imagesrc = "images/filesystem/formats/"+size+"/"+file.image.toLowerCase();

if(file.name.length > 4)

{

if(file.name.substr(file.name.length-4).toLowerCase() == '.vpc')

{

imagesrc =

"programs/filesystem/vpackage_image.php?path="+file.path+"&user_id="+file.user_id+"&size="+siz

e;

}

}

str+= "<td ";

if(size=="big") str+= "align='center'";

else str+= "align='left' width='160'";

str+= "><div id='Window"+obj.base.id+"_FILE"+i+"' class='FS_File' ";

str+= "style='font-size:0.8em; margin:1px;' ";

str+= "title='"+file.name+"'>";

str+="<img id='Window"+obj.base.id+"_FILE"+i+"_image' src='"+imagesrc+"' />";

if(size=="big") str+= "<br />";

else str+= "&nbsp;";

if(file.name.length < 18) txt = file.name;

else txt = file.name.substr(0,15)+"...";

str+= txt;

str+= "</div></td>";

if(pos==elemperrow)

{

str+="</tr>";

pos = 0;

}

}

if(i==0) str = "Das Verzeichnis ist leer oder existiert nicht!";

document.getElementById("Window"+this.base.id+"_LocationInput").onchange =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.ChangeDirectory(this.value, Window.base.id);

};

document.getElementById('Window'+obj.base.id+'_FilesDiv').innerHTML = str;

document.getElementById('Window'+obj.base.id+'_FilesDiv').oncontextmenu =

function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

if(parent.HoverObj == null)

{

var set;

if(window.event)

{

set =

Page 181: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 181

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

var myMenu = new OBJ_CONTEXTMENU(set);

var ok = true;

if(parent.ClipBoardData.length == 0) ok = false;

for(var i = 0; i<parent.ClipBoardData.length; i++)

{

if(parent.ClipBoardData[i].type != 'file' &&

parent.ClipBoardData[i].type != 'dir') ok = false;

}

if(ok)

{

myMenu.add({id:0,text:{de:'Einfügen',

en:'Paste'},iconpath:'images/contextmenu/paste.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;for(var i = 0; i<ClipBoardData.length;

i++){if(parent.ClipBoardType == 'copy'){var url =

'programs/filesystem/copy.php?from='+ClipBoardData[i].path+'&from_user_id='+ClipBoardData[i].u

ser_id+'&to='+Window.CurrentPath+'&to_user_id='+Window.UserId;setRequest(url);}else{var url =

'programs/filesystem/move.php?path='+ClipBoardData[i].path+'&user_id='+ClipBoardData[i].user_i

d+'&new_path='+Window.CurrentPath+ClipBoardData[i].name+'&new_user_id='+Window.UserId;setReque

st(url);}}Window.LoadFiles();Window.LoadTree();ClipBoardData = new Array();myMenu.hide();}});

}

myMenu.add({id:0,text:{de:'Neuer Ordner', en:'New

Folder'},iconpath:'images/contextmenu/newfolder.png',click:function() {var MsgBox = new

OBJ_MESSAGEBOX();MsgBox.returntype = 'TEXTINPUT';MsgBox.returnfunc =

Window.createFolder;MsgBox.show({de:'Ordner anlegen', en:'Create Directory'}, {de:'Geben Sie

einen Ordnernamen an:', en:'Please type in a foldername:'}, Window.base.id);}});

myMenu.show();

}

return false;

};

document.getElementById('Window'+obj.base.id+'_FilesDiv').onmouseup= function()

{

if(parent.MouseIsDown && parent.ClipBoardData.length != 0 && parent.IsDragDrop)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var ok = true;

for(var i = 0; i<parent.ClipBoardData.length; i++)

{

if(parent.ClipBoardData[i].type =='file' ||

parent.ClipBoardData[i].type =='dir')

{

var folder_path = parent.ClipBoardData[i].path;

Page 182: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 182

if(parent.ClipBoardData[i].path.substr(0,

Window.CurrentPath.length)==Window.CurrentPath)

{

if(folder_path.indexOf('/', Window.CurrentPath.length) == -1 &&

folder_path.length < Window.CurrentPath.length) ok = false;

}

}

else ok = false;

}

parent.IsDragDrop = false;

if(Window.DirType == 'Shares' || Window.DirType=='ShareMain') ok = false;

if(ok)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var file = ClipBoardData[0];

var url =

'programs/filesystem/move.php?path='+file.path+'&user_id='+file.user_id+'&new_path='+Window.Cu

rrentPath+file.name+'&new_user_id='+Window.UserId;

setRequest(url);

ClipBoardData = new Array();

}

}

return false;

};

var fobj = null;

for(var j = 0; j<obj.CurrentItems.length; j++)

{

fobj = document.getElementById('Window'+obj.base.id+'_FILE'+j);

fobj.onmouseover = function(e)

{

var item = null;

if(e == null) item = event.srcElement;

else item = e.target;

if(item.id.substr(0,6) == "Window")

{

if(item.id.substr(item.id.length-5) == 'image') item = item.parentNode;

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

if(!parent.MouseIsDown || file.type == 'dir' || file.type=='Share')

{

item.style.background = '#094274';

item.style.color = "#ffffff";

item.style.border = "1px solid #3D94AF";

}

if(!parent.MouseIsDown) parent.HoverObj = file;

}

};

fobj.onmouseout = function(e)

{

var item = null;

if(e == null) item = event.srcElement;

else item = e.target;

if(item.id.substr(item.id.length-5) == 'image') item = item.parentNode;

Page 183: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 183

if(item.id.substr(0,6) == "Window")

{

item.style.background = '';

item.style.color = "#000000";

item.style.border = "1px solid transparent";

if(parent.MouseIsDown && parent.ClipBoardData.length == 0)

{

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

parent.ClipBoardData.push(file);

parent.IsDragDrop = true;

}

else

{

var id = item.id.substr(item.id.indexOf('FILE')+4);

parent.HoverObj = null;

}

}

};

fobj.ondblclick = function(e)

{

var item = null;

if(e == null) item = event.srcElement;

else item = e.target;

if(item.id.substr(item.id.length-5) == 'image') item = item.parentNode;

if(item.id.substr(0,6) == "Window")

{

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

if(file.type == 'dir' || file.type=='ShareMain' || file.type=='Share')

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

if(file.type=='ShareMain')

{

WindowObj.DirType = 'ShareMain';

WindowObj.UserId = file.user_id;

}

if(file.type=='Share')

{

WindowObj.DirType='Share';

WindowObj.UserId = file.user_id;

}

WindowObj.ChangeDirectory(file.path,

item.id.substr(6,item.id.indexOf('_')-6), file.dirtype, file.user_id, file.permissions);

}

if(file.name.length > 3)

{

if(file.name.substr(file.name.length-

3).toLowerCase() == '.js') alert('execute js');

}

if(file.name.length > 4)

{

if(file.name.substr(file.name.length-

4).toLowerCase() == '.htm' || file.name.substr(file.name.length-5).toLowerCase() == '.html')

alert('execute html');

Page 184: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 184

}

}

};

fobj.onmouseup = function(e)

{

parent.IsDragDrop = false;

var ok = false;

if(e == null) if(event.button==1) ok = true;

if(e != null) if(e.button==0) var ok = true;

if(ok)

{

var item = null;

if(e == null) item = event.srcElement;

else item = e.target;

if(item.id.substr(item.id.length-5) == 'image') item = item.parentNode;

if(item.id.substr(0,6) == "Window")

{

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

if((file.type == 'dir' || file.type == 'Share') &&

parent.ClipBoardData.length != 0)

{

for(var i = 0; i<parent.ClipBoardData.length; i++)

{

if(parent.ClipBoardData[i].type == "file" ||

parent.ClipBoardData[i].type == "dir")

{

alert(file.permissions);

if(file.permissions.substr(1,1) != '1')

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.iconpath = 'images/icons/error.png';

MsgBox.show({de:'Fehler', en:'Error'}, {de:'Sie

haben nicht die Berechtigung, in das Verzeichnis zu schreiben', en:"You don't have the

permission to write in this directory!"});

}

else

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var cfile = ClipBoardData[0];

var url =

'programs/filesystem/move.php?path='+cfile.path+'&user_id='+cfile.user_id+'&new_path='+file.pa

th+"/"+cfile.name+'&new_user_id='+file.user_id;

setRequest(url);

Window.LoadFiles();

ClipBoardData = new Array();

}

}

}

}

}

}

};

fobj.oncontextmenu = function(e)

Page 185: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 185

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var item = null;

if(e == null) item = event.srcElement;

else item = e.target;

if(item.id.substr(item.id.length-5) == 'image') item = item.parentNode;

if(item.id.substr(0,6) == "Window")

{

var id = item.id.substr(item.id.indexOf('FILE')+4);

var file = obj.CurrentItems[id];

var set;

if(window.event)

{

set =

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:obj.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:obj.base.zIndex,

targetWindow:Window

};

}

var myMenu = new OBJ_CONTEXTMENU(set);

if(file.type=='dir')

{

myMenu.add({id:0,text:{de:'Öffnen',

en:'Open'},iconpath:'images/contextmenu/open.png',click:function() {alert(file.name);}});

}

if(Window.Permissions == null || Window.Permissions[2] == '1')

{

myMenu.add({id:0,text:{de:'Löschen',

en:'Delete'},iconpath:'images/contextmenu/delete.png', click:function() {var MsgBox = new

OBJ_MESSAGEBOX();var GetWindowObj = getWindowObj(this);var Window =

GetWindowObj.obj;MsgBox.returnfunc = Window.delete;MsgBox.iconpath =

'images/contextmenu/delete.png';MsgBox.returntype = 'YESNO';Window.CurrentObj =

file;MsgBox.show({de:'Löschen', en:'Delete'}, {de:'Wollen Sie die Datei wirklich löschen?',

en:'Do you really want to delete?'}, Window.base.id);myMenu.hide();}});

}

if(file.type=='file')

{

myMenu.add({id:0,text:{de:'Download',

en:'Download'},iconpath:'images/contextmenu/download.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window =

GetWindowObj.obj;window.open('programs/filesystem/download.php?path='+file.path+'&user_id='+Wi

ndow.UserId, '_blank');myMenu.hide();}});

}

myMenu.add({id:0,text:{de:'Kopieren',

en:'Copy'},iconpath:'images/contextmenu/copy.png',click:function() {parent.ClipBoardType =

'copy';parent.ClipBoardData = new Array(1);parent.ClipBoardData[0] = file;myMenu.hide();}});

Page 186: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 186

myMenu.add({id:0,text:{de:'Ausschneiden',

en:'Cut'},iconpath:'images/contextmenu/cut.png', click:function() { parent.ClipBoardType =

'cut'; parent.ClipBoardData = new Array(1); parent.ClipBoardData[0] = file;}});

if(file.type=='dir' && parent.ClipBoardData.length != 0)

{

var ok = true;

for(var i = 0; i<parent.ClipBoardData.length; i++)

{

if(parent.ClipBoardData[i].type == 'file' ||

parent.ClipBoardData[i].type == 'dir')

{

if(parent.ClipBoardData[i].path == file.path) ok = false;

}

else ok = false;

}

if(ok)

{

myMenu.add({id:0,text:{de:'Einfügen',

en:'Paste'},iconpath:'images/contextmenu/paste.png',click:function() {for(var i = 0;

i<ClipBoardData.length; i++){if(parent.ClipBoardType == 'copy'){var url =

'programs/filesystem/copy.php?from='+ClipBoardData[i].path+'&from_user_id='+ClipBoardData[i].u

ser_id+'&to='+file.path+'&to_user_id='+file.user_id;setRequest(url);}}ClipBoardData = new

Array();myMenu.hide();}});

}

}

if(Window.Permissions == null || Window.Permissions[1] == '1')

{

myMenu.add({id:0,text:{de:'Umbenennen',

en:'Rename'},iconpath:'images/contextmenu/rename.png', click:function() {var MsgBox = new

OBJ_MESSAGEBOX();var GetWindowObj = getWindowObj(this);var Window =

GetWindowObj.obj;MsgBox.returnfunc = Window.rename;MsgBox.iconpath =

'images/contextmenu/rename.png';MsgBox.returntype = 'TEXTINPUT';MsgBox.inputtext =

file.name;Window.CurrentObj = file;myMenu.hide();MsgBox.show({de:'Umbenennen', en:'Rename'},

{de:'Geben Sie einen neuen Namen ein:', en:'Insert a new name'}, Window.base.id);}});

}

if(file.type=='dir')

{

myMenu.add({id:0,text:{de:'Sicherheit',

en:'Security'},iconpath:'images/contextmenu/security.png',click:function() {var MsgBox = new

OBJ_MESSAGEBOX();var GetWindowObj = getWindowObj(this);var Window = GetWindowObj.obj;var

SWindow = new OBJ_SECURITYWINDOW();SWindow.Path = file.path;SWindow.ParentWindow =

Window;SWindow.init();myMenu.hide();}});

}

if(file.name.substr(file.name.length-3).toLowerCase()=='.js')

{

myMenu.add({id:0,text:{de:'Ausführen',

en:'Execute'},iconpath:'images/contextmenu/execute.png',click:function() {var MsgBox = new

OBJ_MESSAGEBOX();MsgBox.returntype = 'YESNO';MsgBox.returnfunc = function(msg){if(msg.value ==

'YES'){var url =

'programs/filesystem/get_content.php?path='+file.path+'&user_id='+file.user_id;var str =

getHTML(url);try { eval(str); } catch(e) { var Box = new OBJ_MESSAGEBOX();Box.returntype =

'OK';Box.show({de:'Fehler', en:'Error'}, {de:e, en:e},

Window.base.id); }}};MsgBox.show({de:'Ausführen', en:'Execute'}, {de:'Das Ausführen von

JavaScript-Dateien kann Ihre Daten manipulieren. Wollen Sie wirklich ausführen?',

en:'Executing a JavaScript-File can destroy your data. Do you really want to execute?'},

Window.base.id);myMenu.hide();}});

}

Page 187: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 187

if(file.name.substr(file.name.length-5).toLowerCase()=='.html' ||

file.name.substr(file.name.length-4).toLowerCase()=='.htm')

{

myMenu.add({id:0,text:{de:'Ausführen',

en:'Execute'},iconpath:'images/contextmenu/execute.png',click:function()

{window.open('programs/filesystem/show_html.php?path='+file.path+'&user_id='+file.user_id,

'_blank');myMenu.hide();}});

}

if(file.name.substr(file.name.length-4).toLowerCase()=='.vpc')

{

myMenu.add({id:0,text:{de:'Ausführen',

en:'Execute'},iconpath:'images/contextmenu/execute.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;Window.ExecuteVPC(file);myMenu.hide();}});

}

myMenu.show();

}

return null;

};

}

}

},

createFolder:function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var text = msg.text;

text = text.replace(/ /g, "_");

var err = false;

if(text.indexOf("\\")!=-1) err = true;

if(text.indexOf("/")!=-1) err = true;

if(text.indexOf(":")!=-1) err = true;

if(text.indexOf("?")!=-1) err = true;

if(text.indexOf("*")!=-1) err = true;

if(text.indexOf("<")!=-1) err = true;

if(text.indexOf(">")!=-1) err = true;

if(text.indexOf("|")!=-1) err = true;

if(err == true)

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returnfunc = Window.createFolder;

MsgBox.iconpath = 'images/contextmenu/newfolder.png';

MsgBox.returntype = 'TEXTINPUT';

MsgBox.inputtext = text;

MsgBox.show({de:'Ordner erstellen', en:'CreateFolder'}, {de:'<i style="font-

size:0.8em;">Der Name darf kein Leerzeichen und keines der folgenden Zeichen

enthalten:\\/:?*&gt;&lt;|</i><br />Geben Sie einen neuen Namen ein:', en:'<i style="font-

size:0.8em;">The name may not contain a space or any of the following

letters:\\/:?*&gt;&lt;|</i><br />Insert a new name'}, Window.base.id);

}

else

{

var exists = false;

for(var i = 0; i<Window.CurrentItems; i++)

{

if(Window.CurrentItems[i].name == text) exists = true;

Page 188: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 188

}

if(!exists)

{

setRequest('programs/filesystem/mkdir.php?path='+Window.CurrentPath+text+'&user_id='+Window.Us

erId);

Window.LoadFiles();

}

else

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returnfunc = Window.createFolder;

MsgBox.iconpath = 'images/contextmenu/newfolder.png';

MsgBox.returntype = 'TEXTINPUT';

MsgBox.inputtext = text;

MsgBox.show({de:'Ordner erstellen', en:'CreateFolder'}, {de:'<i

style="font-size:0.8em;">Der Ordner existiert bereits!</i><br />Geben Sie einen neuen Namen

ein:', en:'<i style="font-size:0.8em;">The folder already exists</i><br />Insert a new name'},

Window.base.id);

}

}

}

},

delete:function(msg)

{

if(msg.value == 'YES')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var file = Window.CurrentObj;

var path = file.path;

if(path.substr(path.length-1)=='/') path = path.substr(path.length-1);

setRequest('programs/filesystem/delete.php?path='+path+'&user_id='+file.user_id);

Window.LoadFiles();

Window.LoadTree();

}

},

rename:function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var file = Window.CurrentObj;

setRequest('programs/filesystem/rename.php?path='+file.path+'&old_name='+file.name+'&new_name=

'+msg.text+'&user_id='+Window.UserId);

Window.LoadFiles();

}

},

LoadTree: function()

{

var obj = null;

if(this.type == "OBJ_FILESYSTEMWINDOW") obj = this;

else

Page 189: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 189

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var myXML = getXmlFile('programs/filesystem/get_tree.php?');

var divobj = document.getElementById("Window"+obj.base.id+"_TreeDiv");

var imgsrc = "images/filesystem/tree.png";

var str = "";

var root = myXML.documentElement;

var folders = obj.ReadRecursevelyTree(root, 0, 0);

str += folders.string;

str += "</div>";

divobj.innerHTML = str;

for(var i = 0; i<folders.count; i++)

{

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('TreeItem')+8));

Window.DirType = Window.TreeFolders[id].type;

Window.UserId = Window.TreeFolders[id].user_id;

Window.Permissions = Window.TreeFolders[id].permissions;

Window.ChangeDirectory(Window.TreeFolders[id].path, Window.base.id,

Window.TreeFolders[id].type);

if(document.getElementById(this.id+'_List'))

{

var subobj = document.getElementById(this.id+'_List');

if(subobj.style.display == 'none') subobj.style.display = 'inline';

else subobj.style.display = 'none';

}

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseover =

function()

{

this.style.background = 'url(images/filesystem/tree_over.png)';

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseout =

function()

{

this.style.background = '';

};

}

}

},

ReadRecursevelyTree: function(node, pl,count)

{

var path = "";

var str = "";

var subfolders = null;

if(node.hasChildNodes())

{

for(var i = 0; i < node.childNodes.length; i++)

{

Page 190: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 190

this.TreeFolders.push({id:count,name:node.childNodes[i].attributes[0].value,path:node.childNod

es[i].attributes[1].value,user_id:node.childNodes[i].attributes[2].value,type:node.childNodes[

i].attributes[3].value,permissions:node.childNodes[i].attributes[4].value });

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"' style='padding-

left:"+pl*20+"px;'>";

str+= "<img src='images/filesystem/"+node.childNodes[i].attributes[5].value+"'

/>&nbsp;";

str+= node.childNodes[i].attributes[0].value+"</div>";

if(node.childNodes[i].hasChildNodes())

{

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"_List'

style='display:none'>";

count++;

subfolders = this.ReadRecursevelyTree(node.childNodes[i], pl+1,count);

str+= subfolders.string;

count = subfolders.count;

str+= "</div>";

}

else count++;

}

}

return { string:str, count:count };

},

ChangeDirectory: function(path, id, type, user_id, permissions)

{

if(path.indexOf('../')!=-1) path = path.replace(/..\/ /g, '');

if(path.substr(path.length-1) != "/") path+= "/";

document.getElementById("Window"+this.base.id+"_LocationInput").value = path;

var Window = null;

if(path.substr(path.length-1) != "/") path+= "/";

for(var i = 0; i<Windows.length; i++) if(Windows[i].base.id == id) Window = Windows[i];

if(Window != null)

{

Window.CurrentPath = path;

if(type != null) Window.DirType = type;

if(user_id != null) Window.DirType = type;

Window.LoadFiles();

if(permissions != null)Window.Permissions = permissions;

}

var uploaddiv = document.getElementById('Window'+Window.base.id+'_uploadframe');

var url =

"programs/filesystem/upload.php?loc="+Window.CurrentPath+"&user_id="+Window.UserId;

window.open(url, 'Window'+Window.base.id+'_uploadframe');

if(Window.Permissions != null)

{

if(Window.Permissions.substr(1,1) == '1') uploaddiv.style.visibility = 'visible';

else uploaddiv.style.visibility = 'hidden';

}

else uploaddiv.style.visibility = 'visible';

},

LoadFreeSpace:function()

{

},

onmouseup:function()

{

Page 191: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 191

},

ondropitem:function()

{

},

oncontextmenu: function()

{

},

ChangeUpwards:function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var path = Window.CurrentPath;

path = path.substr(0, path.length-1);

var i = 0;

while(path.indexOf('/', i) != -1) i++;

path = path.substr(0,i);

if(path.length == 0) path += '/';

if(Window.DirType == 'Share')

{

path = '/';

Window.DirType = 'ShareMain';

}

Window.ChangeDirectory(path, Window.base.id);

},

ExecuteVPC: function(file)

{

var Window = this;

var url =

'programs/filesystem/get_vpc_content.php?path='+file.path+'&user_id='+file.user_id;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var files = new Array();

var code = '';

var values = myXML.getElementsByTagName("script");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

fobj = new Object();

fobj.id = i;

if(cv.getElementsByTagName('code')[0].hasChildNodes()) code+=

cv.getElementsByTagName("code")[0].childNodes[0].nodeValue+"\n";

}

try

{

eval(code);

}

catch(e)

{

var Box = new OBJ_MESSAGEBOX();

Box.returntype = 'OK';

Box.show({de:'Fehler', en:'Error'}, {de:e, en:e}, Window.base.id);

}

},

CurrentPath: '/',

CurrentObj: null,

TreeFolders: new Array(),

DirType: 'Personal',

Page 192: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 192

UserId: 0,

Shares: new Array(),

CurrentItems: new Array(),

base: null

};

OBJ_MESSAGEBOX.js

function OBJ_MESSAGEBOX()

{

this.obj = document.getElementById('TaskBar');

}

OBJ_MESSAGEBOX.prototype =

{

type: "OBJ_MESSAGEBOX",

show:function(title, text, id)

{

HideDiv.style.visibility = 'visible';

TaskBar.overlay();

this.base = new OBJ_BASEWINDOW();

this.base.title = title;

this.base.iconpath = this.iconpath;

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.minimizeable = false;

this.base.width = this.width;

this.base.height = 200;

this.base.zIndex = 4000;

this.base.init();

this.id = this.base.id;

this.id = 'Window'+id+'_MsgBox';

Windows.push(this);

var str = "";

str+= "<div style='text-align:center; width:"+this.base.width+"px; overflow:auto;'><br

/>";

str+= text[language]+"<br />";

if(this.additional_html != null) str+= this.additional_html[language];

str+= "<br />";

switch(this.returntype)

{

case 'OK':str+= "<button id='Window"+this.base.id+"_OKButton'>OK</button>";

break;

case 'YESNO':var yes_text =

{

de:'Ja',

en:'Yes'

};

var no_text =

{

de:'Nein',

en:'No'

};

str+= "<button

id='Window"+this.base.id+"_YesButton'>"+yes_text[language]+"</button>";

str+= "&nbsp;";

str+= "<button

id='Window"+this.base.id+"_NoButton'>"+no_text[language]+"</button>";

break;

case 'YESNOCANCEL':var yes_text =

Page 193: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 193

{

de:'Ja',

en:'Yes'

};

var no_text =

{

de:'Nein',

en:'No'

};

var cancel_text =

{

de:'Abbrechen',

en:'Cancel'

};

str+= "<button

id='Window"+this.base.id+"_YesButton'>"+yes_text[language]+"</button>";

str+= "&nbsp;";

str+= "<button

id='Window"+this.base.id+"_NoButton'>"+no_text[language]+"</button>";

str+= "&nbsp;";

str+= "<button

id='Window"+this.base.id+"_CancelButton'>"+cancel_text[language]+"</button>";

break;

case 'TEXTINPUT':str+= "<input id='Window"+this.base.id+"_TextInput'

value='"+this.inputtext+"' />";

str+= "<br />";

str+= "<button id='Window"+this.base.id+"_OKButton'>OK</button>";

break;

case 'PASSWORD':str+= "<input id='Window"+this.base.id+"_TextInput' type='password'

value='"+this.inputtext+"' />";

str+= "<br />";

str+= "<button id='Window"+this.base.id+"_OKButton'>OK</button>";

break;

}

str+= "</div>";

this.base.content_obj.innerHTML = str;

if(document.getElementById("Window"+this.base.id+"_OKButton"))

{

document.getElementById("Window"+this.base.id+"_OKButton").onclick = this.ok;

}

if(document.getElementById("Window"+this.base.id+"_CancelButton"))

{

document.getElementById("Window"+this.base.id+"_CancelButton").onclick =

this.close;

}

if(document.getElementById("Window"+this.base.id+"_YesButton"))

{

document.getElementById("Window"+this.base.id+"_YesButton").onclick = this.yes;

}

if(document.getElementById("Window"+this.base.id+"_NoButton"))

{

document.getElementById("Window"+this.base.id+"_NoButton").onclick = this.no;

}

},

close: function()

{

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(this.returnfunc != null)

Page 194: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 194

{

this.returnfunc({id:'Response'+this.id,type: 'OBJ_MESSAGEBOXRETURN',value:

'CANCEL',text: ''});

}

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

ok:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

var text = '';

if(document.getElementById("Window"+WindowObj.base.id+"_TextInput")) text =

document.getElementById("Window"+WindowObj.base.id+"_TextInput").value;

WindowObj.returnfunc({id:'Response'+WindowObj.id,type:

'OBJ_MESSAGEBOXRETURN',value: 'OK',text: text});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

yes:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({id:'Response'+WindowObj.id,type:

'OBJ_MESSAGEBOXRETURN',value: 'YES',text: ''});

}

},

no:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({id:'Response'+WindowObj.id,type:

'OBJ_MESSAGEBOXRETURN',value: 'NO',text: ''});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

Page 195: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 195

MainDiv.removeChild(WindowObj.base.obj);

},

cancel:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({id:'Response'+WindowObj.id,type:

'OBJ_MESSAGEBOXRETURN',value: 'YES',text: ''});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

id: null,

base: null,

width: 300,

returntype: "OK",

returnfunc:null,

additional_html:null,

iconpath: "images/icons/default.png",

inputtext: ''

};

function OBJ_TASKBARITEM()

{

}

OBJ_TASKBARITEM.prototype =

{

type: "OBJ_TASKBARITEM",

id: null,

obj: null,

iconpath: 'images/icons/default.png',

text:

{

de:'Programm',

en:'Program'

}

};

Page 196: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 196

OBJ_MESSAGEWINDOW.js

function OBJ_MESSAGEWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_MESSAGEWINDOW.prototype =

{

type: "OBJ_MESSAGEWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Neue Nachricht',

en:'New Message'

};

if(this.New)

{

this.To = new Array();

}

this.base.iconpath = 'images/logos/messages.png';

this.base.resizeable = true;

this.base.maximizeable = false;

this.base.width = 700;

this.base.height = 500;

this.base.bgcolor = '#111111';

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

this.base.bringToFront();

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SendDiv' class='SettingsMenuItemDiv'>";

var text_send =

{

en:'Send',

de:'Senden'

};

str+= text_send[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_MessageDiv' class='Message_MessageDiv'

style='width:"+this.base.width+"'>";

var to_text =

{

de:'An',

en:'To'

};

str+= "<div id='Window"+this.base.id+"_ToButton'

class='Message_MessageButton'>"+to_text[language]+"</div>&nbsp;";

str+= "<input id='Window"+this.base.id+"_ToInput' type='text' size='60' value='";

for(var i = 0; i<this.To.length; i++) str+= this.To[i]+";";

str+= "' /><br />";

var subject_text =

{

de:'Betreff',

en:'Subject'

};

str+= "<div class='Message_MessageNoButton'>"+subject_text[language]+"</div>&nbsp;";

str+= "<input id='Window"+this.base.id+"_SubjectInput' maxlength='255' type='text'

size='60' value='";

str+= this.Subject;

Page 197: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 197

str+= "' /><br />";

str+= "<div style='height:1px; width:70%; border-bottom:1px solid #ffffff;

margin:2px;'></div>";

var attachments_text =

{

de:'Anlagen',

en:'Attachments'

};

str+= "<div id='Window"+this.base.id+"_AttachmentButton'

class='Message_MessageButton'>"+attachments_text[language]+"</div>&nbsp;";

str+= "<div id='Window"+this.base.id+"_AttachmentDiv'

style='float:left;color:#eeeeee;margin-bottom:5px;width:80%;height:58px;'></div>";

str+= "<div style='height:1px; width:70%; border-bottom:1px solid #ffffff;

margin:2px;margin-top:30px;'></div>";

var text_text =

{

de:'Text',

en:'Text'

};

str+= "<div class='Message_MessageNoButton'

style='float:none;'>"+text_text[language]+"</div><br />";

str+= "<textarea id='Window"+this.base.id+"_TextInput' cols='65' rows='8' style='font-

size:0.9em;'></textarea>";

str+= "</div><br />";

str+= "<div id='Window"+this.base.id+"_SmallWindow'

class='Messages_SmallWindow'>asdfasdfasdf</div>";

this.base.content_obj.innerHTML = str;

this.SmallWindow = document.getElementById('Window'+this.base.id+'_SmallWindow');

document.getElementById('Window'+this.base.id+'_SendDiv').onmouseover = function()

{

this.style.background = 'url(images/messages/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SendDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SendDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.Send();

};

document.getElementById('Window'+this.base.id+'_ToButton').onmouseover = function()

{

this.style.background = 'url(images/messages/button_small.png)';

};

document.getElementById('Window'+this.base.id+'_ToButton').onmouseout = function()

{

this.style.background = '#dddddd';

};

document.getElementById('Window'+this.base.id+'_ToButton').onclick = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.AddTo(e);

};

document.getElementById('Window'+this.base.id+'_AttachmentButton').onmouseover =

function()

{

Page 198: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 198

this.style.background = 'url(images/messages/button_small.png)';

};

document.getElementById('Window'+this.base.id+'_AttachmentButton').onmouseout =

function()

{

this.style.background = '#dddddd';

};

document.getElementById('Window'+this.base.id+'_AttachmentButton').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.AddAttachment();

};

},

LoadMessage: function()

{

var url = 'programs/calendar/get_entry.php?id='+this.EntryId+'&user_id='+this.UserId;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var cv = myXML.getElementsByTagName("entry")[0];

if(cv.getElementsByTagName('user_id')[0].hasChildNodes())this.UserId =

cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('startdatetime')[0].hasChildNodes())var startdatetime =

cv.getElementsByTagName("startdatetime")[0].firstChild.nodeValue;

this.start = new Date(parseFloat(startdatetime.substr(0,4)),

parseFloat(startdatetime.substr(5,2)), parseFloat(startdatetime.substr(8,2)),

parseFloat(startdatetime.substr(11, 2)), parseFloat(startdatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('enddatetime')[0].hasChildNodes())var enddatetime =

cv.getElementsByTagName("enddatetime")[0].firstChild.nodeValue;

this.end = new Date(parseFloat(enddatetime.substr(0,4)),

parseFloat(enddatetime.substr(5,2)), parseFloat(enddatetime.substr(8,2)),

parseFloat(enddatetime.substr(11, 2)), parseFloat(enddatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('remind')[0].hasChildNodes())if(cv.getElementsByTagName("remind")[0

].firstChild.nodeValue == 'true') this.remind_bool = true;

else this.remind_bool = false;

if(cv.getElementsByTagName('reminddatetime')[0].hasChildNodes())var reminddatetime =

cv.getElementsByTagName("reminddatetime")[0].firstChild.nodeValue;

this.remind = new Date(parseFloat(reminddatetime.substr(0,4)),

parseFloat(reminddatetime.substr(5,2)), parseFloat(reminddatetime.substr(8,2)),

parseFloat(reminddatetime.substr(11, 2)), parseFloat(reminddatetime.substr(14,2)), 0);

if(cv.getElementsByTagName('title')[0].hasChildNodes())this.title =

cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('text')[0].hasChildNodes())this.text =

cv.getElementsByTagName("text")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color_id')[0].hasChildNodes())this.color_id =

cv.getElementsByTagName("color_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('recurring_bool')[0].hasChildNodes())if(cv.getElementsByTagName("re

curring_bool")[0].firstChild.nodeValue == 'true') this.recurring_bool = true;

else this.recurring_bool = false;

if(cv.getElementsByTagName('recurring_intervall')[0].hasChildNodes())this.recurring_intervall

= parseFloat(cv.getElementsByTagName("recurring_intervall")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('recurring_class')[0].hasChildNodes())this.recurring_class =

parseFloat(cv.getElementsByTagName("recurring_class")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('color')[0].hasChildNodes())this.category_name =

cv.getElementsByTagName("color")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('color_id')[0].hasChildNodes())this.category_id =

parseFloat(cv.getElementsByTagName("color_id")[0].firstChild.nodeValue);

Page 199: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 199

if(cv.getElementsByTagName('permission')[0].hasChildNodes())this.permission =

cv.getElementsByTagName("permission")[0].firstChild.nodeValue;

},

AddAttachment: function()

{

var obj = new OBJ_OPENFILEWINDOW();

obj.filter = new Array();

obj.filter_description = 'All Files';

obj.returnfunc = this.AddAttachment2;

obj.ParentWindow = this;

obj.init();

},

AddAttachment2: function(msg)

{

if(msg.value == "OK")

{

var str = "";

var attach = new Object();

attach.id = this.ParentWindow.Attachments.length;

attach.path = msg.path;

attach.user_id = msg.user_id;

attach.filename = msg.filename;

var ext = attach.filename.substr(attach.filename.lastIndexOf(".")+1);

var url = "programs/messages/valid_image.php?ext="+ext;

var image = "images/filesystem/formats/small/";

if(getHTML(url) == 'true') image += ext+".png";

else image += "unbekannt.png";

str+= "<div id='Window"+this.ParentWindow.base.id+"_Attachment"+attach.id+"'

style='float:left;font-size:.8em;'>";

str+= "<img src='"+image+"' style='valign:middle' />&nbsp;";

str+= attach.filename;

str+= "</div>";

document.getElementById("Window"+this.ParentWindow.base.id+"_AttachmentDiv").innerHTML += str;

document.getElementById("Window"+this.ParentWindow.base.id+"_Attachment"+attach.id).oncontextm

enu = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf("_Attachment")+11));

var attach = Window.Attachments[id];

var set;

if(window.event)

{

set =

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

Page 200: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 200

}

var myMenu = new OBJ_CONTEXTMENU(set);

myMenu.add({id:0,text:{de:'Entfernen',

en:'Remove'},iconpath:'images/contextmenu/delete.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;var div =

document.getElementById("Window"+Window.base.id+"_Attachment"+id);document.getElementById("Win

dow"+Window.base.id+"_AttachmentDiv").removeChild(div);Window.Attachments.splice(attach.id,

1);myMenu.hide();}});

myMenu.show();

};

this.ParentWindow.Attachments.push(attach);

}

},

AddTo: function(e)

{

var Window = null;

if(this.type == "OBJ_MESSAGEWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

if(Window.SmallWindow.style.display == 'none')

{

var str = "";

str+= "<div class='Menu_Bar' style='width:275; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv'

class='Contacts_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value=''";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ContactsDiv'

class='Contacts_ContactsDiv' style='width:280;height:240;text-align:left;'>";

var loading_text =

{

de:'Kontakte werden geladen...',

en:'Loading Contacts...'

};

str+= loading_text[language];

str+= "</div><br />";

Window.SmallWindow.innerHTML = str;

document.getElementById("Window"+Window.base.id+"_SearchInput").onkeyup =

function()

{

var GetWindowObj = getWindowObj(this);

Window = GetWindowObj.obj;

Window.SearchContact(this.value);

};

var x = 0;

Page 201: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 201

var y = 0;

if(e != null)

{

x = e.screenX-Window.base.left;

y = e.screenY-Window.base.top;

}

else

{

x = window.event.clientX-Window.base.left;

y = window.event.clientY-Window.base.top;

}

Window.SmallWindow.zIndex = Window.base.zIndex+1;

Window.SmallWindow.style.top = y-100;

Window.SmallWindow.style.left = x;

Window.SmallWindow.style.display = 'inline';

Window.LoadContacts();

}

else Window.SmallWindow.style.display = 'none';

}

},

LoadContacts:function()

{

var Window = null;

if(this.type == "OBJ_MESSAGEWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = 'programs/messages/get_contacts.php';

var myXML = getXmlFile(url);

Window.Contacts = new Array();

var root = myXML.documentElement;

var contacts = new Array();

var values = myXML.getElementsByTagName("contact");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

Window.Contacts.push(cv.firstChild.nodeValue);

}

Window.SearchedContacts = Window.Contacts;

Window.DrawContacts();

}

},

DrawContacts:function()

{

var Window = null;

if(this.type == "OBJ_MESSAGEWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

Page 202: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 202

if(Window != null)

{

var str = "<table border='0' class='Contacts_Table'>";

for(var i = 0; i<Window.SearchedContacts.length; i++)

{

var pobj = Window.SearchedContacts[i];

str+= " <tr id='Window"+Window.base.id+"_ContactRow"+i+"'

onmouseover='this.style.background="+'"url(images/contacts/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Contacts_Row'>";

str+= pobj;

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_ContactsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedContacts.length; i++)

{

document.getElementById('Window'+Window.base.id+'_ContactRow'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ContactRow')+11));

var contact = Window.SearchedContacts[id];

Window.To.push(contact);

var obj = document.getElementById("Window"+Window.base.id+"_ToInput");

if(obj.value.indexOf(contact+";") != -1) obj.value =

obj.value.substr(0,

obj.value.indexOf(contact+";"))+obj.value.substr(obj.value.indexOf(contact+";")+contact.length

+1);

else obj.value+= contact+";";

}

};

}

}

},

SearchContact: function(SearchString)

{

this.SearchedContacts = new Array();

var string = SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.Contacts.length; i++)

{

obj = this.Contacts[i];

if(obj.toLowerCase() == string.toLowerCase()) this.SearchedContacts.push(obj);

else

{

added = false;

if(obj.length > string.length)

{

start = 0;

while((start+string.length) <= obj.length)

{

Page 203: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 203

if(obj.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

{

this.SearchedContacts.push(obj);

added = true;

}

}

start++;

}

}

}

}

if(string.length == 0) this.SearchedContacts = this.Contacts;

this.DrawContacts();

},

Send: function()

{

var Window = null;

if(this.type == "OBJ_MESSAGEWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var ToString = document.getElementById("Window"+Window.base.id+"_ToInput").value;

if(ToString.indexOf(";") != -1) Window.To = ToString.split(";");

else

{

Window.To = new Array();

if(ToString.length != 0) Window.To.push(ToString);

}

var valid = true;

var url,

is_vpc;

for(var i = 0; i<Window.To.length; i++)

{

if(Window.To[i].length != 0)

{

if(Window.To[i].indexOf("@") == -1) is_vpc = true;

else is_vpc = false;

url = 'programs/messages/proof_to.php?vpc='+is_vpc+'&text='+Window.To[i];

if(getHTML(url) == 'false') valid = false;

}

}

if(Window.To.length == 0) valid = false;

if(!valid)

{

var enter_valid_address_text =

{

Page 204: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 204

de:'Bitte geben Sie eine gültige Emailadresse oder einen gültigen

VirtualPC-Kontakt an!',

en:'Please specify a valid email adress or a valid VirtualPC-Contact'

};

var MyBox = new OBJ_MESSAGEBOX();

MyBox.returntype = 'OK';

MyBox.show({de:'Hinweis', en:'Notice'}, {de:enter_valid_address_text.de,

en:enter_valid_address_text.en}, Window.base.id);

}

else

{

var url = "";

for(var i = 0; i<Window.To.length; i++)

{

url = "programs/messages/send_message.php?To="+Window.To[i];

url+=

"&Text="+document.getElementById("Window"+Window.base.id+"_TextInput").value;

url+=

"&Subject="+document.getElementById("Window"+Window.base.id+"_SubjectInput").value;

if(Window.To[i].indexOf("@") == -1) url+= "&type=vpc";

else url+="&type=email";

for(var j = 0; j<this.Attachments.length; j++)

{

url+= "&Attachment"+j+"_Path="+this.Attachments[j].path;

url+= "&Attachment"+j+"_UserId="+this.Attachments[j].user_id;

}

//alert(url);

setRequest(url);

Window.base.close(Window.base.id);

}

}

}

},

MessageID: 0,

Subject: '',

To: new Array(),

Text: '',

Attachments: new Array(),

Contacts: new Array(),

SearchedContacts: new Array(),

SmallWindow: null,

ParentWindow: null,

New: false

};

Page 205: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 205

OBJ_MESSAGINGWINDOW.js

function OBJ_MESSAGINGWINDOW()

{

}

OBJ_MESSAGINGWINDOW.prototype =

{

type: "OBJ_MESSAGINGWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Nachrichten',

en:'Messages'

};

this.base.iconpath = 'images/logos/messages.png';

this.base.resizeable = true;

this.base.maximizeable = true;

this.base.multiopen = false;

this.base.bgcolor = '#dddddd';

this.base.init();

this.base.subwindows = new Array();

this.menu_items = [

{

en:'Inbox',

de:'Posteingang'

},

{

en:'Archive',

de:'Archiv'

},

{

en:'Deleted',

de:'Gelöscht'

},

{

en:'Send',

de:'Gesendet'

},

];

this.settings = null;

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_MenuBar' class='Menu_Bar'

style='width:"+(this.base.width-5)+"; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Contacts_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= " <div id='Window"+this.base.id+"_NewMessageDiv' class='SettingsMenuItemDiv'>";

var text_new_message =

{

en:'New Message',

Page 206: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 206

de:'Neue Nachricht'

};

str+= text_new_message[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_LeftMenuDiv' class='Messages_LeftMenuDiv'>";

for(var i = 0; i<this.menu_items.length; i++)

{

str+= "<div id='Window"+this.base.id+"_LeftMenuItem"+this.menu_items[i]['en']+"'

class='Settings_LeftMenuItemDiv'>";

str+= this.menu_items[i][language];

str+= "</div>";

}

str+= "</div>";

var loading_text =

{

de:'Lade Nachrichten...',

en:'Loading Messages...'

};

str+= "<div id='Window"+this.base.id+"_CenterDiv' class='Messages_CenterDiv'

style='height:"+(this.base.height-200)+";'>"+loading_text[language]+"</div>";

str+= "<div id='Window"+this.base.id+"_MessageDiv' class='Messages_MessageDiv'

style='height:"+(this.base.height-200)+";width:"+(this.base.width-453)+";'>";

var loading_text =

{

de:'Lade Nachricht...',

en:'Loading Message...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_NewMessageDiv').onmouseover =

function()

{

this.style.background = 'url(images/messages/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_NewMessageDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_NewMessageDiv').onclick = function()

{

var obj = new OBJ_MESSAGEWINDOW();

obj.New = true;

obj.init();

};

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.SearchString = this.value;

Window.SearchItem();

};

for(var i = 0; i<this.menu_items.length; i++)

{

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+this.menu_items[i]['en']).onclic

k = function()

{

var GetWindowObj = getWindowObj(this);

Page 207: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 207

var Window = GetWindowObj.obj;

var type = this.id.substr(this.id.indexOf("_LeftMenuItem")+13);

Window.CurrentFolder = type.toUpperCase();

Window.LoadMessages();

};

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+this.menu_items[i]['en']).onmous

eover = function()

{

this.style.background = 'url(images/messages/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+this.menu_items[i]['en']).onmous

eout = function()

{

this.style.background = '';

};

}

this.LoadMessages();

},

LoadMessages: function()

{

var Window = null;

if(this.type == "OBJ_MESSAGINGWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = null;

switch(Window.CurrentFolder)

{

case 'INBOX':url = 'programs/messages/get_messages.php';

break;

case 'ARCHIVE':url = 'programs/messages/get_archived.php';

break;

case 'DELETED':url = 'programs/messages/get_deleted.php';

break;

case 'SEND':url = 'programs/messages/get_send.php';

break;

}

if(url != null)

{

var myXML = getXmlFile(url);

var root = myXML.documentElement;

Window.Messages = new Array();

var Message,

Attachment,

attach_nodes,

attachs_node,

attach_node;

var values = myXML.getElementsByTagName("message");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

Message = new Object();

Page 208: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 208

Message.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())Message.dbid =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('forename')[0].hasChildNodes())Message.forename

= cv.getElementsByTagName("forename")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('surname')[0].hasChildNodes())Message.surname =

cv.getElementsByTagName("surname")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('from_available')[0].hasChildNodes())Message.from_available =

cv.getElementsByTagName("from_available")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('title')[0].hasChildNodes())Message.title =

cv.getElementsByTagName("title")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('read')[0].hasChildNodes())Message.read =

cv.getElementsByTagName("read")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('datetime')[0].hasChildNodes())Message.datetime

= cv.getElementsByTagName("datetime")[0].firstChild.nodeValue;

Message.Attachments = new Array();

Window.Messages.push(Message);

}

Window.DrawMessages();

}

}

},

DrawMessages: function()

{

var str = "";

var msg = null;

var img = '';

for(var i = 0; i<this.Messages.length; i++)

{

msg = this.Messages[i];

str+= "<div id='Window"+this.base.id+"_MessageItem"+msg.dbid+"'

class='Messages_MessageItemDiv'>";

if(msg.read == 'false') img = 'new.png';

else img = 'read.png';

str+= "<table border='0' style='font-size:1em;width:100%;'><tr><td>";

str+= "<td><img id='Window"+this.base.id+"_MessageImage"+msg.dbid+"'

src='images/messages/messages/"+img+"' /></td>";

str+= "<font style='color:#555555;'>"+msg.forename+" "+msg.surname+"</font><br />";

str+= msg.title;

str+= "</td>";

str+= "<td align='right'>";

str+=

msg.datetime.substr(8,2)+"."+msg.datetime.substr(5,2)+"."+msg.datetime.substr(2,2);

str+= "<br />"+msg.datetime.substr(11,5);

str+= "</td>";

str+= "</tr></table>";

str+= "</div>";

}

var no_messages_text =

{

de:'Keine Nachrichten',

en:'No Messages'

};

if(this.Messages.length == 0) str = no_messages_text[language];

document.getElementById("Window"+this.base.id+"_CenterDiv").innerHTML = str;

if(this.Messages.length != 0) this.LoadMessage(this.Messages[0].dbid);

for(var i = 0; i<this.Messages.length; i++)

{

Page 209: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 209

document.getElementById("Window"+this.base.id+"_MessageItem"+this.Messages[i].dbid).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf("_MessageItem")+12));

Window.LoadMessage(id);

};

document.getElementById("Window"+this.base.id+"_MessageItem"+this.Messages[i].dbid).oncontextm

enu = function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf("_MessageItem")+12));

var Message;

for(var i = 0; i<Window.Messages.length; i++) if(id == Window.Messages[i].dbid)

Message = Window.Messages[i];

var set;

if(window.event)

{

set =

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

var myMenu = new OBJ_CONTEXTMENU(set);

myMenu.add({id:0,text:{de:'Ungelesen markieren', en:'Mark as

unread'},iconpath:'images/contextmenu/paste.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.add({id:0,text:{de:'Antworten',

en:'Answer'},iconpath:'images/messages/buttons/answer.png',click:function() {var GetWindowObj

= getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.add({id:0,text:{de:'Löschen',

en:'Delete'},iconpath:'images/contextmenu/delete.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.add({id:0,text:{de:'Weiterleiten',

en:'Forward'},iconpath:'images/messages/buttons/forward.png',click:function() {var

GetWindowObj = getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.add({id:0,text:{de:'Ins Archiv verschieben', en:'Move to

Archive'},iconpath:'images/messages/buttons/move_to_archive.png',click:function() {var

GetWindowObj = getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.add({id:0,text:{de:'Exportieren',

en:'Export'},iconpath:'images/messages/buttons/export.png',click:function() {var GetWindowObj

= getWindowObj(this);var Window = GetWindowObj.obj;myMenu.hide();}});

myMenu.show();

};

Page 210: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 210

}

},

LoadMessage: function(id)

{

var Window = null;

if(this.type == "OBJ_MESSAGINGWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

for(var i = 0; i<Window.Messages.length; i++)

{

if(Window.Messages[i].dbid == id)

{

Window.Messages[i].read = 'true';

document.getElementById("Window"+Window.base.id+"_MessageImage"+Window.Messages[i].dbid).src =

'images/messages/messages/read.png';

}

else

document.getElementById("Window"+Window.base.id+"_MessageItem"+Window.Messages[i].dbid).style.

background = '';

}

var url = 'programs/messages/get_message.php?id='+id;

var myXML = getXmlFile(url);

var root = myXML.documentElement;

var Message,

Attachment,

attach_nodes,

attachs_node,

attach_node;

Message = new Object();

Message.id = id;

if(root.getElementsByTagName('id')[0].hasChildNodes())Message.dbid =

root.getElementsByTagName("id")[0].firstChild.nodeValue;

if(root.getElementsByTagName('title')[0].hasChildNodes())Message.title =

root.getElementsByTagName("title")[0].firstChild.nodeValue;

if(root.getElementsByTagName('from_id')[0].hasChildNodes())Message.from_id =

root.getElementsByTagName("from_id")[0].firstChild.nodeValue;

if(root.getElementsByTagName('from_forename')[0].hasChildNodes())Message.from_forename =

root.getElementsByTagName("from_forename")[0].firstChild.nodeValue;

if(root.getElementsByTagName('from_surname')[0].hasChildNodes())Message.from_surname =

root.getElementsByTagName("from_surname")[0].firstChild.nodeValue;

if(root.getElementsByTagName('deleted')[0].hasChildNodes())Message.deleted =

root.getElementsByTagName("deleted")[0].firstChild.nodeValue;

if(root.getElementsByTagName('archived')[0].hasChildNodes())Message.archived =

root.getElementsByTagName("archived")[0].firstChild.nodeValue;

if(root.getElementsByTagName('to_forename')[0].hasChildNodes())Message.to_forename

= root.getElementsByTagName("to_forename")[0].firstChild.nodeValue;

if(root.getElementsByTagName('to_surname')[0].hasChildNodes())Message.to_surname =

root.getElementsByTagName("to_surname")[0].firstChild.nodeValue;

if(root.getElementsByTagName('title')[0].hasChildNodes())Message.title =

root.getElementsByTagName("title")[0].firstChild.nodeValue;

if(root.getElementsByTagName('text')[0].hasChildNodes())Message.text =

root.getElementsByTagName("text")[0].firstChild.nodeValue;

Page 211: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 211

if(root.getElementsByTagName('datetime')[0].hasChildNodes())Message.datetime =

root.getElementsByTagName("datetime")[0].firstChild.nodeValue;

Message.Attachments = new Array();

if(root.getElementsByTagName('attachments')[0].hasChildNodes())attachs_node =

root.getElementsByTagName("attachments")[0];

attach_nodes = attachs_node.getElementsByTagName("attachment");

for(var j = 0; j<attach_nodes.length; j++)

{

var attach_node = attach_nodes[j];

Attachment = new Object();

Attachment.id = j;

if(attach_node.getElementsByTagName('id')[0].hasChildNodes())Attachment.dbid =

attach_node.getElementsByTagName("id")[0].firstChild.nodeValue;

if(attach_node.getElementsByTagName('name')[0].hasChildNodes())Attachment.name

= attach_node.getElementsByTagName("name")[0].firstChild.nodeValue;

if(attach_node.getElementsByTagName('size')[0].hasChildNodes())Attachment.size

= attach_node.getElementsByTagName("size")[0].firstChild.nodeValue;

if(attach_node.getElementsByTagName('image')[0].hasChildNodes())Attachment.image =

attach_node.getElementsByTagName("image")[0].firstChild.nodeValue;

Message.Attachments.push(Attachment);

}

var str = "";

var from_text =

{

de:'Von',

en:'From'

};

var to_text =

{

de:'An',

en:'To'

};

var send_text =

{

de:'Gesendet',

en:'Send'

};

str+= "<div class='Messages_MessageHeader'>";

str+= "<table border='0'><tr>";

if(Message.from_id != parent.UserId)

{

var answer_text =

{

de:'Antworten',

en:'Answer'

};

str+= "<td id='Window"+Window.base.id+"_AnswerTD'

class='Messages_MessageHeaderButton'><img src='images/messages/buttons/answer.png'

style='vertical-align:middle;' />&nbsp;"+answer_text[language]+"</td>";

}

if(Message.deleted == 'false')

{

var delete_text =

{

de:'Löschen',

en:'Delete'

};

str+= "<td id='Window"+Window.base.id+"_DeleteTD'

class='Messages_MessageHeaderButton'><img src='images/contextmenu/delete.png' style='vertical-

align:middle;' />&nbsp;"+delete_text[language]+"</td>";

}

Page 212: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 212

var forward_text =

{

de:'Weiterleiten',

en:'Forward'

};

str+= "<td id='Window"+Window.base.id+"_ForwardTD'

class='Messages_MessageHeaderButton'><img src='images/messages/buttons/forward.png'

style='vertical-align:middle;' />&nbsp;"+forward_text[language]+"</td>";

if(Message.archived == 'false')

{

var move_to_archive_text =

{

de:'Ins Archiv verschieben',

en:'Move to archive'

};

str+= "<td id='Window"+Window.base.id+"_MoveToArchiveTD'

class='Messages_MessageHeaderButton'><img src='images/messages/buttons/move_to_archive.png'

style='vertical-align:middle;' />&nbsp;"+move_to_archive_text[language]+"</td>";

}

var export_text =

{

de:'Exportieren',

en:'Export'

};

str+= "<td id='Window"+Window.base.id+"_ExportTD'

class='Messages_MessageHeaderButton'><img src='images/messages/buttons/export.png'

style='vertical-align:middle;' />&nbsp;"+export_text[language]+"</td>";

str+= "</tr></table>";

str+= "</div>";

str+= "<div style='padding:8px;'>";

str+= "<b>"+Message.title+"</b><br />";

str+= "<font

class='Messages_SmallText'>"+from_text[language]+":</font>&nbsp;"+Message.from_forename+'

'+Message.from_surname+"<br />";

str+= "<font

class='Messages_SmallText'>"+to_text[language]+":</font>&nbsp;"+Message.to_forename+'

'+Message.to_surname+"<br />";

str+= "<font

class='Messages_SmallText'>"+send_text[language]+":</font>&nbsp;"+Message.datetime+"<br />";

str+= "<div class='Messages_AttachmentsDiv'>";

if(Message.Attachments.length != 0)

{

var attach = null;

for(var i = 0; i<Message.Attachments.length; i++)

{

attach = Message.Attachments[i];

str+= "<div id='Window"+Window.base.id+"_Attachment"+i+"'

style='float:left;'>";

str+= "<img src='images/filesystem/formats/small/"+attach.image+"'

style='valign:middle' />&nbsp;";

str+= attach.name;

str+= "</div>";

}

}

str+= "</div><br />";

str+= Message.text;

str+= "</div>";

this.CurrentMessage = Message;

document.getElementById("Window"+Window.base.id+"_MessageDiv").innerHTML = str;

var buttons = new Array("AnswerTD", "DeleteTD", "ForwardTD", "MoveToArchiveTD",

"ExportTD");

for(var j = 0; j<buttons.length; j++)

Page 213: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 213

{

if(document.getElementById("Window"+Window.base.id+"_"+buttons[j]))

{

document.getElementById("Window"+Window.base.id+"_"+buttons[j]).onmouseover

= function()

{

this.style.background = '#ffffff';

this.style.color = '#111111';

};

document.getElementById("Window"+Window.base.id+"_"+buttons[j]).onmouseout

= function()

{

this.style.background = '';

this.style.color = '#eeeeee';

};

}

}

for(var i = 0; i<Message.Attachments.length; i++)

{

document.getElementById("Window"+Window.base.id+"_Attachment"+i).oncontextmenu

= function(e)

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf("_Attachment")+11));

var attach = Window.CurrentMessage.Attachments[id];

var set;

if(window.event)

{

set =

{

x:window.event.clientX,

y:window.event.clientY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

else

{

set =

{

x:e.pageX,

y:e.pageY,

zIndex:Window.base.zIndex,

targetWindow:Window

};

}

var myMenu = new OBJ_CONTEXTMENU(set);

myMenu.add({id:0,text:{de:'Speichern',

en:'Save'},iconpath:'images/contextmenu/paste.png',click:function() {var GetWindowObj =

getWindowObj(this);var Window = GetWindowObj.obj;var obj = new

OBJ_SAVEFILEWINDOW();Window.ExportOptions = new Object();Window.ExportOptions.attach_id =

attach.dbid;Window.ExportOptions.path = '';Window.ExportOptions.user_id = 0;var ext =

attach.name.substr(attach.name.lastIndexOf("."));obj.filter = new

Array();obj.filter.push(ext);obj.filter_description = ext.substr(1).toUpperCase()+'-Dateien';

obj.returnfunc = Window.SaveAttachment;obj.filename =

attach.name;myMenu.hide();obj.init();}});

myMenu.show();

Page 214: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 214

};

}

}

},

SaveAttachment: function(msg)

{

if(msg.value == 'OK')

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.ExportOptions.path = msg.path+msg.filename;

Window.ExportOptions.user_id = msg.user_id;

if(msg.exists == true)

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.returnfunc = Window.SaveAttachment2;

MsgBox.iconpath = 'images/contextmenu/delete.png';

MsgBox.returntype = 'YESNO';

MsgBox.show({de:'Überschreiben', en:'Overwrite'}, {de:'Die Datei existiert

bereits! Wollen Sie überschreiben?', en:'The file already exists! Do you really want to

overwrite?'}, Window.base.id);

}

else Window.SaveAttachment2(null);

}

},

SaveAttachment2:function(msg)

{

if(msg == null || msg.value == 'YES')

{

if(this.type == 'OBJ_MESSAGINGWINDOW') var Window = this;

else

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

}

setRequest('programs/messages/save_attachment.php?path='+Window.ExportOptions.path+'&user_id='

+Window.ExportOptions.user_id+'&attach_id='+Window.ExportOptions.attach_id);

}

},

SearchItem: function()

{

},

onresize: function()

{

document.getElementById("Window"+this.base.id+"_CenterDiv").style.height =

this.base.height-200;

document.getElementById("Window"+this.base.id+"_MessageDiv").style.height =

this.base.height-200;

document.getElementById("Window"+this.base.id+"_MessageDiv").style.width =

this.base.width-453;

document.getElementById("Window"+this.base.id+"_MenuBar").style.width =

this.base.width-5;

},

SearchString: '',

Page 215: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 215

ExportOptions: null,

CurrentFolder: 'INBOX',

CurrentMessage: null,

Messages: new Array()

};

OBJ_OPENFILEWINDOW.js

function OBJ_OPENFILEWINDOW()

{

this.obj = document.getElementById('TaskBar');

}

OBJ_OPENFILEWINDOW.prototype =

{

type: "OBJ_OPENFILEWINDOW",

init:function()

{

HideDiv.style.visibility = 'visible';

TaskBar.overlay();

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Datei öffnen',

en:'Open File'

};

this.base.iconpath = 'images/filesystem/tree.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.minimizeable = false;

this.base.width = 500;

this.base.bgcolor = '#555555';

this.base.height = 300;

this.base.zIndex = 4000;

if(this.UserId == null) this.UserId = parent.UserId;

if(this.CurrentPath == null) this.CurrentPath = '/';

this.base.init();

this.id = this.base.id;

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_TreeDiv'

class='OpenFile_TreeDiv'style='height:"+(this.base.height-60)+";'>";

var loading_text =

{

de:'Baum wird geladen...',

en:'Loading Tree...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_FilesDiv' class='OpenFile_FilesDiv'

style='width:"+(this.base.width-180)+";height:"+(this.base.height-60)+";'>";

var loading_text =

{

de:'Dateien werden geladen...',

en:'Loading Files...'

};

str+= loading_text[language];

str+= "</div><br />";

str+= "<div class='OpenFile_BottomBar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_ReloadDiv' class='OpenFile_MenuItemLeftDiv'>";

Page 216: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 216

var text_reload =

{

en:'Reload',

de:'Reload'

};

str+= text_reload[language];

str+= " </div>";

str+= "<iframe

src='programs/filesystem/upload.php?loc="+this.CurrentPath+"&user_id="+this.UserId+"' ";

str+= "id='Window"+this.base.id+"_uploadframe'

name='Window"+this.base.id+"_uploadframe' height='60' width='280' style='border:0px; vertical-

align:top; float:right; margin-top:3px; visibility:visible; font-size:0.8em; float:left;'>";

str+= "</iframe>";

str+= " <div id='Window"+this.base.id+"_Open' class='OpenFile_MenuItemLeftDiv'

style='float:right;'>";

var text_open =

{

en:'Open',

de:'Öffnen'

};

str+= text_open[language];

str+= " </div>";

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

GetWindowObj.obj.LoadFiles();

GetWindowObj.obj.LoadTree();

};

document.getElementById('Window'+this.base.id+'_Open').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_Open').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_Open').onclick = function()

{

var GetWindowObj = getWindowObj(this);

GetWindowObj.obj.ok();

};

this.LoadTree();

this.LoadFiles();

},

LoadFiles: function()

{

var obj = null;

if(this.type == "OBJ_OPENFILEWINDOW") obj = this;

Page 217: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 217

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var url =

'programs/filesystem/get_files.php?path='+obj.CurrentPath+'&type='+obj.DirType+'&user_id='+obj

.UserId;

var myXML = getXmlFile(url);

obj.CurrentItems = new Array();

var root = myXML.documentElement;

var files = new Array();

var values = myXML.getElementsByTagName("file");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

fobj = new Object();

fobj.id = i;

if(cv.getElementsByTagName('name')[0].hasChildNodes()) fobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('image')[0].hasChildNodes()) fobj.image =

cv.getElementsByTagName("image")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('path')[0].hasChildNodes()) fobj.path =

cv.getElementsByTagName("path")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('permissions')[0].hasChildNodes()) fobj.permissions

= cv.getElementsByTagName("permissions")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('user_id')[0].hasChildNodes()) fobj.user_id =

cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('dirtype')[0].hasChildNodes()) fobj.dirtype =

cv.getElementsByTagName("dirtype")[0].firstChild.nodeValue;

obj.CurrentItems.push(fobj);

}

var str = "";

var width = obj.base.width-250;

var elemperrow = 2;

str+="<table border='0'>";

var pos = 0;

var file = null;

var txt = null;

var size = 'small';

if(size=="small") elemperrow--;

for(var i = 0; i<obj.CurrentItems.length; i++)

{

file = obj.CurrentItems[i];

var ok = false;

if(obj.filter.length == 0) ok = true;

else

{

for(var k = 0; k<obj.filter.length; k++)

{

if(file.name.substr(file.name.length-

obj.filter[k].length).toLowerCase() == obj.filter[k].toLowerCase()) ok = true;

}

}

if(ok)

{

if(pos==0) str+="<tr>";

pos++;

Page 218: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 218

var imagesrc =

"images/filesystem/formats/"+size+"/"+file.image.toLowerCase();

str+= "<td ";

if(size=="big") str+= "align='center'";

else str+= "align='left' width='160'";

str+= "><div id='Window"+obj.base.id+"_FILE"+i+"' class='OpenFile_File' ";

str+= "style='font-size:0.8em; margin:1px;' ";

str+= "title='"+file.name+"'>";

str+="<img id='Window"+obj.base.id+"_FILE"+i+"_image' src='"+imagesrc+"'

style='vertical-align:bottom' />";

if(size=="big") str+= "<br />";

else str+= "&nbsp;";

if(file.name.length < 20) txt = file.name;

else txt = file.name.substr(0,17)+"...";

str+= txt;

str+= "</div></td>";

if(pos==elemperrow)

{

str+="</tr>";

pos = 0;

}

}

}

if(i==0) str = "Das Verzeichnis ist leer oder existiert nicht!";

document.getElementById('Window'+obj.base.id+'_FilesDiv').innerHTML = str;

var fobj = null;

for(var j = 0; j<obj.CurrentItems.length; j++)

{

fobj = document.getElementById('Window'+obj.base.id+'_FILE'+j);

if(fobj)

{

fobj.onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_FILE')+5));

var file = Window.CurrentItems[id];

var other_file = null;

for(var k = 0; k<Window.CurrentItems.length; k++)

{

other_file =

document.getElementById('Window'+obj.base.id+'_FILE'+k);

if(other_file)

{

other_file.style.background = '';

other_file.style.color = '#cccccc';

other_file.style.border = '1px solid transparent';

}

}

this.style.background = '#094274';

this.style.color = "#ffffff";

this.style.border = "1px solid #3D94AF";

Window.SelectedItem = file;

};

fobj.ondblclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.ok();

Page 219: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 219

};

}

}

}

},

LoadTree: function()

{

var obj = null;

if(this.type == "OBJ_OPENFILEWINDOW") obj = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var myXML = getXmlFile('programs/filesystem/get_tree.php?');

var divobj = document.getElementById("Window"+obj.base.id+"_TreeDiv");

var imgsrc = "images/filesystem/tree.png";

var str = "";

var root = myXML.documentElement;

var folders = obj.ReadRecursevelyTree(root, 0, 0);

str += folders.string;

str += "</div>";

divobj.innerHTML = str;

for(var i = 0; i<folders.count; i++)

{

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('TreeItem')+8));

Window.DirType = Window.TreeFolders[id].type;

Window.UserId = Window.TreeFolders[id].user_id;

Window.Permissions = Window.TreeFolders[id].permissions;

Window.ChangeDirectory(Window.TreeFolders[id].path, Window.base.id,

Window.TreeFolders[id].type);

if(document.getElementById(this.id+'_List'))

{

var subobj = document.getElementById(this.id+'_List');

if(subobj.style.display == 'none') subobj.style.display = 'inline';

else subobj.style.display = 'none';

}

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseover =

function()

{

this.style.background = 'url(images/filesystem/tree_over.png)';

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseout =

function()

{

this.style.background = '';

};

Page 220: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 220

}

}

},

ReadRecursevelyTree: function(node, pl,count)

{

var path = "";

var str = "";

var subfolders = null;

if(node.hasChildNodes())

{

for(var i = 0; i < node.childNodes.length; i++)

{

this.TreeFolders.push({id:count,name:node.childNodes[i].attributes[0].value,path:node.childNod

es[i].attributes[1].value,user_id:node.childNodes[i].attributes[2].value,type:node.childNodes[

i].attributes[3].value,permissions:node.childNodes[i].attributes[4].value });

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"' style='padding-

left:"+pl*20+"px;'>";

str+= "<img src='images/filesystem/"+node.childNodes[i].attributes[5].value+"'

/>&nbsp;";

str+= node.childNodes[i].attributes[0].value+"</div>";

if(node.childNodes[i].hasChildNodes())

{

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"_List'

style='display:none'>";

count++;

subfolders = this.ReadRecursevelyTree(node.childNodes[i], pl+1,count);

str+= subfolders.string;

count = subfolders.count;

str+= "</div>";

}

else count++;

}

}

return { string:str, count:count };

},

ChangeDirectory: function(path, id, type, user_id)

{

if(path.indexOf('../')!=-1) path = path.replace(/..\/ /g, '');

if(path.substr(path.length-1) != "/") path+= "/";

var Window = null;

if(path.substr(path.length-1) != "/") path+= "/";

for(var i = 0; i<Windows.length; i++) if(Windows[i].base.id == id) Window = Windows[i];

if(Window != null)

{

Window.CurrentPath = path;

if(type != null) Window.DirType = type;

if(user_id != null) Window.DirType = type;

Window.LoadFiles();

}

var uploaddiv = document.getElementById('Window'+Window.base.id+'_uploadframe');

var url =

"programs/filesystem/upload.php?loc="+Window.CurrentPath+"&user_id="+Window.UserId;

window.open(url, 'Window'+Window.base.id+'_uploadframe');

},

close: function()

Page 221: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 221

{

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(this.returnfunc != null)

{

this.returnfunc({id:'Response'+this.id,type: 'OBJ_OPENFILEWINDOWRETURN',path:

null,filename: null,user_id: 0,value: 'CANCEL',text: ''});

}

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

ok:function()

{

var WindowObj;

if(this.type == 'OBJ_OPENFILEWINDOW') WindowObj = this;

else

{

var GetWindowObj = getWindowObj(this);

WindowObj = GetWindowObj.obj;

}

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

var text = '';

if(document.getElementById("Window"+WindowObj.base.id+"_TextInput")) text =

document.getElementById("Window"+WindowObj.base.id+"_TextInput").value;

WindowObj.returnfunc({path:WindowObj.CurrentPath+'/'+WindowObj.SelectedItem.name,type:

'OBJ_OPENFILEWINDOWRETURN',path: this.SelectedItem.path,filename:

this.SelectedItem.name,user_id: this.SelectedItem.user_id,value: 'OK',exists: true});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

cancel:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({id:'Response'+this.id,type: 'OBJ_OPENFILEWINDOWRETURN',path:

null,filename: null,user_id: 0,value: 'CANCEL',text: ''});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

id: 0,

base: null,

returnfunc:null,

Page 222: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 222

filter: new Array(),

filter_description: '',

CurrentPath: null,

SelectedItem: '',

TreeFolders: new Array(),

DirType: 'Personal',

UserId: null,

Shares: new Array(),

ParentWindow: null

};

OBJ_SAVEFILEWINDOW.js

function OBJ_SAVEFILEWINDOW()

{

this.obj = document.getElementById('TaskBar');

}

OBJ_SAVEFILEWINDOW.prototype =

{

type: "OBJ_SAVEFILEWINDOW",

init:function()

{

HideDiv.style.visibility = 'visible';

TaskBar.overlay();

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Datei speichern',

en:'Save File'

};

this.base.iconpath = 'images/filesystem/tree.png';

this.base.resizeable = false;

this.base.maximizeable = false;

this.base.minimizeable = false;

this.base.width = 500;

this.base.bgcolor = '#555555';

this.base.height = 300;

this.base.zIndex = 4000;

if(this.UserId == null)this.UserId = parent.UserId;

if(this.CurrentPath== null) this.CurrentPath = '/';

this.base.init();

this.id = this.base.id;

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_TreeDiv'

class='OpenFile_TreeDiv'style='height:"+(this.base.height-60)+";'>";

var loading_text =

{

de:'Baum wird geladen...',

en:'Loading Tree...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_FilesDiv' class='OpenFile_FilesDiv'

style='width:"+(this.base.width-180)+";height:"+(this.base.height-60)+";'>";

var loading_text =

{

de:'Dateien werden geladen...',

en:'Loading Files...'

Page 223: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 223

};

str+= loading_text[language];

str+= "</div><br />";

str+= "<div class='OpenFile_BottomBar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_ReloadDiv' class='OpenFile_MenuItemLeftDiv'>";

var text_reload =

{

en:'Reload',

de:'Reload'

};

str+= text_reload[language];

str+= " </div>";

str+= "<div class='OpenFile_MenuItemLeftDiv'>";

str+= "Name:&nbsp;<input type='text' id='Window"+this.base.id+"_nameInput'

value='"+this.filename+"' style='font-size:0.8em;' />";

str+= "</div>";

str+= " <div id='Window"+this.base.id+"_Save' class='OpenFile_MenuItemLeftDiv'

style='float:right;'>";

var text_save =

{

en:'Save',

de:'Speichern'

};

str+= text_save[language];

str+= " </div>";

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_ReloadDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

GetWindowObj.obj.LoadFiles();

GetWindowObj.obj.LoadTree();

};

document.getElementById('Window'+this.base.id+'_Save').onmouseover = function()

{

this.style.background = 'url(images/filesystem/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_Save').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_Save').onclick = function()

{

var GetWindowObj = getWindowObj(this);

GetWindowObj.obj.ok();

};

this.LoadTree();

this.LoadFiles();

},

LoadFiles: function()

Page 224: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 224

{

var obj = null;

if(this.type == "OBJ_SAVEFILEWINDOW") obj = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var url =

'programs/filesystem/get_files.php?path='+obj.CurrentPath+'&type='+obj.DirType+'&user_id='+obj

.UserId;

var myXML = getXmlFile(url);

obj.CurrentItems = new Array();

var root = myXML.documentElement;

var files = new Array();

var values = myXML.getElementsByTagName("file");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

fobj = new Object();

fobj.id = i;

if(cv.getElementsByTagName('name')[0].hasChildNodes()) fobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('image')[0].hasChildNodes()) fobj.image =

cv.getElementsByTagName("image")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('path')[0].hasChildNodes()) fobj.path =

cv.getElementsByTagName("path")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('permissions')[0].hasChildNodes()) fobj.permissions

= cv.getElementsByTagName("permissions")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('user_id')[0].hasChildNodes()) fobj.user_id =

cv.getElementsByTagName("user_id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('dirtype')[0].hasChildNodes()) fobj.dirtype =

cv.getElementsByTagName("dirtype")[0].firstChild.nodeValue;

obj.CurrentItems.push(fobj);

}

var str = "";

var width = obj.base.width-250;

var elemperrow = 2;

str+="<table border='0'>";

var pos = 0;

var file = null;

var txt = null;

var size = 'small';

if(size=="small") elemperrow--;

for(var i = 0; i<obj.CurrentItems.length; i++)

{

file = obj.CurrentItems[i];

var ok = false;

if(obj.filter.length == 0) ok = true;

else

{

for(var k = 0; k<obj.filter.length; k++)

{

if(file.name.substr(file.name.length-

obj.filter[k].length).toLowerCase() == obj.filter[k].toLowerCase()) ok = true;

}

}

if(ok)

{

Page 225: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 225

if(pos==0) str+="<tr>";

pos++;

var imagesrc =

"images/filesystem/formats/"+size+"/"+file.image.toLowerCase();

str+= "<td ";

if(size=="big") str+= "align='center'";

else str+= "align='left' width='160'";

str+= "><div id='Window"+obj.base.id+"_FILE"+i+"' class='OpenFile_File' ";

str+= "style='font-size:0.8em; margin:1px;' ";

str+= "title='"+file.name+"'>";

str+="<img id='Window"+obj.base.id+"_FILE"+i+"_image' src='"+imagesrc+"'

style='vertical-align:bottom' />";

if(size=="big") str+= "<br />";

else str+= "&nbsp;";

if(file.name.length < 20) txt = file.name;

else txt = file.name.substr(0,17)+"...";

str+= txt;

str+= "</div></td>";

if(pos==elemperrow)

{

str+="</tr>";

pos = 0;

}

}

}

if(i==0) str = "Das Verzeichnis ist leer oder existiert nicht!";

document.getElementById('Window'+obj.base.id+'_FilesDiv').innerHTML = str;

var fobj = null;

for(var j = 0; j<obj.CurrentItems.length; j++)

{

fobj = document.getElementById('Window'+obj.base.id+'_FILE'+j);

if(fobj)

{

fobj.onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_FILE')+5));

var file = Window.CurrentItems[id];

var other_file = null;

for(var k = 0; k<Window.CurrentItems.length; k++)

{

other_file =

document.getElementById('Window'+obj.base.id+'_FILE'+k);

if(other_file)

{

other_file.style.background = '';

other_file.style.color = '#cccccc';

other_file.style.border = '1px solid transparent';

}

}

this.style.background = '#094274';

this.style.color = "#ffffff";

this.style.border = "1px solid #3D94AF";

Window.filename = file.name;

document.getElementById('Window'+Window.base.id+'_nameInput').value =

file.name;

Window.SelectedItem = file;

};

Page 226: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 226

}

}

}

},

LoadTree: function()

{

var obj = null;

if(this.type == "OBJ_SAVEFILEWINDOW") obj = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) obj = GetWindowObj.obj;

}

if(obj != null)

{

var myXML = getXmlFile('programs/filesystem/get_tree.php?');

var divobj = document.getElementById("Window"+obj.base.id+"_TreeDiv");

var imgsrc = "images/filesystem/tree.png";

var str = "";

var root = myXML.documentElement;

var folders = obj.ReadRecursevelyTree(root, 0, 0);

str += folders.string;

str += "</div>";

divobj.innerHTML = str;

for(var i = 0; i<folders.count; i++)

{

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('TreeItem')+8));

Window.DirType = Window.TreeFolders[id].type;

Window.UserId = Window.TreeFolders[id].user_id;

Window.Permissions = Window.TreeFolders[id].permissions;

Window.ChangeDirectory(Window.TreeFolders[id].path, Window.base.id,

Window.TreeFolders[id].type);

if(document.getElementById(this.id+'_List'))

{

var subobj = document.getElementById(this.id+'_List');

if(subobj.style.display == 'none') subobj.style.display = 'inline';

else subobj.style.display = 'none';

}

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseover =

function()

{

this.style.background = 'url(images/filesystem/tree_over.png)';

};

document.getElementById('Window'+obj.base.id+'_TreeItem'+i).onmouseout =

function()

{

this.style.background = '';

};

}

Page 227: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 227

}

},

ReadRecursevelyTree: function(node, pl,count)

{

var path = "";

var str = "";

var subfolders = null;

if(node.hasChildNodes())

{

for(var i = 0; i < node.childNodes.length; i++)

{

this.TreeFolders.push({id:count,name:node.childNodes[i].attributes[0].value,path:node.childNod

es[i].attributes[1].value,user_id:node.childNodes[i].attributes[2].value,type:node.childNodes[

i].attributes[3].value,permissions:node.childNodes[i].attributes[4].value });

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"' style='padding-

left:"+pl*20+"px;'>";

str+= "<img src='images/filesystem/"+node.childNodes[i].attributes[5].value+"'

/>&nbsp;";

str+= node.childNodes[i].attributes[0].value+"</div>";

if(node.childNodes[i].hasChildNodes())

{

str+= "<div id='Window"+this.base.id+"_TreeItem"+count+"_List'

style='display:none'>";

count++;

subfolders = this.ReadRecursevelyTree(node.childNodes[i], pl+1,count);

str+= subfolders.string;

count = subfolders.count;

str+= "</div>";

}

else count++;

}

}

return { string:str, count:count };

},

ChangeDirectory: function(path, id, type, user_id)

{

if(path.indexOf('../')!=-1) path = path.replace(/..\/ /g, '');

if(path.substr(path.length-1) != "/") path+= "/";

var Window = null;

if(path.substr(path.length-1) != "/") path+= "/";

for(var i = 0; i<Windows.length; i++) if(Windows[i].base.id == id) Window = Windows[i];

if(Window != null)

{

Window.CurrentPath = path;

if(type != null) Window.DirType = type;

if(user_id != null) Window.DirType = type;

Window.LoadFiles();

}

},

close: function()

{

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(this.returnfunc != null)

{

Page 228: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 228

this.returnfunc({id:'Response'+this.id,type: 'OBJ_OPENFILEWINDOWRETURN',path:

null,filename: null,user_id: 0,value: 'CANCEL',text: ''});

}

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

ok:function()

{

var WindowObj;

if(this.type == 'OBJ_SAVEFILEWINDOW') WindowObj = this;

else

{

var GetWindowObj = getWindowObj(this);

WindowObj = GetWindowObj.obj;

}

WindowObj.filename =

document.getElementById('Window'+WindowObj.base.id+'_nameInput').value;

var exists = false;

for(var i = 0; i<WindowObj.CurrentItems.length; i++)

{

if(WindowObj.CurrentItems[i].name.toLowerCase() ==

WindowObj.filename.toLowerCase()) exists = true;

}

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({type: 'OBJ_OPENFILEWINDOWRETURN',path:

this.CurrentPath,filename: this.filename,user_id: this.UserId,exists: exists,value: 'OK'});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

cancel:function()

{

var GetWindowObj = getWindowObj(this);

var WindowObj = GetWindowObj.obj;

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

if(WindowObj.returnfunc != null)

{

WindowObj.returnfunc({id:'Response'+this.id,type: 'OBJ_OPENFILEWINDOWRETURN',path:

null,filename: null,user_id: 0,value: 'CANCEL',text: '',exists: false});

}

TaskBar.remove(WindowObj.base.id);

for(var i = 0; i<Windows.length; i++) if(WindowObj.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(WindowObj.base.obj);

},

id: 0,

base: null,

returnfunc:null,

filename: '',

Page 229: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 229

filter: new Array(),

filter_description: '',

CurrentPath: null,

SelectedItem: '',

TreeFolders: new Array(),

DirType: 'Personal',

UserId: null,

Shares: new Array(),

ParentWindow: null

};

OBJ_SECURITYWINDOW.js

function OBJ_SECURITYWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_SECURITYWINDOW.prototype =

{

type: "OBJ_SECURITYWINDOW",

init: function()

{

HideDiv.style.visibility = 'visible';

TaskBar.overlay();

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Sicherheit',

en:'Security'

};

this.base.iconpath = 'images/contextmenu/security.png';

this.base.resizeable = true;

this.base.minimizeable = false;

this.base.maximizeable = false;

this.base.width = 300;

this.base.height = 400;

this.base.zIndex = 4000;

this.base.bgcolor = '#000000';

this.base.top = 0;

this.base.init();

this.base.subwindows = new Array();

Windows.push(this);

var str = "";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_SaveDiv' class='SecurityMenuItemDiv'

style='float:right'>";

var text_save =

{

en:'Save',

de:'Speichern'

};

str+= text_save[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_Permissions_Div' class='Security_PermissionsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";'>";

var loading_text =

{

de:'User und Gruppen werden geladen...',

Page 230: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 230

en:'Loading Users and Groups...'

};

str+= loading_text[language];

str+= "</div>";

str+= "<div class='Menu_Bar' style='width:"+(this.base.width-5)+"'>";

str+= " <div id='Window"+this.base.id+"_SearchDiv' class='Security_SearchDiv'>";

var search_text =

{

de:'Suche:',

en:'Search:'

};

str+= search_text[language]+'&nbsp;';

str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'

value='"+this.SearchString+"'";

str+= "style='margin-top:2px' />";

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_ItemsDiv' class='Security_ItemsDiv'

style='width:"+(this.base.width)+";height:"+((this.base.height-40)/2)+";'>";

var loading_text =

{

de:'User und Gruppen werden geladen...',

en:'Loading Users and Groups...'

};

str+= loading_text[language];

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseover = function()

{

this.style.background = 'url(images/security/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onmouseout = function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SaveDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var url = 'programs/security/set_permissions.php?';

url+= 'path='+Window.Path;

var permissionsstring;

for(var i = 0; i <Window.Items.length; i++)

{

url+='&id'+i+'='+Window.Items[i].user_id;

url+='&type'+i+'='+Window.Items[i].type;

permissionsstring = '';

permissionsstring+= Window.Items[i].read;

permissionsstring+= Window.Items[i].write;

permissionsstring+= Window.Items[i].del;

url+= '&permissions'+i+'='+permissionsstring;

}

setRequest(url);

Window.base.close(Window.base.id);

}

};

document.getElementById('Window'+this.base.id+'_SearchInput').onkeyup = function()

{

Page 231: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 231

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

Window.SearchString = this.value;

Window.SearchItem();

}

};

this.LoadPermissions();

this.LoadUsersAndGroups();

},

LoadPermissions: function()

{

var url =

'programs/security/get_permissions.php?path='+this.Path+'&user_id='+this.UserId;

var myXML = getXmlFile(url);

this.Items = new Array();

var root = myXML.documentElement;

var permissions = new Array();

var values = myXML.getElementsByTagName("permission");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('type')[0].hasChildNodes())pobj.type =

cv.getElementsByTagName("type")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('read')[0].hasChildNodes())pobj.read =

parseInt(cv.getElementsByTagName("read")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('write')[0].hasChildNodes())pobj.write =

parseInt(cv.getElementsByTagName("write")[0].firstChild.nodeValue);

if(cv.getElementsByTagName('delete')[0].hasChildNodes())pobj.del =

parseInt(cv.getElementsByTagName("delete")[0].firstChild.nodeValue);

this.Items.push(pobj);

}

this.DrawPermissions();

},

DrawPermissions: function()

{

var Window = null;

if(this.type == "OBJ_SECURITYWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

de:'Name',

en:'Name'

};

Page 232: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 232

var read_text =

{

de:'Lesen',

en:'Read'

};

var write_text =

{

de:'Schreiben',

en:'Write'

};

var delete_text =

{

de:'Löschen',

en:'Delete'

};

var groupuser_text =

{

Group:

{

de:'Gruppe',

en:'Group'

},

User:

{

de:'Benutzer',

en:'User'

}

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= " <td class='Security_Header'>"+read_text[language]+"</td>";

str+= " <td class='Security_Header'>"+write_text[language]+"</td>";

str+= " <td class='Security_Header'>"+delete_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= "</tr>";

var remove_text =

{

de:'Entfernen',

en:'Remove'

};

for(var i = 0; i<Window.Items.length; i++)

{

var pobj = Window.Items[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row'>";

str+= " <img src='images/security/"+pobj.type.toLowerCase()+".png'

title='"+groupuser_text[pobj.type][language]+"' />";

str+= " </td>";

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemRead"+i+"' ";

if(pobj.read == 1) str+= "checked ";

str+= " />";

str+= " </td>";

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemWrite"+i+"' ";

if(pobj.write == 1) str+= "checked ";

str+= " />";

str+= " </td>";

Page 233: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 233

str+= " <td class='Security_Row' align='center'>";

str+= " <input type='checkbox' id='Window"+Window.base.id+"_ItemDelete"+i+"' ";

if(pobj.del == 1) str+= "checked ";

str+= " />";

str+= " </td>";

str+= " <td class='Security_Row'>";

str+= " <img src='images/security/delete.png' title='"+delete_text[language]+"'

";

str+= " id='Window"+Window.base.id+"_RemoveImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+Window.base.id+'_Permissions_Div').innerHTML =

str;

for(var i = 0; i<this.Items.length; i++)

{

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseover =

function()

{

this.src = 'images/security/delete_over.png';

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onmouseout =

function()

{

this.src = 'images/security/delete.png';

};

document.getElementById('Window'+Window.base.id+'_RemoveImg'+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_RemoveImg')+10));

Window.Items.splice(id, 1);

Window.DrawPermissions();

}

};

document.getElementById("Window"+Window.base.id+"_ItemRead"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemRead')+9));

var read = 0;

if(this.checked) read = 1;

Window.Items[id].read = read;

Window.DrawPermissions();

}

};

document.getElementById("Window"+Window.base.id+"_ItemWrite"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

Page 234: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 234

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemWrite')+10));

var wr = 0;

if(this.checked) wr = 1;

Window.Items[id].write = wr;

Window.DrawPermissions();

}

};

document.getElementById("Window"+Window.base.id+"_ItemDelete"+i).onclick =

function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_ItemDelete')+11));

var del = 0;

if(this.checked) del = 1;

Window.Items[id].del = del;

Window.DrawPermissions();

}

};

}

}

},

LoadUsersAndGroups:function()

{

var url = 'programs/security/get_users_and_groups.php';

var myXML = getXmlFile(url);

this.AllItems = new Array();

var root = myXML.documentElement;

var items = new Array();

var values = myXML.getElementsByTagName("item");

for(var i = 0; i < values.length; i++)

{

var cv = values[i];

pobj = new Object();

pobj.id = i;

if(cv.getElementsByTagName('id')[0].hasChildNodes())pobj.user_id =

cv.getElementsByTagName("id")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('type')[0].hasChildNodes())pobj.type =

cv.getElementsByTagName("type")[0].firstChild.nodeValue;

if(cv.getElementsByTagName('name')[0].hasChildNodes())pobj.name =

cv.getElementsByTagName("name")[0].firstChild.nodeValue;

this.AllItems.push(pobj);

}

this.SearchedItems = this.AllItems;

this.DrawItems();

},

DrawItems:function()

{

var str = "<table border='0' class='Security_Table'>";

str+= "<tr class='Security_TR'>";

var name_text =

{

Page 235: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 235

de:'Name',

en:'Name'

};

var add_text =

{

de:'Hinzufügen',

en:'Add'

};

var groupuser_text =

{

Group:

{

de:'Gruppe',

en:'Group'

},

User:

{

de:'Benutzer',

en:'User'

}

};

str+= " <td class='Security_Header'

width='80'>&nbsp;&nbsp;"+name_text[language]+"</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= " <td class='Security_Header'>&nbsp;</td>";

str+= "</tr>";

for(var i = 0; i<this.SearchedItems.length; i++)

{

var pobj = this.SearchedItems[i];

str+= " <tr

onmouseover='this.style.background="+'"url(images/security/row.png)"'+"'

onmouseout='this.style.background="+'""'+"'>";

str+= " <td class='Security_Row'>";

str+= pobj.name;

str+= " </td>";

str+= " <td class='Security_Row'>";

str+= " <img src='images/security/"+pobj.type.toLowerCase()+".png'

title='"+groupuser_text[pobj.type][language]+"' />";

str+= " </td>";

str+= " <td class='Security_Row' align='right'>";

str+= " <img src='images/security/add.png' title='"+add_text[language]+"' ";

str+= " id='Window"+this.base.id+"_AddImg"+i+"' />";

str+= " </td>";

str+= " </tr>";

}

str+= "</table>";

document.getElementById('Window'+this.base.id+'_ItemsDiv').innerHTML = str;

for(var i = 0; i<this.SearchedItems.length; i++)

{

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseover = function()

{

this.src = 'images/security/add_over.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onmouseout = function()

{

this.src = 'images/security/add.png';

};

document.getElementById('Window'+this.base.id+'_AddImg'+i).onclick = function()

{

var GetWindowObj = getWindowObj(this);

if(GetWindowObj != null)

Page 236: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 236

{

var Window = GetWindowObj.obj;

var id = parseInt(this.id.substr(this.id.indexOf('_AddImg')+7));

var already_exists = false;

var obj = new Object();

obj.name = Window.AllItems[id].name;

obj.type = Window.AllItems[id].type;

obj.user_id = Window.AllItems[id].user_id;

for(var j = 0; j<Window.Items.length; j++)

{

if(Window.Items[j].user_id = obj.user_id && Window.Items[j].type ==

obj.type)

{

already_exists = true;

}

}

if(!already_exists)

{

obj.read = 1;

obj.write = 0;

obj.del = 0;

Window.Items.push(obj);

Window.DrawPermissions();

}

}

};

}

},

SearchItem:function()

{

this.SearchedItems = new Array();

var string = this.SearchString;

var obj = null;

var start = 0;

var added = false;

for(var i = 0; i< this.AllItems.length; i++)

{

obj = this.AllItems[i];

if(obj.name.toLowerCase() == string.toLowerCase()) this.SearchedItems.push(obj);

else

{

added = false;

if(obj.name.length > string.length)

{

start = 0;

while((start+string.length) <= obj.name.length)

{

if(obj.name.substr(start, string.length).toLowerCase() ==

string.toLowerCase())

{

if(!added)

{

this.SearchedItems.push(obj);

added = true;

}

}

Page 237: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 237

start++;

}

}

}

}

if(string.length == 0) this.SearchedItems = this.AllItems;

this.DrawItems();

},

close: function()

{

HideDiv.style.visibility = 'hidden';

TaskBar.overlay_out();

TaskBar.remove(this.base.id);

for(var i = 0; i<Windows.length; i++) if(this.base.id == Windows[i].id)

Windows.splice(i, 1);

MainDiv.removeChild(this.base.obj);

},

Path: null,

Items: new Array(),

AllItems: new Array(),

SearchedItems: new Array(),

SearchString: ''

};

OBJ_SETTINGSWINDOW.js

function OBJ_SETTINGSWINDOW()

{

this.UserId = parent.UserId;

}

OBJ_SETTINGSWINDOW.prototype =

{

type: "OBJ_SETTINGSWINDOW",

init: function()

{

this.base = new OBJ_BASEWINDOW();

this.base.title =

{

de:'Einstellungen',

en:'Settings'

};

this.base.iconpath = 'images/logos/settings.png';

this.base.resizeable = true;

this.base.maximizeable = true;

this.base.bgcolor = '#dddddd';

this.base.init();

this.base.subwindows = new Array();

this.setting_items = new Array('forename', 'surname', 'username', 'birthdate',

'profession', 'address', 'postalcode', 'country', 'city', 'phone', 'email', 'web', 'comment',

'wants_news', 'show_user', 'show_user_data', 'chat_show_online', 'weather_code',

'weather_city', 'send_mail_to_contacts', 'co_add_to_cal');

this.menu_items = [

{

Page 238: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 238

en:'General',

de:'Allgemein'

},

{

en:'Personal Data',

de:'Persönliche Daten'

},

{

en:'Chat',

de:'Chat'

},

{

en:'Weather',

de:'Wetter'

},

{

en:'Contacts',

de:'Kontakte'

}

];

this.settings = null;

Windows.push(this);

var str = "";

str+= "<div id='Window"+this.base.id+"_MenuBar' class='Menu_Bar'

style='width:"+(this.base.width-5)+"; float:none;'>";

str+= " <div id='Window"+this.base.id+"_SaveSettingsDiv' class='SettingsMenuItemDiv'>";

var text_save_settings =

{

en:'Save Settings',

de:'Einstellungen speichern'

};

str+= text_save_settings[language];

str+= " </div>";

str+= "<div class='SettingsMenuItemDiv'>|</div>";

str+= " <div id='Window"+this.base.id+"_DeleteAccountDiv'

class='SettingsMenuItemDiv'>";

var text_del_account =

{

en:'Delete Account',

de:'Account löschen'

};

str+= text_del_account[language];

str+= " </div>";

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_LeftMenuDiv' class='Settings_LeftMenuDiv'>";

for(var i = 0; i<this.menu_items.length; i++)

{

str+= "<div id='Window"+this.base.id+"_LeftMenuItem"+i+"Div'

class='Settings_LeftMenuItemDiv'>";

str+= this.menu_items[i][language];

str+= "</div>";

}

str+= "</div>";

str+= "<div id='Window"+this.base.id+"_SettingsContent' class='Settings_Content'>";

var loading_text =

{

de:'Lade Einstellungen...',

en:'Load Settings...'

};

str+= loading_text[language];

Page 239: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 239

str+= "</div>";

this.base.content_obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_SaveSettingsDiv').onmouseover =

function()

{

this.style.background = 'url(images/settings/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_SaveSettingsDiv').onmouseout =

function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_DeleteAccountDiv').onmouseover =

function()

{

this.style.background = 'url(images/settings/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_DeleteAccountDiv').onmouseout =

function()

{

this.style.background = '';

};

document.getElementById('Window'+this.base.id+'_SaveSettingsDiv').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

Window.SaveSettings();

};

document.getElementById('Window'+this.base.id+'_DeleteAccountDiv').onclick = function()

{

var MsgBox = new OBJ_MESSAGEBOX();

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

MsgBox.returnfunc = Window.DeleteAccount;

MsgBox.iconpath = 'images/contextmenu/delete.png';

MsgBox.returntype = 'YESNO';

MsgBox.show({de:'Löschen', en:'Delete'}, {de:'Wollen Sie ihren Account wirklich

löschen?', en:'Do you really want to delete yoiur account?'}, Window.base.id);

};

for(var i = 0; i<this.menu_items.length; i++)

{

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+i+'Div').onclick =

function()

{

var id_plus_div = this.id.substr(this.id.indexOf('_LeftMenuItem')+13);

var id = parseInt(id_plus_div.substr(0, id_plus_div.indexOf('Div')));

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = null;

for(var j = 0; j<Window.menu_items.length; j++)

{

obj = document.getElementById("Window"+Window.base.id+"_SettingContent"+j);

if(j==parseInt(id)) obj.style.display = 'inline';

else obj.style.display = 'none';

}

};

Page 240: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 240

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+i+'Div').onmouseover

= function()

{

this.style.background = 'url(images/settings/button_bg.png)';

};

document.getElementById('Window'+this.base.id+'_LeftMenuItem'+i+'Div').onmouseout =

function()

{

this.style.background = '';

};

}

this.LoadSettings();

},

LoadSettings: function()

{

var Window = null;

if(this.type == "OBJ_SETTINGSWINDOW") Window = this;

else

{

var GetWindowObj = getWindowObj(this);

if(obj != null) Window = GetWindowObj.obj;

}

if(Window != null)

{

var url = 'programs/settings/get_settings.php';

var myXML = getXmlFile(url);

var root = myXML.documentElement;

Window.settings = new Object();

for(var i = 0; i<Window.setting_items.length; i++)

{

if(root.getElementsByTagName(Window.setting_items[i])[0].hasChildNodes())

Window.settings[Window.setting_items[i]] =

root.getElementsByTagName(Window.setting_items[i])[0].firstChild.nodeValue;

else Window.settings[Window.setting_items[i]] = '';

}

Window.settings['image_path'] = '';

Window.settings['image_user_id'] = 0;

}

if(Window.settings != null)

{

var obj = document.getElementById("Window"+Window.base.id+"_SettingsContent");

var str = "";

str+= "<div id='Window"+Window.base.id+"_SettingContent0'

class='Settings_SettingContentItem' style='display:inline'>";

var wants_news_text =

{

de:'Ich will aktuelle Informationen rund um den Stand von VirtualPC zugesand

bekommen',

en:'I want to receive current informations about VirtualPC'

};

str+= "<input type='checkbox' id='Window"+Window.base.id+"_wants_news'";

if(Window.settings['wants_news'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+wants_news_text[language]+"<br />";

var show_user_text =

{

de:'Mein Account ist für andere VirtualPC-Benutzer sichtbar',

en:'My account is visible for other VirtualPC-Users'

};

Page 241: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 241

str+= "<input type='checkbox' id='Window"+Window.base.id+"_show_user'";

if(Window.settings['show_user'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+show_user_text[language]+"<br />";

var show_user_data_text =

{

de:'Meine Persönlichen Daten sind für andere VirtualPC-Benutzer sichtbar',

en:'My personal data is visible for other VirtualPC-Users'

};

str+= "<input type='checkbox' id='Window"+Window.base.id+"_show_user_data'";

if(Window.settings['show_user_data'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+show_user_data_text[language]+"<br />";

str+= "</div>";

str+= "<div id='Window"+Window.base.id+"_SettingContent1'

class='Settings_SettingContentItem' style='display:none;'>";

str+= "<table border='0' width='100%'><tr><td valign='top'>";

var forename_text =

{

de:'Vorname',

en:'Forename'

};

str+= "<input type='text' id='Window"+Window.base.id+"_forename'

value='"+Window.settings['forename']+"'";

str+= ">&nbsp;&nbsp;"+forename_text[language]+"<br />";

var surname_text =

{

de:'Nachname',

en:'Surname'

};

str+= "<input type='text' id='Window"+Window.base.id+"_surname'

value='"+Window.settings['surname']+"'";

str+= ">&nbsp;&nbsp;"+surname_text[language]+"<br />";

var username_text =

{

de:'Username',

en:'Username'

};

str+= "<input type='text' id='Window"+Window.base.id+"_username'

value='"+Window.settings['username']+"'";

str+= ">&nbsp;&nbsp;"+username_text[language]+"<br />";

var birthdate_text =

{

de:'Geburtstag',

en:'Birthdate'

};

str+= "<select id='Window"+this.base.id+"_birthdate_day'>";

for(var i = 1; i<=31; i++)

{

var day = String(i);

if(day.length == 1) day = "0"+day;

str+= "<option value='"+day+"'";

if(parseInt(Window.settings.birthdate.substr(8,2)) == i) str+= ' selected ';

str+= ">"+day+"</option>";

}

str+= "</select>";

str+= "<select id='Window"+this.base.id+"_birthdate_month'>";

for(var i = 1; i<=12; i++)

{

var month = String(i);

if(month.length == 1) month = "0"+month;

str+= "<option value='"+month+"'";

if(parseInt(Window.settings.birthdate.substr(5,2)) == i) str+= ' selected ';

str+= ">"+month+"</option>";

}

Page 242: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 242

str+= "</select>";

str+= "<select id='Window"+this.base.id+"_birthdate_year'>";

var date = new Date();

for(var i = date.getFullYear(); i>=1920; i--)

{

var year = String(i);

str+= "<option value='"+year+"'";

if(parseInt(Window.settings.birthdate.substr(0,4)) == i) str+= ' selected ';

str+= ">"+year+"</option>";

}

str+= "</select>";

str+= "&nbsp;&nbsp;"+birthdate_text[language]+"<br />";

var profession_text =

{

de:'Beruf',

en:'Profession'

};

str+= "<input type='text' id='Window"+Window.base.id+"_profession'

value='"+Window.settings['profession']+"'";

str+= ">&nbsp;&nbsp;"+profession_text[language]+"<br />";

var comment_text =

{

de:'Kommentar',

en:'Comment'

};

str+= comment_text[language]+"<br />";

str+= "<textarea rows='10' cols='45'

id='Window"+Window.base.id+"_comment'>"+Window.settings['comment']+"</textarea>";

str+= "<br />";

str+= "</td><td>";

var address_text =

{

de:'Adresse',

en:'Address'

};

str+= "<input type='text' size='30' id='Window"+Window.base.id+"_address'

value='"+Window.settings['address']+"'";

str+= ">&nbsp;&nbsp;"+address_text[language]+"<br />";

var postalcode_text =

{

de:'Postleitzahl',

en:'Postalcode'

};

str+= "<input type='text' size='10' id='Window"+Window.base.id+"_postalcode'

value='"+Window.settings['postalcode']+"'";

str+= ">&nbsp;&nbsp;"+postalcode_text[language]+"<br />";

var city_text =

{

de:'Stadt',

en:'City'

};

str+= "<input type='text' id='Window"+Window.base.id+"_city'

value='"+Window.settings['city']+"'";

str+= ">&nbsp;&nbsp;"+city_text[language]+"<br />";

var country_text =

{

de:'Land',

en:'Country'

};

str+= "<input type='text' id='Window"+Window.base.id+"_country'

value='"+Window.settings['country']+"'";

str+= ">&nbsp;&nbsp;"+country_text[language]+"<br />";

var phone_text =

Page 243: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 243

{

de:'Telefon',

en:'Phone'

};

str+= "<input type='text' id='Window"+Window.base.id+"_phone'

value='"+Window.settings['phone']+"'";

str+= ">&nbsp;&nbsp;"+phone_text[language]+"<br />";

var email_text =

{

de:'Email',

en:'Email'

};

str+= "<input type='text' id='Window"+Window.base.id+"_email'

value='"+Window.settings['email']+"'";

str+= ">&nbsp;&nbsp;"+email_text[language]+"<br />";

var web_text =

{

de:'Web',

en:'Web'

};

str+= "<input type='text' id='Window"+Window.base.id+"_web'

value='"+Window.settings['web']+"'";

str+= ">&nbsp;&nbsp;"+web_text[language]+"<br /><br />";

str+= " <img id='Window"+this.base.id+"_image'

src='programs/settings/user_image.php?temp="+Math.random()+"' style='border:1px solid

#555555;' />";

str+= " <br />";

var search_image_text =

{

de:'Bild suchen',

en:'Search Image'

};

str+= " <img id='Window"+this.base.id+"_search_image'

src='images/filesystem/tree.png' title='"+search_image_text[language]+"' />";

//str+= "</div><br />";

str+= "</td></tr></table>";

str+= "</div>";

str+= "<div id='Window"+Window.base.id+"_SettingContent2'

class='Settings_SettingContentItem' style='display:none'>";

var chat_show_online_text =

{

de:'Meinen Chat-Status auf Online setzen sobald ich mich anmelde',

en:'Switch my chat-status to online when logging in'

};

str+= "<input type='checkbox' id='Window"+Window.base.id+"_chat_show_online'";

if(Window.settings['chat_show_online'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+chat_show_online_text[language]+"<br />";

str+= "</div>";

str+= "<div id='Window"+Window.base.id+"_SettingContent3'

class='Settings_SettingContentItem' style='display:none'>";

var weather_code_text =

{

de:'Wetter-Code',

en:'Weather-Code'

};

str+= "<input type='text' id='Window"+Window.base.id+"_weather_code'

value='"+Window.settings['weather_code']+"'>";

str+= "&nbsp;&nbsp;"+weather_code_text[language]+"<br />";

var weather_city_text =

{

de:'Wetter-Stadt',

en:'Weather-City'

Page 244: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 244

};

str+= "<input type='text' id='Window"+Window.base.id+"_weather_city'

value='"+Window.settings['weather_city']+"'>";

str+= "&nbsp;&nbsp;"+weather_city_text[language]+"<br />";

str+= "<br />";

var weather_desc =

{

de: "Um ihren Wetter-Code herauszufinden öffnen Sie die Seite

'http:/"+"/wetter.yahoo.de' in einem neuen Browser-Fenster. <br />Geben Sie die gewünschte

Stadt in das Suchfeld ein und klicken Sie auf 'Suche'.<br />Nachdem Sie Ihre Stadt ausgewählt

haben wird in ihrer Adresszeile folgender oder ähnlicher Text stehen:

'http:/"+"/de.weather.yahoo.com/AUXX/AUXX0008/index_c.html'. Ihren Wetter-Code finden Sie

zwischen dem vorletzten und letzten Slash ('/', z.B.: 'AUXX0008').",

en: "To get your weather-code, please open the page

'http:/"+"/weather.yahoo.com'. <br />Enter the your city into the Searchbox and click 'Go'.<br

/>After selecting your city, the address-bar in your browser will look similar to this:

'http:/"+"/weather.yahoo.com/forecast/AUXX0008.html'. Your weather code is between the last

slash and '.html' (eg.: 'AUXX0008')."

};

str+= "<p class='Settings_Desc'>"+weather_desc[language]+"</div>";

str+= "</div>";

str+= "<div id='Window"+Window.base.id+"_SettingContent4'

class='Settings_SettingContentItem' style='display:none'>";

var send_mail_to_contacts_text =

{

de:'Senden einer Bestätigungsnachricht an hinzugefügte Kontakte (notwendig um

Emails zu versenden)',

en:'Send a verification-email to added contacts (Necessary for transmitting

emails)'

};

str+= "<input type='checkbox' id='Window"+Window.base.id+"_send_mail_to_contacts'";

if(Window.settings['send_mail_to_contacts'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+send_mail_to_contacts_text[language]+"<br />";

var co_add_to_cal_text =

{

de:'Automatisches Erstellen einer Geburtstagserinnerung im Kalender beim

Hinzufügen von Kontakten',

en:'Automatically create a birthday-reminding for added contacts'

};

str+= "<input type='checkbox' id='Window"+Window.base.id+"_co_add_to_cal'";

if(Window.settings['co_add_to_cal'] == 'true') str+= ' checked ';

str+= ">&nbsp;&nbsp;"+co_add_to_cal_text[language]+"<br />";

str+= "</div>";

obj.innerHTML = str;

document.getElementById('Window'+this.base.id+'_search_image').onclick = function()

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

var obj = new OBJ_OPENFILEWINDOW();

obj.filter = new Array(".jpg", ".gif", ".png");

obj.filter_description = 'Grafik-Dateien(JPG, GIF, PNG)';

obj.returnfunc = Window.addImage;

obj.ParentWindow = Window;

obj.init();

};

}

},

addImage:function(msg)

{

if(msg.value == 'OK')

{

Page 245: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 245

document.getElementById('Window'+this.ParentWindow.base.id+'_image').src =

'programs/contacts/contact_temp_image.php?path='+msg.path+'&user_id='+msg.user_id;

this.ParentWindow.settings.image_path = msg.path;

this.ParentWindow.settings.image_user_id = msg.user_id;

}

},

DeleteAccount: function(msg)

{

if(msg.value == 'YES')

{

var MsgBox = new OBJ_MESSAGEBOX();

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

MsgBox.returnfunc = function(msg)

{

if(msg.value == 'OK') alert(msg.text);

};

MsgBox.iconpath = 'images/contextmenu/delete.png';

MsgBox.returntype = 'PASSWORD';

MsgBox.show({de:'Passwort eingeben', en:'Enter Password'}, {de:'Bitte geben Sie Ihr

Passwort ein um den Vorgang zu bestätigen:', en:'Please enter your password to affirm the

action:'}, Window.base.id);

}

},

SaveSettings: function()

{

if(this.type == 'OBJ_SETTINGSWINDOW') var Window = this;

else

{

var GetWindowObj = getWindowObj(this);

var Window = GetWindowObj.obj;

}

var values = [

{node:'forename',

value:document.getElementById('Window'+Window.base.id+'_forename').value},

{node:'surname',

value:document.getElementById('Window'+Window.base.id+'_surname').value},

{node:'username',

value:document.getElementById('Window'+Window.base.id+'_username').value},

{node:'profession',

value:document.getElementById('Window'+Window.base.id+'_profession').value},

{node:'address',

value:document.getElementById('Window'+Window.base.id+'_address').value},

{node:'postalcode',

value:document.getElementById('Window'+Window.base.id+'_postalcode').value},

{node:'country',

value:document.getElementById('Window'+Window.base.id+'_country').value},

{node:'city',

value:document.getElementById('Window'+Window.base.id+'_city').value},

{node:'phone',

value:document.getElementById('Window'+Window.base.id+'_phone').value},

{node:'email',

value:document.getElementById('Window'+Window.base.id+'_email').value},

{node:'weather_code',

value:document.getElementById('Window'+Window.base.id+'_weather_code').value},

{node:'weather_city',

value:document.getElementById('Window'+Window.base.id+'_weather_city').value},

{node:'web', value:document.getElementById('Window'+Window.base.id+'_web').value},

Page 246: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 246

{node:'comment',

value:document.getElementById('Window'+Window.base.id+'_comment').value}

];

var obj = new Object();

obj.node = "wants_news";

if(document.getElementById('Window'+Window.base.id+'_wants_news').checked == true)

obj.value="true";

else obj.value = "false";

values.push(obj);

obj = new Object();

obj.node = "show_user";

if(document.getElementById('Window'+Window.base.id+'_show_user').checked == true)

obj.value="true";

else obj.value="false";

values.push(obj);

obj = new Object();

obj.node = "show_user_data";

if(document.getElementById('Window'+Window.base.id+'_show_user_data').checked == true)

obj.value="true";

else obj.value="false";

values.push(obj);

obj = new Object();

obj.node = "chat_show_online";

if(document.getElementById('Window'+Window.base.id+'_chat_show_online').checked ==

true) obj.value="true";

else obj.value="false";

values.push(obj);

obj = new Object();

obj.node = "send_mail_to_contacts";

if(document.getElementById('Window'+Window.base.id+'_send_mail_to_contacts').checked ==

true) obj.value="true";

else obj.value="false";

values.push(obj);

obj = new Object();

obj.node = "co_add_to_cal";

if(document.getElementById('Window'+Window.base.id+'_co_add_to_cal').checked == true)

obj.value="true";

else obj.value="false";

values.push(obj);

obj = new Object();

obj.node = "birthdate";

var birthdate =

document.getElementById('Window'+Window.base.id+'_birthdate_year').value;

birthdate+= '-

'+document.getElementById('Window'+Window.base.id+'_birthdate_month').value;

birthdate+= '-

'+document.getElementById('Window'+Window.base.id+'_birthdate_day').value;

obj.value = birthdate;

values.push(obj);

var xml = CreateXML(values);

var url = "programs/settings/save_xml_settings.php";

setXMLRequest(url, xml);

Window.base.close(Window.base.id);

},

onresize:function()

{

Page 247: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 247

document.getElementById("Window"+this.base.id+"_MenuBar").style.width =

this.base.width-5;

},

};

OBJ_TASKBAR.js

function OBJ_TASKBAR()

{

this.obj = document.getElementById('TaskBar');

}

OBJ_TASKBAR.prototype =

{

type: "OBJ_TASKBAR",

add: function(item)

{

var left = this.items.length*130+2;

var str = "<div id='TaskBarItem"+item.id+"' class='TaskBarItem'

style='left:"+left+";width:120px;'>";

str += "<img src='"+item.iconpath+"' height='16' style='float:left;' />";

str += "<div class='TaskBarItem_Text'

id='TaskBarItem"+item.id+"_text'>"+item.text[language]+'</div>';

str += "</div>";

this.items.push(item);

TempDiv.innerHTML = str;

item.obj = document.getElementById('TaskBarItem'+item.id);

this.obj.appendChild(item.obj);

TempDiv.innerHTML = "";

item.obj.onmouseover = function()

{

item.obj.style.background = 'url(images/taskbar_item_over_bg.png)';

if(MouseIsDown)

{

var WindowObj = null;

for(var i = 0; i<Windows.length; i++) if(Windows[i].base.id == item.id)

WindowObj = Windows[i].base;

if(WindowObj != null)

{

WindowObj.bringToFront();

}

}

};

item.obj.onmouseout = function()

{

item.obj.style.background = 'url(images/taskbar_item_bg.png)';

};

item.obj.onclick = function()

{

var WindowObj = null;

for(var i = 0; i<Windows.length; i++) if(Windows[i].base.id == item.id) WindowObj =

Windows[i].base;

if(WindowObj != null)

{

WindowObj.bringToFront();

Page 248: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 248

}

};

this.resizeTasks();

},

remove: function(id)

{

for(var i = 0; i<this.items.length; i++)

{

if(id == this.items[i].id)

{

this.obj.removeChild(this.items[i].obj);

this.items.splice(i, 1);

}

}

this.resizeTasks();

},

resizeTasks: function()

{

var possible_width = WindowWidth - 110;

var newwidth = null;

var width_per_task = 130;

if(this.items.length != 0)

{

var curr_width = this.items[0].obj.style.width;

curr_width = parseInt(curr_width);

if(this.items.length*110+2 >= possible_width)

{

var width_per_task = parseInt((possible_width/this.items.length)-2);

var width_diff = curr_width-width_per_task;

var oldleft = null;

var left;

for(var i = 0; i < this.items.length; i++)

{

this.items[i].obj.style.width = (width_per_task-10);

var curr_left = this.items[i].obj.style.left;

curr_left = curr_left.substr(0, curr_left.length-2);

if(parseInt(curr_left) > 2) this.items[i].obj.style.left =

((i*width_per_task)+2)+"px";

}

}

else

{

for(var i = 0; i < this.items.length; i++)

{

this.items[i].obj.style.width = width_per_task;

var curr_left = this.items[i].obj.style.left;

curr_left = curr_left.substr(0, curr_left.length-2);

this.items[i].obj.style.left = ((i*width_per_task)+2+(i*8))+"px";

}

}

}

},

overlay:function()

Page 249: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 249

{

document.getElementById("HideTaskBarDiv").style.visibility = 'visible';

},

overlay_out:function()

{

document.getElementById("HideTaskBarDiv").style.visibility = 'hidden';

},

obj: null,

items: new Array()

};

function OBJ_TASKBARITEM()

{

}

OBJ_TASKBARITEM.prototype =

{

type: "OBJ_TASKBARITEM",

id: null,

obj: null,

iconpath: 'images/icons/default.png',

text:

{

de:'Programm',

en:'Program'

}

};

calendar/delete_entry.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

$ok = false;

if($_REQUEST['UserId'] == $_SESSION['user_id']) $ok = true;

else

{

$query_perm = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['UserId']."'");

while($row_perm = mysql_fetch_array($query_perm))

{

if($row_perm['to_id'] == $_SESSION['user_id'] && $row_perm['to_type']=='USER' &&

$row_perm['permission'][2]==1) $ok = true;

if($row_perm['to_type'] == 'GROUP')

{

$query_group = mysql_query("SELECT contact_ids FROM groups WHERE

id='".$row_perm['to_id']);

while($row_group = mysql_fetch_array($query_group))

{

$user_ids = explode($row_group['contact_ids'], ';');

foreach($user_ids as $id)

{

if(strlen($id) != 0)

{

if($id == $_SESSION['user_id'])

{

Page 250: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 250

if($row['permission'][2] == '1') $ok = true;

}

}

}

}

}

}

}

if($ok) $query = mysql_query("DELETE FROM calender WHERE id='".$_GET['EntryId']."' AND

user_id='".$_GET['UserId']."'");

else echo 'No Permission';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

calendar/get_categories.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

$ok;

$colors = array();

if($_REQUEST['UserId'] == $_SESSION['user_id']) $ok = true;

else

{

$query_perm = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['UserId']."'");

while($row_perm = mysql_fetch_array($query_perm))

{

if($row_perm['to_id'] == $_SESSION['user_id'] && $row_perm['to_type']=='USER' &&

$row_perm['permission'][1]==1)

{

$ok = true;

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) array_push($colors, $arr_elem);

}

}

if($row_perm['to_type'] == 'GROUP')

{

$query_group = mysql_query("SELECT contact_ids FROM groups WHERE

id='".$row_perm['to_id']."'");

while($row_group = mysql_fetch_array($query_group))

{

$user_ids = explode(';', $row_group['contact_ids']);

foreach($user_ids as $id)

{

if(strlen($id) != 0)

{

if($id == $_SESSION['user_id'])

{

Page 251: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 251

if($row['permission'][1] == '1')

{

$ok = true;

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) array_push($colors,

$arr_elem);

}

}

}

}

}

}

}

}

}

echo '<entries>';

$query = mysql_query("SELECT * FROM cal_colors");

while($row = mysql_fetch_array($query))

{

if($_REQUEST['UserId'] == $_SESSION['user_id'])

{

echo '<entry>

<id>'.$row['id'].'</id>

<name>'.$row['name'].'</name>

</entry>';

}

else

{

foreach($colors as $color)

{

if($color == $row['id'])

{

echo '<entry>

<id>'.$row['id'].'</id>

<name>'.$row['name'].'</name>

</entry>';

}

}

}

}

echo '</entries>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 252: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 252

calendar/get_entries.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

$ok;

$colors = array();

if($_REQUEST['UserId'] == $_SESSION['user_id']) $ok = true;

else

{

$query_perm = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['UserId']."'");

while($row_perm = mysql_fetch_array($query_perm))

{

if($row_perm['to_id'] == $_SESSION['user_id'] && $row_perm['to_type']=='USER' &&

$row_perm['permission'][1]==1)

{

$ok = true;

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) array_push($colors, $arr_elem);

}

}

if($row_perm['to_type'] == 'GROUP')

{

$query_group = mysql_query("SELECT contact_ids FROM groups WHERE

id='".$row_perm['to_id']."'");

while($row_group = mysql_fetch_array($query_group))

{

$user_ids = explode(';', $row_group['contact_ids']);

foreach($user_ids as $id)

{

if(strlen($id) != 0)

{

if($id == $_SESSION['user_id'])

{

if($row['permission'][1] == '1')

{

$ok = true;

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) array_push($colors,

$arr_elem);

}

}

}

}

}

}

}

}

}

echo '<entries>';

$query = mysql_query("SELECT * FROM cal_colors");

Page 253: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 253

while($row = mysql_fetch_array($query))

{

if($_REQUEST['UserId'] == $_SESSION['user_id'])

{

echo '<entry>

<id>'.$row['id'].'</id>

<name>'.$row['name'].'</name>

</entry>';

}

else

{

foreach($colors as $color)

{

if($color == $row['id'])

{

echo '<entry>

<id>'.$row['id'].'</id>

<name>'.$row['name'].'</name>

</entry>';

}

}

}

}

echo '</entries>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

calendar/get_entry.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

$id = $_REQUEST['id'];

$query = mysql_query("SELECT * FROM calender WHERE id='".$id."'");

$row = mysql_fetch_array($query);

$ok = false;

$permission = null;

if($row['user_id'] == $_SESSION['user_id'])

{

$ok = true;

$permission = '111';

}

else

{

//FALLS User-Freigabe

$query2 = mysql_query("SELECT * FROM calendar_shares WHERE

to_id='".$_SESSION['user_id']."' AND to_type='USER'");

$result2 = mysql_fetch_array($query2);

if($result2['to_type'] == 'USER' && strpos($result2['entries_group_id'],

$row['color_id'].';') !== true)

Page 254: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 254

{

$ok = true;

if($permission != null)

{

if($permission<$result2['permission']) $permission = $result2['permission'];

}

else $permission = $result2['permission'];

}

$queryg = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['user_id']."' AND to_type='GROUP'");

while($rowg = mysql_fetch_array($queryg))

{

$query3 = mysql_query("SELECT contact_ids FROM groups WHERE id='".$rowg['to_id']."'");

$result3 = mysql_fetch_array($query3);

$c_ids = explode(';', $result3[0]);

foreach($c_ids as $c_id)

{

$query4 = mysql_query("SELECT vpc_id FROM contacts WHERE id='".$c_id."'");

$result4 = mysql_fetch_array($query4);

if($result4[0] == $_SESSION['user_id'])

{

if(strpos($result2['entries_group_id'], $row['color_id'].';') !== true)

{

$ok = true;

if($permission != null)

{

if($permission<$rowg['permission']) $permission = $rowg['permission'];

}

else $permission = $rowg['permission'];

}

}

}

}

}

if($ok)

{

echo '<entry>';

echo '<id>'.$row['id'].'</id>';

echo '<startdatetime>'.$row['startdatetime'].'</startdatetime>';

echo '<enddatetime>'.$row['enddatetime'].'</enddatetime>';

echo '<remind>'.$row['remind'].'</remind>';

echo '<reminddatetime>'.$row['reminddatetime'].'</reminddatetime>';

echo '<title>'.$row['title'].'</title>';

echo '<text>'.$row['text'].'</text>';

echo '<wholeday>'.$row['wholeday'].'</wholeday>';

echo '<color_id>'.$row['color_id'].'</color_id>';

echo '<user_id>'.$row['user_id'].'</user_id>';

echo '<other_user_ids>'.$row['other_user_ids'].'</other_user_ids>';

echo '<already_reminded>'.$row['already_reminded'].'</already_reminded>';

echo '<recurring_bool>'.$row['recurring_bool'].'</recurring_bool>';

echo '<recurring_intervall>'.$row['recurring_intervall'].'</recurring_intervall>';

echo '<recurring_class>'.$row['recurring_class'].'</recurring_class>';

$query6 = mysql_query("SELECT name FROM cal_colors WHERE id='".$row['color_id']."'");

$res6 = mysql_fetch_array($query6);

echo '<color>'.$res6['name'].'</color>';

echo '<color_id>'.$row['color_id'].'</color_id>';

echo '<permission>'.$permission.'</permission>';

echo '</entry>';

}

else echo 'No Permission';

?>

Page 255: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 255

<?php

} //Ende der Kontrolle ob angemeldet

?>

calendar/get_other_calendars.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

function drawRow($row)

{

echo '<entry>

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['from_id']."'");

$r2 = mysql_fetch_array($q2);

echo '<name>'.$r2["forename"].' '.$r2['surname'].'</name>';

echo '</entry>';

}

$start = $_REQUEST['start'].' 00:00:00';

$end = $_REQUEST['end'].' 00:00:00';

echo '<entries>';

$query = mysql_query("SELECT * FROM calendar_shares");

while($row = mysql_fetch_array($query))

{

if($row['to_type']=='USER' && $row['to_id'] == $_SESSION['user_id']) drawRow($row);

else if($row['to_type'] == 'GROUP')

{

$q2 = mysql_query("SELECT contact_ids FROM groups WHERE id='".$row['to_id']."'");

$r2 = mysql_fetch_array($q2);

$contacts = explode(';', $r2[0]);

foreach($contacts as $contact)

{

if(strlen($contact) != 0)

{

$q3 = mysql_query("SELECT vpc_id FROM contacts WHERE id='".$contact."'");

$r3 = mysql_fetch_array($q3);

if($r3[0] == $_SESSION['user_id']) drawRow($row);

}

}

}

}

echo '</entries>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 256: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 256

calendar/get_remindings.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<entries>';

$id = $_REQUEST['id'];

$datetime = $_REQUEST['datetime'];

$ids = array();

$temp = array("id"=>$_SESSION['user_id'], "perm"=>"111", "entry_ids"=>array());

array_push($ids, $temp);

$query_shares = mysql_query("SELECT * from calendar_shares WHERE

to_id='".$_SESSION['user_id']."' OR to_type='GROUP'");

while($r1 = mysql_fetch_array($query_shares))

{

if($r1['to_type'] == 'USER')

{

$temp = array("id"=>$r1['from_id'], "perm"=>$r1['permission'],

"entry_ids"=>explode(";", $r1['entries_group_id']));

array_push($ids, $temp);

}

else

{

$q2 = mysql_query("SELECT contact_ids FROM groups WHERE id='".$r1['to_id']."'");

$r2 = mysql_fetch_array($q2);

$contact_ids = explode(";", $q2['contact_ids']);

foreach($contact_ids as $c_id)

{

if(strlen($c_id) != 0)

{

$q3 = mysql_query("SELECT vpc_id FROM contacts WHERE id='".$c_id."'");

$r3 = mysql_fetch_array($q3);

if($r3['vpc_id'] == $_SESSION['user_id'])

{

$temp = array("id"=>$r1['from_id'], "perm"=>$r1['permission'],

"entry_ids"=>explode(";", $r1['entries_group_id']));

array_push($ids, $temp);

}

}

}

}

}

foreach($ids as $id)

{

if($id['perm'][0] == '1')

{

if(count($id['entry_ids']) == 0)

{

$q4 = mysql_query("SELECT * FROM calender WHERE user_id='".$id['id']."' AND

(reminddatetime BETWEEN '1900-00-01 00:00:00' AND '".$datetime."') AND

already_reminded='false' AND remind='true'");

while($r4 = mysql_fetch_array($q4))

{

echo '<entry>';

echo '<id>'.$r4['id'].'</id>';

echo '<title>'.$r4['title'].'</title>';

Page 257: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 257

echo '<user_id>'.$r4['user_id'].'</user_id>';

echo '<text>'.$r4['text'].'</text>';

echo '<color_id>'.$r4['color_id'].'</color_id>';

$q5 = mysql_query("SELECT name FROM cal_colors WHERE

id='".$r4['color_id']."'");

$r5 = mysql_fetch_array($q5);

echo '<color_name>'.$r5['name'].'</color_name>';

echo '<start>'.$r4['startdatetime'].'</start>';

echo '<recurring>'.$r4['recurring_bool'].'</recurring>';

echo

'<recurring_intervall>'.$r4['recurring_intervall'].'</recurring_intervall>';

echo '<recurring_class>'.$r4['recurring_class'].'</recurring_class>';

echo '</entry>';

}

}

else

{

foreach($id['entry_ids'] as $entry_id)

{

if(strlen($entry_id) != 0)

{

$q4 = mysql_query("SELECT * FROM calender WHERE user_id='".$id['id']."'

AND (reminddatetime BETWEEN '1900-00-01 00:00:00' AND '".$datetime."') AND

already_reminded='false' AND remind='true' AND color_id='".$entry_id."'");

while($r4 = mysql_fetch_array($q4))

{

echo '<entry>';

echo '<id>'.$r4['id'].'</id>';

echo '<title>'.$r4['title'].'</title>';

echo '<user_id>'.$r4['user_id'].'</user_id>';

echo '<text>'.$r4['text'].'</text>';

echo '<color_id>'.$r4['color_id'].'</color_id>';

$q5 = mysql_query("SELECT name FROM cal_colors WHERE

id='".$r4['color_id']."'");

$r5 = mysql_fetch_array($q5);

echo '<color_name>'.$r5['name'].'</color_name>';

echo '<start>'.$r4['startdatetime'].'</start>';

echo '<recurring>'.$r4['recurring_bool'].'</recurring>';

echo

'<recurring_intervall>'.$r4['recurring_intervall'].'</recurring_intervall>';

echo '<recurring_class>'.$r4['recurring_class'].'</recurring_class>';

echo '</entry>';

}

}

}

}

}

}

echo '</entries>';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 258: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 258

calendar/get_searched_entries.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

function createOutput($row)

{

if(proof_regular($row['color_id']))

{

echo '<entry>

<id>'.$row['id'].'</id>

<start>'.$row['startdatetime'].'</start>

<end>'.$row['enddatetime'].'</end>

<remind_bool>'.$row['remind'].'</remind_bool>

<remind>'.$row['reminddatetime'].'</remind>

<title><![CDATA['.htmlentities($row['title']).']]></title>

<text><![CDATA['.htmlentities($row['text']).']]></text>

<wholeday>'.$row['wholeday'].'</wholeday>

<recurring_bool>'.$row['recurring_bool'].'</recurring_bool>

<recurring_intervall>'.$row['recurring_intervall'].'</recurring_intervall>

<recurring_class>'.$row['recurring_class'].'</recurring_class>

<other_users>'.$row['other_user_ids'].'</other_users>';

$q2 = mysql_query("SELECT name FROM cal_colors WHERE

id='".$row['color_id']."'");

$row2 = mysql_fetch_array($q2);

echo '

<color>'.$row2['name'].'</color>

<user_id>'.$row2['user_id'].'</user_id>

</entry>';

}

}

function proof_regular($id)

{

$ok = false;

if($_REQUEST['UserId'] == $_SESSION['user_id']) $ok = true;

else

{

$query_perm = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_REQUEST['UserId']."'");

while($row_perm = mysql_fetch_array($query_perm))

{

if($row_perm['to_id'] == $_SESSION['user_id'] && $row_perm['to_type']=='USER' &&

$row_perm['permission'][0]==1)

{

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) if($id == $arr_elem) $ok = true;

}

}

if($row_perm['to_type'] == 'GROUP')

{

$query_group = mysql_query("SELECT contact_ids FROM groups WHERE

id='".$row_perm['to_id']."'");

while($row_group = mysql_fetch_array($query_group))

{

$contact_ids = explode(';', $row_group['contact_ids']);

Page 259: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 259

foreach($contact_ids as $c_id)

{

if(strlen($c_id) != 0)

{

$q3 = mysql_query("SELECT vpc_id FROM contacts WHERE

id='".$c_id."'");

$r3 = mysql_fetch_array($q3);

$user_id = $r3[0];

if($user_id == $_SESSION['user_id'])

{

if($row_perm['permission'][0] == '1')

{

if(strlen($row_perm['entries_group_id']) != 0)

{

$arr = explode(';', $row_perm['entries_group_id']);

foreach($arr as $arr_elem) if($arr_elem == $id) $ok =

true;

}

}

}

}

}

}

}

}

}

return $ok;

}

$start = $_REQUEST['start'].' 00:00:00';

$end = $_REQUEST['end'].' 00:00:00';

echo '<entries>';

$query = mysql_query("SELECT * FROM calender WHERE user_id='".$_REQUEST['UserId']."' AND

(title LIKE '%".$_REQUEST['searchstring']."%' OR text LIKE

'%".$_REQUEST['searchstring']."%')");

while($row = mysql_fetch_array($query))

{

createOutput($row);

}

echo '</entries>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 260: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 260

chat/conversation_is_open.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

include "../../connect.php";

$query = mysql_query("SELECT status FROM chat_conversations WHERE id='".$_GET['id']."'");

$row = mysql_fetch_array($query);

echo $row['status'];

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/get_chat_log.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<conversations>';

$q1 = mysql_query("SELECT id, started FROM chat_conversations WHERE

(from_id='".$_SESSION['user_id']."' AND to_id='".$_GET['id']."') OR

(to_id='".$_SESSION['user_id']."' AND from_id='".$_GET['id']."') AND status='closed' ORDER BY

started DESC");

while($c_row = mysql_fetch_array($q1))

{

echo '<conversation>';

echo '<id>'.$c_row['id'].'</id>';

echo '<started>'.$c_row['started'].'</started>';

echo '<messages>';

$q2 = mysql_query("SELECT * FROM chat_messages WHERE conversation_id='".$c_row['id']."'

ORDER BY datetime");

while($row = mysql_fetch_array($q2))

{

echo '<message>';

echo '<id>'.$row['id'].'</id>';

echo '<from_id>'.$row['from_id'].'</from_id>';

echo '<datetime>'.$row['datetime'].'</datetime>';

echo '<text>'.$row['text'].'</text>';

$q3 = mysql_query("SELECT chat_font_id, chat_color FROM users WHERE

id='".$row['from_id']."'");

$r3 = mysql_fetch_array($q3);

echo '<color>'.$r3['chat_color'].'</color>';

$q4 = mysql_query("SELECT name from chat_fonts WHERE id='".$r3['chat_font_id']."'");

$r4 = mysql_fetch_array($q4);

echo '<font>'.$r4['name'].'</font>';

echo '</message>';

}

echo '</messages>';

echo '</conversation>';

}

Page 261: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 261

echo '</conversations>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

chat/get_users.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

include '../filesystem/permissions.php';

include '../filesystem/class_file.php';

echo '<items>';

$qusers = mysql_query("SELECT id, forename, surname, vpc_id FROM contacts WHERE

user_id='".$_SESSION['user_id']."' AND vpc_id!='0' ORDER BY surname, forename");

while($user_row = mysql_fetch_array($qusers))

{

echo '<item>';

echo '<name>'.$user_row['forename'].' '.$user_row['surname'].'</name>';

echo '<forename>'.$user_row['forename'].'</forename>';

echo '<surname>'.$user_row['surname'].'</surname>';

echo '<contact_id>'.$user_row['id'].'</contact_id>';

echo '<id>'.$user_row['vpc_id'].'</id>';

$quser = mysql_query("SELECT chat_status_id, chat_text FROM users WHERE

id='".$user_row['vpc_id']."'");

$ruser = mysql_fetch_array($quser);

echo '<chat_status>'.$ruser['chat_status_id'].'</chat_status>';

echo '<chat_text>'.$ruser['chat_text'].'</chat_text>';

echo '</item>';

}

echo '</items>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 262: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 262

chat/has_conversation.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<conversations>';

$query = mysql_query("SELECT id, from_id FROM chat_conversations WHERE

to_id='".$_SESSION['user_id']."' AND status='open'");

while($row = mysql_fetch_array($query))

{

echo '<conversation>';

echo '<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE id='".$row['from_id']."'");

$r2 = mysql_fetch_array($q2);

echo '<from_name>'.$r2['forename'].' '.$r2['surname'].'</from_name>';

echo '<id>'.$row['id'].'</id>';

echo '</conversation>';

}

echo '</conversations>';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/load_settings.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<settings>';

$qusers = mysql_query("SELECT chat_text, chat_status_id FROM users WHERE

id='".$_SESSION['user_id']."'");

while($user_row = mysql_fetch_array($qusers))

{

echo '<text>'.$user_row['chat_text'].'</text>';

echo '<status>'.$user_row['chat_status_id'].'</status>';

}

echo '</settings>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 263: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 263

chat/receive_message.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

include "../filesystem/settings.php";

echo '<messages>';

$query = mysql_query("SELECT id FROM chat_conversations WHERE

(to_id='".$_SESSION['user_id']."' OR from_id='".$_SESSION['user_id']."') AND status='open'");

while($row = mysql_fetch_array($query))

{

$datetime = date("Y-m-d H:i:s");

$datetime2 = date("Y-m-d H:i:");

if(date("s")<1) $datetime2.= '60';

else

$datetime2.=(date("s")-1);

$q2 = mysql_query("SELECT * FROM chat_messages WHERE conversation_id='".$row['id']."'

AND ((from_id='".$_SESSION['user_id']."' AND from_read='false') OR

(from_id!='".$_SESSION['user_id']."' AND to_read='false'))");

echo "SELECT * FROM chat_messages WHERE conversation_id='".$row['id']."' AND

(datetime='".$datetime."' OR datetime='".$datetime2."')";

while($row = mysql_fetch_array($q2))

{

if($row['from_id'] == $_SESSION['user_id']) mysql_query("UPDATE chat_messages SET

from_read='true' WHERE id='".$row['id']."'");

else mysql_query("UPDATE chat_messages SET to_read='true' WHERE

id='".$row['id']."'");

echo '<message>';

echo '<chat_id>'.$row['conversation_id'].'</chat_id>';

echo '<from_id>'.$row['from_id'].'</from_id>';

$q3 = mysql_query("SELECT forename, surname, chat_color, chat_font_id FROM users

WHERE id='".$row['from_id']."'");

$row2 = mysql_fetch_array($q3);

echo '<from_name>'.$row2['forename'].' '.$row2['surname'].'</from_name>';

echo '<from_color>'.$row2['chat_color'].'</from_color>';

$q4 = mysql_query("SELECT name from chat_fonts WHERE

id='".$row2['chat_font_id']."'");

$row4 = mysql_fetch_array($q4);

echo '<from_font>'.$row4['name'].'</from_font>';

echo '<text>'.$row['text'].'</text>';

echo '</message>';

}

}

echo '</messages>';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 264: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 264

chat/set_status.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

include "../../connect.php";

mysql_query("UPDATE users SET chat_status_id='".$_GET['id']."' WHERE

id='".$_SESSION['user_id']."'");

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/set_text.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

include "../../connect.php";

mysql_query("UPDATE users SET chat_text='".$_GET['text']."' WHERE

id='".$_SESSION['user_id']."'");

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/start_conversation.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

include "../../connect.php";

$datetime = date("Y-m-d H:i:s");

mysql_query("INSERT INTO chat_conversations(from_id, to_id, started)

VALUES('".$_SESSION['user_id']."', '".$_GET['id']."', '".$datetime."')");

Page 265: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 265

$query = mysql_query("SELECT id FROM chat_conversations WHERE started='".$datetime."' AND

from_id='".$_SESSION['user_id']."' AND to_id='".$_GET['id']."'");

$row = mysql_fetch_array($query);

echo $row['id'];

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/stop_conversation.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

include "../../connect.php";

$datetime = date("Y-m-d H:i:s");

mysql_query("UPDATE chat_conversations SET status='closed' WHERE id='".$_GET['id']."'");

?><?php

} //Ende der Kontrolle ob angemeldet

?>

chat/user_is_online.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

include "../../connect.php";

$query = mysql_query("SELECT chat_status_id FROM users WHERE id='".$_GET['id']."'");

$row = mysql_fetch_array($query);

if($row['chat_status_id'] != 0) echo 'true';

else echo 'false';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 266: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 266

chat/write.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../../connect.php";

?>

<?php

$datetime = date("Y-m-d H:i:s");

$text = $_GET['text'];

$text = str_replace("&", "&amp;", $text);

$text = str_replace("'", "&apos;", $text);

$text = str_replace('"', "&quot;", $text);

$text = str_replace('<', "&lt;", $text);

$text = str_replace('>', "&gt;", $text);

$text = str_replace('Ä', "&#196;", $text);

$text = str_replace('Ö', "&#214;", $text);

$text = str_replace('Ü', "&#220;", $text);

$text = str_replace('ä', "&#228", $text);

$text = str_replace('ö', "&#246;", $text);

$text = str_replace('ü', "&#252;", $text);

$text = str_replace('ß', "&#223;", $text);

$query = "INSERT INTO chat_messages(conversation_id, from_id, datetime, text) ";

$query.= "VALUES('".$_GET['id']."', '".$_SESSION['user_id']."', '".$datetime."',

'".$text."')";

mysql_query($query);

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/add_to_personal.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

$q1 = mysql_query("SELECT id, forename, surname, birthdate, profession, address, postalcode,

country, city, phone, email, web, comment, show_user, show_user_data FROM users WHERE

id='".$_GET['id']."'");

$res1 = mysql_fetch_array($q1);

if($res1['show_user'] != "false")

{

if($res1['show_user_data'] != "false")

{

$birthdate = $res1['birthdate'];

$profession = $res1['profession'];

$address = $res1['address'];

$postal = $res1['postalcode'];

$country = $res1['country'];

$city = $res1['city'];

$email = $res1['email'];

$web = $res1['web'];

$phone = $res1['phone'];

$comment = $res1['comment'];

Page 267: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 267

}

$datetime = date("Y-m-d H:i:s");

$q2 = "INSERT INTO contacts(user_id, forename, surname, birthdate, profession, ";

$q2.= "address_priv, postal_priv, country_priv, city_priv, email_priv, web_priv,

phone_priv, ";

$q2.= "`comment`, vpc_id, created) ";

$q2.= "VALUES('".$_SESSION['user_id']."', '".$res1['forename']."',

'".$res1['surname']."', ";

$q2.= "'".$birthdate."', '".$profession."', '".$address."', '".$postal."',

'".$country."', ";

$q2.= "'".$city."', '".$email."', '".$web."', '".$phone."', '".$comment."',

'".$_GET['id']."', '".$datetime."')";

mysql_query($q2);

$q3 = mysql_query("SELECT id FROM contacts WHERE user_id='".$_SESSION['user_id']."'

AND created='".$datetime."'");

$r3 = mysql_fetch_array($q3);

$id = $r3[0];

if(file_exists($datadir.$_GET['id'].'/user.jpg'))

{

copy($datadir.$_GET['id'].'/user.jpg',

$datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg');

}

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/contact_image.php

<?php

session_start();

$id = "";

include "../../connect.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

if($_GET['type']!='vpc')

{

$path = $datadir.$id.'/contacts/'.$_GET['id'].'.jpg';

}

else $path = $datadir.$_GET['id'].'/user.jpg';

if(file_exists($path))

{

echo readfile($path);

Page 268: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 268

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/contact_temp_image.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

include "../filesystem/class_file.php";

$path = $datadir.$_GET['user_id'].'/data'.$_GET['path'];

$File = new FilePath($_GET['path'], $_GET['user_id']);

if(file_exists($path) && $File->permissions[0] == '1')

{

$imagedata = getimagesize($path);

$w = $imagedata[0];

$h = $imagedata[1];

if ($h > 120)

{

$new_w = (120 / $h) * $w;

$new_h = 120;

}

if($w > 100)

{

$new_h = (100 / $w) * $h;

$new_w = 100;

}

if(!isset($new_h))

{

$new_h = $h;

$new_w = $w;

}

$im2 = ImageCreateTrueColor($new_w, $new_h);

$image = null;

if(filesize($path)<13056)

{

switch($imagedata[2])

{

case 2:

$image = ImageCreateFromJpeg($path);

break;

case 1:

$image = imagecreatefromgif($path);

break;

case 3:

$image = imagecreatefrompng($path);

break;

}

}

if($image != null)

{

imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h, $imagedata[0],

$imagedata[1]);

$output = $im2;

Page 269: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 269

echo imagejpeg($output);

}

else

{

$path = "../../images/contacts/image_unknown.png";

$handle = fopen($path, "r");

$cont = fread($handle, filesize($path));

fclose($handle);

echo $cont;

}

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/create_code.php

<?php

function create_code()

{

$signs = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

$code = $_SESSION['user_id'].date("YmdHis");

for($i = 0; $i<20; $i++)

{

$code.= $signs[rand(0,61)];

}

return $code;

}

?>

contacts/delete_contact.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

$q1 = mysql_query("SELECT user_id FROM contacts WHERE id='".$_GET['id']."'");

$r1 = mysql_fetch_array($q1);

if($r1[0]==$_SESSION['user_id'])

{

$query = "DELETE FROM contacts WHERE id='".$_GET['id']."'";

mysql_query($query);

$q2 = mysql_query("SELECT id, contact_ids FROM groups WHERE

user_id='".$_SESSION['user_id']."'");

while($r2 = mysql_fetch_array($q2))

{

if(strpos($r2['contact_ids'], $_GET['id'].";")!==false)

{

$user_new_ids = str_replace($_GET['id'].";", "", $r2['contact_ids']);

mysql_query("UPDATE groups SET contact_ids='".$user_new_ids."' WHERE

id='".$r2['id']."'");

Page 270: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 270

}

}

$cfile = $datadir.$_SESSION['user_id'].'/contacts/'.$_GET['id'].'.jpg';

if(file_exists($cfile)) unlink ($cfile);

}

else echo 'Sie haben nicht die Berechtigung';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/export.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "../filesystem/settings.php";

?><?php

include "../../connect.php";

include '../filesystem/class_file.php';

include 'vcard.php';

if($_GET['user_id']!= "") $guserid = $_GET['user_id'];

else $guserid = null;

$file = new FilePath($_GET['path'], $guserid);

/*echo 'FULL-Path:'.$file->full_path.'<br />';

echo 'PERMISSIONS:'.$file->permissions.'<br />';

echo 'USER-PATH:'.$file->user_path.'<br />';

echo 'USER_ID:'.$file->user_id.'<br />';

echo 'FILENAME:'.$file->filename.'<br />';

echo 'FILETYPE:'.$file->filetype.'<br />';

echo 'FILE_EXISTS:'.$file->file_exists.'<br />';

echo 'PERMISSIONS_PATH:'.$file->permissions_path.'<br />';

echo 'FOLDERPATH:'.$file->folderpath.'<br />';*/

if($file->permissions[1] == '1')

{

$cont = vcard($_GET['contact_id']);

$handle = fopen($file->full_path, 'w+');

fwrite($handle, $cont);

fclose($handle);

}

else

{

if($_SESSION['language']=='de') echo 'Sie haben nicht die Berechtigung, die Datei zu

erstellen!';

else echo "You don't have the permission to create the file!";

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 271: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 271

contacts/get_contact.php

<?php

session_start();

$id = "";

include "../../connect.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if(strlen($id) != 0);

{

?>

<?php

header('Content-type:text/xml;');

include "../filesystem/settings.php";

echo '<contacts>';

$type = $_GET['type'];

if($type == 'personal')

{

$query = mysql_query("SELECT * FROM contacts WHERE user_id='".$id."' AND

id='".$_GET['id']."'");

$row = mysql_fetch_array($query);

echo '<contact>

<id>'.$row['id'].'</id>

<type>personal</type>

<forename>'.$row['forename'].'</forename>

<surname>'.$row['surname'].'</surname>

<phone_priv>'.$row['phone_priv'].'</phone_priv>

<phone_bus>'.$row['phone_bus'].'</phone_bus>

<phone_add>'.$row['phone_add'].'</phone_add>

<email_priv>'.$row['email_priv'].'</email_priv>

<email_bus>'.$row['email_bus'].'</email_bus>

<email_add>'.$row['email_add'].'</email_add>

<address_priv>'.$row['address_priv'].'</address_priv>

<address_bus>'.$row['address_bus'].'</address_bus>

<postal_priv>'.$row['postal_priv'].'</postal_priv>

<postal_bus>'.$row['postal_bus'].'</postal_bus>

<city_priv>'.$row['city_priv'].'</city_priv>

<city_bus>'.$row['city_bus'].'</city_bus>

<country_priv>'.$row['country_priv'].'</country_priv>

<country_bus>'.$row['country_bus'].'</country_bus>

<vpc_id>'.$row['vpc_id'].'</vpc_id>

<web_priv>'.$row['web_priv'].'</web_priv>

<web_bus>'.$row['web_bus'].'</web_bus>

<birthdate>'.$row['birthdate'].'</birthdate>

<comment>'.$row['comment'].'</comment>

<fax>'.$row['fax'].'</fax>

<group_ids>'.$row['group_id'].'</group_ids>

<profession>'.$row['profession'].'</profession>

<email_priv_activated>'.$row['email_priv_activated'].'</email_priv_activated>

<email_bus_activated>'.$row['email_bus_activated'].'</email_bus_activated>

<email_add_activated>'.$row['email_add_activated'].'</email_add_activated>';

if(file_exists($datadir.$id.'/contacts/'.$row['id'].'.jpg')) echo

'<image>true</image>';

else echo '<image>false</image>';

Page 272: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 272

echo '</contact>';

}

elseif($type == 'vpc')

{

$query = mysql_query("SELECT id, forename, surname, birthdate, profession, address,

postalcode, country, city, phone, email, web, comment, show_user, show_user_data FROM users

WHERE id='".$_GET['id']."'");

$row = mysql_fetch_array($query);

if($row['show_user'] != "false")

{

echo '<contact>

<id>'.$row['id'].'</id>

<type>vpc</type>

<forename>'.$row['forename'].'</forename>

<surname>'.$row['surname'].'</surname>';

if($row['show_user_data'] != "false")

{

echo '

<phone_priv>'.$row['phone'].'</phone_priv>

<email_priv>'.$row['email'].'</email_priv>

<address_priv>'.$row['address'].'</address_priv>

<postal_priv>'.$row['postalcode'].'</postal_priv>

<city_priv>'.$row['city'].'</city_priv>

<country_priv>'.$row['country'].'</country_priv>

<web_priv>'.$row['web'].'</web_priv>

<birthdate>'.$row['birthdate'].'</birthdate>

<comment>'.$row['comment'].'</comment>

<profession>'.$row['profession'].'</profession>';

if(file_exists($datadir.$row['id'].'/user.jpg')) echo

'<image>true</image>';

else echo '<image>false</image>';

}

else

{

echo '<phone_priv />';

echo '<email_priv />';

echo '<address_priv />';

echo '<postal_priv />';

echo '<city_priv />';

echo '<country_priv />';

echo '<web_priv />';

echo '<birthdate />';

echo '<comment />';

echo '<profession />';

echo '<image>false</image>';

}

echo ' <vpc_id>'.$row['id'].'</vpc_id>

<phone_bus />

<phone_add />

<email_bus />

<email_add />

<fax />

<group_ids />

<address_bus />

<postal_bus />

<city_bus />

<country_bus />

<web_bus />

<email_priv_activated>false</email_priv_activated>

<email_bus_activated>false</email_bus_activated>

<email_add_activated>false</email_add_activated>';

echo '</contact>';

}

}

Page 273: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 273

echo '</contacts>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/get_contacts.php

<?php

session_start();

$id = "";

include "../../connect.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

//include "settings.php";

echo '<contacts>';

$query = mysql_query("SELECT * FROM contacts WHERE user_id='".$id."' ORDER BY surname,

forename");

while($row = mysql_fetch_array($query))

{

echo '<contact>

<id>'.$row['id'].'</id>

<forename>'.$row['forename'].'</forename>

<surname>'.$row['surname'].'</surname>

<phone_priv>'.$row['phone_priv'].'</phone_priv>

<phone_bus>'.$row['phone_bus'].'</phone_bus>

<phone_add>'.$row['phone_add'].'</phone_add>

<birthdate>'.$row['birthdate'].'</birthdate>

<email_priv>'.$row['email_priv'].'</email_priv>

<email_bus>'.$row['email_bus'].'</email_bus>

<email_add>'.$row['email_bus'].'</email_add>

<email_priv_activated>'.$row['email_priv_activated'].'</email_priv_activated>

<email_bus_activated>'.$row['email_bus_activated'].'</email_bus_activated>

<email_add_activated>'.$row['email_add_activated'].'</email_add_activated>

<vpc_id>'.$row['vpc_id'].'</vpc_id>

</contact>';

}

echo '</contacts>';

?>

<?php

Page 274: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 274

} //Ende der Kontrolle ob angemeldet

?>

contacts/get_group.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

header('Content-type:text/plain;');

include "../../connect.php";

$id = $_GET['id'];

$query = mysql_query("SELECT name FROM groups WHERE id='".$id."' AND

user_id='".$_SESSION['user_id']."'");

if(mysql_num_rows($query) != 0)

{

$row = mysql_fetch_array($query);

echo $row['name'];

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/get_groups.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<items>';

$qgroups = mysql_query("SELECT id, name, contact_ids FROM groups WHERE

user_id='".$_SESSION['user_id']."'");

while($group_row = mysql_fetch_array($qgroups))

{

echo '<item>';

echo '<name>'.$group_row['name'].'</name>';

echo '<id>'.$group_row['id'].'</id>';

echo '</item>';

}

echo '</items>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

Page 275: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 275

?>

contacts/get_users.php

<?php

session_start();

$id = "";

include "../../connect.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

//include "settings.php";

include "../../connect.php";

echo '<contacts>';

$q2 = mysql_query("SELECT id, forename, surname, birthdate, profession, address, postalcode,

country, city, phone, email, web, comment, show_user, show_user_data FROM users");

while($row2 = mysql_fetch_array($q2))

{

if($row2['id'] != $id)

{

if($row2['show_user'] != "false")

{

if($row2['show_user_data'] != "false")

{

$birthdate = $row2['birthdate'];

$profession = $row2['profession'];

$address = $row2['address'];

$postal = $row2['postalcode'];

$country = $row2['country'];

$city = $row2['city'];

$email = $row2['email'];

$web = $row2['web'];

$phone = $row2['phone'];

$comment = $row2['comment'];

}

echo '<contact>

<id>'.$row2['id'].'</id>

<forename>'.$row2['forename'].'</forename>

<surname>'.$row2['surname'].'</surname>

<phone_priv>'.$phone.'</phone_priv>

<phone_bus></phone_bus>

<email_priv>'.$email.'</email_priv>

<email_bus></email_bus>

<vpc_id>'.$row2['id'].'</vpc_id>

</contact>';

Page 276: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 276

}

}

}

echo '</contacts>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/save_contact.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

include "create_code.php";

include 'send_message.php';

$query_mail = mysql_query('SELECT send_mail_to_contacts FROM users WHERE

id="'.$_SESSION['user_id'].'"');

$send_mail = mysql_fetch_array($query_mail);

if($_GET['new']=="false")

{

$datetime = date("Y-m-d H:i:s");

$q1 = mysql_query("SELECT user_id, email_priv, email_bus, email_add FROM contacts WHERE

id='".$_GET['id']."'");

$r1 = mysql_fetch_array($q1);

if($r1['user_id']==$_SESSION['user_id'])

{

$q4 = mysql_query("SELECT id, contact_ids FROM groups WHERE

user_id='".$_SESSION['user_id']."'");

while($r4 = mysql_fetch_array($q4))

{

if(strpos($r4['contact_ids'], $_GET['id'].";")!==false)

{

$group_new_ids = str_replace($_GET['id'].";", "", $r4['contact_ids']);

mysql_query("UPDATE groups SET contact_ids='".$group_new_ids."' WHERE

id='".$r4['id']."'");

}

}

$query = "UPDATE contacts SET forename='".$_GET['forename']."', ";

$query.= "surname='".$_GET['surname']."', ";

$data = array();

$data['forename'] = $_GET['forename'];

$data['surname'] = $_GET['surname'];

$data['username'] = $_SESSION['forename'].' '.$_SESSION['surname'];

if($r1['email_priv'] != $_GET['email_priv'])

{

$code_priv = create_code();

$query.= "email_priv='".$_GET['email_priv']."', email_priv_activated='false',

email_priv_code='".$code_priv."', ";

$data['code'] = $code_priv;

if($send_mail[0] == 'true') send_message($_GET['email_priv'], $data);

}

if($r1['email_bus'] != $_GET['email_bus'])

Page 277: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 277

{

$code_bus = create_code();

$query.= "email_bus='".$_GET['email_bus']."', email_priv_activated='false',

email_bus_code='".$code_bus."', ";

$data['code'] = $code_bus;

if($send_mail[0] == 'true') send_message($_GET['email_bus'], $data);

}

if($r1['email_add'] != $_GET['email_add'])

{

$code_add = create_code();

$query.= "email_add='".$_GET['email_add']."', email_add_activated='false',

email_add_code='".$code_add."', ";

$data['code'] = $code_add;

if($send_mail[0] == 'true') send_message($_GET['email_add'], $data);

}

$query.= "phone_priv='".$_GET['phone_priv']."', ";

$query.= "phone_bus='".$_GET['phone_bus']."', ";

$query.= "phone_add='".$_GET['phone_add']."', ";

$query.= "address_priv='".$_GET['address_priv']."', ";

$query.= "address_bus='".$_GET['address_bus']."', ";

$query.= "postal_priv='".$_GET['postal_priv']."', ";

$query.= "postal_bus='".$_GET['postal_bus']."', ";

$query.= "city_priv='".$_GET['city_priv']."', ";

$query.= "city_bus='".$_GET['city_bus']."', ";

$query.= "country_priv='".$_GET['country_priv']."', ";

$query.= "country_bus='".$_GET['country_bus']."', ";

$query.= "fax='".$_GET['fax']."', ";

$query.= "web_priv='".$_GET['web_priv']."', ";

$query.= "web_bus='".$_GET['web_bus']."', ";

$query.= "birthdate='".$_GET['birthdate']."', ";

$query.= "profession='".$_GET['profession']."', ";

$query.= "lastchanged='".$datetime."', ";

$query.= "comment='".$_GET['comment']."', ";

$query.= "group_id='".$_GET['group_ids']."' ";

$query.= "WHERE id='".$_GET['id']."'";

//Aus allen Gruppen entfernen

$q6 = mysql_query("SELECT id, contact_ids FROM groups WHERE

user_id='".$_SESSION['user_id']."'");

while($r6 = mysql_fetch_array($q6))

{

$r6['contact_ids'] = str_replace($_GET['id'].';', '', $r6['contact_ids']);

mysql_query("UPDATE groups SET contact_ids='".$r6['contact_ids']."' WHERE

id='".$r6['id']."'");

}

mysql_query($query);

$groups = explode(';', $_GET['group_ids']);

foreach($groups as $group)

{

echo $group;

if(strlen($group) != 0)

{

$q5 = mysql_query("SELECT contact_ids FROM groups WHERE id='".$group."'");

$r5 = mysql_fetch_array($q5);

$r5[0] = str_replace($_GET['id'].';', '', $r5[0]);

mysql_query("UPDATE groups SET contact_ids='".$r5[0].$_GET['id'].';'."' WHERE

id='".$group."'");

}

}

$image_id = $_GET['id'];

Page 278: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 278

}

else echo 'Keine Erlaubnis!';

}

else if($_GET['new']=="true")

{

$code_priv = create_code();

$code_bus = create_code();

$code_add = create_code();

$datetime = date("Y-m-d H:i:s");

$query = "INSERT INTO contacts(user_id, forename, surname, email_priv, email_bus,

email_add, ";

$query.= "phone_priv, phone_bus, phone_add, fax, address_priv, address_bus, postal_priv,

postal_bus, ";

$query.= "city_priv, city_bus, country_priv, country_bus, web_priv, web_bus, birthdate,

profession, comment, group_id, created, lastchanged, email_priv_code, email_bus_code,

email_add_code) ";

$query.= "VALUES('".$_SESSION['user_id']."', '".$_GET['forename']."',

'".$_GET['surname']."', ";

$query.= "'".$_GET['email_priv']."', '".$_GET['email_bus']."', '".$_GET['email_add']."',

";

$query.= "'".$_GET['phone_priv']."', '".$_GET['phone_bus']."', '".$_GET['phone_add']."',

'".$_GET['fax']."', ";

$query.="'".$_GET['address_priv']."', '".$_GET['address_bus']."',

'".$_GET['postal_priv']."', '".$_GET['postal_bus']."', ";

$query.="'".$_GET['city_priv']."', '".$_GET['city_bus']."', '".$_GET['country_priv']."',

'".$_GET['country_bus']."', ";

$query.="'".$_GET['web_priv']."', '".$_GET['web_bus']."', '".$_GET['birthdate']."',

'".$_GET['professoin']."', ";

$query.="'".$_GET['comment']."', '".$_GET['group_id']."', '".$datetime."',

'".$datetime."', '".$code_priv."', '".$code_bus."', '".$code_add."')";

mysql_query($query);

$q6 = mysql_query("SELECT id FROM contacts WHERE user_id='".$_SESSION['user_id']."' AND

created='".$datetime."'");

$r6 = mysql_fetch_array($q6);

$image_id = $r6[0];

$groups = explode($_GET['group_ids'], ';');

foreach($groups as $group)

{

if(strlen($group) != 0)

{

$q5 = mysql_query("SELECT contact_ids FROM groups WHERE id='".$group."'");

$r5 = mysql_fetch_array($q5);

mysql_query("UPDATE groups SET contact_ids='".$r5[0].$_GET['id'].';'."' WHERE

id='".$group."'");

}

}

if($_GET['birthdate'] != date("Y")."-01-01")

{

$q2 = mysql_query("SELECT co_add_to_cal FROM users WHERE

id='".$_SESSION['user_id']."'");

$r2 = mysql_fetch_array($q2);

if($r2[0] == "true")

{

$q3 = "INSERT INTO calender(title, startdatetime, enddatetime, wholeday,

color_id, user_id, remind, recurring_bool, recurring_intervall, recurring_class) ";

$q3.= "VALUES('Geburstag von ".$_GET['forename']." ".$_GET['surname']."',

'".$_GET['birthdate']." 12:00:00"."', '".$_GET['birthdate']." 13:00:00"."', 'true', '1',

'".$_SESSION['user_id']."', 'false', 'true', '1', '3')";

mysql_query($q3);

Page 279: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 279

}

}

$data = array();

$data['forename'] = $_GET['forename'];

$data['surname'] = $_GET['surname'];

$data['username'] = $_SESSION['forename'].' '.$_SESSION['surname'];

if($_GET['email_priv'] != '')

{

$data['code'] = $code_priv;

if($send_mail[0] == 'true') send_message($_GET['email_priv'], $data);

}

if($_GET['email_bus'] != '')

{

$data['code'] = $code_bus;

if($send_mail[0] == 'true') send_message($_GET['email_bus'], $data);

}

if($_GET['email_add'] != '')

{

$data['code'] = $code_add;

if($send_mail[0] == 'true') send_message($_GET['email_add'], $data);

}

}

if($_GET['image']=='true')

{

if($_GET['image_path']!='')

{

$id = $_GET['id'];

if($id=='0') $id = $image_id;

$cpath = $datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg';

$imgpath = $datadir.$_GET['image_user_id'].'/data'.$_GET['image_path'];

if(file_exists($imgpath))

{

$imagedata = getimagesize($imgpath);

$w = $imagedata[0];

$h = $imagedata[1];

if ($h > 120)

{

$new_w = (120 / $h) * $w;

$new_h = 120;

}

if($w > 100)

{

$new_h = (100 / $w) * $h;

$new_w = 100;

}

if(!isset($new_h))

{

$new_h = $h;

$new_w = $w;

}

$im2 = ImageCreateTrueColor($new_w, $new_h);

$image = null;

switch($imagedata[2])

{

case 2:

$image = ImageCreateFromJpeg($imgpath);

break;

case 1:

$image = imagecreatefromgif($imgpath);

break;

case 3:

Page 280: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 280

$image = imagecreatefrompng($imgpath);

break;

}

if($image != null)

{

imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h,

$imagedata[0], $imagedata[1]);

if(file_exists($cpath)) unlink($cpath);

ImageJPEG ($im2, $cpath);

}

}

else

{

if($_SESSION['language']=='de') echo 'Bilddatei nicht gefunden';

else echo 'Couldn\'t detect image';

}

}

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/save_groups.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

$i = 0;

while($_REQUEST['id'.$i] != "")

{

if($_REQUEST['id'.$i] == 'new')

{

mysql_query("INSERT INTO groups(user_id, name) VALUES('".$_SESSION['user_id']."',

'".$_REQUEST['name'.$i]."')");

}

else

{

if($_REQUEST['id'.$i] == 'delete')

{

mysql_query("DELETE FROM groups WHERE id='".$_REQUEST['name'.$i]."' AND

user_id='".$_SESSION['user_id']."'");

$query = mysql_query("SELECT id, group_id FROM contacts WHERE

user_id='".$_SESSION['user_id']."' AND group_id LIKE '%".$_REQUEST['name'.$i].";%'");

while($row = mysql_fetch_array($query))

{

$string = str_replace($_REQUEST['name'.$i].";", "", $row['group_ids']);

mysql_query("UPDATE contacts SET group_id='".$string."' WHERE

id='".$row['id']."'");

}

}

else

{

mysql_query("UPDATE groups SET name='".$_REQUEST['name'.$i]."' WHERE

id='".$_REQUEST['id'.$i]."'");

}

}

$i++;

Page 281: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 281

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

contacts/send_message.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

function send_message($to, $data)

{

$text = 'Liebe/r '.$data['forename'].' '.$data['surname'].",\n";

$text.= $data['username'].' hat Sie in ihr/sein VirtualPC-Kontaktbuch aufgenommen. Wenn

Sie ihr/ihm gestatten wollen, Ihnen ueber das VirtualPC-Mail-System eine Nachricht zukommen zu

lassen, klicken Sie auf folgenden Link:'."\n\n\n\n";

$text.=

'http://paul.laufer.at/virtualpc/site2/index.php?language=de&page=6&code='.$data['code']."\n\n

\n\n";

$text.= 'Ziehen Sie es vor, von '.$data['username'].' keine Nachrichten zu empfangen,

ignorieren Sie diese Mail.'."\n";

$text.= 'Mit freundlichen Gruessen, '."\n".'Ihr Virtual-PC-Team';

$text.= "\n\n\n";

$text.= 'Dear '.$data['forename'].' '.$data['surname'].",\n";

$text.= $data['username'].' has added you to his VirtualPC-Contacts. If you want to

allow him to send you emails using the VirtualPC-email-system, click on the following

link:'."\n\n\n\n";

$text.=

'http://paul.laufer.at/virtualpc/site2/index.php?language=en&page=6&code='.$data['code']."\n\n

\n\n";

$text.= 'If you prefer not to receive messages from '.$data['username'].', we please you

to ignore this email.'."\n";

$text.= 'With kind regards, '."\n".'your Virtual-PC-Team';

$text.= "\n\n\n";

$text.= '----------------------'."\n";

$text.= 'http://paul.laufer.at/virtualpc'."\n";

$text.= 'http://paul.laufer.at/virtualpc/site2'."\n";

$text.= '+43 664 5663350'."\n";

$text.= '[email protected]';

$text = str_replace("\\", "\\\\", $text);

$text = str_replace('"', '\\"', $text);

$from = '[email protected]';

$reply_to = "[email protected]";//$_SESSION['email'];

$subject = $data['username'].' added you to his VirtualPC-Contacts';

$subject = "VirtualPC";

$string = 'echo "'.$text.'"';

$string.= ' | mail -s "'.$subject.'" -R "'.$from.'"';// -R "'.$reply_to.'"';

if($file != "") $string.= ' -a "'.$file.'"';

$string.= ' '.$to.'';

exec($string);

}

?><?php

} //Ende der Kontrolle ob angemeldet

Page 282: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 282

?>

contacts/vcard.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

function vcard($id)

{

$str = "";

include "../../connect.php";

include "../filesystem/settings.php";

$q1 = mysql_query("SELECT user_id FROM contacts WHERE id='".$id."'");

$r1 = mysql_fetch_array($q1);

//if(file_exists($datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg')) $image =

readfile($datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg');

//else $image = null;

if($r1[0]==$_SESSION['user_id'])

{

$query = mysql_query("SELECT * FROM contacts WHERE id='".$id."'");

$row = mysql_fetch_array($query);

$str.= "BEGIN:VCARD"."\r\n";

$str.= "VERSION:2.1"."\r\n";

$str.= "N;CHARSET=UTF-8:".$row['surname'].";".$row['forename']."\r\n";

$str.= "FN;CHARSET=UTF-8:".$row['forename']." ".$row['surname']."\r\n";

$str.= "ROLE;CHARSET=UTF-8:".$row['profession']."\r\n";

$str.= "NOTE;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:".str_replace("<br>", "=0D=0A=",

$row['comment'])."\r\n";

$str.= "TEL;WORK;VOICE:".$row['phone_bus']."\r\n";

$str.= "TEL;HOME;VOICE:".$row['phone_priv']."\r\n";

$str.= "TEL;CELL;VOICE:".$row['phone_add']."\r\n";

$str.= "TEL;WORK;FAX:".$row['fax']."\r\n";

$str.= "ADR;WORK;PREF;CHARSET=UTF-

8:;;".$row['address_bus'].";".$row['city_bus'].";;".$row['postal_bus'].";".$row['country_bus']

."\r\n";

$str.= "ADR;HOME;PREF;CHARSET=UTF-

8:;;".$row['address_priv'].";".$row['city_priv'].";;".$row['postal_priv'].";".$row['country_pr

iv']."\r\n";

$str.= "URL;WORK;CHARSET=UTF-8:".$row['web_bus']."\r\n";

$str.= "URL;HOME;CHARSET=UTF-8:".$row['web_priv']."\r\n";

$str.= "BDAY:".substr($row['birthdate'], 0, 4).substr($row['birthdate'], 5,

2).substr($row['birthdate'], 8, 2)."\r\n";

$str.= "EMAIL;PREF;INTERNET:".$row['email_priv']."\r\n";

$str.= "EMAIL;INTERNET:".$row['email_bus']."\r\n";

$str.= "EMAIL;INTERNET:".$row['email_add']."\r\n";

if(file_exists($datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg'))

{

$str.= "PHOTO;ENCODING=BASE64;TYPE=JPEG:"."\r\n";

//$str.= base64_encode('DF');

$lines = file($datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg');

$path = $datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg';

$handle = fopen($path, 'r');

$cont = base64_encode(fread($handle, filesize($path)));

fclose($handle);

$str.= $cont;

//foreach($lines as $line)

//$str.= base64_encode($line)."\r\n";

Page 283: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 283

//$str.= $buffer;//base64_encode($buffer);

$str.= "\r\n";

}

$str.= "END:VCARD";

//$str = $datadir.$_SESSION['user_id'].'/contacts/'.$id.'.jpg';

}

return $str;

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/class_file.php

<?php

require_once 'settings.php';

session_start();

class FilePath

{

var $user_path = null;

var $full_path = null;

var $user_id = null;

var $permissions = null;

var $filetype = null;

var $file_exists = true;

var $permissions_path = null;

var $filename;

var $folderpath;

function FilePath($path, $getuserid=false)

{

global $datadir;

if($getuserid==false) $this->user_id = $_SESSION['user_id'];

else $this->user_id = $getuserid;

if(strlen($path)>strlen($datadir))

{

if(substr($path, strlen($datadir))==$datadir)

{

$upath = substr(($path."/".$file),

strlen($datadir.$_SESSION['user_id'].'/data/'))."/";

$this->full_path = $datadir.$_SESSION['user_id'].'/data'.$upath;

$this->user_path = $upath;

}

}

if($this->full_path == null)

{

$this->full_path = $datadir.$this->user_id.'/data'.$path;

$this->user_path = $path;

}

$this->filename = substr(strrchr($this->user_path, "/"), 1);

if(!file_exists($this->full_path)) $this->file_exists = false;

else $this->filetype = filetype($this->full_path);

if($this->filetype == 'dir')

{

if($this->full_name.substr($this->full_name, strlen($this->full_name)-1) != '/')

$this->full_name.= '/';

$permpath = $datadir.$this->user_id.'/permissions'.$this->user_path;

$this->permissions_path = $permpath;

Page 284: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 284

$this->folderpath = $this->full_path;

}

else

{

$this->folderpath = $datadir.$this->user_id.'/data'.substr($this->user_path, 0,

strlen($this->user_path)-strlen($this->filename)-1);

$permpath = $datadir.$this->user_id.'/permissions'.substr($this->user_path, 0,

strlen($this->user_path)-strlen($this->filename)-1);

$this->permissions_path = $permpath;

}

if($this->permissions_path == $datadir.$this->user_id.'/permissions')

{

if($this->user_id == $_SESSION['user_id']) $this->permissions = '111';

else $this->permissions = '000';

}

if($this->permissions == null)

{

if(!file_exists($this->permissions_path)) $this->file_exists = false;

else

{

if($this->permissions_path != $datadir.$_SESSION['user_id'].'/permissions/')

{

// Permissions

$lines = file($this->permissions_path.".txt");

foreach($lines as $line)

{

if(substr($line, 0,

strlen($_SESSION['user_id']))==$_SESSION['user_id'])

{

$this->permissions = substr($line,

strlen($_SESSION['user_id'])+1);

}

}

}

else $this->permissions = '111';

}

}

}

}

?>

filesystem/copy.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

function CopyRecursive($from, $to)

{

if($handle = opendir($from->full_path))

{

echo $from->full_path."\r\n".$to->full_path."\r\n\r\n";

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($from->full_path."/".$file);

Page 285: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 285

if($type == "file")

{

echo $to->full_path."/".$file;

copy($from->full_path."/".$file, $to->full_path."/".$file);

}

else

{

//Create Permisions-Datei

if(($handle = fopen($to->permissions_path.'/'.$file.'.txt',

'w+'))!==false)

{

if($from->user_id != $_SESSION['user_id'])

{

fwrite($handle, $from->user_id.' 111');

fwrite($handle, $_SESSION['user_id'].' 111');

}

else fwrite($handle, $from->user_id.' 111');

fclose($handle);

echo $to->full_path;

mkdir($to->full_path.'/'.$file);

mkdir($to->permissions_path.'/'.$file);

$from->permissions_path.='/'.$file;

$to->permissions_path.='/'.$file;

echo $file."\r\n";

$from->full_path.= '/'.$file;

$to->full_path.='/'.$file;

CopyRecursive($from, $to);

}

else

{

if($_SESSION['language'] == 'de') echo 'Es ist ein Fehler

aufgetreten!<br />Das Verzeichnis konnte nicht vollständig kopiert werden';

else echo 'An unexpected error occured!<br />The directory could not

be copied totally';

}

}

}

}

}

}

require_once 'class_file.php';

$from = new FilePath($_GET['from'], $_GET['from_user_id']);

$to = new FilePath($_GET['to'], $_GET['to_user_id']);

if($from->file_exists == true)

{

if(($from->permissions[0]==1) && ($to->permissions[1]==1))

{

if(file_exists($to->full_path.'/'.$from->filename))

{

if(substr(strrchr($from->filename, "."), 1) != "")

$ext = ".".substr(strrchr($from->filename, "."), 1);

if($ext == "") $name = $from->filename;

else $name = substr($from->filename, 0, strpos($from->filename, "."));

$i = 2;

while(file_exists($to->full_path.'/'.$name.$i.$ext))

$i++;

if($to->exists) $from->filename = $name.$i.$ext;

}

if($from->filetype == 'file') copy($from->full_path.'/'.$file, $to-

>full_path.'/'.$from->filename);

else

{

//Create Permissions-Datei

Page 286: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 286

if(($handle = fopen($to->permissions_path.'/'.$from->filename.'.txt',

'w+'))!==false)

{

if($from->user_id != $_SESSION['user_id'])

{

fwrite($handle, $from->user_id.' 111');

fwrite($handle, $_SESSION['user_id'].' 111');

}

else fwrite($handle, $from->user_id.' 111');

fclose($handle);

mkdir($to->full_path.'/'.$from->filename);

mkdir($to->permissions_path.'/'.$from->filename);

$from->permissions_path.='/'.$from->filename;

$to->permissions_path.='/'.$from->filename;

$to->full_path.='/'.$from->filename;

CopyRecursive($from, $to);

}

else

{

if($_SESSION['language'] == 'de') echo 'Es ist ein Fehler aufgetreten!<br

/>Die Datei konnte nicht kopiert werden';

else echo 'An unexpected error occured!<br />The file could not be copied';

}

}

}

}

else

{

if($_SESSION['language'] == 'de') echo 'Die Datei konnten nicht gefunden werden!';

else echo 'File not found!';

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/create_vpc_package.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

header("Content-Type:text/xml");

include "../filesystem/settings.php";

include 'class_file.php';

echo $_GET['SavePath'];

$SaveFile = new FilePath($_GET['SavePath'], $_GET['SaveUserId']);

$creator_id = $_SESSION['user_id'];

$creator_name = $_SESSION['forename'].' '.$_SESSION['surname'];

$created = date("Y-m-d H:i:s");

$version = '1.0.0.0';

$SmallImage = new FilePath($_GET['LogoSmallPath'], $_GET['LogoSmallUserId']);

$BigImage = new FilePath($_GET['LogoBigPath'], $_GET['LogoBigUserId']);

$i = 0;

$ok = true;

$Scripts = array();

$ScriptCodes = array();

while($_GET['Script'.$i.'Path'] != "")

{

$script = new FilePath($_GET['Script'.$i.'Path'], $_GET['Script'.$i.'UserId']);

Page 287: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 287

if($script->permissions[0] != '1') $ok = false;

array_push($Scripts, $script);

$i++;

}

if($ok) echo 'Scripts ok<br />';

else echo 'Scripts failure<br />';

if($SmallImage->permissions[0] != '1' || $BigImage->permissions[0] != 1) $ok = false;

if($ok) echo 'Logos ok<br />';

else echo 'Logos failure<br />';

if($SaveFile->permissions[1] != '1') $ok = false;

if($ok) echo 'Savefile ok<br />';

else echo 'Savefile failure<br />';

if($ok)

{

$handle1 = fopen($SmallImage->full_path, 'r');

$ImgSmall = fread($handle1, filesize($SmallImage->full_path));

fclose($handle1);

$ImgSmall = base64_encode($ImgSmall);

$handle2 = fopen($BigImage->full_path, 'r');

$ImgBig = fread($handle2, filesize($BigImage->full_path));

fclose($handle2);

$ImgBig = base64_encode($ImgBig);

$i = 0;

foreach($Scripts as $Script)

{

$handle = fopen($Script->full_path, 'r');

$Script_Codes[$i] = fread($handle, filesize($Script->full_path));

fclose($handle);

echo $Script_Codes[$i];

$i++;

}

$cont = '<vpcpackage>';

$cont.= '<version>'.$version.'</version>';

$cont.= '<creator_id>'.$creator_id.'</creator_id>';

$cont.= '<creator_name>'.$creator_name.'</creator_name>';

$cont.= '<created>'.$created.'</created>';

$cont.= '<logo_big><![CDATA['.$ImgBig.']]></logo_big>';

$cont.= '<logo_small><![CDATA['.$ImgSmall.']]></logo_small>';

$cont.= '<scripts>';

$a = 0;

foreach($Script_Codes as $Code)

{

$cont.= '<script>';

$cont.= '<id>'.$a.'</id>';

$cont.= "<code><![CDATA[".$Script_Codes[$a]."]]></code>";

$cont.= '</script>';

$a++;

}

$cont.= '</scripts>';

$cont.= '<images></images>';

$cont.= '</vpcpackage>';

$handle4 = fopen($SaveFile->full_path, 'w+');

fwrite($handle4, $cont);

fclose($handle4);

}

else

{

if($_SESSION['language'] == 'de') echo 'Es ist ein Fehler aufgetreten!';

Page 288: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 288

else echo 'An Error occured!';

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/delete.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

?><?php

include "../../connect.php";

include 'class_file.php';

include 'rmdir-r.php';

include 'search_for_shared.php';

if($_GET['user_id']!= "") $guserid = $_GET['user_id'];

else $guserid = null;

$file = new FilePath($_GET['path'], $guserid);

/*echo 'FULL-Path:'.$file->full_path.'<br />';

echo 'PERMISSIONS:'.$file->permissions.'<br />';

echo 'USER-PATH:'.$file->user_path.'<br />';

echo 'USER_ID:'.$file->user_id.'<br />';

echo 'FILENAME:'.$file->filename.'<br />';

echo 'FILETYPE:'.$file->filetype.'<br />';

echo 'FILE_EXISTS:'.$file->file_exists.'<br />';

echo 'PERMISSIONS_PATH:'.$file->permissions_path.'<br />';

echo 'FOLDERPATH:'.$file->folderpath.'<br />';*/

// Ist der Ornder freigegeben

if($file->filetype == 'dir')

{

if($file->permissions_path != $datadir.$file->user_id.'/permissions/')

{

$perm_file = $file->permissions_path.'.txt';

if(file_exists($perm_file))

{

$lines = file($perm_file);

if(count($lines)>1)

{

foreach($lines as $line)

{

$user_dir = $datadir.$file->user_id.'/permissions';

//Dursuche Verzeichnisse, ob noch eine Freigabe für den User besteht

if(substr($line, 0, 5)!= 'GROUP')

{

$id = substr($line, 0, strpos($line, ' '));

if($id != $file->user_id)

{

// If no other shares exist for this user

if(!SearchForShared($user_dir, $id, $perm_file))

{

$getq = mysql_query("SELECT shares_user_ids FROM users WHERE

id='".$file->user_id."'");

$getr = mysql_fetch_array($getq);

Page 289: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 289

$getids = $getr[0];

$new_ids = str_replace($id.';', '', $getids);

$setq = mysql_query("UPDATE users SET

shares_user_ids='".$new_ids."'");

}

}

}

}

}

}

}

// Ordner rekursiv löschen

rmdir_rf($file->full_path);

rmdir_rf($file->permissions_path);

unlink($perm_file);

}

// Falls nur eine Datei gelöscht wird

else

{

if($file->permissions[2] == '1') unlink($file->full_path);

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/download.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

include 'permissions.php';

?>

<?php

include "../../connect.php";

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$datadir = $datadir.$duserid.'/data';

$filetype = strrchr($path, ".");

$filename = substr(strrchr($path, "/"), 1);

if($filetype != "")

{

$query = "SELECT mimetype FROM fs_filetypes WHERE filetype='".$filetype."'";

$res = mysql_query($query);

$row = mysql_fetch_array($res);

if($row != "") $mimetype = $row[0];

else $mimetype = "application/octet-stream";

}

else $mimetype = "application/force-download";

$mimetype = "application/octet-stream";

$mimetype = "text/html";

header('Content-Type: application/octet-stream');

header("Content-Disposition: attachment; filename={$filename}");

header("Content-Transfer-Encoding: binary");

header("Content-Length: ".@filesize($path));

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

Page 290: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 290

readfile($path);

}

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/get_content.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

include 'permissions.php';

?>

<?php

include "../../connect.php";

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$datadir = $datadir.$duserid.'/data';

$filetype = strrchr($path, ".");

$filename = substr(strrchr($path, "/"), 1);

header('Content-Type: text/plain');

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

readfile($path);

}

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/get_files.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?>

<?php

header('Content-type:text/xml;');

include "settings.php";

include "../../connect.php";

$getPath = $_GET['path'];

if($getPath=='') $getPath = '/';

Page 291: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 291

$getPath = str_replace("/..", "", $getPath);

$type = $_GET['type'];

if($type=='') $type = 'Personal';

$userid = $_GET['user_id'];

$share_text = array('de' => 'Freigabe', 'en'=>'Share');

if($type=='Personal')

{

if(substr($getPath, 0,1) == '/') $path = $datadir.$_SESSION['user_id'].'/data'.$getPath;

else $path = $datadir.$_SESSION['user_id'].'/data/'.$getPath;

}

elseif($type=='Share') $path = $datadir.$userid.'/data'.$getPath;

elseif($type=='ShareMain') $path = $datadir.$userid."/permissions/";

elseif($type=='Desktop') $path = $datadir.$userid."/Desktop/";

elseif($type=='Shares') $path = $datadir.'/';

$size="big";

if($userid=='') $datadir.= $_SESSION['user_id'].'/data/';

else $datadir.= $userid.'/data/';

include "permissions.php";

class FileObj

{

var $name;

var $type;

var $type_des;

var $creationtime;

var $action;

var $size;

var $image;

var $path;

var $userid;

}

function getFiles($path, $getPerm)

{

global $size;

global $programdir;

global $loc;

global $getPath;

global $username;

global $datadir;

global $userid;

$files = array();

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($path."/".$file);

if($type == "file")

{

$filetype = strrchr($path."/".$file, ".");

$query = "SELECT text FROM fs_filetypes WHERE filetype='".$filetype."'";

$result = mysql_query($query);

$row = mysql_fetch_array($result);

$typetext = $row[0];

if($typetext == "") $typetext = "Unbekannter Dateityp";

$permission = $getPerm;

}

//Directory

else

Page 292: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 292

{

$typetext = "Ordner";

$filetype = "dir";

$permissions = GetPermission($path.$file.'/', $datadir);

}

$ts = filectime($path."/".$file);

$filecreationtime = date(d, $ts).".".date(m, $ts).".".date(Y, $ts)." ".date(H,

$ts).":".date(i, $ts);

$kilobytes = round((filesize($path."/".$file)/1024), 1);

if($kilobytes < 1024) $filesize = $kilobytes.' KB';

else $filesize = round($kilobytes/1024)." MB";

$image = substr($filetype, 1, strlen($filetype)-1).'.png';

if(!file_exists('../../images/filesystem/formats/big/'.$image))

{

$image = 'unbekannt.png';

}

//Füge zu Array hinzu

$fileobj = new FileObj();

$fileobj -> small_name = strtolower($file);

$fileobj -> name = $file;

$fileobj -> type = $type;

$fileobj -> type_des = $typetext;

$fileobj -> action = $call_f;

$fileobj -> size = $filesize;

$fileobj -> creationtime = $filecreationtime;

$fileobj -> image = $image;

$fileobj -> path = $getPath.$file;

$fileobj -> userid = $userid;

$fileobj -> permissions = $permissions;

array_push($files, $fileobj);

}

}

}

closedir($handle);

return $files;

}

function getShareMain($path, $userid)

{

global $share_text;

global $datadir;

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($path."/".$file);

if($type == "dir")

{

$txtfile = $path.'/'.$file.'.txt';

if(file_exists($txtfile))

{

$lines = file($txtfile);

foreach($lines as $line)

{

if(substr($line, 0,

strlen($_SESSION['user_id']))==$_SESSION['user_id'])

{

$cont = substr($line, strlen($_SESSION['user_id'])+1);

}

}

Page 293: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 293

if($cont[0]=='1')

{

$upath = substr(($path."/".$file),

strlen($datadir.$userid.'/data/'))."/";

$ts = filectime($path."/".$file);

$filecreationtime = date(d, $ts).".".date(m, $ts).".".date(Y,

$ts)." ".date(H, $ts).":".date(i, $ts);

echo '<file>';

echo '<name>'.$file.'</name>';

echo '<type>Share</type>';

echo '<dirtype>Share</dirtype>';

echo

'<typedes>'.$share_text[$_SESSION['language']].'</typedes>';

echo '<action>---</action>';

echo '<size>---</size>';

echo '<creationtime>'.$filecreationtime.'</creationtime>';

echo '<image>share.png</image>';

echo '<ext>dir</ext>';

echo '<path>'.$upath.'</path>';

echo '<user_id>'.$userid.'</user_id>';

echo '<permissions>'.$cont.'</permissions>';

echo '</file>';

}

getShareMain($path."/".$file, $userid);

}

}

}

}

}

}

echo '<?xml version="1.0" encoding="ISO-8859-1"?>';

echo '<files>';

//Personal & Share

switch($type)

{

case 'Shares':

$query = mysql_query("SELECT id, username, forename, surname, shares_user_ids FROM

users WHERE id!='".$_SESSION['user_id']."' ORDER BY username");

while($row = mysql_fetch_array($query))

{

$ids = explode(';', $row['shares_user_ids']);

foreach($ids as $id)

{

if($id == $_SESSION['user_id'])

{

echo '<file>';

echo '<name>'.$row['forename'].' '.$row['surname'].'</name>';

echo '<type>ShareMain</type>';

echo '<dirtype>ShareMain</dirtype>';

echo '<typedes>'.$share_text[$_SESSION['language']].'</typedes>';

echo '<action>---</action>';

echo '<size>---</size>';

echo '<creationtime>---</creationtime>';

echo '<image>share.png</image>';

echo '<ext>dir</ext>';

echo '<path>/</path>';

echo '<user_id>'.$row['id'].'</user_id>';

echo '<permissions>100</permissions>';

echo '</file>';

;

}

}

}

break;

Page 294: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 294

case 'ShareMain':

getShareMain($path, $userid);

break;

case 'Desktop':

$files = getFiles($path, '111');

sort($files);

foreach($files as $file)

{

echo '<file>';

echo '<name>'.$file->name.'</name>';

echo '<type>'.$file->type.'</type>';

echo '<dirtype>'.$file->type.'</dirtype>';

echo '<typedes>'.$file->type_des.'</typedes>';

echo '<action>'.$file->action.'</action>';

echo '<size>'.$file->size.'</size>';

echo '<creationtime>'.$file->creationtime.'</creationtime>';

echo '<image>'.$file->image.'</image>';

echo '<ext>'.$file->type.'</ext>';

echo '<path>'.$file->path.'</path>';

echo '<user_id>'.$file->userid.'</user_id>';

echo '<permissions>'.$file->permissions.'</permissions>';

echo '</file>';

}

break;

default:

$permission = GetPermission($path, $datadir);

if($permission[0]==1)

{

$files = getFiles($path, $permission);

sort($files);

foreach($files as $file)

{

echo '<file>';

echo '<name>'.$file->name.'</name>';

echo '<type>'.$file->type.'</type>';

echo '<dirtype>'.$type.'</dirtype>';

echo '<typedes>'.$file->type_des.'</typedes>';

echo '<action>'.$file->action.'</action>';

echo '<size>'.$file->size.'</size>';

echo '<creationtime>'.$file->creationtime.'</creationtime>';

echo '<image>'.$file->image.'</image>';

echo '<ext>'.$file->type.'</ext>';

echo '<path>'.$file->path.'</path>';

echo '<user_id>'.$file->userid.'</user_id>';

echo '<permissions>'.$file->permissions.'</permissions>';

echo '</file>';

}

}

break;

}

echo '</files>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 295: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 295

filesystem/get_tree.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

include "../../connect.php";

?>

<?php

header('Content-type:text/xml;');

if($param == "") $param = "/";

$param = str_replace("/..", "", $param);

$path = $filedir.$param;

echo '<?xml version="1.0" encoding="ISO-8859-1"?>';

echo '<directories>';

if($_SESSION['language']=='en')

{

$home = "Home Folder";

$shares = "Shares";

}

else

{

$home = "Eigene Dateien";

$shares = "Freigaben";

}

function getTree($path)

{

global $filedir;

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($path."/".$file);

if($type == "dir")

{

echo '<dir name="'.$file.'" path="'.substr(($path."/".$file),

strlen($filedir)+1, strlen($path."/".$file)-strlen($filedir)-1)."/".'" ';

echo 'user_id="'.$_SESSION['user_id'].'" type="Personal" permissions="111"

image_name="tree.png">';

getTree($path."/".$file);

echo '</dir>';

}

}

}

}

}

function getShares($path, $userid)

{

global $datadir;

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

$type = filetype($path."/".$file);

if($type == "dir")

{

$txtfile = $path.'/'.$file.'.txt';

if(file_exists($txtfile))

Page 296: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 296

{

$lines = file($txtfile);

foreach($lines as $line)

{

if(substr($line, 0, strlen($user_id))==$user_id)

{

$cont = substr($line, strlen($_SESSION['user_id'])+1);

}

}

if($cont[0]=='1')

{

$upath = substr(($path."/".$file),

strlen($datadir.$userid.'/permissions'))."/";

echo '<dir name="'.$file.'" path="'.$upath.'"

user_id="'.$userid.'" type="Share" permissions="'.$cont.'" image_name="share.png">';

}

getShares($path."/".$file, $userid);

if($cont[0]=='1') echo '</dir>';

}

}

}

}

}

}

echo '<dir name="Desktop" path="Desktop" user_id="'.$_SESSION['user_id'].'" type="Desktop"

permissions="111" image_name="desktop.png"></dir>';

/*echo '<dir>';

echo '<name>Desktop</name>';

echo '<path>Desktop</path>';

echo '<user_id>'.$_SESSION['user_id'].'</user_id>';

echo '<type>Personal</type>';

echo '<permissions>111</permissions>';

echo '<image>desktop.png</image>';

echo '<subfolders></subfolders>';

echo '</dir>';*/

echo '<dir name="'.$home.'" path="/" user_id="'.$_SESSION['user_id'].'" type="Personal"

permissions="111" image_name="tree.png">';

getTree($path);

echo '</dir>';

$query = mysql_query("SELECT COUNT(*) FROM users WHERE shares_user_ids LIKE

'%".$_SESSION['user_id'].";%'");

$count = mysql_result($query, 0);

if($count[0] != 0) echo '<dir name="'.$shares.'" path="'.$shares.':" user_id="" type="Shares"

permissions="100" image_name="share.png">';

$query = mysql_query("SELECT id, forename, surname, username FROM users WHERE shares_user_ids

LIKE '%".$_SESSION['user_id'].";%'");

while($row = mysql_fetch_array($query))

{

$path = $datadir.$row['id']."/permissions";

echo '<dir name="'.$row['forename'].' '.$row['surname'].'" path="/"

user_id="'.$row['id'].'" type="ShareMain" permission="100" image_name="share.png">';

getShares($path, $row['id']);

echo '</dir>';

}

if($count[0] != 0)echo '</dir>';

echo '</directories>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 297: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 297

filesystem/get_vpc_package.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

include 'permissions.php';

?><?php

header('Content-type:text/xml;');

include "../../connect.php";

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$datadir = $datadir.$duserid.'/data';

$filetype = strrchr($path, ".");

$filename = substr(strrchr($path, "/"), 1);

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

$handle = fopen($path, "r+");

$cont = fread($handle, filesize($path));

fclose($handle);

echo '<vpcpackage>';

$index1 = strpos($cont, "<version>");

$index2 = strpos($cont, "</created>")+10;

echo substr($cont, $index1, ($index2-$index1));

$index3 = strpos($cont, "<scripts");

$index4 = strpos($cont, "</scripts>")+10;

echo substr($cont, $index3, ($index4-$index3));

echo '</vpcpackage>';

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/get_xml_content.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

include 'permissions.php';

?><?php

header('Content-type:text/xml;');

include "../../connect.php";

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$datadir = $datadir.$duserid.'/data';

$filetype = strrchr($path, ".");

$filename = substr(strrchr($path, "/"), 1);

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

$cont = readfile($path);

}

Page 298: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 298

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/image.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

include "../filesystem/class_file.php";

$path = $datadir.$_GET['user_id'].'/data'.$_GET['path'];

$handle = fopen($path, "r");

$cont = fread($handle, filesize($path));

fclose($handle);

echo $cont;

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/mkdir.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

require_once 'class_file.php';

$folder = new FilePath($_GET['path'], $_GET['user_id']);

if($folder->permissions[1]==1)

{

if(!$folder->file_exists)

{

mkdir($folder->full_path);

mkdir($folder->permissions_path.'/'.$folder->filename);

$handle = fopen($folder->permissions_path.'/'.$folder->filename.'.txt', 'w+');

if($folder->user_id != $_SESSION['user_id'])

{

fwrite($handle, $folder->user_id.' 111'."\r\n");

fwrite($handle, $_SESSION['user_id'].' 111'."\r\n");

}

else fwrite($handle, $folder->user_id.' 111'."\r\n");

fclose($handle);

}

else

{

Page 299: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 299

if($_SESSION['language']=='de') echo 'Der Ordner existiert bereits!';

else echo "The folder already exists!";

}

}

else

{

if($_SESSION['language']=='de') echo 'Sie haben nicht die Berechtigung, einen Ordner zu

erstellen!';

else echo "You don't have the permission to create a new folder!";

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/move.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

?><?php

include "../../connect.php";

include 'class_file.php';

$file = new FilePath($_GET['path'], $_GET['user_id']);

$newpath = substr($file->user_path, 0, strlen($file->user_path)-strlen($file-

>filename)).$_GET['new_name'];

$newfile = new FilePath($_GET['new_path'], $_GET['new_user_id']);

if($file->filetype == 'file')

{

if($file->permissions[1]=='1')

{

rename($file->full_path, $newfile->full_path);

}

}

else

{

if($file->permissions[1]=='1')

{

rename($file->full_path, $newfile->full_path);

if($file->permissions_path != $datadir.$file->user_id.'/permissions')

{

if(file_exists($file->permissions_path))

{

$newpermpath = $datadir.$file->user_id.'/permissions/'.$newfile->filename;

rename($file->permissions_path, $newfile->permissions_path);

rename($file->permissions_path.'.txt', $newfile->permissions_path.'.txt');

}

}

}

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 300: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 300

filesystem/permissions.php

<?php

session_start();

function GetPermission($path, $getfiledir)

{

global $username;

include 'settings.php';

if(substr($getfiledir, strlen($getfiledir)-1)=="/") $getfiledir = substr($getfiledir, 0,

strlen($getfiledir)-1);

$upath = substr($path, strlen($getfiledir));

$path = str_replace("data", "permissions", $getfiledir).$upath;

$filename = strrchr($path, "/");

$index = strrpos($path, $filename);

$path = substr($path, 0, $index);

$rootdir = str_replace("data", "permissions", $getfiledir);

if($rootdir != $path && $path != $datadir.$_SESSION['user_id'].'/data')

{

$lines = file($path.".txt");

foreach($lines as $line)

{

if(substr($line, 0, strlen($_SESSION['user_id']))==$_SESSION['user_id'])

{

$cont = substr($line, strlen($_SESSION['user_id'])+1);

}

}

}

else

{

if(strpos($rootdir, $_SESSION['user_id']) === false)

{

$cont = "000";

}

else $cont = "111";

}

return $cont;

}

?>

filesystem/rename.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

?><?php

include "../../connect.php";

include 'class_file.php';

$file = new FilePath($_GET['path'], $_GET['user_id']);

$newpath = substr($file->user_path, 0, strlen($file->user_path)-strlen($file-

>filename)).$_GET['new_name'];

$newfile = new FilePath($newpath, $_GET['user_id']);

if(!$newfile->exists)

{

if($file->filetype == 'file')

{

if($file->permissions[1]=='1')

Page 301: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 301

{

rename($file->full_path, $newfile->full_path);

}

}

else

{

if($file->permissions[1]=='1')

{

rename($file->full_path, $newfile->full_path);

if($file->permissions_path != $datadir.$file->user_id.'/permissions')

{

if(file_exists($file->permissions_path))

{

$newpermpath = $datadir.$file->user_id.'/permissions/'.$newfile->filename;

rename($file->permissions_path, $newpermpath);

rename($file->permissions_path.'.txt', $newpermpath.'.txt');

}

}

}

}

}

else echo 'The file already exists!';

?><?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/rmdir-r.php

<?php

function rmdir_rf($dirname) {

if ($dirHandle = opendir($dirname)) {

chdir($dirname);

while ($file = readdir($dirHandle)) {

if ($file == '.' || $file == '..') continue;

if (is_dir($file)) rmdir_rf($file);

else unlink($file);

}

chdir('..');

rmdir($dirname);

closedir($dirHandle);

}

}

?>

Page 302: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 302

filesystem/search_for_shared.php

<?php

function SearchForShared($path, $id, $notpath)

{

$hasShare = false;

if($handle = opendir($path))

{

while (false !== ($file = readdir($handle)))

{

if($file != "." && $file != "..")

{

if($path.'/'.$file != $notpath || $notpath == null)

{

$type = filetype($path."/".$file);

if($type == "file")

{

$lines = file($path.'/'.$file);

foreach($lines as $line)

{

if(substr($line, 0, strlen($id)) == $id)

{

$hasShare = true;

}

}

}

else

{

if(!$hasShare) $hasShare = SearchForShared($path.'/'.$file, $id,

$notpath);

}

}

}

}

}

return $hasShare;

}

?>

filesystem/settings.php

<?php

$username = $_SESSION['user_name'];

$programdir = "programs/filesystem/";

$datadir = "/srv/www/htdocs/virtualpc/filesystem/";

$filedir = "/srv/www/htdocs/virtualpc/filesystem/".$_SESSION['user_id']."/data";

$chatsdir = "/srv/www/htdocs/virtualpc/chats/";

$attachmentsdir = "/srv/www/htdocs/virtualpc/attachments/";

?>

filesystem/show_html.php

<?php

session_start();

Page 303: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 303

if($_SESSION['user_id'] != "");

{

include "settings.php";

include 'permissions.php';

?>

<?php

include "../../connect.php";

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$datadir = $datadir.$duserid.'/data';

$filetype = strrchr($path, ".");

$filename = substr(strrchr($path, "/"), 1);

header('Content-Type: text/html');

$permissions = getPermission($path, $datadir);

if($permissions[0]=='1')

{

$cont = readfile($path);

$handle = fopen($path, "r");

fclose($handle);

}

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

filesystem/upload.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "settings.php";

?>

<html>

<head>

<meta http-equiv="expires" content="0">

<style type="text/css">

body { margin: 0px; padding:0px; font-family:Segoe, Trebuchet MS; }

</style>

</head>

<body>

<?php

include "../../connect.php";

$param = $_GET['loc'];

if($param == "") $param = $_POST['loc'];

$param = str_replace("/..", "", $param);

$userid = $_REQUEST['user_id'];

$path = $datadir.$userid.'/data'.$param;

if(substr($path, strlen($path)-1) != '/') $path.= '/';

if($_FILES["datei"]!=null)

{

$datei = $_FILES['datei'];

$tmpname = $datei["tmp_name"];

$_SESSION['showed_space_is_not_enough'] == false;

$newname = $path.$datei["name"];

Page 304: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 304

if(substr(strrchr($newname, "."), 1) != "") $ext = ".".substr(strrchr($newname, "."), 1);

if($ext == "") $name = $newname;

else $name = substr($newname, 0, strpos($newname, "."));

if(file_exists($path.$datei["name"]))

{

$i = 2;

while(file_exists($name.$i.$ext)) $i++;

$newname = $name.$i.$ext;

}

if($_SESSION['showed_space_is_not_enough'] == false)

{

include "getsize.php";

getSizeFiles($datadir.$userid);

if($CountSize+$datei["size"] > 20000000)

{

echo '

<script type="text/javascript">

{

var MsgBox = new OBJ_MESSAGEBOX();

MsgBox.iconpath = "images/icons/error.png";

MsgBox.show({de:"Fehler", en:"Error"}, {de:"Der Speicherplatz ist voll.",

en:"You don\'t have free space any more"});

}

</script>';

echo 'Error';

$_SESSION['showed_space_is_not_enough'] == true;

}

}

$newname = str_replace(" ", "_", $newname);

copy($datei["tmp_name"], $newname);

$handle = fopen($newname, "r");

$cont = fread($handle, filesize($newname));

fclose($handle);

}

echo '

<form name="UploadForm" enctype="multipart/form-data" action="upload.php" method="POST">

<input name="datei" type="file" onchange="submit()">

<input type="hidden" name="loc" value="'.$param.'" />

<input type="hidden" name="user_id" value="'.$userid.'" />

</form>

';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

</body>

</html>

Page 305: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 305

filesystem/vpackage_image.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

include 'class_file.php';

header("Content-Type:text/html");

$duserid = $_GET['user_id'];

if($duserid=='0') $duserid = $_SESSION['user_id'];

$path = $datadir.$duserid.'/data'.$_GET['path'];

$file = new FilePath($_GET['path'], $duserid);

if($file->permissions[0]=='1')

{

$handle = fopen($file->full_path, 'r');

$cont = fread($handle, filesize($file->full_path));

fclose($handle);

if($_GET['size'] == 'small')

{

$index1 = strpos($cont, '<logo_small><![CDATA[')+21;

$index2 = strpos($cont, ']]></logo_small>');

$length = $index2-$index1;

}

else

{

$index1 = strpos($cont, '<logo_big><![CDATA[')+19;

$index2 = strpos($cont, ']]></logo_big>');

$length = $index2-$index1;

}

$img = substr($cont, $index1, $length);

$img = base64_decode($img);

echo $img;

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 306: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 306

messages/get_archived.php

<?php

session_start();

$id = "";

include "../../connect.php";

include "../contacts/create_code.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

echo '<messages>';

$query = mysql_query("SELECT * FROM messages_intern WHERE (to_id='".$id."' AND

to_archived='true') OR (from_id='".$id."' AND from_archived='true') ORDER BY datetime");

while($row = mysql_fetch_array($query))

{

echo '<message>

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['from_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r2 = mysql_fetch_array($q2);

echo '<forename>'.$r2['forename'].'</forename>';

echo '<surname>'.$r2['surname'].'</surname>';

echo '<from_available>true</from_available>';

}

else echo '<forename>[Not

available]</forename><surname></surname><from_available>false</from_available>';

echo '

<title>'.$row['title'].'</title>

<read>'.$row['read'].'</read>

<datetime>'.$row['datetime'].'</datetime>

</message>';

}

echo '</messages>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

Page 307: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 307

messages/get_contacts.php

<?php

session_start();

$id = "";

include "../../connect.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

echo '<contacts>';

$query = mysql_query("SELECT email_priv, email_bus, email_add, vpc_id, forename, surname,

email_priv_activated, email_bus_activated, email_add_activated FROM contacts WHERE

user_id='".$id."'");

while($row = mysql_fetch_array($query))

{

if($row['vpc_id'] != 0) echo '<contact>'.$row['forename'].'

'.$row['surname'].'</contact>';

if(strlen($row['email_priv']) != 0 && $row['email_priv_activated'] == 'true') echo

'<contact>'.$row['email_priv'].'</contact>';

if(strlen($row['email_bus']) != 0 && $row['email_bus_activated'] == 'true') echo

'<contact>'.$row['email_bus'].'</contact>'; #

if(strlen($row['email_add']) != 0 && $row['email_add_activated'] == 'true') echo

'<contact>'.$row['email_add'].'</contact>';

}

echo '</contacts>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

messages/get_deleted.php

<?php

session_start();

$id = "";

include "../../connect.php";

include "../contacts/create_code.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

Page 308: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 308

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

echo '<messages>';

$query = mysql_query("SELECT * FROM messages_intern WHERE (to_id='".$id."' AND

to_deleted='true') OR (from_id='".$id."' AND from_deleted='true') ORDER BY datetime");

while($row = mysql_fetch_array($query))

{

echo '<message>

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['from_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r2 = mysql_fetch_array($q2);

echo '<forename>'.$r2['forename'].'</forename>';

echo '<surname>'.$r2['surname'].'</surname>';

echo '<from_available>true</from_available>';

}

else echo '<forename>[Not

available]</forename><surname></surname><from_available>false</from_available>';

echo '

<title>'.$row['title'].'</title>

<read>'.$row['read'].'</read>

<datetime>'.$row['datetime'].'</datetime>

</message>';

}

echo '</messages>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

messages/get_message.php

<?php

session_start();

$id = "";

include "../../connect.php";

include "../contacts/create_code.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

Page 309: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 309

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

$msg_id = $_REQUEST['id'];

echo '<message>';

$query = mysql_query("SELECT * FROM messages_intern WHERE (to_id='".$id."' OR

from_id='".$id."') AND id='".$msg_id."'");

$row = mysql_fetch_array($query);

echo '

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE id='".$row['from_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r2 = mysql_fetch_array($q2);

echo '<from_forename>'.$r2['forename'].'</from_forename>';

echo '<from_surname>'.$r2['surname'].'</from_surname>';

echo '<from_available>true</from_available>';

}

else echo '<from_forename>[Not

available]</from_forename><from_surname></from_surname><from_available>false</from_available>'

;

echo '<to_id>'.$row['to_id'].'</to_id>';

$q3 = mysql_query("SELECT forename, surname FROM users WHERE id='".$row['to_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r3 = mysql_fetch_array($q3);

echo '<to_forename>'.$r3['forename'].'</to_forename>';

echo '<to_surname>'.$r3['surname'].'</to_surname>';

}

else echo '<to_forename>[Not available]</to_forename><to_surname></to_surname>';

echo '

<title>'.$row['title'].'</title>

<text><![CDATA['.$row['text'].']]></text>

<read>'.$row['read'].'</read>';

if($row['from_id'] == $_SESSION['user_id']) echo

'<deleted>'.$row['from_deleted'].'</deleted>';

else echo '<deleted>'.$row['to_deleted'].'</deleted>';

if($row['from_id'] == $_SESSION['user_id']) echo

'<archived>'.$row['from_archived'].'</archived>';

else echo '<archived>'.$row['to_archived'].'</archived>';

echo '<datetime>'.$row['datetime'].'</datetime>

<attachments>';

$attach_ids = explode(';', $row['attachment_ids']);

foreach($attach_ids as $attach_id)

{

if(strlen($attach_id) != 0)

{

$q3 = mysql_query("SELECT * FROM messages_attachments WHERE

id='".$attach_id."'");

$r3 = mysql_fetch_array($q3);

echo '<attachment>

<id>'.$attach_id.'</id>

<name>'.$r3['filename'].'</name>

<size>'.$r3['filesize'].'</size>';

$ext = substr(strrchr($r3['filename'], "."), 1);

if(file_exists('../../images/filesystem/formats/small/'.$ext.'.png')) echo

'<image>'.$ext.'.png</image>';

else echo '<image>unbekannt.png</image>';

Page 310: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 310

echo '</attachment>';

}

}

echo ' </attachments>

</message>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

messages/get_messages.php

<?php

session_start();

$id = "";

include "../../connect.php";

include "../contacts/create_code.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

echo '<messages>';

$query = mysql_query("SELECT * FROM messages_intern WHERE to_id='".$id."' AND

to_deleted='false' AND to_archived='false' ORDER BY datetime DESC");

while($row = mysql_fetch_array($query))

{

echo '<message>

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['from_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r2 = mysql_fetch_array($q2);

echo '<forename>'.$r2['forename'].'</forename>';

echo '<surname>'.$r2['surname'].'</surname>';

echo '<from_available>true</from_available>';

}

else echo '<forename>[Not

available]</forename><surname></surname><from_available>false</from_available>';

echo '

<title>'.$row['title'].'</title>

<read>'.$row['read'].'</read>

<datetime>'.$row['datetime'].'</datetime>

</message>';

Page 311: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 311

}

echo '</messages>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

messages/get_send.php

<?php

session_start();

$id = "";

include "../../connect.php";

include "../contacts/create_code.php";

if($_SESSION['user_id'] != "") $id = $_SESSION['user_id'];

else

{

if($_REQUEST['code'] != "")

{

$query_code = mysql_query("SELECT id FROM users WHERE

current_code='".$_REQUEST['code']."'");

$row = mysql_fetch_array($query_code);

$id = $row[0];

}

}

if($id != "");

{

?>

<?php

header('Content-type:text/xml;');

echo '<messages>';

$query = mysql_query("SELECT * FROM messages_intern WHERE from_id='".$id."' AND

from_archived='false' AND from_deleted='false' ORDER BY datetime");

while($row = mysql_fetch_array($query))

{

echo '<message>

<id>'.$row['id'].'</id>

<from_id>'.$row['from_id'].'</from_id>';

$q2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['from_id']."'");

if(mysql_num_rows($q2) != 0)

{

$r2 = mysql_fetch_array($q2);

echo '<forename>'.$r2['forename'].'</forename>';

echo '<surname>'.$r2['surname'].'</surname>';

echo '<from_available>true</from_available>';

}

else echo '<forename>[Not

available]</forename><surname></surname><from_available>false</from_available>';

echo '

<title>'.$row['title'].'</title>

<read>'.$row['read'].'</read>

<datetime>'.$row['datetime'].'</datetime>

</message>';

}

echo '</messages>';

?>

Page 312: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 312

<?php

} //Ende der Kontrolle ob angemeldet

?>

messages/proof_to.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "../filesystem/settings.php";

?><?php

include "../../connect.php";

if($_REQUEST["vpc"] == 'true')

{

$forename = strtolower(substr($_REQUEST['text'], 0, strpos($_REQUEST['text'], ' ')));

$surname = strtolower(substr($_REQUEST['text'], strpos($_REQUEST['text'], ' ')+1));

$q1 = mysql_query("SELECT COUNT(*) FROM contacts WHERE LOWER(forename)='".$forename."' AND

LOWER(surname)='".$surname."' AND user_id='".$_SESSION['user_id']."' AND vpc_id!='0'");

$r1 = mysql_fetch_array($q1);

if($r1[0] != 0) echo 'true';

else echo 'false';

}

else

{

$email = $_REQUEST['text'];

$q1 = mysql_query("SELECT COUNT(*) FROM contacts WHERE (email_priv='".$email."' AND

email_priv_activated='true') OR (email_bus='".$email."' AND email_bus_activated='true') OR

(email_add='".$email."' AND email_add_activated='true') AND

user_id='".$_SESSION['user_id']."'");

$r1 = mysql_fetch_array($q1);

if($r1[0] != 0) echo 'true';

else echo 'false';

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

messages/save_attachment.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "../filesystem/settings.php";

?><?php

include "../../connect.php";

include '../filesystem/class_file.php';

if($_GET['user_id']!= "") $guserid = $_GET['user_id'];

else $guserid = null;

$file = new FilePath($_GET['path'], $guserid);

if($file->permissions[1] == '1')

Page 313: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 313

{

$q1 = mysql_query("SELECT id FROM messages_intern WHERE

(from_id='".$_SESSION['user_id']."' OR to_id='".$_SESSION['user_id']."') AND attachment_ids

LIKE '%".$_GET['attach_id'].";%'");

if(mysql_num_rows($q1) != 0)

{

$q2 = mysql_query("SELECT path_name, filename FROM messages_attachments WHERE

id='".$_GET['attach_id']."'");

$r2 = mysql_fetch_array($q2);

copy($attachmentsdir.$r2['path_name'], $file->full_path);

}

else echo 'No Permission';

}

else

{

if($_SESSION['language']=='de') echo 'Sie haben nicht die Berechtigung, die Datei zu

erstellen!';

else echo "You don't have the permission to create the file!";

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

messages/send_message.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

include "../filesystem/settings.php";

include "../filesystem/class_file.php";

include "../contacts/create_code.php";

?><?php

include "../../connect.php";

// Attachments prüfen

$i = 0;

$Attachments = array();

$Files = array();

while(strlen($_REQUEST['Attachment'.$i.'_Path']) != 0)

{

$file = new FilePath($_REQUEST['Attachment'.$i.'_Path'],

$_REQUEST['Attachment'.$i.'_UserId']);

if($file->permissions[0] == '1')

{

array_push($Attachments, $file->full_path);

array_push($Files, $file->filename);

}

$i++;

}

if($_REQUEST['type'] == 'vpc')

{

//ToID ermitteln

$forename = strtolower(substr($_REQUEST['To'], 0, strpos($_REQUEST['To'], ' ')));

$surname = strtolower(substr($_REQUEST['To'], strpos($_REQUEST['To'], ' ')+1));

$q1 = mysql_query("SELECT vpc_id FROM contacts WHERE LOWER(forename)='".$forename."' AND

LOWER(surname)='".$surname."' AND user_id='".$_SESSION['user_id']."' AND vpc_id!='0'");

$r1 = mysql_fetch_array($q1);

$ToID = $r1[0];

Page 314: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 314

$datetime = date("Y-m-d H:i:s");

$i = 0;

$attach_ids = "";

foreach($Attachments as $attach)

{

$code = create_code();

copy($attach, $attachmentsdir.$code);

mysql_query("INSERT INTO messages_attachments(path_name, filename, filesize)

VALUES('".$code."', '".$Files[$i]."', '".filesize($attach)."')");

$q2 = mysql_query("SELECT id FROM messages_attachments WHERE path_name='".$code."'");

$r2 = mysql_fetch_array($q2);

$attach_ids.= $r2[0].';';

$i++;

}

$q4 = mysql_query("INSERT INTO messages_intern(from_id, to_id, title, text,

attachment_ids, datetime) VALUES('".$_SESSION['user_id']."', '".$ToID."',

'".$_REQUEST['Subject']."', '".$_REQUEST['Text']."', '".$attach_ids."', '".$datetime."')");

}

else

{

$text = $_REQUEST['Text'];

$text = str_replace("\n", "\n\n", $text);

$text.= "\n\n\n";

$text.= "---------------------------------------------------------\n\n";

$text.= "Diese Email wurde mit Laufer VirtualPC erstellt. Nähere Informationen unter

http://paul.laufer.at/virtualpc\n\n";

$text.= "This Email was created with Laufer VirtualPC. More Details at

http://paul.laufer.at/virtualpc\n\n";

$text = str_replace("\\", "\\\\", $text);

$text = str_replace('"', '\\"', $text);

$from = '[email protected]';

$q1 = mysql_query("SELECT email, show_user_data FROM users WHERE

id='".$_SESSION['user_id']."'");

$r1 = mysql_fetch_array($q1);

if($r1['show_personal_data'] == 'true') $reply_to = $_SESSION['email'];

else $reply_to = "[email protected]";

$subject = $_REQUEST['Subject'];

$subject = str_replace("\\", "\\\\", $subject);

$subject = str_replace('"', '\\"', $subject);

$to = $_REQUEST['To'];

$to = str_replace("\\", "\\\\", $to);

$to = str_replace('"', '\\"', $to);

$string = 'echo "'.$text.'"';

$string.= ' | mail -s "'.$subject.'" -R "'.$from.'"';

$i = 0;

$attach_ids = "";

foreach($Attachments as $attach)

{

$code = create_code();

copy($attach, $attachmentsdir.$code);

mysql_query("INSERT INTO messages_attachments(path_name, filename, filesize)

VALUES('".$code."', '".$Files[$i]."', '".filesize($attach)."')");

$q2 = mysql_query("SELECT id FROM messages_attachments WHERE

path_name='".$code."'");

$r2 = mysql_fetch_array($q2);

$attach_ids.= $r2[0].';';

$string.= ' -a "'.$attach.'"';

$i++;

}

Page 315: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 315

$string.= ' '.$to.'';

$datetime = date("Y-m-d H:i:s");

$q4 = mysql_query("INSERT INTO messages_extern(user_id, email, title, text,

attachment_ids, datetime) VALUES('".$_SESSION['user_id']."', '".$to."',

'".$_REQUEST['Subject']."', '".$_REQUEST['Text']."', '".$attach_ids."', '".$datetime."')");

echo $string;

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

messages/valid_image.php

<?php

if(file_exists("../../images/filesystem/formats/small/".$_GET['ext'].".png")) echo 'true';

else echo 'false';

?>

public/PrepareXML.php

<?php

function PrepareXML($string)

{

$arr = array(

array("&", "&amp;"),

array("'", "&apos;"),

array("<", "&lt;"),

array(">", "&gt;"),

array('"', "&quot;"),

array("Ä", "&#196;"),

array("Ö", "&#214;"),

array("Ü", "&#220;"),

array("ä", "&#228;"),

array("ö", "&#246;"),

array("ü", "&#252;"),

array("ß", "&#223;")

);

foreach($arr as $elem)

{

$string = str_replace($elem[0], $elem[1], $string);

}

return $string;

}

function ReverseXML($string)

{

$arr = array(

array("&", "&amp;"),

array("'", "&apos;"),

array("<", "&lt;"),

array(">", "&gt;"),

array('"', "&quot;"),

Page 316: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 316

array("Ä", "&#196;"),

array("Ö", "&#214;"),

array("Ü", "&#220;"),

array("ä", "&#228;"),

array("ö", "&#246;"),

array("ü", "&#252;"),

array("ß", "&#223;")

);

foreach($arr as $elem)

{

$string = str_replace($elem[1], $elem[0], $string);

}

return $string;

}

?>

security/get_cal_shares.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

echo '<permissions>';

$query = mysql_query("SELECT * FROM calendar_shares WHERE

from_id='".$_SESSION['user_id']."'");

while($row = mysql_fetch_array($query))

{

echo '<permission>';

echo '<id>'.$row['id'].'</id>';

echo '<to_id>'.$row['to_id'].'</to_id>';

echo '<to_type>'.$row['to_type'].'</to_type>';

if($row['to_type'] == 'GROUP')

{

$query2 = mysql_query("SELECT name FROM groups WHERE id='".$row['to_id']."' AND

user_id='".$_SESSION['user_id']."'");

$row2 = mysql_fetch_array($query2);

echo '<name>'.$row2['name'].'</name>';

}

else

{

$query2 = mysql_query("SELECT forename, surname FROM users WHERE

id='".$row['to_id']."'");

$row2 = mysql_fetch_array($query2);

echo '<name>'.$row2['forename'].' '.$row2['surname'].'</name>';

}

echo '<colors>'.$row['entries_group_id'].'</colors>';

echo '<permissions>'.$row['permission'].'</permissions>';

echo '</permission>';

}

echo '</permissions>';

?>

Page 317: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 317

<?php

} //Ende der Kontrolle ob angemeldet

?>

security/get_permissions.php

<?php

session_start();

if($_SESSION['user_id']!="")

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

include '../filesystem/permissions.php';

include '../filesystem/class_file.php';

echo '<permissions>';

$file = new FilePath($_GET['path'], $_GET['user_id']);

if($file->permissions_path != $datadir.$file->user_id.'/permissions')

{

if(file_exists($file->permissions_path.'.txt'))

{

$lines = file($file->permissions_path.'.txt');

foreach($lines as $line)

{

if(substr($line, 0, strpos($line, ' '))!=$_SESSION['user_id'])

{

echo '<permission>';

if(substr($line, 0, 5) == 'GROUP')

{

echo '<type>Group</type>';

$id = substr($line, 5, strpos($line, ' ')-5);

$permission = substr($line, strlen('GROUP'.$id.' '));

echo '<id>'.$id.'</id>';

$nquery = mysql_query("SELECT name FROM groups WHERE id='".$id."'");

$nrow = mysql_fetch_array($nquery);

echo '<name>'.$nrow['name'].'</name>';

echo '<read>'.$permission[0].'</read>';

echo '<write>'.$permission[1].'</write>';

echo '<delete>'.$permission[2].'</delete>';

}

else

{

echo ' <type>User</type>';

$id = substr($line, 0, strpos($line, ' '));

$permission = substr($line, strlen($id.' '));

echo '<id>'.$id.'</id>';

$nquery = mysql_query("SELECT forename, surname FROM users WHERE

id='".$id."'");

$nrow = mysql_fetch_array($nquery);

echo '<name>'.$nrow['forename'].' '.$nrow['surname'].'</name>';

echo '<read>'.$permission[0].'</read>';

echo '<write>'.$permission[1].'</write>';

echo '<delete>'.$permission[2].'</delete>';

}

echo '</permission>';

}

Page 318: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 318

}

}

}

echo '</permissions>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

security/get_users_and_groups.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

include '../filesystem/permissions.php';

include '../filesystem/class_file.php';

echo '<items>';

$qusers = mysql_query("SELECT forename, surname, vpc_id FROM contacts WHERE

user_id='".$_SESSION['user_id']."' AND vpc_id!='0'");

while($user_row = mysql_fetch_array($qusers))

{

echo '<item>';

echo '<type>User</type>';

echo '<name>'.$user_row['forename'].' '.$user_row['surname'].'</name>';

echo '<id>'.$user_row['vpc_id'].'</id>';

echo '</item>';

}

$qgroups = mysql_query("SELECT id, name, contact_ids FROM groups WHERE

user_id='".$_SESSION['user_id']."'");

while($group_row = mysql_fetch_array($qgroups))

{

$quserstr = "SELECT COUNT(*) FROM contacts WHERE group_id LIKE

'%".$group_row['id'].";%' AND vpc_id!='0'";

$quser = mysql_query($quserstr);

$user_count = mysql_fetch_array($quser);

if($user_count[0] != 0) $has_vpc_contact = true;

if($has_vpc_contact == true)

{

echo '<item>';

echo '<type>Group</type>';

echo '<name>'.$group_row['name'].'</name>';

echo '<id>'.$group_row['id'].'</id>';

echo '</item>';

}

}

echo '</items>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

Page 319: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 319

?>

security/get_cal_permissions.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../../connect.php";

?>

<?php

$i = 0;

mysql_query("DELETE FROM calendar_shares WHERE from_id='".$_SESSION['user_id']."'");

while(isset($_REQUEST['id'.$i]))

{

$query = "INSERT INTO calendar_shares(from_id, to_id, to_type, entries_group_id,

permission) ";

$query.= "VALUES('".$_SESSION['user_id']."', '".$_REQUEST['id'.$i]."',

'".$_REQUEST['type'.$i]."', ";

$query.= "'".$_REQUEST['colors'.$i]."', '".$_REQUEST['permission'.$i]."')";

mysql_query($query);

$i++;

}

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

security/set_permissions.php

<?php

session_start();

if(isset($_SESSION['user_id']));

{

include "../filesystem/settings.php";

include '../filesystem/class_file.php';

include '../filesystem/search_for_shared.php';

include "../../connect.php";

?>

<?php

$i = 0;

$cont = $_SESSION['user_id'].' 111'."\r\n";

$db_string = "";

while(isset($_REQUEST['id'.$i]))

{

if($_REQUEST['type'.$i] == 'Group') $cont.= 'GROUP';

$cont.= $_REQUEST['id'.$i].' ';

$cont.= $_REQUEST['permissions'.$i]."\r\n";

$db_string.= $_REQUEST['id'.$i].';';

$i++;

}

Page 320: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 320

$getq = mysql_query("UPDATE users SET shares_user_ids ='".$db_string."' WHERE

id='".$_SESSION['user_id']."'");

$file = new FilePath($_REQUEST['path'], $_SESSION['user_id']);

if($file->file_exists == true)

{

$handle = fopen($file->permissions_path.'.txt', "w+");

fwrite($handle, $cont);

fclose($handle);

}

else echo 'File not found';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

settings/get_settings.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?>

<?php

header('Content-type:text/xml;');

include "../../connect.php";

include "../public/PrepareXML.php";

echo '<settings>';

$query = 'SELECT * FROM users WHERE id="'.$_SESSION['user_id'].'"';

$result = mysql_query($query);

$v = mysql_fetch_array($result);

echo '<forename>'.PrepareXML($v['forename']).'</forename>';

echo '<surname>'.PrepareXML($v['surname']).'</surname>';

echo '<username>'.PrepareXML($v['username']).'</username>';

echo '<birthdate>'.$v['birthdate'].'</birthdate>';

echo '<profession>'.PrepareXML($v['profession']).'</profession>';

echo '<address>'.PrepareXML($v['address']).'</address>';

echo '<postalcode>'.PrepareXML($v['postalcode']).'</postalcode>';

echo '<country>'.PrepareXML($v['country']).'</country>';

echo '<city>'.PrepareXML($v['city']).'</city>';

echo '<phone>'.PrepareXML($v['phone']).'</phone>';

echo '<email>'.PrepareXML($v['email']).'</email>';

echo '<web>'.PrepareXML($v['web']).'</web>';

$comment = $v['comment'];

$comment = preg_replace('/<br\\\\s*?\\/?/i', "\\n", $comment);

$comment = str_replace("<br />","",$comment);

echo '<comment>'.PrepareXML($comment).'</comment>';

echo '<wants_news>'.$v['wants_news'].'</wants_news>';

echo '<show_user>'.$v['show_user'].'</show_user>';

echo '<show_user_data>'.$v['show_user_data'].'</show_user_data>';

echo '<chat_show_online>'.$v['chat_show_online'].'</chat_show_online>';

echo '<chat_color>'.$v['chat_color'].'</chat_color>';

echo '<chat_font_id>'.$v['chat_font_id'].'</chat_font_id>';

echo '<edit_font_id>'.$v['edit_font_id'].'</edit_font_id>';

echo '<edit_font_size>'.$v['edit_font_size'].'</edit_font_size>';

echo '<weather_code>'.$v['weather_code'].'</weather_code>';

echo '<weather_city>'.$v['weather_city'].'</weather_city>';

Page 321: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 321

echo '<send_mail_to_contacts>'.$v['send_mail_to_contacts'].'</send_mail_to_contacts>';

echo '<co_add_to_cal>'.$v['co_add_to_cal'].'</co_add_to_cal>';

echo '</settings>';

?>

<?php

} //Ende der Kontrolle ob angemeldet

?>

settings/save_image.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

if($_GET['image_path']!='')

{

$cpath = $datadir.$_SESSION['user_id'].'/user.jpg';

$imgpath = $datadir.$_GET['image_user_id'].'/data'.$_GET['image_path'];

if(file_exists($imgpath))

{

$imagedata = getimagesize($imgpath);

$w = $imagedata[0];

$h = $imagedata[1];

if ($h > 120)

{

$new_w = (120 / $h) * $w;

$new_h = 120;

}

if($w > 100)

{

$new_h = (100 / $w) * $h;

$new_w = 100;

}

if(!isset($new_h))

{

$new_h = $h;

$new_w = $w;

}

$im2 = ImageCreateTrueColor($new_w, $new_h);

$image = null;

switch($imagedata[2])

{

case 2:

$image = ImageCreateFromJpeg($imgpath);

break;

case 1:

$image = imagecreatefromgif($imgpath);

break;

case 3:

$image = imagecreatefrompng($imgpath);

break;

}

if($image != null)

{

Page 322: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 322

imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h,

$imagedata[0], $imagedata[1]);

if(file_exists($cpath)) unlink($cpath);

ImageJPEG ($im2, $cpath);

}

}

else

{

if($_SESSION['language']=='de') echo 'Bilddatei nicht gefunden';

else echo 'Couldn\'t detect image';

}

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>

settings/save_settings.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

$query = "UPDATE users SET ";

$query.= "forename='".$_REQUEST['forename']."', ";

$query.= "surname='".$_REQUEST['surname']."', ";

$query.= "username='".$_REQUEST['username']."', ";

$query.= "birthdate='".$_REQUEST['birthdate']."', ";

$query.= "profession='".$_REQUEST['profession']."', ";

$query.= "address='".$_REQUEST['address']."', ";

$query.= "postalcode='".$_REQUEST['postalcode']."', ";

$query.= "city='".$_REQUEST['city']."', ";

$query.= "country='".$_REQUEST['country']."', ";

$query.= "phone='".$_REQUEST['phone']."', ";

$query.= "email='".$_REQUEST['email']."', ";

$query.= "web='".$_REQUEST['web']."', ";

$query.= "comment='".nl2br($_REQUEST['comment'])."', ";

$query.= "wants_news='".$_REQUEST['wants_news']."', ";

$query.= "show_user='".$_REQUEST['show_user']."', ";

$query.= "show_user_data='".$_REQUEST['show_user_data']."', ";

$query.= "chat_show_online='".$_REQUEST['chat_show_online']."', ";

$query.= "weather_code='".$_REQUEST['weather_code']."', ";

$query.= "weather_city='".$_REQUEST['weather_city']."', ";

$query.= "send_mail_to_contacts='".$_REQUEST['send_mail_to_contacts']."', ";

$query.= "co_add_to_cal='".$_REQUEST['co_add_to_cal']."' ";

$query.= "WHERE id='".$_SESSION['user_id']."'";

mysql_query($query);

?><?php

} //Ende der Kontrolle ob angemeldet

?>

Page 323: VirtualPC - Paul SavoieVirtualPC Paul Laufer Seite 3 2. Vorwort Meine erste Website erstellte ich im Rahmen des Informatikunterrichts in der 4. Klasse. Durch meinen Vater, der im Sektor

VirtualPC

Paul Laufer Seite 323

settings/save_xml_settings.php

<?php

$xmldoc = $_REQUEST['XMLHttpRequestBody'];

session_start();

header("Content-type:text/plain");

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../public/PrepareXML.php";

if($_REQUEST['XMLHttpRequestBody'])

{

$xmldoc = $_REQUEST['XMLHttpRequestBody'];

}

else

{

$xmldoc = file_get_contents("php://input");

}

$arr = array("forename", "surname", "username", "birthdate", "profession", "address",

"postalcode", "city", "country", "phone", "email", "web", "comment", "wants_news",

"show_user", "show_user_data", "chat_show_online", "weather_code", "weather_city",

"send_mail_to_contacts", "co_add_to_cal");

$query = "UPDATE users SET ";

foreach($arr as $elem)

{

$index1 = strpos($xmldoc, "<".$elem.">")+strlen($elem)+2;

$index2 = strpos($xmldoc, "</".$elem.">");

$query.= $elem."= '".substr($xmldoc, $index1, $index2-$index1)."', ";

}

$query = substr($query, 0, strlen($query)-2);

$query.= " WHERE id='".$_SESSION['user_id']."'";

$query = ReverseXML($query);

mysql_query($query);

?><?php

} //Ende der Kontrolle ob angemeldet

?>

settings/user_image.php

<?php

session_start();

if($_SESSION['user_id'] != "");

{

?><?php

include "../../connect.php";

include "../filesystem/settings.php";

$path = $datadir.$_SESSION['user_id'].'/user.jpg';

if(file_exists($path))

{

echo readfile($path);

}

?><?php

} //Ende der Kontrolle ob angemeldet

?>