admFuncVariableIsValid - Datum

Hast du Vorschläge, was wir an Admidio noch verbessern könnten ? Hier kannst du uns deine Vorstellung an neuen Funktionen mitteilen.
Antworten
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

admFuncVariableIsValid - Datum

Beitrag von D347h »

Moinsen :)

Ich weiß nicht ob das fuer euch von interesse ist, aber ich habe die Funktion "admFuncVariableIsValid" um eine Datums-Ueberpruefung ergaenzt, dafuer waren folgende Aenderungen notwendig:

von: auf: Und folgendes hinter Dieses Beispiel hab ich von SelfPHP

Oder gibt es hierzu schon eine Admidio-eigene Funktion die ich einfach uebersehen habe? ^^

MfG
D347h

Edit:
Code entfernt, war fehlerhaft.
Zuletzt geändert von D347h am 19. Jun 2012, 12:53, insgesamt 1-mal geändert.
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: admFuncVariableIsValid - Datum

Beitrag von Thomas-RCV »

Hallo D347h,

die Überprüfung auf Datumsformat hat die Funktion in der Tat leider im Moment nicht.
Das möchte "Fasse" aber noch mit einbauen.

Deine Erweiterung kann man so allerdings nicht übernehmen, da sie das Format d.m.Y voraussetzt.
Admidio unterstützt ja mehrere Formate, so dass auf jeden Fall das eingestellte Systemformat berücksichtigt werden muss. Von daher wird das ganze schon komplexer,...

VG Thomas
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

Re: admFuncVariableIsValid - Datum

Beitrag von D347h »

Moinsen Thomas,

Desswegen hab ich bei "admFuncVariableIsValid" die zwei Parameter
*) $format = 'dmY'
*) $sep = '.'
hinzugefuegt.
Die ermoeglichen es ein ein anderes Datumsvormat zu benutzen in dem man beim Aufruf z.B.:
($_GET, 'datum', 'date', '', '', '', '','Ymd', ':')
Erfordert ein Datum im Forumat "2012:06:12"

MfG
D347h
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: admFuncVariableIsValid - Datum

Beitrag von Thomas-RCV »

Du muss aber trotzdem wissen, welches Sytemformat der User eingestellt hat und von da deine Parameter ableiten.
Wenn du deinen Separator fest vorgibst, so wie in deinem Beispiel ":", dann fliegt dir spätestens eine Fehlermeldung um die Ohren, wenn in der Orga z.B auf "d-m-Y" geändert wird,....

Vg Thomas
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

Re: admFuncVariableIsValid - Datum

Beitrag von D347h »

Oh... gut zu wissen, muss ich das gleich umbauen =)

Mal sehen ob ich das so hinbekomme das es das auch beruecksichtigt ^^

MfG
D347h
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

Re: admFuncVariableIsValid - Datum

Beitrag von D347h »

Moinsen :)

So, hab das jetzt mal etwas umgebaut:
die Variable "$gPreferences" wurde zu "global" hinzugefuegt: und der Rest wurde komplett ausgetauscht: Als erstes wird mittels DateTime:createFromFormat ein Objekt Datumsobjekt erzeugt.
Falls hier z.B. ein "a" uebergeben wird, ist "$datum" dann kein Objekt, was mit is_object() ueberprueft wird, und die Standard-Fehlerseite ausgibt.
Falls aber z.B.: 45.01.2012 als Datum eingegeben wurde, liefert die Funktion ca. mitte Februar zurueck.
Um dieses Problem zu umgehen wird einfach der uebergebene Wert mit dem "neu" generierten verglichen und bei Abweichung wieder die Fehlermeldung ausgegeben.

Ich denke diese Funktion sollte auch auf unterschiedliche Orga-Einstellungen reagieren koennen.

MfG
D347h

Edit:
(19.06.2012)
Code Entfernt, da ich einen kleinen Bug gefunden habe.
Bei Eingabe von 6.12.2012 wurde ein Fehler ausgegeben da die Funktion 06.12.2012 erwartet.
Habe eine Idee zum "herrichten" kann ich aber erst fruehestens Abends / morgen machen.
Werde dann hier den korrigierten Code in einem neuen Beitrag bekanntgeben.

Mfg
D347h
Zuletzt geändert von D347h am 19. Jun 2012, 13:00, insgesamt 1-mal geändert.
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: admFuncVariableIsValid - Datum

Beitrag von Thomas-RCV »

Müsste man mal testen,....
Denke "Fasse" wird sich da noch zu Wort melden ,...
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

Re: admFuncVariableIsValid - Datum

Beitrag von D347h »

Moinsen :)

Zumindest meine Tests hat die Funktion alle bestanden :)
Danke, bin ich gespannt :D

MfG
D347h
Benutzeravatar
fasse
Administrator
Beiträge: 6170
Registriert: 12. Nov 2005, 16:06

admFuncVariableIsValid - Datum

Beitrag von fasse »

Hi,

ich werd mir das demnächst mal genauer anschauen. Die Funktionalität brauchen wir auf jeden Fall. Schon mal vielen Dank für deinen Input.

Gruß
Fasse
D347h
Beiträge: 30
Registriert: 15. Jun 2011, 18:34
Wohnort: Linz
Kontaktdaten:

Re: admFuncVariableIsValid - Datum

Beitrag von D347h »

Moinsen :)

Da meine Erste Idee nicht funktioniert hat, dauerte es leider ein bisschen laenger, aber nun hab ich eine neue Loesung, bei der auch auf solche minimalistischen "falscheingaben" richtig reagiert:

Code: Alles auswählen

elseif($type == 'date')
{
  $datum = DateTime::createFromFormat($gPreferences['system_date'], $array[$variableName]);
  if(is_object($datum))
  {
    if (
    !($array[$variableName] == $datum->format(str_replace(array('d', 'm', 'y'), array('j', 'n', 'Y'), $gPreferences['system_date']))) &&
        !($array[$variableName] == $datum->format(str_replace(array('d', 'm', 'Y'), array('j', 'n', 'y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('d', 'n', 'y'), array('j', 'm', 'Y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('d', 'n', 'Y'), array('j', 'm', 'y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('j', 'm', 'y'), array('d', 'n', 'Y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('j', 'm', 'Y'), array('d', 'n', 'y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('j', 'n', 'y'), array('d', 'm', 'Y'), $gPreferences['system_date']))) &&
      !($array[$variableName] == $datum->format(str_replace(array('j', 'n', 'Y'), array('d', 'm', 'y'), $gPreferences['system_date'])))
      )
    {
        $errorMessage = $gL10n->get('SYS_INVALID_PAGE_VIEW');
    }
  }
  else
  {
    $errorMessage = $gL10n->get('SYS_INVALID_PAGE_VIEW');
  }
}
Als erstes wird wieder ueberprueft ob uebehaupt ein gueltiger Wert fuer ein Datum uebergeben wurde. (Wenn nicht, wird kein Objekt "$datum" erzeugt.
Danach wird ueberprueft ob das Datum, welches aus dem Objekt, anhand der Einstellungen, generiert wird, auch mit dem uebergebenen uebereinstimmt, und hier war das Problem, wenn fuer das Monat "d" (Tag 2-stellig mit fuehrender 0) hinterlegt war, und der User (oder Admin ;) nur z.B. 6 eingegeben hat, waren die Strings nicht mehr gleich.
Dies wurde behoben indem bei allen 3en (Tag/Monat/Jahr) alle Kombinationen aus Einstellig, Zweistellig und Vierstellig (Jahr) ueberprueft werden (d.m.y, d.n.y, j.m.Y, ...) und sobald eines stimmt, als Richtig angesehen wird.

Hoffe das ist jetzt verstaendlich, bin kein so guter ErklaerBaer ^^

MfG
D347h
Benutzeravatar
fasse
Administrator
Beiträge: 6170
Registriert: 12. Nov 2005, 16:06

admFuncVariableIsValid - Datum

Beitrag von fasse »

Hi d347h,

In der 2.3.6 hab ich jetzt auch die Prüfung auf Date eingebaut. Allerdings Prüf ich es etwas anders. Per Default wird erst einmal geprüft, ob das Format dem aus den Organisationseinstellungen entspricht. Ist die nicht der Fall, dann wird geprüft, ob es im englischen Format Y-m-d vorliegt. Erst wenn dies auch nicht der Fall ist, wird ein Fehler zurückgegeben.

Viele Grüße
Fasse
Antworten