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;
}
}