Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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
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
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
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]
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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.
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
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
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
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
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
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
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
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
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.
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
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:
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
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.
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
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
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.
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
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
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
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.
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
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.
VirtualPC
Paul Laufer Seite 57
6. Anhang
Code-Beispiel – Erstellen eines neuen Fensters ..................................................................................... 58
Quellenverzeichnis ................................................................................................................................. 60
Abstract .................................................................................................................................................. 61
Quelltext ................................................................................................................................................. 62
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
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
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/
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.
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;
}
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;
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)
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;
}
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();
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)
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);
}
}
}
}
}
}
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'); }
}
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 = [
["&", "&"],
["'", "'"],
["<", "<"],
[">", ">"],
['"', """],
["Ä", "Ä"],
["Ö", "Ö"],
["Ü", "Ü"],
["ä", "ä"],
["ö", "ö"],
["ü", "ü"],
["ß", "ß"]
];
for(var i = 0; i < arr.length; i++)
{
string = string.replace(arr[i][0], arr[i][1]);
}
return string;
}
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',
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'
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',
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;
}
}
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>";
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() {
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);
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();
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
};
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)
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));
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)';
};
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())
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]+" <input id='Window"+this.base.id+"_title'
value='"+this.title+"' type='text' size='40' class='Contacts_input' /> ";
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' /> ";
str+= "<input id='Window"+this.base.id+"_start_date_input' value='"+startdatestring+"'
type='text' readonly size='15' class='Contacts_input' />";
str+= " ";
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+= ":";
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+= " "+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+" "+minutes_text[language]+'</option>';}
str+= "<option value='Minutes_30'";
if(string == 'Minutes_30') str+= ' selected ';
str+= ">30 "+minutes_text[language]+'</option>';
for(var h = 1; h<=12; h++)
{
str+= "<option value='Hours_"+h+"'";
if(string == 'Hours_'+h) str+= ' selected ';
str+= ">"+h+" "+hours_text[language]+'</option>';}
for(var d = 1; d<=4; d++)
{
str+= "<option value='Days_"+d+"'";
if(string == 'Days_'+d) str+= ' selected ';
str+= ">"+d+" "+day_text[language]+'</option>';}
for(var w = 1; w<=2; w++)
{
VirtualPC
Paul Laufer Seite 86
str+= "<option value='Weeks_"+w+"'";
if(string == 'Weeks_'+w) str+= ' selected ';
str+= ">"+w+" "+week_text[language]+'</option>';}
str+= '</select>';
str+= " "+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' /> ";
str+= "<input id='Window"+this.base.id+"_end_date_input' value='"+enddatestring+"' type='text'
readonly size='15' class='Contacts_input' />";
str+= " ";
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+= " "+end_text[language];
str+= " </td>";
str+= "<td class='Contact_ContentTd'>";
var recurring_text =
{
de:'Wiederkehrend',
en:'Recurr};
var text = "";
var none_text =
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]+" ";
text+= this.recurring_intervall+" ";
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+= " <img id='Window"+this.base.id+"_recurring_button'
title='"+recurring_text[language]+"' src='images/calendar/recurring.png' valign='bottom' />";
str+= " "+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;
}
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)
{
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);'> </
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;'> </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+= " ";
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+= " ";
str+= "<select id='Window"+Window.base.id+"_RecTypeSelect'>";
var days_text =
{
de:'Tage',
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()
{
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]+" "+Window.CurrentYear+" ";
str+= "<img id='Window"+Window.base.id+"_Previous' src='images/calendar/prev_small.png'
/>";
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,
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)
{
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: };
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+" <img
src='images/calendar/colors/"+obj.color_name+"_strong.png' width='10' />";
VirtualPC
Paul Laufer Seite 96
str+= " <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)
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+" "+minutes_text[language]+'</option>';
}
str+= "<option value='Minutes_30'>";
str+= "30 "+minutes_text[language]+'</option>';
for(var h = 1; h<=12; h++)
{
str+= "<option value='Hours_"+h+"'>";
str+= h+" "+hours_text[language]+'</option>';
}
for(var d = 1; d<=4; d++)
VirtualPC
Paul Laufer Seite 98
{
str+= "<option value='Days_"+d+"'>";
str+= d+" "+day_text[language]+'</option>';
}
for(var w = 1; w<=2; w++)
{
str+= "<option value='Weeks_"+w+"'>";
str+= w+" "+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++;
}
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)
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
};
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]+' ';
str+= " <input id='Window"+this.base.id+"_SearchInput' type='text' size='20'
value='"+this.SearchString+"'";
str+= "style='margin-top:2px' />";
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();
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);
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </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'> </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'>";
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';
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();
}
};
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();
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </td>";
str+= " <td class='Security_Header'> </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()
{
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)
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()
};
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'
},
{
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]+' ';
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];
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>";
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)';
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;
;
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();
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--;
}
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)
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;
},
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;
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()
{
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;
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;
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;
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+= '...';
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>";
}
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>";
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)
{
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);
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'> "+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;
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'
}
};
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
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
{
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>";
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 = "";
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
};
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>";
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();
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;' /> ";
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)
{
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();
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'>";
VirtualPC
Paul Laufer Seite 142
var search_text =
{
de:'Suche:',
en:'Search:'
};
str+= search_text[language]+' ';
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;
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </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);
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </td>";
str+= "</tr>";
for(var i = 0; i<this.SearchedItems.length; i++)
{
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();
}
}
};
}
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: ''
};
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]+' ';
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()
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header' colspan='2' width='20'> </td>";
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();
}
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;
};
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()
};
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]+' ';
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 =
{
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;
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();
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'> "+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'> </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'
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+= ' ';
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';
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;
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();
}
};
}
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)',
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'> "+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'> </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++)
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;
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++;
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;
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>";
}
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;
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();
}
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;
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'>";
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' /> ";
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+= " "+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+= " "+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+= " "+email_bus_text[language];
str+= " </td>";
str+= " <td class='Contact_ContentTd'>";
var phone_bus_text =
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+= " "+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+= " "+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+= " "+phone_add_text[language];
str+= " </td>";
str+= "</tr>";
str+= "<tr>";
str+= " <td class='Contact_ContentTd'> </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+= " "+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+= " "+address_priv_text[language];
str+= " </td>";
str+= " <td class='Contact_ContentTd'>";
var address_bus_text =
{
de:'Adresse (Geschäftlich)',
en:'Address (Business)'
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+= " "+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+= " "+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+= " "+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+= " "+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+= " "+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+= " "+country_priv_text[language];
str+= " </td>";
str+= " <td class='Contact_ContentTd'>";
var country_bus_text =
{
de:'Land (Geschäftlich)',
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+= " "+country_bus_text[language];
str+= " </td>";
str+= "</tr>";
str+= "<tr><td> </td><td> </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+= " "+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+= " "+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+= " "+profession_text[language]+" ";
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 ';
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+= " "+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 /> ";
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+'×
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 =
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;
}
};
}
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
};
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'
/> ";
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;';
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'>";
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 = '';
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;
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+= " ";
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 =
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;
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;
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');
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)
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();}});
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();}});
}
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:\\/:?*><|</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:\\/:?*><|</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;
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
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++)
{
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+"'
/> ";
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()
{
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',
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+= " ";
str+= "<button
id='Window"+this.base.id+"_NoButton'>"+no_text[language]+"</button>";
break;
case 'YESNOCANCEL':var yes_text =
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+= " ";
str+= "<button
id='Window"+this.base.id+"_NoButton'>"+no_text[language]+"</button>";
str+= " ";
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)
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);
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'
}
};
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> ";
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> ";
str+= "<input id='Window"+this.base.id+"_SubjectInput' maxlength='255' type='text'
size='60' value='";
str+= this.Subject;
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> ";
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()
{
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);
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' /> ";
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
};
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]+' ';
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;
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;
}
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)
{
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 =
{
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
};
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]+' ';
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',
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);
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();
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++)
{
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();
};
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;
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;' /> "+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;' /> "+delete_text[language]+"</td>";
}
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;' /> "+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;' /> "+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;' /> "+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> "+Message.from_forename+'
'+Message.from_surname+"<br />";
str+= "<font
class='Messages_SmallText'>"+to_text[language]+":</font> "+Message.to_forename+'
'+Message.to_surname+"<br />";
str+= "<font
class='Messages_SmallText'>"+send_text[language]+":</font> "+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' /> ";
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++)
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();
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: '',
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'>";
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;
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++;
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+= " ";
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();
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 = '';
};
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+"'
/> ";
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()
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,
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...'
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: <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()
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)
{
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+= " ";
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;
};
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 = '';
};
}
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+"'
/> ";
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)
{
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: '',
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...',
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]+' ';
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()
{
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'
};
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </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'> </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>";
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)
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 =
{
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'> "+name_text[language]+"</td>";
str+= " <td class='Security_Header'> </td>";
str+= " <td class='Security_Header'> </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)
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;
}
}
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 = [
{
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];
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';
}
};
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+= "> "+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'
};
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+= "> "+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+= "> "+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+= "> "+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+= "> "+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+= "> "+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>";
}
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+= " "+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+= "> "+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+= "> "+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+= "> "+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+= "> "+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+= "> "+country_text[language]+"<br />";
var phone_text =
VirtualPC
Paul Laufer Seite 243
{
de:'Telefon',
en:'Phone'
};
str+= "<input type='text' id='Window"+Window.base.id+"_phone'
value='"+Window.settings['phone']+"'";
str+= "> "+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+= "> "+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+= "> "+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+= "> "+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+= " "+weather_code_text[language]+"<br />";
var weather_city_text =
{
de:'Wetter-Stadt',
en:'Weather-City'
VirtualPC
Paul Laufer Seite 244
};
str+= "<input type='text' id='Window"+Window.base.id+"_weather_city'
value='"+Window.settings['weather_city']+"'>";
str+= " "+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+= "> "+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+= "> "+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')
{
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},
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()
{
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();
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()
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'])
{
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'])
{
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
?>
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");
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)
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';
?>
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
?>
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>';
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
?>
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']);
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
?>
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>';
}
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
?>
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
?>
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
?>
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."')");
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
?>
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("&", "&", $text);
$text = str_replace("'", "'", $text);
$text = str_replace('"', """, $text);
$text = str_replace('<', "<", $text);
$text = str_replace('>', ">", $text);
$text = str_replace('Ä', "Ä", $text);
$text = str_replace('Ö', "Ö", $text);
$text = str_replace('Ü', "Ü", $text);
$text = str_replace('ä', "ä", $text);
$text = str_replace('ö', "ö", $text);
$text = str_replace('ü', "ü", $text);
$text = str_replace('ß', "ß", $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'];
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);
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;
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']."'");
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
?>
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>';
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>';
}
}
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
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
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>';
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'])
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'];
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);
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:
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++;
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
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";
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;
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);
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
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']);
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!';
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);
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')
{
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 = '/';
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
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);
}
}
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;
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
?>
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))
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
?>
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);
}
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
{
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
?>
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')
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);
}
}
?>
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();
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"];
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>
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
?>
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
?>
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);
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];
}
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>';
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>';
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>';
?>
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')
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];
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++;
}
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("&", "&"),
array("'", "'"),
array("<", "<"),
array(">", ">"),
array('"', """),
array("Ä", "Ä"),
array("Ö", "Ö"),
array("Ü", "Ü"),
array("ä", "ä"),
array("ö", "ö"),
array("ü", "ü"),
array("ß", "ß")
);
foreach($arr as $elem)
{
$string = str_replace($elem[0], $elem[1], $string);
}
return $string;
}
function ReverseXML($string)
{
$arr = array(
array("&", "&"),
array("'", "'"),
array("<", "<"),
array(">", ">"),
array('"', """),
VirtualPC
Paul Laufer Seite 316
array("Ä", "Ä"),
array("Ö", "Ö"),
array("Ü", "Ü"),
array("ä", "ä"),
array("ö", "ö"),
array("ü", "ü"),
array("ß", "ß")
);
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>';
?>
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>';
}
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
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++;
}
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>';
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)
{
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
?>
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
?>