diddipoeler / sportsmanagement

Die neue Sports Management Komponente für Joomla 3/4/5
GNU General Public License v2.0
27 stars 27 forks source link

PHP8: JSM Kalendermodul #1473

Closed StefanKemner closed 1 year ago

StefanKemner commented 2 years ago

Wenn man unter PHP8 bei dem JSM Kalendermodul mit den Pfeiltasten einen Monat zurück oder vor gehen will, verschwindet der gesamte Kalender.

svdoldie commented 2 years ago

Kann ich bestätigen

diddipoeler commented 1 year ago

Bitte noch einmal testen.

svdoldie commented 1 year ago

Bei mir ist es jetzt so, dass man einmal weiter blättern kann. Danach verschwindet der Inhalt wieder

diddipoeler commented 1 year ago

Ist die Selektion der Mannschaften eingeschaltet?

svdoldie commented 1 year ago

Nein, meine Einstellungen sehen so aus Screenshot 2022-12-17 085907 bei mir ist es übrigens so, dass man ohne Probleme zurück blättern kann, vorwärts nur einmal

StefanKemner commented 1 year ago

Monatsweise vorwärts/rückwärtsblättern funktioniert bei mir jetzt.

Wenn ich die Doppel Pfeile für Jahreweise blättern benutze, komm ich ein Jahr weiter oder zurück. Bei nochmaligem Klick verschwindet der Kalender.

ortwin20000 commented 1 year ago

Wenn ich unter PHP8 das Monat ändere kommt als Fehlermeldung: Fehler: 0 mktime(): Argument #4 ($month) must be of type ?int, string given

Unter PHP7 funktioniert es bei mir noch.

ortwin20000 commented 1 year ago

Ich bin jetzt weiter und bei mir liegt es an JEvents. Wenn ich dies nicht verwende funktioniert es aber wenn ich von JEvents auch die Termine anzeigen lassen möchte, tritt der bekannte Fehler auf, dass der Kalender verschwindet sobald man den vorigen oder nächsten Monat oder Jahr auswählt.

Ursache dürfte folgende Codestelle sein: ` static function getEntries($caldates, $params, &$matches) {

    if (!self::_checkJEvents())
    {
        return;
    }

    $year  = substr($caldates['start'], 0, 4);
    $month = (substr($caldates['start'], 5, 1) == '0') ? substr($caldates['start'], 6, 1) : substr($caldates['start'], 5, 2);

    self::$xparams = $params;
    /**
     * Gets calendar data for use in main calendar and module
     *
     * @param   int      $year
     * @param   int      $month
     * @param   int      $day
     * @param   boolean  $short      - use true for module which only requires knowledge of if dat has an event
     * @param   boolean  $veryshort  - use true for module which only requires dates and nothing about events
     *
     * @return array - calendar data array
     */
    $data = self::$jevent->getCalendarData($year, $month, 1);

    $formatted = self::formatEntries($data['dates'], $matches);

    return $formatted;
}

` Dort wo der Monat aus caldates extrahiert wird passiert es. Beim ersten Mal laden wird dort als Datum übergeben: grafik

Wenn ich nun im Kalender den nächsten Monat auswähle: grafik

Somit wird die Variable $month nun mit "6-" befüllt und das wirft später einen Fehler.

Ich hab mir jetzt mal auf die Schnelle so beholfen: $month = (substr($caldates['start'], 5, 1) == '0') ? substr($caldates['start'], 6, 1) : substr($caldates['start'], 5, 2); $month = str_replace('-', '', $month);

Oder die JEvents-Einbindung wird im Modul deaktiviert.

Nachtrag: Auch bei deaktiviertem JEvents tritt es noch auf sobald in einem Monat kein Eintrag gefunden wurde. Danach kann man nicht mehr vor oder zurück wechseln.

Das liegt an dieser Codezeile in der Datei modules/mod_sportsmanagement_calendar/sportsmanagement.php: $customteam = $jinput->getVar('jlcteam', 0, 'default', 'POST');

Sobald kein Eintrag in dem ausgewählten Monat mehr gefunden wird, wird auch die (bei mir nicht angezeigte) Auswahl der Mannschaften im Kalender nicht mehr angezeigt und somit ist die Variable jlcteam durch den Javascript-Code auf einmal "undefined".

Mein Workaround ist folgender:

        $customteam = $jinput->getVar('jlcteam', 0, 'default', 'POST');

        if ($customteam == 'undefined')
        {
            $customteam = 0;
        }
diddipoeler commented 1 year ago

Bitte noch einmal testen.

svdoldie commented 1 year ago

Bei mir funktioniert der Close-Button nicht mehr. Das klicken ausserhalb des Modalfenster schließt dieses aber

ortwin20000 commented 1 year ago

Das ist interessant. Bei mir funktioniert es aber bei dir nicht. Grund ist der Code des Modal: <button type="button" class="btn btn-default" data-bs-dismiss="modal">Close</button> funktioniert bei mir aber nicht bei dir. Wenn ich deinen Code über die Entwicklungswerkzeuge meines Browser auf <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> ändere funktioniert es auch bei dir.

Laut meiner Info muss bei Bootstrap v5 data-bs-* verwendet werden. Kann das mit deinem verwendeten Template zusammenhängen?

ortwin20000 commented 1 year ago

Ich habe jetzt einfach das data-bs-dismiss bzw. data-dismiss mit einem onclick-Event ersetzt. Damit funktioniert es bei mir ebenfalls.

diddipoeler commented 1 year ago

Bei mir funktioniert der Monat Juli nicht, da der Kalender ausgeblendet ist.

svdoldie commented 1 year ago

Bei funktioniert der Close-Button mit meinem Template weiterhin nicht. Mit einigen anderen Templates geht es einwandfrei, bei anderen kein Modalfenster angezeigt

ortwin20000 commented 1 year ago

Bei mir funktioniert der Monat Juli nicht, da der Kalender ausgeblendet ist.

Ich habe den Workaround aus meinem Kommentar in meinem Pull-Request eingebaut.

@svdoldie Wegen dem Close-Button: Bei mir wird vom Template aus in Joomla 4 bereits bootstrap.modal mitgeladen. In deinem Template konnte ich das nicht sehen. Ich lade daher mit dem WebAssetManager für Joomla 4 die bootstrap.modal nach.

Bitte nach dem Pull-Request noch einmal testen.

svdoldie commented 1 year ago

Funktioniert jetzt alles bei mir 👍

diddipoeler commented 1 year ago

Wenn ich auf den Juli klicke verschwindet bei immer noch der Kalender.

ortwin20000 commented 1 year ago

Wie sind deine Moduleinstellungen für den Kalender?

ortwin20000 commented 1 year ago

Ich vermute du verwendest auch Geburtstage für die Kalenderansicht. Dort hab ich jetzt auch die Anpassung durchgeführt. Bitte nach dem Pull-Request noch einmal testen.

diddipoeler commented 1 year ago

Funktioniert.