WebsiteBaker Support (2.13.x) > Hilfe & Support (deutsch)

Modul procalendar (v 1.8.2): Verbesserungen und Korrekturen

(1/2) > >>

masju:
Hallo zusammen,

ich habe gerade das Modul procalendar v.1.8.2 aus dem Addon-Verzeichnis am Wickel und würde hier gerne mal einige Änderungen (verbunden mit einem Pull-Request) mit Euch diskutieren:

1. Fehlerkorrektur
functions.php
Zeilen 452 und 453

--- Code: ---    $IsMonthOverview = ($month != date("n"));
    $IsMonthOverview = (($dayview && ($day != date("d"))) ? $IsMonthOverview : !$dayview);

--- End code ---
Die doppelte Initialisierung von $IsMonthOverview in ShowActionList() überschreibt den zuvor gesetzten Wert und verhindert zudem die Tagesansicht in Nicht-Systemmonaten. Beide Zeilen sind entfernen, um konsistente Anzeige mit dayview-Parameter sicherzustellen.

view.php
Zeile 105: Hier fehlt offensichtlich ein "NOT"-Ausrufezeichen

--- Code: ---    $IsMonthOverview = $dayview;
--- End code ---
zu ändern in

--- Code: ---    $IsMonthOverview = !$dayview;
--- End code ---
Entweder werden alle Termine des Monats oder alle des gewählten Tages im Frontend angezeigt. Siehe oben.

save.php
Die Zeilen 169 bis 171 machen eventuell Ärger (Warning), wenn kein Endedatum gesetzt ist

--- Code: ---        $js_end_day     = substr($js_end_time, 0, 2);
        $js_end_month   = substr($js_end_time, 3, 2);
        $js_end_year    = substr($js_end_time, 6, 4);

--- End code ---
ersetzen durch

--- Code: ---        $js_end_day     = substr($js_end_time ?? '', 0, 2);
        $js_end_month   = substr($js_end_time ?? '', 3, 2);
        $js_end_year    = substr($js_end_time ?? '', 6, 4);

--- End code ---
Auch Zeile 272 wird unter Umständen angemeckert (Warning):

--- Code: ---        if (strlen($time_end) == 0) {$time_end = "00:00";}

--- End code ---
ersetzen durch

--- Code: ---        if (strlen($time_end ?? '') == 0) {$time_end = "00:00";}
--- End code ---


2. Verbesserungen
save.php
Nach dem Ändern oder der Neueingabe von Events springt das Modul immer wieder in den aktuellen Monat zurück, anstatt im gewählten zu bleiben.
Das ist sehr unschön, weil mal in zukünftigen Monaten angelegte Events nur auf sehr umständliche Weise direkt wieder editieren kann.
Änderungsvorschläge: year, month und day per _get durchreichen.

Zeile 33

--- Code: ---     $sAddonBackUrl = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.$sec_anchor;
--- End code ---
ersetzen durch:

--- Code: ---    $urlMonth = isset($_GET['month']) ? urlencode($_GET['month']) : '';
    $urlYear  = isset($_GET['year']) ? urlencode($_GET['year']) : '';

    $sAddonBackUrl = ADMIN_URL.'/pages/modify.php?';

    // Parameter anhängen, falls vorhanden

    $query = [];
    if ($urlMonth !== '') $query[] = "month=$urlMonth";
    if ($urlYear  !== '') $query[] = "year=$urlYear";
    $query[] = "page_id={$page_id}{$sec_anchor}";

    $sAddonBackUrl .= '&' . implode('&', $query);
--- End code ---

Zeile 198

--- Code: ---   $sBackendUrl  = ADMIN_URL . '/pages/modify.php?page_id='.$page_id.'&month='.date('m').'&year='.date('Y') . '';
--- End code ---
aus dem gleichen Grund ersetzen durch

--- Code: ---    $sBackendUrl  = $sAddonBackUrl;
--- End code ---


Die an vielen Stellen vorhandenen auskommentierten Codezeilen habe ich erst einmal drin gelassen, der Code scheint wohl nach einer Aktualisierung nicht bereinigt worden zu sein.
Ich habe das Modul gerade auf einer PHP-Version: 8.4.13-Installation laufen, es gibt bislang keine Fehlermeldungen.

Eure Meinung?

Viele Grüße
masju

(Anhang: Aktuelle Version 1.8.2 aus dem Addon-Verzeichnis)

hgs:
Erst Mal Danke fürs drüberschauen und für die vorgechalgenen Verbesserungen.
Ich benutze den ProCalendar sehr aktive und habe immer mal wieder auch Änderungswünsche an der Funktion geäußert und dann auch bekommen.
(Daran waren u.a. marmot, Luisehane, sternchen8875.... beteiligt)
Die letzten Änderungen haben es scheinbat gar nicht ins addon geschaft, denn ich habe schon eine Version 1.8.3 und die ZN passen mit deinem Post nicht überein, sind aber zu finden.
Ich werde daraus mal eine Version 1.8.4 machen und dann durchtesten.
Einverstanden?



masju:
Sehr gerne  :-)!

hgs:
OK, hier die geänderte Version 1.8.4.

Alle Änderungen sind wie folgt in den jeweiligen  Dateien gekennzeichnet worden.
Ist bestimmt nicht Codingstandard, aber zum nachvollziehen sollte es reichen.

// modify from https://forum.WebsiteBaker.org/index.php/topic,32440.new.html#new

Die Verbesserung konnte ich allerdings nicht nachvollziehen, Nach dem Speichern ist im BE wieder der aktuelle Monat sichtbar, oder mache ich einen Bedienfehler?

Viel Spaß beim testen, siehe weiterer Verlauf


Anhang gelöscht

sternchen8875:
Besserwisser-Mode == on

--- Code: ---$IsMonthOverview = ($month != date("n"));
    $IsMonthOverview = (($dayview && ($day != date("d"))) ? $IsMonthOverview : !$dayview);
--- End code ---

Zeile 1 prüft, ist der im Funktionsaufruf übermittelte Monat $month gleich dem aktuellen Monat lt date-Funktion
Antwort ist true oder false - auf deutsch Ja oder Nein

Zeile 2 mußt du zerlegen in alle Einzelteile
$dayview und $day kommen aus dem Funktionsaufruf,
$dayview ist wieder true or false oder 0 bzw 1
$day ist der übermittelte Tag nach date-Funktion

also "auf deutsch": Ist dayview wahr UND der übermittelte Tag $day == dem ermittelten Tag aus der date-Funktion für heute, dann verwende den Wert von $IsMonthOverview. Ist das nicht der Fall, verwende den umgekehrten Wert von $dayview aus dem Funktionsaufruf

das Ganze ist also keine Initialisierung, es ist ein Schalter, der zwischen Tages- und Monatsansicht umschaltet und das unter verschiedenen Bedingungen

Nimmst du die Zeilen weg, wie vorgeschlagen, bekommst du in der Folge weitere Warnings, weil $IsMonthOverview nicht definiert wurde.

Zum Rest:
ich würde empfehlen, die Werte beim POST-Empfang schon zu validieren

also z.b. hier


--- Code: ---$js_end_time = $admin->get_post('date2');
--- End code ---

Wir wissen, es ist das Datum des End-Termins, es könnte in der Theorie aber alles sein (gilt für alles, was hier per POST in der save.php ankommt)

Setzt dir einen solchen dump in der save.php ganz oben


--- Code: ---echo "<pre class='debug-dump'>DEBUG in " . basename(__FILE__) . " on line " . __LINE__ . ":<br>";
print_r($_POST);
echo "</pre>";
--- End code ---

das macht es leichter

Navigation

[0] Message Index

[#] Next page

Go to full version