Changeset 124667 in spip-zone


Ignore:
Timestamp:
May 13, 2020, 9:14:56 AM (3 weeks ago)
Author:
Maïeul Rouquette
Message:

Nouvelle option pour la description .yaml d'une saisie : hériter d'une
autre saisie.

Possibilité d'avoir des héritages en cascade.
Possibilité de régler précisement les options héritées ou pas, via des
entrées dans le .yaml.

Pour la documentation, voir
https://contrib.spip.net/ecrire/?exec=article&id_article=5272

Pour des exemples :

  • dans ce dossier, les tests (tests/saisies + tests/saisies_heriter)
  • la saisie nombre :

https://git.spip.net/spip-contrib-extensions/saisie_nombre

En bonus :

Location:
_plugins_/saisies/shelves
Files:
8 added
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/saisies/shelves/master/inc/saisies.php

    r124153 r124667  
    172172        return $saisie;
    173173}
     174
     175
     176/**
     177 * Supprimer récursivement les identifiants d'un tableau de saisie
     178 * Seul usage probable : pour les test uniaires
     179 * pour la saisie donnee si elle n'en a pas
     180 * (et pour ses sous saisies éventuels)
     181 *
     182 * @param Array $saisie Tableau d'une saisie
     183 * @return Array Tableau de la saisie sans les identifiant
     184**/
     185function saisies_supprimer_identifiants($saisies) {
     186        unset($saisies['identifiant']);
     187        foreach ($saisies as $cle => $valeur) {
     188                if (is_array($valeur)) {
     189                        $saisies[$cle] = saisies_supprimer_identifiants($valeur);
     190                }
     191        }
     192        return $saisies;
     193}
     194
     195
     196
    174197
    175198/**
  • _plugins_/saisies/shelves/master/inc/saisies_lister.php

    r124352 r124667  
    432432                                ) {
    433433                                        if (!isset($saisie['obsolete'])
    434                                                         or $saisie['obsolete'] == false
    435                                                         or $inclure_obsoletes
     434                                                or $saisie['obsolete'] == false
     435                                                or $inclure_obsoletes
    436436                                        ) {
    437437                                                $saisies[$type_saisie] = $saisie;
     
    508508                        // Dans le cas, la dernière de la liste l'emporte sur les précédentes
    509509                        if (isset($saisie['heritage'])) {
    510                                 $heritage = array_reverse(explode(',', $saisie['heritage']));
    511                                 foreach ($heritage as $h) {
    512                                         $saisie = array_replace_recursive(saisies_charger_infos($h,$saisies_repertoire),$saisie);
    513                                 }
     510                                $type_mere = $saisie['heritage'];
     511                                $saisie = saisies_recuperer_heritage($saisie, $type_mere, $saisies_repertoire);
    514512                        }
    515513                        $saisie['titre'] = (isset($saisie['titre']) and $saisie['titre'])
     
    527525        return $saisie;
    528526}
     527
     528/**
     529 * Permet à une saisie d'hériter des options et valeur par défaut d'une autre saisies
     530 * @param string $saisie la saisie
     531 * @param string $type_mere le type de la saisie dont on hérite
     532 * @param string $saisies_repertoire = 'saisies'
     533 * @return array
     534 **/
     535function saisies_recuperer_heritage($saisie, $type_mere, $saisies_repertoire = 'saisies') {
     536        $mere = saisies_charger_infos($type_mere, $saisies_repertoire);
     537        $options_mere = &$mere['options'];
     538        unset($saisie['heritage']);
     539        if (isset($saisie['heritage_supprimer_options'])) {
     540                foreach($saisie['heritage_supprimer_options'] as $option) {
     541                        $options_mere = saisies_supprimer($options_mere, $option);
     542                }
     543                unset($saisie['heritage_supprimer_options']);
     544        }
     545        if (isset($saisie['heritage_modifier_options'])) {
     546                foreach ($saisie['heritage_modifier_options'] as $c => $option) {
     547                        $nom_option = $option['options']['nom'];
     548                        $fusion = isset($option['fusion']) ? $option['fusion'] : false;
     549                        unset($option['fusion']);
     550                        $options_mere = saisies_modifier($options_mere, $nom_option, $option, $fusion);
     551                }
     552                unset($saisie['heritage_modifier_options']);
     553        }
     554        if (isset($saisie['heritage_inserer_options'])) {
     555                foreach ($saisie['heritage_inserer_options'] as $option) {
     556                        $chemin = $option['chemin'];
     557                        unset($option['chemin']);
     558                        $options_mere = saisies_inserer($options_mere, $option, $chemin);
     559                }
     560                unset($saisie['heritage_inserer_options']);
     561        }
     562        return array_replace_recursive($mere,$saisie);
     563}
     564
    529565
    530566/**
  • _plugins_/saisies/shelves/master/inc/saisies_manipuler.php

    r113483 r124667  
    6363 *     Position complète où insérer la saisie.
    6464 *     En absence, insère la saisie à la fin.
    65  *
     65 * @param bool $identifier = true. Mettre à false pour ne pas identifier
    6666 * @return array
    6767 *     Tableau des saisies complété de la saisie insérée
     
    207207 * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie à modifier
    208208 * @param array        $modifs              Le tableau des modifications à apporter à la saisie
    209  *
     209 * @param bool                           $fusion                                                        True si on veut simplifier rajouter des choses, sans tout remplacer
    210210 * @return Retourne le tableau décrivant les saisies, mais modifié
    211211 */
    212 function saisies_modifier($saisies, $id_ou_nom_ou_chemin, $modifs) {
     212function saisies_modifier($saisies, $id_ou_nom_ou_chemin, $modifs, $fusion = false) {
    213213        if ($chemin = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true)) {
    214214                $position = array_pop($chemin);
     
    247247                        unset($modifs['options']['nouveau_type_saisie']);
    248248                }
    249 
    250249                // On remplace tout
    251                 $parent[$position] = $modifs;
    252 
    253                 // Cette méthode ne marche pas trop
    254                 //$parent[$position] = array_replace_recursive($parent[$position], $modifs);
     250                if (!$fusion) {
     251                        $parent[$position] = $modifs;
     252                } else {
     253                        $parent[$position] = array_replace_recursive($parent[$position], $modifs);
     254                }
    255255        }
    256256
  • _plugins_/saisies/shelves/master/paquet.xml

    r124108 r124667  
    22        prefix="saisies"
    33        categorie="outil"
    4         version="3.36.3"
     4        version="3.38.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.