diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook index a78ca23c..5b3923de 100644 --- a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook +++ b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook @@ -18,7 +18,11 @@ Structure... array ( 'timestamp' => [Booléen], // Si la date est stockée au format timestamp - 'format' => '[Format de stockage]', // Default : "YmdHisO" + 'formats' => array( + '[Format de stockage principal]', // Par défaut : "YmdHisO" + '[Formats de stockage alternatifs]', // Par défaut : "YmdHis.vO" & "YmdHis.uO" + [...] + ), 'timezone' => '[Fuseau horaire]', // Default : "UTC" ),]]> ... @@ -39,26 +43,30 @@ - format + formats - Format de stockage de la date dans l'annuaire. Ce format est composé à + Formats de stockage de la date dans l'annuaire. Ces formats sont composés à partir des motifs clés gérés par la fonction date() de &php;. Pour plus d'information, consulter - la documentation officielle. - La valeur par défaut est YmdHisO, - correspondant à la syntaxe Generalized Time (sans les - micro-secondes) telle que définie dans la + la documentation officielle. Plusieurs + formats peuvent être définis, mais en cas de stockage d'une nouvelle valeur, se sera + le premier format défini qui sera utilisé. + La valeur par défaut est ["YmdHisO", "YmdHis.vO", "YmdHis.uO"], + correspondant à la syntaxe Generalized Time (sans et avec les milli-secondes + ou micro-secondes) telle que définie dans la RFC4517. Exemples : 20091206230506Z - (=2009/12/06 23:05:66 UTC) ou + (=2009/12/06 23:05:66 UTC), 20190613143537+0200 - (=2019/06/13 14:35:37 UTC+0200). + (=2019/06/13 14:35:37 UTC+0200) ou + 20230818121005.307+0200 + (=2023/08/18 12:10:05.307 UTC+0200). Si vous exploitez un attribut stockant une date incluant les - micro-secondes, ce type d'attribut LDAP sera capable de gérer l'interpratation des - valeurs stockées en configurant le format YmdHis.uO. En outre, - le type d'attribut &LSattr_html_date;, s'appuyant sur les méthodes standards - strftime() et strptime(), ne permettra pas - aujourd'hui la saisie et l'affichage des millisecondes. + milli-secondes ou les micro-secondes, ce type d'attribut LDAP sera capable de gérer + l'interpratation des valeurs stockées, en outre le type d'attribut &LSattr_html_date;, + s'appuyant sur les méthodes standards strftime() et + strptime(), ne permettra pas aujourd'hui leur saisie et affichage. + diff --git a/src/includes/class/class.LSattr_ldap_date.php b/src/includes/class/class.LSattr_ldap_date.php index 801c163b..e11f92d7 100644 --- a/src/includes/class/class.LSattr_ldap_date.php +++ b/src/includes/class/class.LSattr_ldap_date.php @@ -40,9 +40,12 @@ class LSattr_ldap_date extends LSattr_ldap { } $retval=array(); foreach($data as $val) { - $datetime = date_create_from_format($this -> getFormat(), $val); - if ($datetime instanceof DateTime) { - $retval[] = $datetime -> format('U'); + foreach($this -> getFormats() as $format) { + $datetime = date_create_from_format($format, $val); + if ($datetime instanceof DateTime) { + $retval[] = $datetime -> format('U'); + break; + } } } return $retval; @@ -65,7 +68,7 @@ class LSattr_ldap_date extends LSattr_ldap { foreach($data as $val) { $datetime = date_create("@$val"); $datetime -> setTimezone($timezone); - $datetime_string = $datetime -> format($this -> getFormat()); + $datetime_string = $datetime -> format($this -> getFormats(true)); // Replace +0000 or -0000 end by Z $datetime_string = preg_replace('/[\+\-]0000$/', 'Z', $datetime_string); @@ -76,12 +79,20 @@ class LSattr_ldap_date extends LSattr_ldap { } /** - * Return the storage date format + * Return the storage date formats + * Note: The first one will be used to store the value * - * @return string The storage date format + * @return array The storage date formats **/ - public function getFormat() { - return $this -> getConfig('ldap_options.format', 'YmdHisO'); + public function getFormats($first=false) { + $formats = $this -> getConfig('ldap_options.formats', [], 'array'); + if (!$formats) { + $format = $this -> getConfig('ldap_options.format'); + $formats = $format ? [$format] : ['YmdHisO', 'YmdHis.vO', 'YmdHis.uO']; + } + if ($first) + return $formats?$formats[0]:null; + return $formats; } }