WebPTBSync: Terminkalendar

radislav

Aktives Mitglied
Mitglied seit
15 Mrz 2008
Beiträge
950
Punkte für Reaktionen
0
Punkte
16
wer PTBSync kennt, ist hoffentlich begeistert von diesem mächtigen terminkalendar mit atomuhr, notitzen uvm.

idee:
entwicklung des php-skriptes für mein apache-webserver, welches die termine (später viellecht auch die notitzen) aus PTBSync-AutoExport.ini einliest und im webbrouser darstellt (später vielleicht auch verändert/hinzufügt). somit soll es möglich sein, auf die termine/notizen auch mit ausgeschaltetem pc von extern zuzugreifen. PTBSync wird aber weiterhin genutzt.

realisierung:
PTBSync-AutoExport.ini wird auf die festplatte/den USB-stick verschoben, der an fritz.box angeschloßen ist. auf der fritz.box läuft ein apache-server, z.b. dieser. er wurde von mir schon getestet: relativ leicht zu installieren, php funktioniert.

guest-eingang:
ist auf meiner homepage eingerichtet. (im menüpunkt "WebPTBSync")
somit können sie die funktionalität der software anschaun.
die daten sind natürlich in einer echten *.ini gespeichert und sind von mir frei erfunden worden.
(password: webptbsync)

Release v0.04
- loginsystem auf sqlite-datenbank erweitert:
- sqlite-datenbank erstellbar mit "createdb.php"(vor dem erstellen userdaten und pfade anpassen! nach dem erstellen löschen!)
- mehrere user mit verschiedenen *.ini möglich
- aktueller user wird über dem menü angezeigt
- bugfix: aktueller monat im menü
- kleine layoutänderung
(- einstellungen geändert: immer noch ohne funktion)

Release v0.03
- kalendar an geburtstage angepasst:
----> werden wie in ptbsync mit z.b. "radislav wird 25" angezeigt
----> werden bei allen jahren angezeigt
- daten sind mit login geschützt
- speicheroptimierung von doppelfritz :)
- bugfix: monate werden richtig gezeichnet
- kleine layoutänderung
(- einstellungen noch ohne funktion)

Release v0.02
- darstellung aller monate möglich
- überarbeitetes layout

Release v0.01
- datei muss "PTBSync-AutoExport-Rad.ini" heißen im gleichen verzeichnis, in dem index.php liegt.
- liest termine aus "PTBSync-AutoExport-Rad.ini" und stellt den aktuellen monat mit den dazugehörigen terminen dar.
- kann momentan nur bis zu ca. 1000 termine verarbeiten.

entwicklung:
ToDo:
- beschränkung auf 1000 termine aufheben
- einstellungen
- möglichkeit termine zu bearbeiten ("etwas" aufwendiger)
- user-verwaltung
- [...]

jeder, der sich an der entwicklung beteiligen will, ist herzlich willkommen!

gruß
Radislav
 

Anhänge

  • WebPTBSync_v0.01.jpg
    WebPTBSync_v0.01.jpg
    119.9 KB · Aufrufe: 131
  • WebPTBSync_v0.01.zip
    2.2 KB · Aufrufe: 5
  • WebPTBSync_v0.02.jpg
    WebPTBSync_v0.02.jpg
    129.5 KB · Aufrufe: 49
  • WebPTBSync_v0.02.zip
    3.5 KB · Aufrufe: 5
  • WebPTBSync_v0.03.jpg
    WebPTBSync_v0.03.jpg
    127.7 KB · Aufrufe: 42
  • WebPTBSync_v0.03.zip
    5.2 KB · Aufrufe: 9
  • WebPTBSync_v0.04.zip
    6.2 KB · Aufrufe: 12
Zuletzt bearbeitet:
zu dem Daten mit Login schützen, das ist auf PHP-Ebene leicht zu machen. Man macht zum Beispiel in die 1. Seite die aufgerufen wird ein Passwortfeld und prüft dann in jeder Datei per
PHP:
<?php
if($_GET[pw] != "<dein Passwort>") exit;
...
ob man berechtigt ist. Damit das überall und nicht nur auf der 2. Seite geht muss man an alle Links ein ?pw=<dein PW> anhängen.
 
sehr schön, dass schon mal einer mitmachen will!

vorschlag klingt gut, werde ich heut abend gleich ausprobieren. im nächsten release wirds dann drin sein, wenns klappt.

frage erstmal dazu: wie sicher ist denn diese methode für passworteingabe? meinen für unbefugten zugriff, vorausgesetzt: man ändert dieses passwort nicht ständig/überhaupt nicht.

übrigens meitest du bestimmt $_POST. bei GET erscheint ja das passwort oben als ?password=<eingabe> :blonk:

Damit das überall und nicht nur auf der 2. Seite geht muss man an alle Links ein ?pw=<dein PW> anhängen.

habe folgendermaßen realiesiert:

PHP:
<?php
// Passwortabfrage
if($_POST[password] != "webptbsync")
{
   include 'password.php'; // ist die login-seite mit bemerkung: passwort ist falsch
   exit;
}
?>
<html>
     <head>
      <title>WebPTBSync</title>
      <link rel=stylesheet type="text/css" href="calendar.css">
   </head>
   <noframes>Ihr Browser unterst&uuml;zt keine Frames</noframes>
   <frameset cols="170, *" border=0>
      <frame src="menu.php?password=webptbsync" scrolling=no noresize=yes>
      <frameset rows="80, *">
         <frame src="title.php?password=webptbsync" scrolling=no noresize=yes>
         <frame src="calendar.php?password=webptbsync" scrolling=auto name="home">
      </frameset>
   </frameset>
</html>

funktioniert aber nicht :confused: was habe ich falsch gemacht? ich komm einfach nicht drauf
 
Zuletzt bearbeitet:
dafür ja das GET! Mit dem GET kannst du das PW einfach für die folgeseiten an die URL anhängen:
calendar.php?password=webptbsync
Bei POST geht das NICHT. Deshalb habe ich auch die Übertragung per GET gewählt ;-)

PS: außerdem weiß ich nicht, ob include 'password.php'; funktioniert, versuchs mal mit include('password.php');
 
include 'password.php'; funktioniert!
aber zum login: so einen login kann man sich gleich spraren - er ist nicht sicher, denn die passwörter stehen in der adresse und index.php als link - keine saubere lösung!

Dieses System ist interresant, in meinem test ist aber durchgefallen: richtige daten helfen nicht - man kann sich nicht einlogen.

ne idee woran des liegen könnte?
 
hey stimmt, an das mit der Session habe ich garnicht gedacht!
Ich weiß nicht, was dem Skript von Selfhtml fehlt und will jetzt auch nicht danach gucken, sondern mach schnell selbst was.

Der Login wäre auf jeden Fall ein HTML-Formular, das an ein Skript geht, das dann einfach, wenn das PW richtig ist in eine Session eine Variable auf true setzt. Dann wird nur noch auf jeder Seite geprüft, ob die Variable immernoch true ist und wenn nicht wird man "rausgekickt".

Zu dem rauskicken würde ich ein Skript nehmen, das so aussieht:
PHP:
<?php
session_start();
if(!$_SESSION[G])
{
?>
<h1>Keine Session vorhanden!</h1>
<form action="login.php" method="post">
<p>Kennwort:<br>
<input name="kennwort" type="password" size="12">
<input type="submit" value=" Einloggen ">
</p>
</form>
<?php
exit;
}
?>
und dieses einfach in jeder folgedatei in der 1. Zeile Includen.
so, dann hätten wir noch eine index.html:
HTML:
<form action="login.php" method="post">
 <p>Kennwort:<br>
 <input name="kennwort" type="password" size="12">
<input type="submit" value=" Einloggen ">
</p>
 </form>
und dann noch die login.php:
PHP:
<?php
session_start();
if($_POST[kennwort] == "<passwort>")
{
$_SESSION[G] = true;
header("location:<die Datei, zu der man dierekt nach dem Einloggen kommen soll>");
} else {
?>
<h1>Falsches Passwort!</h1>
<form action="login.php" method="post">
  <p>Kennwort:<br>
  <input name="kennwort" type="password" size="12">
<input type="submit" value=" Einloggen ">
</p>
  </form>
<?php
}
?>
Achtung: diese Skripte sind ungetestet. Ich hab mich nur hingesetzt und einfach runtergetippt, was mir in den Sinn kam und noch etwas von Selfhtml dazugeschmissen und all das in ca 10 Minuten.

PS: Stimmt, nen logout habe ich vergessen, das ist aber auch ganz einfach:
PHP:
<?php
session_start();
session_destroy();
?>
und schon ist man ausgeloggt
 
so, hab mir mal deine lösung zu brust genommen, obwohl sie sich wenig vor der aus selfhtml unterscheidet.
login.php:
PHP:
<?php
   session_start();
   if($_POST['password'] == "webptbsync")
   {
      $_SESSION['G'] = true;
      $hostname = $_SERVER['HTTP_HOST'];
      $path = dirname($_SERVER['PHP_SELF']);
      header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
      exit;
   }
?>
<html>
   <head>
      <title>Login</title>
   </head>
   <body>
      <form action="login.php" method="post">
         Passwort: <input type="password" name="password">
         <input type="submit" value="Anmelden">
      </form>
   </body>
</html>
index.php:
PHP:
<?php
   session_start();
   if($_SESSION['G']!=true)
   {
      // warnungen und fehler einschalten
      error_reporting(E_ALL); 
      ini_set('display_errors', TRUE);
      // session-array ausgeben
      echo '<pre>'.print_r( $_SESSION, true).'</pre>';
      
      include('login.php');
      exit;
   }
?>
<html>
   <head>
      <title>WebPTBSync</title>
      <link rel=stylesheet type="text/css" href="calendar.css">
   </head>
   <noframes>Ihr Browser unterst&uuml;zt keine Frames</noframes>
   <frameset cols="170, *" border=0>
      <frame src="menu.php" scrolling=no noresize=yes>
      <frameset rows="80, *">
         <frame src="title.php" scrolling=no noresize=yes>
         <frame src="calendar.php" scrolling=auto name="home">
      </frameset>
   </frameset>
</html>
login immer noch nicht möglich, egal, was man eingibt, kommt das gleiche raus...
meldungen auf der seite:
Code:
Array
(
)

Notice: A session had already been started - ignoring session_start() in /var/media/ftp/USBtoSerial-ATAbridge-Partition-0-1/apache/htdocs/login.php on line 2

Notice: Undefined index: password in /var/media/ftp/USBtoSerial-ATAbridge-Partition-0-1/apache/htdocs/login.php on line 3
Passwort: <password-feld>  <button>

Warning: Unknown: open(/tmp/sess_7be36ltq7pqnb3vm4e85vcstl7, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
ich habe den eindruck, dass apache bei mir falsch konfiguriert ist, da er anscheinend keine daten in die session schreiben kann (sehe letzte warning)
langsam werd ich warnsinnig :mad:

[edit]
problem gelöst: in php.ini muss unbedingt der eingrag session.save_path = "N;/var/tmp" und der pfad /var/tmp muss gültig sein und mit ensrechenden rechten!
also, bald gibts ein login-system!
[/edit]


nichtdestotrozt gibt es einen neuen Release v0.02 (seihe den ersten beitrag)
erwarte anmerkungen/verbesserungsvorschläge/bugs-hinweise
 
Zuletzt bearbeitet:
ok, da das Problem mit dem Login gelößt ist hätte ich nun eine Frage zu diesem, das "nur" 1.000 Termine möglich sind. Was passiert, wenn man versucht mehr als 1.000 zu lesen?

PS: hab mir grad mal den Sorscode angeguckt und ich kann nur zwei Sachen schreiben:
1. das Login System ist noch garnicht drin
2. ich kenne jetzt auch die Fehlermeldung, die kommt, wenn man zu viele Thermine hat. Ich hab zwar keinen solchen Kalender, aber ich kenne PHP und was es macht, wenn man zu viel Speicher benutzt.
PHP:
   while(!feof($pFile)) 
   { 
      $text .= fgets($pFile); 
      //print $text[$i].'<br>';
      $i++;
   }
damit ließt du die KOMPLETTE Datei ein und bei 10.000 Terminen ist die Datei doch zimlich groß, oder? Könntest du mal eine Datei mit ein paar Therminen drin posten, damit ich weiß, wie man eventuell Speicher spaaren könnte? Eventuell ist 1 Thermin pro Zeile gespeichert, sodass nur immer 1 Zeile in den Arbeitsspeicher der Box muss und nicht alle gleichzeitig.
 
Zuletzt bearbeitet:
1. das Login System ist noch garnicht drin
richtig: ich kam wie immer erst nach dem release dahinter - ist also im nächsten drin (steht übrigens im 1. beitrag auch noch als todo)
Eventuell ist 1 Thermin pro Zeile gespeichert
leider nicht :(
PTBSync-AutoExport-Rad.ini (gekürzt):
Code:
; In dieser Datei sichert PTBSync alle Termine des Terminkalenders.
; Falls diese Datei an einem anderen Ort gespeichert werden soll,
; kann das im Kalender Fenster unter dem Knopf "Ex / Import" eingestellt werden
; Für Informationen zum Auto Export klicke dort die beiden Fragezeichen Knöpfe!

[FileInfo]
Version=31

[Kalender]
Termin-0-ID=FJ3HUCP5GRLOEQCYYK503Y1L5U
Termin-0-Meldung=Geburtstag: ******** wird #1983
Termin-0-Date=214159440
Termin-0-Wdh=1030
Termin-0-Vor=2098179
Termin-0-Action=3
Termin-0-File=C:\Programme\PTBSync\Sound\Birthday Classic.mid
Termin-0-Last=214159578
Termin-0-Freeze=214587360
Termin-0-Image=Present.gif
Termin-1-ID=PQJV0AJR0M5FUSWMYAM4JXM2LQ
Termin-1-Meldung=AWWPF anfang der anmeldung unter virtuohm.fh-nuernberg.de/wahlpflichtfachwahl
Termin-1-Date=214160220
Termin-1-Last=214160911
Termin-1-Freeze=214587360
Termin-1-Image=Important.gif
Termin-2-ID=LPYHRTZKJDINEYSPSHRA1K4YME
Termin-2-Meldung=AWWPF ENDE der anmeldung unter virtuohm.fh-nuernberg.de/wahlpflichtfachwahl
Termin-2-Date=214165440
Termin-2-Freeze=214205760
Termin-2-Image=Important.gif
Termin-3-ID=DG0UJ4MFYTUBUXSLOTO2HNFS4Q
Termin-3-Meldung=ende keine vorlesung
Termin-3-Date=214181760
Termin-3-Image=Important.gif
Termin-4-ID=XLW45RTBYLLVU04RP4H3J5YHBQ
Termin-4-Meldung=Geburtstag: ******** wird #1984
Termin-4-Date=214182719
Termin-4-Wdh=1030
Termin-4-Vor=2098179
Termin-4-Action=3
Termin-4-File=C:\Programme\PTBSync\Sound\Birthday Classic.mid
Termin-4-Image=Present.gif
Termin-5-ID=RJE3ZFV3XUVIUP4CL0OZ2U0T0M
Termin-5-Meldung=Geburtstag: ******** wird #1986
Termin-5-Date=214204319
Termin-5-Wdh=1030
Termin-5-Vor=2098179
Termin-5-Image=Present.gif
Termin-6-ID=BPILGO34KWDZUKG2OCEMAOA0ZA
Termin-6-Meldung=Geburtstag: ******** wird #1982
Termin-6-Date=214205759
Termin-6-Wdh=1030
Termin-6-Vor=2098179
Termin-6-Action=3
Termin-6-File=C:\Programme\PTBSync\Sound\Birthday Classic.mid
Termin-6-Image=Present.gif
[...]
[End]
Meine hat momentan 58 ternime und insgesammt 443 zeilen. also bei 10.000 terminen wird die datei risig --> vorschlag zu speicheroptimierung finde ich ne super idee!
ne kleine warnung noch: vom programm her ist es möglich verschiedene einstellungsmöglichkeiten zu speichern: es sind nicht nur wiederholung, mid-file, image...(termin 6)! von daher kann ein termin, ich glaub minimal 3 zeilen bis zu <weiß nich so genau, werd ich wenns nötig herausfinden>.

im übrigen, kannst du evtl. das programmt (PTBSync) zum testen bei dir installieren: wenn du sie ausm systemstart rauskickst, belegt sie glaub ich nur bis zu 10 mb festplattenspeicher - dann kannst du ja die *.ini beliebig verändern
 
ok, ich versuch mich mal daran, dürfte eigentlich nicht so schwer sein. Ich guck mal mit deiner Beispieldatei, was sich da machen lässt.

Edit 18:25:
ok, das mit der ganzen Datei konnte ich noch nicht lösen, aber eine Sache hätte ich schon:
PHP:
   $monthStr = buildMonth($month, $dayMessage);
   print ( $monthStr );
hier wird die GESAMMTE Seite, die ausgegeben wird in $monthStr gespeichert. Nehm noch
PHP:
   echo buildMonth($month, $dayMessage);
dann wird die Seite sofort, wenn sie aus buildMonth rauskommt dierekt an den Browser gesendet.
Besser wäre noch, wenn man überhaupt den Quatsch mit return lässt und aus dem "return $strBuildMonth;" "ein echo $strBuildMonth;" macht und dann auch das
PHP:
   $monthStr = buildMonth($month, $dayMessage);
   print ( $monthStr );
weglässt und dafür nur ein
PHP:
buildMonth($month, $dayMessage);
verwendest
Ich mache jetzt auch eine Versoin, die ganz ohne die Variable $strBuildMonth auskommt und alles DIEREKT sendet.

Edit 18:34: so, hab jetzt eine Version der calendar.php, die alles dierekt ausgibt und somit Speicher sparen könnte. Für das Problem, das die ganze Datei eingelesen wird habe ich noch keine Lösung gefunden. Ich musste leider ein .txt an den Namen anhängen, da php Dateien hier verboten sind.
 

Anhänge

  • calendar.php.txt
    5.9 KB · Aufrufe: 4
Zuletzt bearbeitet:
so, deine optimierung habe ich in die neue datei integriert und getestet. kann man überhaupt irgendwie prüfen, wieviel speicher das skript belegt? oder sind das nur erfahrungsvorschläge? ich könnte dann auch die optimierung durchführen.

ich hänge die neueste version mit geburtstagen und login(musst du zum testen wegschmeisen)

noch ne kleine frage: kennst du den unterschied zwischen "echo" und "print"? die befehle machen praktisch das gleiche, soweit ich weiß...
 

Anhänge

  • calendar.php.txt
    6.1 KB · Aufrufe: 1
ich kenne den Unterschied nicht, aber es ist für mich logisch, das es weniger Speicher verbraucht, wenn alles dierekt zum Browser des anderen geschickt wird und nicht erst in eine riesige Variable geschrieben wird.
Zu dem Speicherverbrauch von PHP: Jedes Skript hat nur einen begrenzten Speicher zur Verfügung, selbst wenn du 1 TB Arbeitsspeicher hättest ändert sich da garnix. Messen kann ich nicht, wie viel des Speichers das Skript verwendet, aber ich kenne die Meldung, die kommt, wenn das Skript zu viel Speicher verbrauchen will, das passiert, wenn man mit zu vielen und/oder zu großen Bildern arbeitet.
 
so, liebe freunde, der neue Release v0.03 ist da (seihe den ersten beitrag). dieser wird bei mir schon erfolgreich eingesetzt. bald werde ich auf meiner hompage ein gast-account mit dem passwort "webptbsync" und einer testdatei einrichten einrichten.

wie immer, erwarte anmerkungen/verbesserungsvorschläge/bugs-hinweise

gruß
Radislav
 
eine Sache hätte ich schon, ich dachte, ich hätte es erklärt, aber anscheinend habe ich es falsch erklärt.
Du musst das was buildMonth($month, $dayMessage); nicht ausgeben, denn buildMonth gibt nichts zurück. Daher reicht folgendes als letzte Zeilen föllig aus:
PHP:
   buildMonth($month, $dayMessage);
?>
   </body>
</html>

Zu den Einstellungen: was soll dort einstellbar sein? Wenn dort nur eine geänderte .ini hochgeladen werden kann, kann ich dir ein Skript machen, das diese automatisch abspeichert und eventuell dann mit Datum im Dateiname speichert und die calender.php so umbauen, das sie immer die zuletzt hochgeladene Datei nimmt.

Ich könnte auch einfach die aktuelle .ini überschreiben lassen.
 
buildMonth($month, $dayMessage);
muss ich verpennt haben, ich habs schon verstanden. die funktion schmese ich übrigens raus, sie macht keinen sinn, da sie nur einmal aufgerufen wird. danke für den hinweis
Zu den Einstellungen: was soll dort einstellbar sein?
ich wollte später die nutzung mehrerer inis ermöglichen. inzwischen mache ne datenbank (SQLite) mit mehreren nutzer und verschiedenen inis. dies alles wird man darüber einstellen können. das mit hochladen lass ma glaub ich, sonnst kann man ja jeden scheis da hineinladen --> also erstmal ignorieren wir diese einstellung

was du machen könntest, wäre die sache mit der einstellung der jahresanzeige.
kurze erklärung: der drop-down-feld für die änderung des aktuellen jahres ist fest definiert. soll hier aber einstellbar sein (vielleich will ja einer frühere termine anschauen).
beispiel: "jahresanzeige: - 3 +3" würde bedeuten: dropdownfeld bietet die option: vom aktuellen jahr-3 bis zum aktuellen jahr+3 (für dieses jahr also von 2005 bis 2011) auch "-0 +0" soll möglich sein.
 
braucht man denn wirklich eine einstellbare Jahresanzeige? Ich glaube es würden allen Usern reichen, wenn sie 5 Jahre in die Vergangenheit und 10 in die Zukunft sehen, das reicht voll aus. Wenn ich soetwas erstellen soll ist das kein Problem, aber wenn es mit Einstellung geht und du eh SQL nimmst würde ich besser waren, bis deine SQL-Version raus ist und dann dadran "basteln", da man die Einstellung auch in der Datenbank speichern könnte.

Andererseits ginge es auch Komplett ohne Datenbank. Man müsste eine Datei erstellen, die man zum Beispiel config.php nennt, in der alle Nutzer mit Username, Passwort und Name der .ini stehen. Das ginge nach folgendem Muster:
PHP:
<?php
$user = array(
array( "Username", "Passwort", "Name der ini"),     // Wäre Nummer 0
array( "Username2", "Passwort2", "Name der ini2"), // Wäre Nummer 1
(...)
);
?>
Dann hätte man ein schönes Array, mit dem man alles machen kann. Man müsste nur die Nummer im Array in die Session speichern.

Wenn du nun kein SQL und trotzdem den Variablen Jahresbereich willst würde ich empfehlen immer die config.php manuell zu editieren, es ist aber auch möglich trotzdem eine Einstellungsseite zu machen, ist nur etwas Arbeit beim Programmieren.
 
Wenn ich soetwas erstellen soll ist das kein Problem, aber wenn es mit Einstellung geht und du eh SQL nimmst würde ich besser waren, bis deine SQL-Version raus ist und dann dadran "basteln", da man die Einstellung auch in der Datenbank speichern könnte.

jo, der vorschlag gefällt mir, warten wir lieber auf sql-version. wobei ich da noch einige probleme hatte. wenn ichs mal beim 2. versuch nicht schaffe poste ich die problematik, vielleicht kommst du ja drauf

es gibt aber ein anderes problem: die termine im april(und leider nur im april, soweit getestet) zeigt er alle einen tag später. ich hab keine ahnung warum, wäre echt super, wenn du danach schaun könntest.

so ist datum in ini definiert:
Code:
// Umwandlung Systemtime in Compactes 32 Bit Format 
// Das mögliche Intervall reicht vom 1.01.1601 bis 16.02.9767 und ist dabei minutengenau

// Der 1.01.1601 um 0:01 Uhr entspricht dem 32 Bit Wert 1
// Der 1.01.1601 um 0:02 Uhr entspricht dem 32 Bit Wert 2
// Der 1.01.1601 um 0:03 Uhr entspricht dem 32 Bit Wert 3  
// usw...

// Der 1.01.2003 um 0:00 Uhr entspricht dem 32 Bit Wert 211430880 (dezimal)
quelle: Elmü (enwickler von ptbsync)
 
Zuletzt bearbeitet:
dann mach doch einfach so in der art:
if($Monat = "Aprill") $tag = $tag -1;
eine Zeile bevor der entsprechende Termin ausgegeben wird
 
dann mach doch einfach so in der art:
if($Monat = "Aprill") $tag = $tag -1;
eine Zeile bevor der entsprechende Termin ausgegeben wird

:D naja... sowas ist natürlich ein pfusch, mal abgesehen davon, dass es für april 2009 ganz anders ausschaun könnte und der fehler evtl. nicht nur im april 2008 auftauchen kann.
 
mal ne dumme Frage: Könnte man das nicht auch via Sunbird + webdav realisieren? :confused:

Mit dem .ics Format können ja (fast) alle Kalender umgehen...
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.