source: spip-zone/_plugins_/lim/trunk/lim_pipelines.php @ 118254

Last change on this file since 118254 was 118254, checked in by peetdu@…, 3 months ago

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

File size: 5.7 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Lim
4 *
5 * @plugin     Lim
6 * @copyright  2015
7 * @author     Pierre Miquel
8 * @licence    GNU/GPL
9 * @package    SPIP\Lim\Pipelines
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16include_spip('inc/lim_api');
17include_spip('inc/config');
18
19/**
20 * gestion forums public et pétitions : supprime ou non le bloc en fonction de la demande
21 *
22 * @param array $flux
23 * @return array $flux
24 *     le flux data remanié
25**/
26function lim_afficher_config_objet($flux) {
27        $type = $flux['args']['type'];
28        if ($type == 'article' AND !empty($flux['data'])) {
29
30                $tab_data = explode("<div class='ajax'>", $flux['data']);
31                $tab_data[1] = "<div class='ajax'>".$tab_data[1];
32                $tab_data[2] = "<div class='ajax'>".$tab_data[2];
33
34                if ( strpos($tab_data[1], 'formulaire_activer_forums') AND lire_config('forums_publics') == 'non' AND lire_config('lim/forums_publics') == 'on' ) {
35                        $tab_data[1] = '';
36                }
37                if ( strpos($tab_data[2], 'formulaire_activer_petition') AND lire_config('lim/petitions') == 'on') {
38                        $tab_data[2] = '';
39                }
40                $flux['data'] = $tab_data[1].$tab_data[2];
41        }
42        return $flux;
43}
44
45/**
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".
48 *
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
55 *
56 * @param array $flux
57 * @return array $flux
58 *     le flux data complété par une valeur de id_parent
59**/
60function lim_formulaire_charger($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;
93        }
94
95        return $flux;
96}
97
98/**
99 * Gestion des contenus par rubrique :
100 * Impossible de CREER ou DEPLACER un objet dans une rubrique interdite par la configuration choisie dans exec=configurer_lim_rubriques
101 * exception : possibilité de modifier un objet si celui-ci est maintenant dans une rubrique où il est interdit de créer ce type d'objet.
102 *
103 * @param array $flux
104 * @return array $flux
105 *     le flux data complété ou non d'un message d'erreur
106**/
107function lim_formulaire_verifier($flux) {
108        // 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.
109        if (strncmp($flux['args']['form'], 'editer_', 7) !== 0 OR is_null(lire_config('lim_objets'))) {
110                return $flux;
111        }
112       
113        $objet = substr($flux['args']['form'], 7); // 'editer_objet' devient 'objet'
114        $nom_table      = table_objet_sql($objet);
115        $tableau_tables_lim     = explode(',', lire_config('lim_objets'));
116
117        if (in_array($nom_table, $tableau_tables_lim)) {
118                include_spip('inc/autoriser');
119                $faire = 'creer'.$objet.'dans';
120               
121                $id_objet = $flux['args']['args'][0];
122                if (is_numeric($id_objet)) {    // c'est donc une modification,
123
124                        // récupérer l'id_rubrique actuel de l'objet
125                        // note : dans l'idéal, il faudrait utiliser le plugin déclarer parent ici
126                        $where = id_table_objet($objet).'='.$id_objet;
127                        $trouver_table = charger_fonction('trouver_table', 'base');
128                        $desc = $trouver_table($nom_table);
129                        if (isset($desc['field']['id_rubrique'])) {
130                                $id_rub_en_cours = sql_getfetsel('id_rubrique', $nom_table, $where);
131                        }
132
133                        // si c'est un déplacement vers une autre rubrique, on vérifie
134                        if (isset($id_rub_en_cours) and $id_rub_en_cours !=_request('id_parent')) {
135                                if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
136                                        $flux['data']['id_parent'] = _T('lim:info_deplacer_dans_rubrique_non_autorise');
137                                }
138                        }
139                }
140                else { //c'est une création
141                        // en fait, cela ne sert à rien...snif...à cause de /echafaudage qui intercepte les créations avant le CVT (?!).
142                        // if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
143                        //      $flux['data']['id_parent'] = _T('lim:info_creer_dans_rubrique_non_autorise');
144                }
145        }
146
147        return $flux;
148}
149
150/**
151 * Gestion de la desactivation de l'affichage de certain champs dans le formulaire Editer Auteur
152 * Inserer le JS qui gére l'affichage ou non des champs dans certains formulaires historiques
153 * juste le formulaire Auteur
154 *
155 * @param array $flux
156 * @return array
157 */
158function lim_recuperer_fond($flux) {
159        if ($flux['args']['fond'] == "formulaires/editer_auteur") {
160                $ajout_script = recuperer_fond('prive/squelettes/inclure/lim');
161                $flux['data']['texte'] = str_replace('</form>', '</form>'. $ajout_script, $flux['data']['texte']);
162        }
163        return $flux;
164}
Note: See TracBrowser for help on using the repository browser.