cal - Event-Kalender für die eigene Homepage

Installation und Konfiguration von cal


Hier geht's zur Download-Seite von cal

1. Allgemeines

1.1. Produktbeschreibung in Kürze

cal ist ein kleiner Event-Kalender für die eigene Homepage. Termine können auf einer Adminoberfläche oder wahlweise auch durch Besucher erfasst werden. Wiederkehrende Termine sind möglich. Einfache Installation. E-Mail Benachrichtigungen bei neuen, durch Benutzer eingetragenen, Terminen möglich. Unix/(Windows), deutsch, kostenlos.

1.2. Was kann cal?

cal ist ein Event-Kalender für die eigene Homepage und bietet folgende Funktionen

1.3. Voraussetzungen

Nebst Perl/CGI Unterstützung ist noch sendmail erforderlich. Ohne sendmail funktioniert der Kalender einwandfrei, nur die Benachrichtigung bei neuen Terminen ist nicht möglich. Zudem wird noch das Modul Time::Local benötigt, welches aber zum Standard-Umfang jeder Perl Distribution gehört.

1.4. Lizenzbestimmungen

Dieses Skript basiert auf den STANDARD-Lizenzbedinungen, die Sie unter http://www.cgicorner.ch/download/download-info oder in der Datei cgicorner.txt im ZIP-Archiv finden.

2. Installation

2.1. Dateien kopieren und Berechtigungen setzen

Folgende Dateien müssen kopiert und mit den entsprechenden Berechtigungen versehen werden:

 cgi-bin - Verzeichnis, z.B. /cgi-bin/cal/
. chmod 755 (od. 777) Verzeichnis
cal.cgi chmod 755 Hauptscript

 data-Verzeichnis, z.B. /cgi-bin/cal/data/
 .htaccess Datei empfohlen, um Zugriffe via Webbrowser komplett zu verhindern
. chmod 755 (od. 777) Verzeichnis
style.css chmod 600 CSS-Stylesheet
*.dat chmod 600 Daten-Dateien
*.cache* chmod 600 Cache-Dateien (*)
 HTML-Verzeichnis, z.B. /cal
. chmod 755 (od. 777) Verzeichnis
calendar.css chmod 644 CSS für Kalender
cal.gif chmod 644 GIF für DHTML-Kalender
calendar.js chmod 644 JavaScript für DHTML-Kalender

Anmerkung: Die mit (*) gekennzeichneten Dateien befinden sich nicht im ZIP-Archiv und werden erst im Betrieb erstellt.

2.2. Script ausführen

Um das Script aufzurufen, stehen folgende URLs zur Verfügung:

/cgi-bin/cal/cal.cgi zeigt den Kalender an (Link für Besucher; Details siehe Kapitel 4)
/cgi-bin/cal/cal.cgi?action=admin Administrationsbereich. Sofern ein Passwort definiert ist, muss dieses eingegeben werden, bevor der Adminbereich angezeigt wird.

3. Konfiguration

Die Konfiguration der wichtigsten Einstellungen wird direkt im Script (cal.cgi) vorgenommen:

$dataFile Dateiname der Daten-Datei für einmalige Termine (UNIX-Pfad)
$nvDataFile Dateiname der Daten-Datei von nicht validierten Terminen (Adminfreigabe noch erforderlich; UNIX-Pfad)
$rDataFile Dateiname der Daten-Datei für wiederkehrende Termine (UNIX-Pfad)
$cacheFile Dateiname für den Kalender-Cache (UNIX-Pfad)
$cacheFile1 Dateiname für den Event-Cache auf der Hauptseite (UNIX-Pfad)
$calCSS Dateiname zum CSS-Stylesheet für den DHTML-Kalender (Browser-Pfad)
$calJS Dateiname zur JavaScript-Datei für den DHTML-Kalender (Browser-Pfad)
$calGIF Dateiname zum Kalender-GIF (Browser-Pfad)
$cssFile Dateiname zum CSS-Stylesheet (UNIX-Pfad)
$rcptMail Mailadresse, an welche neue oder geänderte, durch Benutzer eingetragene, Events geschickt werden (optional)
$password Passwort für die Adminoberfläche
$sendmail Pfad zu sendmail (UNIX-Pfad)
$userAdd 0=Benutzer dürfen keine eigenen Termine erfassen
1=Benutzer dürfen eigene Termine erfassen und die Termine sind sofort sichtbar
2=Benutzer dürfen eigene Termine erfassen, welche aber zuerst noch durch den Administrator freigegeben werden müssen ($rcptMail zwingend erforderlich!)
$alignFromRight Definiert den Abstand des Kalenders zum rechten Rand. 0=linksbündig ausgerichtet. Rechtsbündige Ausrichtung mit Standard-Stylesheet: ca. 250.
$showEvents Anzahl Termine, welche direkt auf der Hauptseite angezeigt werden
$buttonTextMonth Text, für Such-Button (direkt zu bestimmten Monat springen). Leer=Button wird nicht angezeigt
$buttonTextBack Text, für zurück-Button in Kalender
$buttonTextNext Text, für weiter-Button in Kalender
$buttonTextToday Text, für Button "Heute" in Kalender
$onChange legt fest, ob der Kalender bei der Auswahl eines anderen Monats/Jahres im Dropdown-Feld automatisch neu geladen werden soll (ansonsten erst mit Klick auf Button)
$onMouseOver definiert, ob die Termine bereits beim MouseOver über den entsprechenden Tag angezeigt werden sollen. 0=Funktion deaktiviert, 1=in Kalender und Detailansicht aktiviert, 2=nur in Kalender, 3=nur in Detailansicht
$markToday hebt den aktuellen Tag farblich hervor, falls diese Option aktiviert wird.
$concurrentEvents definiert, ob überlappende Termine möglich sind (Check erfolgt nur bei der Erfassung im Benutzerbereich; keine Kontrolle auf Konflikte mit wiederkehrenden Terminen)
$previewDays Anzahl Tage, welche bei der Ansicht des Kalenders beim Start oder nach Klick auf [Heute] in der Terminliste berücksichtig werden sollen
$adminTimeSpan Definiert, welche Monate im Adminbereich standardmässig dargestellt werden sollen. Enthält zwei Parameter: zuerst wird der anzuzeigende Startmonat definiert (0=aktueller Monat, -1=Vormonat, 1=nächster Monat etc.) nach dem Komma folgen dann die Anzahl Monate. Beispiel: "-1,3" zeigt von Vormonat 3 Monate an (also Vormonat, aktueller Monat und nächster Monat), "0,5" zeigt vom aktuellen Monat an 5 Monate an.
@cat Definiert die vorhandenen Kategorien, mehr dazu im Kapitel 3.2
$userCanChooseCat Legt fest, ob Besucher die Kategorie ebenfalls zuweisen können (1), oder ob dies nur via Adminbereich möglich ist (0).

Die Anpassung der Farben erfolgt im CSS-Stylesheet (style.css). Der Einsatzzweck der einzelnen CSS-Klassen ist direkt in dieser Datei dokumentiert.

3.1. Online Versions-Check

Der Online Versions-Check ist eine einfache Möglichkeit, zu überprüfen, ob die eingesetzte Version noch aktuell ist.

Um den Versions-Check zu starten, muss man auf den Link bei der Versions-Nummer unten rechts klicken. Danach wird eine Verbindung mit dem Server von cgicorner.ch hergestellt. Dazu ist eine Internet-Verbindung notwendig.

Es wird nur die Versionsnummer sowie das letzte Änderungsdatum an den Server von cgicorner.ch übermittelt. cgicorner.ch garantiert, dass keine weiteren Konfigurationseinstellungen oder Benutzerdaten gesendet werden. Der Browser übermittelt möglicherweise noch den Referer, der mögliche Informationen über den Einsatzort liefert. Wenn Sie dies nicht möchten, installieren Sie eine Personal-Firewall, welcher die Referer-Informationen blockiert oder kopieren Sie den Link in die Zwischenablage und fügen Sie ihn manuell in die Browser-Adressleiste ein.

3.2. Kategorien

In cal können mehrere Terminkategorien definiert werden, welche dann der Besucher und/oder Administrator einem Termin zuweisen kann. Diese Terminkategorien müssen im CSS-Stylesheet konfiguriert sein und können so in einer anderen Farbe, einer anderen Schrift etc. dargestellt werden. Um eine eigene Kategorie zu definieren sind zwei Schritte notwendig:

Um nebst "Wichtig" noch eine Klasse "gruen" und "dies ist blau" hinzuzufügen, muss also folgendes in die cal.cgi eingetragen werden: push(@cat, "Wichtig","gruen","dies ist blau");

Ebenfalls muss die style.css noch um zwei Klassen ergänzt werden:

td.sbdetgruen {
  border-right: 1px solid #000000;
  border-bottom: 1px solid #000000;
  background: #aaffaa;
}
td.sbdetdiesistblau {
  border-right: 1px solid #000000;
  border-bottom: 1px solid #000000;
  background: #aaaaff;
}

3.3. Datenbank-Sperre

Ein Schreibzugriff auf die Datenbank führt eine Sperrung der Datenbank für weitere Zugriffe aus. Dadurch kann ein allfälliger Datenverlust durch zwei gleichzeitige Schreibzugriffe auf die Datenbank ausgeschlossen werden. Der Benutzer erhält eine Fehlermeldung, dass die Datenbank zur Zeit gerade durch einen anderen Benutzer gesperrt sei.

Falls die Datenbank nach einem Script-Absturz einmal dauerhaft gesperrt sein sollte, muss die .lock-Datei von Hand gelöscht werden (Lockdatei für data/cal.dat ist data/cal.dat.lock). Vor der manuellen Freigabe sollte geprüft werden, ob eine .tmp-Datei vorhanden ist und diese ggf. aktuellere Daten enthält. Falls ja, sollte diese Datei in den Namen der Datendatei umbenannt werden (z.B. data/cal.dat.tmp nach data/cal.dat umbenennen).

4. Einbinden in die Homepage

Es gibt zwei Möglichkeiten, den Kalender in die eigene Homepage einzubinden.

4.1. IFRAME

Der Kalender lässt sich mittels eines IFRAMES in eine bestehende Seite einbinden. Breite und Höhe sind Richtwerte und müssen evtl. je nach Anzahl Termine auf der Hauptseite und Schriftgrösse angepasst werden.

<iframe src="/cgi-bin/cal/cal.cgi" width="250" height="500" name="calendar" frameborder="0" scrolling="no">
Ihr Browser unterstützt keine IFRAMES.
<a href="/cgi-bin/cal/cal.cgi" target="_blank">Klicken Sie hier, um den Kalender in einem eigenen Fenster darzustellen</a>
</iframe>
4.1.1. Transparentes IFRAME

Gerade bei der Verwendung der ToolTip-Funktion ist es von Vorteil, das IFRAME etwas bereiter zu machen und so zu verhindern, dass dei Tips abgeschnitten werden. Dazu kann das IFRAME transparent gestaltet und über eine grössere Fläche gelegt werden.

style.css

body {
  background: #transparent;
}

Der Internet-Explorer benötigt im IFRAME-Tag noch ein Attribut allowTransparency="true".

Etwas komplizierter wird es, wenn nicht ausreichend Platz zur Verfügung steht und der Kalender rechtsbündig über bestehenden Text gelegt werden soll (Beispiel siehe Download-Seite von cal, http://www.cgicorner.ch/download/cal.shtml).

Auch hier ist die Anpassung des Stylesheets mit dem transparenten Body wieder erforderlich. Der Code für das IFRAME ist aber etwas komplizierter:

<div style="float: right; width:260px; height:500px;">&nbsp;</div>
<div style="position: absolute; right: 0px; width: 680px; margin: 0px; z-index: 1;">
<iframe src="/cgi-bin/cal/cal.cgi" width="680" height="500" name="calendar" frameborder="0" title="cal"
  longdesc="Webkalender" allowTransparency="true" scrolling="no">
  Ihr Browser unterstützt keine IFRAMES.
  <a href="/cgi-bin/cal/cal.cgi" target="_blank">
  Klicken Sie hier, um den Kalender in einem eigenen Fenster darzustellen</a></iframe>
</div>

Hierbei werden zwei DIV-Tags erstellt: der erste hat die Breite des Kalenders und verdrängt den Text. Breite und Höhe müssen ggf. angepasst werden.

Der zweite DIV-Tag ist deutlich grösser (700px) und liegt transparent über dem Text. Zusammen mit einem $alignFromRight=250 führt dies dazu, dass der Kalender mit einer Breite von 250 Pixel am rechten Rand dargestellt wird (also dort, wo der erste DIV-Tag den Platz dafür freigemacht hat), jedoch das IFRAME deutlich breiter ist und Tool-Tips problemlos Platz haben.

WICHTIG: Der DIV-Tag ist zwar transparent, liegt aber über dem bestehenden Text. An der Stelle, an der der DIV-Tag über dem Text liegt können keine Links angeklickt werden!

4.2. Pop-Up

Der Kalender lässt sich auch via Pop-Up in einem eigenen Fenster anzeigen. Dazu muss im HEAD-Bereich der Seite folgende JavaScript-Funktion eingefügt werden:
<script language="JavaScript" type="text/javascript">
function PopUpFenster(url,framename,width,height,xpos,ypos) {
  if ( navigator.appName == "Netscape" ) {
    width = width + 14;
    height = height + 14;
    var attributes =  "menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1,WIDTH=" + width + ",HEIGHT=" + height + ",screenX=" + xpos + ",screenY=" + ypos;
    var showpic = window.open(url,framename, attributes);
  } else {
    width = width + 14;
    height = height + 14
    var attributes = "menubar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,WIDTH=" + width + ",HEIGHT=" + height + ",screenX=" + xpos + ",screenY=" + ypos;
    var showpic = window.open(url,framename, attributes);
  }
}
</script>

Danach kann der Kalender mit folgendem Link aufgerufen werden:

<a href="#" onClick="PopUpFenster('/cgi-bin/cal/cal.cgi','calmain',250,500,100,100);">Event-Kalender</a>

Breite und Höhe sind Richtwerte und müssen evtl. je nach Anzahl Termine auf der Hauptseite und Schriftgrösse angepasst werden.




Copyright © 2008 by Jürg Sommer, scripts@cgicorner.ch
http://www.cgicorner.ch
Letzte Änderung: 14. Februar 2012