[CON-405] Plugin Frontendusers -> Uhrzeit

Gesperrt
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

[CON-405] Plugin Frontendusers -> Uhrzeit

Beitrag von idea-tec » So 17. Jul 2011, 11:04

Ich habe ein komisches Verhalten entdeckt (Version 4.8.15) und frage hier nach ob das jemand bestätigen kann.

Man gibt im Backend einem Frontendbenutzer z.B. folgendes in "Gültig von" oder "Gültig bis" ein:
- 2011-06-16 23:59:59 oder 2011-12-31 23:59:59

Sendet man das Formular ab, wird gespeichert und das eingegebene Datum inkl. Uhrzeit wird angezeigt
Nun ruft man den Benutzer neu auf und stellt fest, dass man dieses angezeigt bekommt (steht so auch direkt nach dem Speichern in der DB!):
=> 2011-06-16 23:03:00 bzw. 2011-12-31 23:03:00

a.) Kann das jemand bestätigen?
b.) Hat jemand eine Idee woran das liegen kann, ich steh auf dem Schlauch
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)

Dodger77
Beiträge: 3625
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Dodger77 » So 17. Jul 2011, 16:08

Verschoben nach Bugs. Das ist nachvollziehbar und auch für mich nicht direkt erkennbar, wo das hakt.

Der Plugin-Code selbst ist ja übersichtlich, der FE-User-Plugin-Aufruf und das Speichern durch die FE-User-Klasse inkl GenericDB hat mir da auch erstmal nichts erhellendes gebracht.

Oldperl
Beiträge: 3984
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Oldperl » Mo 18. Jul 2011, 09:23

Kann ich erstmal nicht nachvollziehen. Könntet ihr bitte mal Angaben zu PHP- und MySQL-Versionen machen bei denen der Fehler Auftritt.
Und ist das bei der Neuanlage oder beim Bearbeiten des Benutzers?

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Dodger77
Beiträge: 3625
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Dodger77 » Mo 18. Jul 2011, 09:56

Bei mir ist das eine 4.8.14 auf MySQL 5.0.67, aufgetreten bei Bearbeitung eines Nutzers.

Oldperl
Beiträge: 3984
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Oldperl » Mo 18. Jul 2011, 10:07

Also bei mir sind das 2 Installationen ohne Beanstandung.
Datenbankserver-Version 5.1.41
Installierte PHP-Version 5.3.1
und
Datenbankserver-Version 5.1.33
Installierte PHP-Version 5.2.9
Bei Beiden kann ich den Fehler nicht nachvollziehen. Ich habe die Datumsangaben von Karsten per Copy&Paste eingefügt und sie bleiben nach dem Speichern wie sie waren.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Dodger77
Beiträge: 3625
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Dodger77 » Mo 18. Jul 2011, 10:14

Ich habe es gerade auch nochmal in einer älteren Installation (4.8.10) getestet. Dort ist das auch nachvollziehbar (MySQL 5.1.41, PHP 5.3.2).

@Ortwin: und wenn du den Nutzer danach nochmal aufrufst steht das da wirklich noch richtig?

Oldperl
Beiträge: 3984
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Oldperl » Mo 18. Jul 2011, 10:28

@Ingo: Dann zeigt's hier auch den Fehler.

Ich schau mir das mal ein wenig genauer an.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 3984
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von Oldperl » Mo 18. Jul 2011, 11:00

Könntet Ihr mal bitte in den Plugins jeweils die store-Funktion ändern. Dann sollte es funktionieren.

Code: Alles auswählen

function frontendusers_valid_from_store ($variables)
{
    global $feuser;
    
    $feuser->set("valid_from", $variables["valid_from"], false);
} 

Code: Alles auswählen

function frontendusers_valid_to_store ($variables)
{
    global $feuser;
    
    $feuser->set("valid_to", $variables["valid_to"], false);
} 
Zur Info:
Der 3. Parameter schaltet den festeingebauten _inFilter der GenericDB ab. Eventuell sollte man die Plugins noch mit einer Validitätsprüfung für DATE bzw. DATETIME versehen. Könnte man auch zentral in die Security-Klasse machen.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: Plugin Frontendusers -> Uhrzeit

Beitrag von idea-tec » Mo 18. Jul 2011, 11:22

Lösung bestätigt, funktioniert
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)

Oldperl
Beiträge: 3984
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: [CON-405] Plugin Frontendusers -> Uhrzeit

Beitrag von Oldperl » Mi 20. Jul 2011, 17:37

Soderle... :-)

Nun hab ich die Lösung mal etwas ausgearbeitet und mit einer zusätzlichen Validitätsprüfung der Eingaben versehen. Dabei sind dann gleich mal noch 2 Methoden (Contenido_Security::isMySQLDate && Contenido_Security::isMySQLDateTime)für die Contenido_Security-Klasse entstanden.
Vielleicht könnte das ja mal Jemand so Einbauen und Testen, wenn's funktioniert kann es dann noch in den Core für's nächste Release. 8)

!Achtung!
Es werden Änderungen am Core vorgenommen, sollten diese Änderungen nicht ins SVN einfliessen so gehen sie bei einem späteren Update verloren. Achja, und für Schäden und... aber das kennt ja Jeder.

Also, folgende Änderungen bzw. Ergänzungen vornehmen.
  • In der Security-Klasse (contenido/classes/class.security.php) hinter der Methode isString() folgenden Code einfügen

    Code: Alles auswählen

    /**
         * Check: Is the variable formatted as MySQL DATE 'YYYY-MM-DD'
         * @static
         * 
         * @author Ortwin Pinke
         * @since Contenido 4.8.16
         * 
         * @param string $sVar given date/string
         * @param boolean $bCheckValid additional use of checkdate for validation
         * @return boolean true|false
         */
        public static function isMySQLDate($sVar, $bCheckValid = false) {
            $sVar = trim($sVar);
            $bFormatOk = preg_match("/^\d{4}-\d{2}-\d{2}$/", $sVar);
            if($bCheckValid && $bFormatOk) {
                $aDateParts = explode("-", $sVar);
                return checkdate($aDateParts[1], $aDateParts[2], $aDateParts[0]);
            } elseif($bFormatOk) {
                return true;
            }
            return false;
        }
        
        /**
         * Check: Is the variable formatted as MySQL DATETIME 'YYYY-MM-DD HH:MM:SS'
         * @static
         * 
         * @author Ortwin Pinke
         * @since Contenido 4.8.16
         * 
         * @param string $Var given datetime/string
         * @param boolean $bCheckValid additional use of checkdate for validation
         * @return boolean true|false 
         */
        public static function isMySQLDateTime($sVar, $bCheckValid = false) {
            $sVar = trim($sVar); 
            $bFormatOk = preg_match("/^\d{4}-\d{2}-\d{2} [0-2][0-3]:[0-5][0-9]:[0-5][0-9]$/", $sVar);
            if($bCheckValid && $bFormatOk) {
                $aDateTimeParts = explode(" ", $sVar);
                $aDateParts = explode("-", $aDateTimeParts[0]);
                return checkdate($aDateParts[1], $aDateParts[2], $aDateParts[0]);
            } elseif($bFormatOk) {
                return true;
            }
            return false;
        }
  • Im FEUser-Plugin valid_from (contenido/plugins/frontendusers/valid_from/valid_from.php) die Funktion frontendusers_valid_from_store() durch folgende ersetzen

    Code: Alles auswählen

    /**
     * check and store valid_from date/datetime
     * 
     * @global FrontendUser $feuser
     * @param array $variables 
     */
    function frontendusers_valid_from_store ($variables) {
        global $feuser;
     
        if(Contenido_Security::isMySQLDate($variables["valid_from"], true)
                || Contenido_Security::isMySQLDateTime($variables["valid_from"], true)
                || empty($variables["valid_from"])
                || $variables["valid_from"] == "0000-00-00") {
            
            $feuser->set("valid_from", $variables["valid_from"], false);
        }
    }
  • Im FEUser-Plugin valid_to (contenido/plugins/frontendusers/valid_to/valid_to.php) die Funktion frontendusers_valid_to_store() durch folgende ersetzen

    Code: Alles auswählen

    /**
     * check and store valid_to date/datetime
     *
     * @global FrontendUser $feuser
     * @param array $variables 
     */
    function frontendusers_valid_to_store ($variables) { 
        global $feuser;
        
        if(Contenido_Security::isMySQLDate($variables["valid_to"], true) 
                || Contenido_Security::isMySQLDateTime($variables["valid_to"], true) 
                || empty($variables["valid_to"])
                || $variables["valid_to"] == "0000-00-00") {
            
            $feuser->set("valid_to", $variables["valid_to"], false);
        }
    }
  • Fertisch :wink:
Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Gesperrt