LSioFormat: allow to generate attribute value using a custom callable

This commit is contained in:
Benjamin Renard 2023-05-12 11:50:11 +02:00
parent 069dac2afe
commit 89ee2f1ec3
Signed by: bn8
GPG key ID: 3E2E1CE1907115BC
3 changed files with 26 additions and 8 deletions

View file

@ -39,6 +39,9 @@ création du type d'&LSobject;. En conséquence :
'generated_fields' => array ( 'generated_fields' => array (
'[attribute 3]' => '[LSformat]', '[attribute 3]' => '[LSformat]',
'[attribute 4]' => array('[LSformat1]', '[LSformat2]', ...) '[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 :
<varlistentry> <varlistentry>
<term>generated_fields</term> <term>generated_fields</term>
<listitem> <listitem>
<simpara>Tableau associatif permettant de définir des &LSformats; pour générer des valeurs <simpara>Tableau associatif permettant de définir soit des &LSformats;, soit un
d'attributs automatiquement. Ce tableau contient en clé, le nom de l'attribut à généré, <emphasis>callable</emphasis> (au sens PHP) pour générer les valeurs d'attributs automatiquement.
et en valeur associée, un ou plusieurs &LSformat; à utiliser pour générer ses valeurs. Ces Ce tableau contient en clé, le nom de l'attribut à générer, et en valeur associée, un ou plusieurs
&LSformat; sont composés à l'aide des valeurs des autres attributs de l'objet.</simpara> &LSformat; ou un <emphasis>callable</emphasis> à 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
<emphasis>callable</emphasis>, il sera appeler avec en paramètre le tableau des valeurs des autres
attributs (<literal>$attrs</literal>), le tableau des données issues du fichier source
(<literal>$row</literal>) et devra retourner le tableau des valeurs générées de l'attribut.
</simpara>
</listitem> </listitem>
</varlistentry> </varlistentry>

View file

@ -81,6 +81,9 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
), ),
'generated_fields' => array ( 'generated_fields' => array (
'cn' => '%{personalTitle} %{givenName} %{sn}', 'cn' => '%{personalTitle} %{givenName} %{sn}',
'sambaPwdMustChange' => function($attrs, $row) {
return array(strval(LS_SAMBA_INFINITY_TIME));
},
), ),
), ),
'myfullcsv' => array ( 'myfullcsv' => array (

View file

@ -137,10 +137,17 @@ class LSioFormatDriver extends LSlog_staticLoggerClass {
} }
foreach ($generated_fields as $attr => $formats) { foreach ($generated_fields as $attr => $formats) {
$retone[$attr] = array(); $retone[$attr] = array();
foreach (ensureIsArray($formats) as $format) { if (is_callable($formats)) {
$value = getFData($format, $retone); $retone[$attr] = ensureIsArray(
if (!is_empty($value)) { call_user_func_array($formats, array($retone, $one))
$retone[$attr][] = $value; );
}
else {
foreach (ensureIsArray($formats) as $format) {
$value = getFData($format, $retone);
if (!is_empty($value)) {
$retone[$attr][] = $value;
}
} }
} }
if (empty($retone[$attr])) if (empty($retone[$attr]))