Bug in rss_dates.php (Admidio 2.4.6)

Hast du einen Fehler in der aktuellen Version gefunden ? Diesen kannst du uns hier mitteilen und uns bei der Fehlersuche helfen.
Antworten
Benutzeravatar
fiwad
Beiträge: 46
Registriert: 17. Okt 2013, 14:04

Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fiwad »

Hallo,

die Datei rss_dates.php wird benötigt, wenn über RSS Termindaten aus Admidio ausgelesen werden sollen. Mir ist aufgefallen, dass bei ganztägigen Terminen, die nur einen Tag dauern, das per RSS transferierte Feld description fälschlicherweise auch die description des vorangegangenen Termins beinhaltet.

Das lässt sich einfach nachstellen, in dem man bei der Demo-Organisation beim letzten Termin Trainerlehrgang das Enddatum auf das Startdatum setzt. Hier ein Beispiel (die break tags habe ich entfernt):

Enddatum <> Startdatum:
27.08.2014 bis 30.08.2014
Ort: Jugendherberge Lyon
Ein viertägiger Lehrgang für alle Jugendtrainer aus der Tennisabteilung :)
Enddatum = Startdatum:
11.08.2014 16:00 Uhr bis 18:00 Uhr
Ort: Sportplatz Norwich
Heute werden wir den Schwerpunkt auf Kondition und Ausdauer legen. Bitte erscheint alle pünktlich mit Laufschuhen auf dem Sportplatz!
Termin in den Kalender übernehmen
Ort: Jugendherberge Lyon
Ein viertägiger Lehrgang für alle Jugendtrainer aus der Tennisabteilung :)
Der Bug lässt sich relativ einfach nachvollziehen:

In rss_dates.php Zeile 84 wird auf die Einstellung Ganztägig geprüft. Der else-Zweig ist der positive Fall. Dort wird geprüft, ob Start- und Enddatum ungleich sind. Falls ja, wird die description entsprechend gesetzt. Aber falls nein: Da passiert eben nichts (es gibt keinen else-Zweig), was letzten Endes bedeutet, dass der vorherige Wert von description fälschlicherweise erhalten bleibt und nachfolgend die neuen Termindaten angehängt werden.

Viele Grüße,
fiwad
Benutzeravatar
fiwad
Beiträge: 46
Registriert: 17. Okt 2013, 14:04

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fiwad »

Noch eine Ergänzung. Mit dem folgenden Code wird der fehlende else-Zweig nachgerüstet. Dabei wird das Startdatum ausgegeben.

Code: Alles auswählen

 if($date->getValue('dat_begin', $gPreferences['system_date']) != $date->getValue('dat_end', $gPreferences['system_date']))
    {
         $description = $gL10n->get('SYS_DATE_FROM_TO', $descDateFrom, $date->getValue('dat_end', $gPreferences['system_date']));
    }
else
    {
        $description = $descDateFrom;
    }
Liebes Admidio-Team: Wenn die Lösung für euch OK ist, sollte sie in der nächsten Admidio-Version berücksichtigt werden. Danke.

Viele Grüße,
fiwad
Benutzeravatar
fasse
Administrator
Beiträge: 6229
Registriert: 12. Nov 2005, 16:06

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fasse »

Hallo fiwad,
Vielen Dank für den Hinweis. Der Fehler ist dann in der nächsten Version behoben.

Viele Grüße
Fasse
Benutzeravatar
fiwad
Beiträge: 46
Registriert: 17. Okt 2013, 14:04

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fiwad »

Hallo fasse,

ich habe vor ein paar Tagen das Update auf 2.4.7 installiert und bin ehrlich gesagt mit den Auswirkungen eures Bug-Fixes nicht ganz glücklich.

Der einzige Unterschied in der Datei rss_dates.php zwischen den beiden Versionen ist die zusätzliche Anweisung in Zeile 81, in der die Variable $description gelöscht wird. Das hilft natürlich prima gegen den ursprünglichen Fehler, dass die description des vorherigen Eintrags angezeigt wird. Allerdings ist mit dieser Lösung bei ganztägigen Terminen, die nur einen Tag dauern, in der description keine Tagesangabe mehr vorhanden.

Das kann man einfach nachvollziehen, wenn man den Link für die Demo-Organisation http://demo.admidio.org/adm_program/mod ... _dates.php im Browser anzeigen lässt und z. B. das Grillfest zu einer ganztägigen Veranstaltung macht. Vorher begann die description mit den Angaben von Tag und Uhrzeit. Nach Änderung in eine ganztägige Veranstaltung fehlt beides. Ich fände es aber sinnvoll, den Tag weiterhin anzuzeigen.

Daher hatte ich in meinem Lösungsvorschlag den zusätzlichen else-Zweig mit der Anweisung "$description = $descDateFrom;" eingebaut. Weil damit aber alle möglichen Fälle abgedeckt sind, die Variable $description also immer initialisiert wird, ist das Löschen in Zeile 81 eigentlich nicht mehr notwendig. Ich gebe zu, vielleicht hätte ich noch den einen oder anderen Satz in meinem damaligen Posting dazu schreiben sollen...

Wäre es evtl. möglich, den von mir vorgeschlagenen else-Zweig in der nächsten Version doch noch zu ergänzen?

Viele Grüße,
fiwad
weissst
Developer
Beiträge: 342
Registriert: 4. Nov 2011, 18:07
Wohnort: 54xx

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von weissst »

Hallo fiwad,

ich hab mir das durchgesehen... du hast recht mit dem fehlenden Datum und ich hab ein file mit einem kleinen fix gemacht.
kannst du das mal testen und bescheid geben ob es OK ist? Dann bau ich es in der nächsten Version ein.

zum download:
http://uberg.at/Admidio/rss_dates.zip

hab es etwas anders gelöst... sollte ohne else funktionieren :-)

mfg
Stefan
Benutzeravatar
fiwad
Beiträge: 46
Registriert: 17. Okt 2013, 14:04

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fiwad »

Hallo Stefan,

sorry, kam leider erst jetzt dazu, mir das Thema wieder anzuschauen.

Natürlich funktioniert deine Lösung auch. Dabei wird die Variable $description initial nicht gelöscht, sondern ihr wird der Wert der Variablen $descDateFrom zugewiesen. In den folgenden if-Abfragen wird $description in zwei von drei Möglichkeiten mit einem anderen Wert überschrieben. Bei der dritten Möglichkeit - also bei ganztägigen Terminen, die nur einen Tag dauern - wird nicht überschrieben und somit hat $description immer noch den Wert, den die Variable initial gehabt hat.

Das ist funktional dasselbe in grün, das ich ohne initiale Zuweisung mit einem zusätzlichen Else-Zweig für die dritte Möglichkeit erledigt habe.

Etwas abstrakter formuliert, setzt meine Lösung die Variable $description in den drei möglichen Pfaden durch die nachfolgenden if-Abfragen jeweils auf einen sinnvollen Wert, verzichtet aber auf eine vorherige Initialisierung. Deine Lösung initialisiert vorher, überschreibt den Wert in zwei von drei Pfaden und macht im dritten Pfad nichts.

Ist das jetzt Geschmackssache oder habe ich irgendeine negative Eigenschaft von zusätzlichen Else-Zweigen übersehen? :wink:

Viele Grüße,
fiwad
Benutzeravatar
fasse
Administrator
Beiträge: 6229
Registriert: 12. Nov 2005, 16:06

Re: Bug in rss_dates.php (Admidio 2.4.6)

Beitrag von fasse »

Hallo Stefan,

ein zusätzlicher Else-Zweig hat keine negativen Auswirkungen. Allerdings sollte jede Variable vor der Benutzung initialisiert werden. Erst Recht, wenn sie ausschließlich in so einem If-Else Konstrukt genutzt wird. Sollte das Script nämlich durchlaufen werden, ohne dass eine If-Bedingung zutrifft und es keinen Else-Zweig geben, dann wäre der Zustand der Variable undefiniert.

Viele Grüße
Fasse
Antworten