Changeset 118254 in spip-zone


Ignore:
Timestamp:
Oct 22, 2019, 7:30:04 AM (7 weeks ago)
Author:
peetdu@…
Message:

Gestion des contenus par rubrique : pour la détermination de l’id_parent faire attention d’être en mode création

Location:
_plugins_/lim/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/lim/trunk/lim_pipelines.php

    r113796 r118254  
    4444
    4545/**
    46  * Gestion des contenus par rubrique : si pour un objet A la conf dans LIM ne laisse qu'un seule rubrique dans laquelle cet objet peut être éditer, rediriger l'enregistrement vers cette rubrique en renvoyant l'id_parent
    47  * ce traitement est rendu nécessaire par
    48  * -> l'action de la fonction inc/lim_api.php -> inc_chercher_rubrique qui supprime l'affichage du sélecteur de rubrique si une seule rubrique
    49  * -> le cas 2 (voir ci-dessous)
     46 * Gestion des contenus par rubrique
     47 * Lors de la création d'un objet éditorial, être sûr de renvoyer la bonne valeur de "id_parent".
    5048 *
    51  * cas 1 : le rédacteur créer une nouvelle instance de l'objet depuis la bonne rubrique : on a l'id_parent depuis le flux
    52  * cas 2 : le rédacteur créer une instance depuis la barre d'outils rapides, ou via la page exec=objets. On n'a pas l'id_parent.
    53  * Il faut le calculer pour enregistrer l'instance dans une rubrique gérée par LIM
    54  *  a/ via LIM l'objet ne peut être associé qu'à une seule rubrique. On renvoi l'id de cette rubrique
    55  *  b/ via LIM l'objet peut être associé à plusieurs rubriques : pas de traitement. Le sélecteur de rubrique est affiché.
     49 * Cas #1 : objet géré par la restriction par rubrique de LIM
     50 *      ->      #1.1 Si une seule rubrique définie : on récupère la valeur de l'id_rubrique dans la conf.
     51 *      ->      #1.2 Sinon forcer la valeur vide pour 'id_parent'. Dans ce cas, le premier choix du selecteur de rubrique est vide, et si l'utilisateur ne choisit pas de rubrique il aura un retour en erreur sur un champ obligatoire (sauf dans le cas d'une rubrique qui se retrouvera à la racine).
     52 *
     53 * Cas #2 : objet non géré par la restriction par rubrique de LIM.
     54 * -> même traitement que pour le cas #1.2
    5655 *
    5756 * @param array $flux
    5857 * @return array $flux
    59  *     le flux data complété par un input hidden 'id_parent' avec la bonne valeur
     58 *     le flux data complété par une valeur de id_parent
    6059**/
    6160function lim_formulaire_charger($flux) {
    62         // si ce n'est pas un formulaire d'édition d'un objet ou si la restriction par rubrique n'a pas été activée, on sort.
    63         if (strncmp($flux['args']['form'], 'editer_', 7) !== 0 OR is_null(lire_config('lim_objets'))) {
    64                 return $flux;
     61        if (
     62                strncmp($flux['args']['form'], 'editer_', 7) == 0 // c'est bien un formulaire d'edition d'objet
     63                and !is_numeric($flux['args']['args']['0']) // c'est bien une création d'objet (pas une modif ou autre)
     64        ) {
     65                $objet = substr($flux['args']['form'], 7); // 'editer_article' -> 'article'
     66                $nom_table      = table_objet_sql($objet); // article -> spip_articles
     67
     68                $tableau_conf_lim_objet = lire_config("lim_rubriques/$objet");
     69                $nbre_rubriques = sql_countsel('spip_rubriques');
     70                $nbre_rubriques_autorisees = $nbre_rubriques - count($tableau_conf_lim_objet);
     71               
     72                if (isset($tableau_conf_lim_objet)) {
     73                       
     74                        // Cas #0 : voir TODO's
     75                        // if ($nbre_rubriques_autorisees == 0) {
     76                        //      debug('Cas #0');
     77                        //      $id_parent = '0';
     78                        // }
     79
     80                        if ($nbre_rubriques_autorisees == 1) { // Cas #1.1
     81                                $tab_rubrique_choisie = lim_publierdansrubriques($objet);
     82                                $id_parent = implode($tab_rubrique_choisie);
     83                        }
     84
     85                        if ($nbre_rubriques_autorisees >= 2) { // Cas #1.2
     86                                $id_parent = '';
     87                        }
     88                } else { // Cas #2
     89                        $id_parent = '';
     90                }
     91
     92                $flux['data']['id_parent'] = $id_parent;
    6593        }
    6694
    67         $objet = substr($flux['args']['form'], 7); // 'editer_objet' devient 'objet'
    68         $nom_table      = table_objet_sql($objet);
    69         $tableau_tables_lim     = explode(',', lire_config('lim_objets'));
    70        
    71         if (in_array($nom_table, $tableau_tables_lim)) {
    72                 $tab_rubriques_choisies = lim_publierdansrubriques($objet);
    73                 if (count($tab_rubriques_choisies) == 1) {
    74                         $id_parent = $flux['data']['id_parent'];
    75                         if (empty($id_parent)) {
    76                                 $id_parent = implode($tab_rubriques_choisies);
    77                         }
    78                         $flux['data']['_hidden'] = "<input type='hidden' name='id_parent' value='$id_parent'>";
    79                 }
    80         }
    8195        return $flux;
    8296}
  • _plugins_/lim/trunk/paquet.xml

    r117696 r118254  
    22        prefix="lim"
    33        categorie="maintenance"
    4         version="2.1.1"
     4        version="2.1.2"
    55        etat="stable"
    66        compatibilite="[3.2.0;3.3.*]"
  • _plugins_/lim/trunk/todo.md

    r113671 r118254  
    33**1 - En priorité**
    44Pouvoir figer les choix dans la gestion des restrictions par rubriques
     5
     6**2- Gestion des contenus par rubrique**
     7Pouvoir gérer le cas où un rédacteur décoche toutes les cases : du coup on ne retrouve l'objet éditorial que via  le menu Édition -> Objets
    58
    69**2- Utiliser le plugin Declarer Parent**
Note: See TracChangeset for help on using the changeset viewer.