Bugfix zum Hack nextbirthdays von Peh
Folgender Fehler:
Falsche oder gar keine Anzeige eines nächsten Geburtstages.
Der Fehler konnte immer dann einwandfrei reproduziert werden, wenn der Monatsletzte erreicht war, und die zukünftigen Geburtstage im neuen Monat liegen.
1. Beispiel:
Datum heute: 31.3.2013 18:00
Nächster Geburtstag: 01.04.2013 00:01
Fehler: keine Voranzeige des Geburtstages
2. Beispiel:
Datum heute: 31.3.2013 18:00
Nächster Geburtstag: 02.04.2013 00:01
Fehler: Morgen Geburtstagsanzeige anstatt in 2 Tagen
Abhilfe:
Die Vorausberechnung der Tage erfolgt durch die Variable:
$days in folgender Zeile:
php: |
1:
|
$days = floor(($birthday - $today)/86400); |
|
ersetze durch:
php: |
1:
|
$days = ceil(($birthday - $today)/86400); |
|
Erklärung:
Zur Erklärung nehme ich jetzt unser obiges 2. Beispiel.
Geburtstag: 02.04.2013 00:01
Datum heute: 31.03.2013 18:00
Wir rechnen also:
$birthday - $today)/86400
als Timestamp also so:
1364864401 - 1364756400 : 86400
Ergebnis:
1,2500
Dieses Rechenbeispiel zeigt ganz klar die Schwachstelle des Hacks.
Dadurch, das der Hack bisher den PHP-Befehl:
floor verwendet, wird das Ergebnis
abgerundet.
floor=abrunden
Nimmt man jetzt den PHP-Befehl:
ceil=aufrunden, wird die Berechnung aufgerundet, und die Geburtstagsvoranzeige wird wieder korrekt angezeigt.
Wer die Geburtstagsvoranzeige im JGS Portal eingebaut hat, muss ebenfalls eine Änderung vornehmen.
suche in der jgs_portal_include/jgs_portal_geburtstags.php:
php: |
1:
|
$in_days = floor(($birthday - $today)/86400); |
|
ersetze durch:
php: |
1:
|
$in_days = ceil(($birthday - $today)/86400); |
|
Die gleiche Problematik tritt auch bei dem Hack nextevents von Peh auf!
suche in der index.php im Abschnitt /** NEXT EVENTS (c) by Peh **/:
php: |
1:
|
$days = floor(($eventday - $today)/86400); |
|
ersetze durch:
php: |
1:
|
$days = ceil(($eventday - $today)/86400); |
|
Das wars schon
Dieser Codeschnipsel entstand in gemeinsamer Arbeit von
Viktor ,
BoneDragon und
Steinadler.