Ignore:
Timestamp:
Sep 12, 2015, 3:08:02 PM (4 years ago)
Author:
marcimat@…
Message:

Correction d'un certain nombre de bugs :

  • ne pas afficher le sélecteur de mot parent si le groupe choisit ne le permet pas
  • ne pas pouvoir modifier le groupe de mot si un mot parent est défini
  • bien propager les modifications sur les mots d'un groupe lors de la modification de la configuration mots_arborescents d'un groupe de mot
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mots_arborescents/trunk/motsar_pipelines.php

    r91799 r91802  
    9494
    9595/**
    96  * Verifie que le parent d'un mot
    97  * n'est pas ce mot lui-même !
     96 * Verifie différentes choses sur le formulaire d'édition d'un mot.
     97 *
     98 * - vérifie que le parent d'un mot n'est pas ce mot lui-même !
     99 * - empêche de pouvoir modifier d'un même coup ET le mot parent ET le groupe parent
    98100 *
    99101 * @pipeline formulaire_verifier
    100102 * @param array $flux
    101  *              Données du pipeline
    102  * @return array
    103  *              Données du pipeline complétées
     103 *     Données du pipeline
     104 * @return array
     105 *     Données du pipeline complétées
    104106**/
    105107function motsar_formulaire_verifier($flux) {
    106108        // sur le formulaire d'édition de groupe de mot
    107109        if ($flux['args']['form'] == 'editer_mot') {
     110
    108111                // tester que le parent ne vaut pas le groupe
    109                 if ($id_parent = _request('id_parent')
    110                 and $id_mot = _request('id_mot'))
    111                 {
     112                // ça ne devrait pas pouvoir arriver, car la saisie met ces options en disabled
     113                if ($id_parent = _request('id_parent') and $id_mot = _request('id_mot')) {
     114                        include_spip('motsar_fonctions'); // calcul_branche_mot_in
    112115                        if ($id_parent == $id_mot) {
    113116                                $flux['data']['id_parent'] = _T('motsar:erreur_parent_sur_mot');
    114                         }
    115                         elseif (
    116                           include_spip('motsar_fonctions') // calcul_branche_mot_in
    117                           and in_array($id_parent, explode(',', calcul_branche_mot_in($id_mot))))
    118                         {
     117                        } elseif (in_array($id_parent, explode(',', calcul_branche_mot_in($id_mot)))) {
    119118                                $flux['data']['id_parent'] = _T('motsar:erreur_parent_sur_mot_enfant');
     119                        }
     120                }
     121
     122                // tester que le parent appartient au groupe sélectionné
     123                if ($id_parent = _request('id_parent') and $id_groupe = _request('id_groupe')) {
     124                        $id_groupe_parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($id_parent));
     125                        if ($id_groupe_parent != $id_groupe) {
     126                                set_request('id_groupe', null);
     127                                $flux['data']['id_parent'] = _T('motsar:erreur_parent_hors_groupe_selectionne');
     128                                $flux['data']['id_groupe'] = _T('motsar:erreur_groupe_selectionne_annule');
    120129                        }
    121130                }
     
    150159
    151160        // sur le formulaire d'édition de mot
    152         if ($flux['args']['form'] == 'editer_mot') {
    153                 // la parenté sur tous : on récupère le sélecteur et on l'ajoute après le titre...
    154                 $selecteur_parent = recuperer_fond('formulaires/selecteur_mot_parent', $env);
    155 
    156                 $cherche = "/(<(li|div)[^>]*class=(?:'|\")editer editer_titre.*?<\/\\2>)\s*(<(li|div)[^>]*class=(?:'|\")editer)/is";
    157                 if (preg_match($cherche, $flux['data'], $m)) {
    158                         $flux['data'] = preg_replace($cherche, '$1'.$selecteur_parent.'$3', $flux['data'], 1);
     161        // mais seulement si le groupe de mot choisi permet l'arborescence.
     162        if ($flux['args']['form'] == 'editer_mot' and isset($env['id_groupe'])) {
     163                $mots_arborescents = sql_getfetsel('mots_arborescents', 'spip_groupes_mots', 'id_groupe=' . intval($env['id_groupe']));
     164                if ($mots_arborescents == 'oui') {
     165                        // la parenté sur tous : on récupère le sélecteur et on l'ajoute après le titre...
     166                        $selecteur_parent = recuperer_fond('formulaires/selecteur_mot_parent', $env);
     167
     168                        $cherche = "/(<(li|div)[^>]*class=(?:'|\")editer editer_titre.*?<\/\\2>)\s*(<(li|div)[^>]*class=(?:'|\")editer)/is";
     169                        if (preg_match($cherche, $flux['data'], $m)) {
     170                                $flux['data'] = preg_replace($cherche, '$1'.$selecteur_parent.'$3', $flux['data'], 1);
     171                        }
    159172                }
    160173        }
     
    355368        {
    356369                if ($mots_arborescents = _request('mots_arborescents')) {
     370                        $mots_arborescents_ancien = sql_getfetsel('mots_arborescents', 'spip_groupes_mots', 'id_groupe=' . sql_quote($flux['args']['id_objet']));
    357371                        $flux['data']['mots_arborescents'] = $mots_arborescents;
     372                        if ($mots_arborescents_ancien != $mots_arborescents) {
     373                                // pour le pipeline de post_edition. Permet entre autre de savoir
     374                                // qu'il faudra actualiser les mots de la branche
     375                                set_request('motsar_definir_heritages', true);
     376                        }
    358377                }
    359378        }
     
    389408        // lors de l'édition d'un groupe de mot
    390409        elseif ($flux['args']['table']  == 'spip_groupes_mots' and $flux['args']['action'] == 'modifier'
    391                 // soit le parent a change, soit le groupe racine est modifie
    392                 and ($mots_arborescents = _request('mots_arborescents')))
     410                // si la configuration mots_arborescents a été modifiée
     411                and _request('motsar_definir_heritages'))
    393412        {
    394413                $id_groupe = $flux['args']['id_objet'];
    395414                include_spip('motsar_fonctions');
    396415                motsar_definir_heritages($id_groupe);
    397         }
    398 
    399         return $flux;
    400 }
     416                propager_les_mots_arborescents();
     417        }
     418
     419        return $flux;
     420}
Note: See TracChangeset for help on using the changeset viewer.