From 89ee2f1ec36fa6ef55158c90b2f4481f9cc31d69 Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Fri, 12 May 2023 11:50:11 +0200 Subject: [PATCH] LSioFormat: allow to generate attribute value using a custom callable --- doc/conf/LSobject/ioFormat.docbook | 16 ++++++++++++---- src/conf/LSobjects/config.LSobjects.LSpeople.php | 3 +++ src/includes/class/class.LSioFormatDriver.php | 15 +++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/doc/conf/LSobject/ioFormat.docbook b/doc/conf/LSobject/ioFormat.docbook index 65674cb5..6482b7a5 100644 --- a/doc/conf/LSobject/ioFormat.docbook +++ b/doc/conf/LSobject/ioFormat.docbook @@ -39,6 +39,9 @@ création du type d'&LSobject;. En conséquence : 'generated_fields' => array ( '[attribute 3]' => '[LSformat]', '[attribute 4]' => array('[LSformat1]', '[LSformat2]', ...) + '[attribute 5]' => function($attrs, $row) { + return array([...]); + }, [...] ) ), @@ -85,10 +88,15 @@ création du type d'&LSobject;. En conséquence : generated_fields - Tableau associatif permettant de définir des &LSformats; pour générer des valeurs - d'attributs automatiquement. Ce tableau contient en clé, le nom de l'attribut à généré, - et en valeur associée, un ou plusieurs &LSformat; à utiliser pour générer ses valeurs. Ces - &LSformat; sont composés à l'aide des valeurs des autres attributs de l'objet. + Tableau associatif permettant de définir soit des &LSformats;, soit un + callable (au sens PHP) pour générer les valeurs d'attributs automatiquement. + Ce tableau contient en clé, le nom de l'attribut à générer, et en valeur associée, un ou plusieurs + &LSformat; ou un callable à utiliser pour générer ses valeurs. En cas de + &LSformat;, ils seront composés à l'aide des valeurs des autres attributs de l'objet. En cas d'un + callable, il sera appeler avec en paramètre le tableau des valeurs des autres + attributs ($attrs), le tableau des données issues du fichier source + ($row) et devra retourner le tableau des valeurs générées de l'attribut. + diff --git a/src/conf/LSobjects/config.LSobjects.LSpeople.php b/src/conf/LSobjects/config.LSobjects.LSpeople.php index dc54e8fd..b1f2e085 100644 --- a/src/conf/LSobjects/config.LSobjects.LSpeople.php +++ b/src/conf/LSobjects/config.LSobjects.LSpeople.php @@ -81,6 +81,9 @@ $GLOBALS['LSobjects']['LSpeople'] = array ( ), 'generated_fields' => array ( 'cn' => '%{personalTitle} %{givenName} %{sn}', + 'sambaPwdMustChange' => function($attrs, $row) { + return array(strval(LS_SAMBA_INFINITY_TIME)); + }, ), ), 'myfullcsv' => array ( diff --git a/src/includes/class/class.LSioFormatDriver.php b/src/includes/class/class.LSioFormatDriver.php index eb465bd8..bba29e73 100644 --- a/src/includes/class/class.LSioFormatDriver.php +++ b/src/includes/class/class.LSioFormatDriver.php @@ -137,10 +137,17 @@ class LSioFormatDriver extends LSlog_staticLoggerClass { } foreach ($generated_fields as $attr => $formats) { $retone[$attr] = array(); - foreach (ensureIsArray($formats) as $format) { - $value = getFData($format, $retone); - if (!is_empty($value)) { - $retone[$attr][] = $value; + if (is_callable($formats)) { + $retone[$attr] = ensureIsArray( + call_user_func_array($formats, array($retone, $one)) + ); + } + else { + foreach (ensureIsArray($formats) as $format) { + $value = getFData($format, $retone); + if (!is_empty($value)) { + $retone[$attr][] = $value; + } } } if (empty($retone[$attr]))