diff --git a/lib/Utils.php b/lib/Utils.php index c9f6121..d2c3400 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -299,7 +299,8 @@ class Utils /** * @return liste des années fiscales */ - public static function getAnneesFiscales() { + public static function getAnneesFiscales() : array + { $rows = DB::getInstance()->get( "SELECT strftime('%Y', start_date) as annee FROM acc_years @@ -312,6 +313,53 @@ class Utils return $anneesFiscales; } + /** + * récupérer dans la config du plugin les champs des membres + * utilisés pour le nom et le prénom ; ajouter/supprimer les + * modifications par rapport à la config garradin + * @return tableau des champs : clé = nom, valeur = { titre, position } + */ + public static function getChampsNom($config, $plugin) : array + { + // récupérer dans la config du plugin les champs mémorisés + // pour le nom et le prénom (le tableau est vide si pas mémorisé) + $champsNom = (array) $plugin->getConfig('champsNom'); + + // récupérer dans la config Garradin les champs des membres + // utilisés pour le nom et le préno + $champsGarradin = $config->get('champs_membres')->listAssocNames(); + + foreach ($champsGarradin as $name => $title) + { + if (stristr($title, 'nom')) + { + // retenir les champs dont le titre contient le terme 'nom' + // est-il présent dans la config du plugin ? + if (! array_key_exists($name, $champsNom)) + { + // absent => l'ajouter + $champ = new \stdClass(); + $champ->titre = $title; + $champ->position = 0; + $champsNom[$name] = $champ; + } + } + } + // opération symétrique : un champ mémorisé dans la config du + // plugin a-t-il disparu de la config garradin ? + foreach ($champsNom as $nom => $champ) + { + if (! array_key_exists($nom, $champsGarradin)) + { + // absent => le supprimer + unset($champsNom[$nom]); + } + } + // mettre à jour la config du plugin + $plugin->setConfig('champsNom', $champsNom); + return $champsNom; + } + /** * enregistrer les fichiers dans une archive zip * @param $fileList : liste des fichiers à archiver diff --git a/templates/config.tpl b/templates/config.tpl index f106aeb..f7433f1 100644 --- a/templates/config.tpl +++ b/templates/config.tpl @@ -85,13 +85,13 @@ {* les champs de nom *} - +

Sélectionnez et classez le(s) champ(s) qui représente(nt) le nom et le prénom du donateur

- {foreach from=$nomChamps key="nom" item="champ"} + {foreach from=$champsNom key="nom" item="champ"}
diff --git a/www/admin/config.php b/www/admin/config.php index 64c0506..c5b406a 100644 --- a/www/admin/config.php +++ b/www/admin/config.php @@ -1,31 +1,18 @@ requireAccess($session::SECTION_CONFIG, $session::ACCESS_ADMIN); $art_sel = f('articlesCGI') ? : []; $taux_sel = f('tauxReduction') ? : []; $noms_sel = f('champsNom') ? : []; -$confNoms = $plugin->getConfig('nomChamps'); -if (! isset($confNoms)) -{ - // récupérer les champs des membres utilisés pour le nom et le prénom - $nomChamps = array(); - foreach ($config->get('champs_membres')->listAssocNames() as $name => $title) - { - if (stristr($title, 'nom')) - { - $champ = new \stdClass(); - $champ->titre = $title; - $champ->position = 0; - $nomChamps[$name] = $champ; - } - } - $plugin->setConfig('nomChamps', $nomChamps); -} +// récupérer les champs des noms +$champsNom = Utils::getChampsNom($config, $plugin); if (f('save') && $form->check('recusfiscaux_config')) { @@ -79,17 +66,16 @@ if (f('save') && $form->check('recusfiscaux_config')) $plugin->setConfig('ville_asso', trim(f('ville_asso'))); // champs pour le nom et prénom - $confNoms = (array)$plugin->getConfig('nomChamps'); - foreach ($confNoms as $nom => $champ) + foreach ($champsNom as $nom => $champ) { $champ->position = 0; } $i = -count($noms_sel); foreach ($noms_sel as $nom) { - $confNoms[$nom]->position = $i++; + $champsNom[$nom]->position = $i++; } - $plugin->setConfig('nomChamps', $confNoms); + $plugin->setConfig('champsNom', $champsNom); \Garradin\Utils::redirect(PLUGIN_URL . 'config.php?ok'); } @@ -100,8 +86,7 @@ if (f('save') && $form->check('recusfiscaux_config')) } // trier les champs de nom pour l'affichage -$nomChamps = (array) $plugin->getConfig('nomChamps'); -uasort($nomChamps, function ($a, $b) +uasort($champsNom, function ($a, $b) { return $a->position - $b->position; }); @@ -111,6 +96,6 @@ $path = qg('path') ?: File::CONTEXT_CONFIG; $tpl->assign('path', $path); $tpl->assign('default_signature', \Garradin\WWW_URL . "plugin/recusfiscaux/default_signature.png"); $tpl->assign('plugin_config', $plugin->getConfig()); -$tpl->assign('nomChamps', $nomChamps); +$tpl->assign('champsNom', $champsNom); $tpl->assign('plugin_css', ['style.css']); $tpl->display(PLUGIN_ROOT . '/templates/config.tpl');