From 3e53f194532c682dc22f95b576fefa0e77536319 Mon Sep 17 00:00:00 2001 From: engel <> Date: Fri, 25 Mar 2022 19:28:57 +0000 Subject: [PATCH] =?UTF-8?q?am=C3=A9lioration=20gestion=20champs=20nom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 2e194af9739c1603c6471619fe3b9720beb014d8d11442d01a42fc722ca9e790 --- garradin_plugin.ini | 2 +- lib/Utils.php | 47 ++++++++++++++++++++++++++++++ templates/config.tpl | 4 +-- upgrade.php | 13 +++++---- www/admin/config.php | 32 +++++--------------- www/admin/index.php | 4 +-- www/admin/versements_activites.php | 6 ++-- www/admin/versements_personnes.php | 2 +- 8 files changed, 72 insertions(+), 38 deletions(-) diff --git a/garradin_plugin.ini b/garradin_plugin.ini index 3193717..8e00b99 100644 --- a/garradin_plugin.ini +++ b/garradin_plugin.ini @@ -2,7 +2,7 @@ nom="Reçus fiscaux" description="Génération de reçus fiscaux pour les dons des membres" auteur="jce" url="https://git.roflcopter.fr/lesanges/recus-fiscaux-garradin" -version="0.6" +version="0.6.2" menu=1 config=1 min_version="1.1" diff --git a/lib/Utils.php b/lib/Utils.php index f6bed5b..22e74d0 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -257,6 +257,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 term '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/upgrade.php b/upgrade.php index a0a8751..c733afd 100644 --- a/upgrade.php +++ b/upgrade.php @@ -2,12 +2,15 @@ namespace Garradin; -use Garradin\Entities\Files\File; - -$db = DB::getInstance(); - $old_version = $plugin->getInfos('version'); -if (version_compare($old_version, '0.6.0', '<')) +if (version_compare($old_version, '0.6.2', '<')) { + // changement de nom de la configuration des champs nom + $champsNom = $plugin->getConfig('nomChamps'); + if (null !== $champsNom) + { + $plugin->setConfig('champsNom', $champsNom); + $plugin->setConfig('nomChamps', null); + } } diff --git a/www/admin/config.php b/www/admin/config.php index 64c0506..aaf9498 100644 --- a/www/admin/config.php +++ b/www/admin/config.php @@ -3,29 +3,15 @@ namespace Garradin; use Garradin\Files\Files; use Garradin\Entities\Files\File; +use Garradin\Plugin\RecusFiscaux\Utils; $session->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 +65,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 +85,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 +95,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'); diff --git a/www/admin/index.php b/www/admin/index.php index 1dc3f17..1e999df 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -23,9 +23,9 @@ foreach ($plugin->getConfig('reduction') as $taux) // idem avec les champs nom/prénom $nbChamps = 0; -if (null !== $plugin->getConfig('nomChamps')) +if (null !== $plugin->getConfig('champsNom')) { - foreach ($plugin->getConfig('nomChamps') as $nom => $champ) + foreach ($plugin->getConfig('champsNom') as $nom => $champ) { if ($champ->position != 0) { ++$nbChamps; } } diff --git a/www/admin/versements_activites.php b/www/admin/versements_activites.php index 8828415..d4a66b8 100644 --- a/www/admin/versements_activites.php +++ b/www/admin/versements_activites.php @@ -14,7 +14,7 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") { } // champs pour le nom et prénom -$confNoms = (array) $plugin->getConfig('nomChamps'); +$confNoms = (array) $plugin->getConfig('champsNom'); uasort($confNoms, function ($a, $b) { return $a->position - $b->position; @@ -40,14 +40,14 @@ $_SESSION['tauxSelectionnes'] = $tauxSelectionnes; // obtenir les instances de tarifs correspondant à la sélection $lesTarifs = array(); foreach (Utils::getTarifs($tarifsSelectionnes) as $ot) { - $lesTarifs[$ot->id] = Tarif::copier($ot); + $lesTarifs[$ot->id] = $ot; } $_SESSION['lesTarifs'] = $lesTarifs; // activités correspondants aux tarifs sélectionnés $lesActivites = array(); foreach (Utils::getActivites($tarifsSelectionnes) as $activite) { - $lesActivites[$activite->id] = Activite::copier($activite); + $lesActivites[$activite->id] = $activite; } $_SESSION['lesActivites'] = $lesActivites; diff --git a/www/admin/versements_personnes.php b/www/admin/versements_personnes.php index b7ebd0e..258a93b 100644 --- a/www/admin/versements_personnes.php +++ b/www/admin/versements_personnes.php @@ -13,7 +13,7 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") { $_SESSION['taux_reduction'] = $_POST['taux_reduction']; // champs pour le nom et prénom -$confNoms = (array) $plugin->getConfig('nomChamps'); +$confNoms = (array) $plugin->getConfig('champsNom'); uasort($confNoms, function ($a, $b) { return $a->position - $b->position;