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 (
'[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 :
<varlistentry>
<term>generated_fields</term>
<listitem>
<simpara>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.</simpara>
<simpara>Tableau associatif permettant de définir soit des &LSformats;, soit un
<emphasis>callable</emphasis> (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 <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>
</varlistentry>

View file

@ -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 (

View file

@ -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]))