Forum : eXV2 ModuleTitel : ecal-Benachrichtigung© 2004-2012 www.exv2.de http://www.exv2.de
URL dieser Diskussion
http://www.exv2.de/modules/newbb_plus/viewtopic.php?topic_id=3078&forum=7
|
BigGuy :
| 23.12.2005 23:24 |
Hallo zusammen,
ich habe ecal 2.43 unter exV2 Vers. 2.0.4.1a zu laufen. Dabei tritt folgendes Problem auf:
Offenbar funktioniert die Terminbenachrichtigung nicht, d.h. die User bekommen nicht die "bestellte" Benachrichtigung gemailt.
In der SQL-Tabelle ecal_remind ist jedoch ein entsprechender Auftrag eingetragen.
FRAGE: Bei welchem Ereignis werden die Erinnerungen eigentlich abgearbeitet? Oder muss auf dem Server ein Cronjob eingerichtet werden? Welche Datei müsste der Cron in diesem Fall ansprechen?
Vielen Dank für die Hilfe!
Alex |
|
| |
BigGuy :
| 25.12.2005 01:23 |
Hallo user69!
Vielen Dank für die Info - der verlinkte Thread war zwar nicht hilfreich, aber dafür deine Auskunft, dass die Erinnerung durch den Aufruf des Kalenders ausgelöst wird, um so mehr.
Es ist mir gelungen, das File remind_mail.php so zu verändern, dass es nun zuverlässig ausgeführt wird. Zunächst folgende Zeilen am Anfang des Scripts entfernen: Zitat:$query = $db->query("SELECT date FROM ".$db->prefix("ecal_remind")." WHERE uid= 0"); list($numrows) = $db->fetch_row($query); if (!$numrows) { $remindstart = strtotime ("+1 Day",strtotime(date("Y/m/d 0:0:0",time()))); $newid = $db->genId($db->prefix('ecal_remind')."_id_seq"); $db->query("INSERT INTO ".$db->prefix("ecal_remind")." SET id = $newid, tid = 0, uid = 0, date = $remindstart "); }elseif ($numrows < strtotime(date("Y/m/d 0:0:0",time()))){
Mir ist völlig unklar, weshalb Nobse hier einen Datumseintrag unter UID 0 anlegt, zumal er später im Script nicht auf dieses Datum sondern auf das aktuelle Server-Datum zugreift (was auch Sinn macht). Wie auch immer: durch Entfernen der o.a. Zeilen funxt es wieder - natürlich muss auch noch eine der beiden geschweiften Klammern am Ende des Scripts entfernt werden... 
Außerdem habe ich noch folgende Zeilen angepasst:
Zitat:$start = strtotime(date("Y/m/d 0:0:0",time()))+86400;
Nun wird auch tatsächlich rechtzeitig erinnert (beim Eintragen der Erinnerung wird scheinbar nicht ganz korrekt gezählt - sprich: um einen Tag falsch).
Zitat: $query = $db->query("SELECT * FROM ".$db->prefix("ecal_remind")." WHERE date <= $start and date < $end and uid > 0");
Ursprünglich hieß es "WHERE date >= $start". Dies führte dazu, dass "verpasste" Erinnerungen auf ewig in der Datenbank hängen blieben. Nun werden alle fälligen UND alle überfälligen Erinnerungen versandt (z.B. wenn zur Fälligkeit der Server down war).
Wenn man nun sicher sein will, dass Erinnerungen pünktlich versandt werden, dann kann man folgenden Cronjob auf dem Server anlegen:
5 0 * * * lynx -dump http://www.domain.tld/modules/ecal/
Damit wird sicher gestellt, dass der Kalender auch wirklich mind. einmal täglich (hier um 0:05 Uhr) aufgerufen und damit die Erinnerungen auch pünktlich versandt werden. Ich denke, das ist besonders für Sites mit mittleren bis kleinen Besucherzahlen wichtig (nicht jeder Besucher klickt ja auch zwangsläufig den Kalender an!).
ACH JA: Es wäre evtl. ratsam, alte Erinnerungstermine einmalig von Hand aus der SQL-Tabelle ecal_remind zu entfernen, bevor man die oben beschriebenen Änderungen vornimmt. Wäre ja unschön, wenn die User beim erstmaligen Ausführen des neuen Scripts Erinnerungen für Termine aus 1999 bekommen... 
Viele Grüße aus Berlin
A L E X
*** Frohes Fest und guten Rutsch! ***
[ Geändert von BigGuy an 25.12.2005 02:34 ] |
|
|
user69 :
| 25.12.2005 15:03 |
hallo BigGuy.
werde mir deinen code mal näher ansehen.
soweit ich gesehen habe muss nach deinen änderungen diese zeile auch noch entfernet werden (ziemlich am ende der remind_mail.php)
Code:$db->query("UPDATE ".$db->prefix("ecal_remind")." SET date = $end WHERE uid = 0 "); |
|
|
BigGuy :
| 25.12.2005 19:22 |
Hallo user69,
stimmt, habe ich glatt übersehen! Dafür habe ich jetzt noch ein bisschen weiter gebastelt:
Bisher enthielt die Benachrichtigungsmail nur das Datum des Termins und einen Link auf den jeweiligen Tag. Schön wäre es, wenn auch der Titel des Termins mit angegeben würde. Also folgende Anpassungen:
Zitat:[...] $termindatum = strftime(_CAL_EVEDATESHORT,strtotime($termindata['stamp'])); $terminbetreff = $termindata['subject']; $terminlink = XOOPS_URL."/modules/ecal/display.php?day=$day&month=$month&year=$year";
[...]
$xoopsMailer->assign("TERMINDATUM", $termindatum); $xoopsMailer->assign("TERMINBETREFF", $terminbetreff); $xoopsMailer->assign("TERMINLINK", $terminlink);
So, und nun basteln wir in unsere Erinnerungsmail die neue Variable ein und erhalten eine tolle, aussagekräftige Erinnerung!  Komisch nur, dass im Originalscript schon der Titel des Termins ausgelesen wurde (SUBJECT), aber an keiner späteren Stelle dann auch verwendet wurde...
Viele Grüße aus Berlin ALEX |
|
|
|