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

Last change on this file since 119887 was 119887, checked in by peetdu@…, 2 years ago

Notice PHP

File size: 7.6 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');
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 * -> Vérifier que l'objet a comme parent une rubrique et si oui, 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                if (!empty($flux['data']['id_parent'])) {
66                        $id_parent = $flux['data']['id_parent'];
67                }
68                else {
69                        $objet = substr($flux['args']['form'], 7); // 'editer_article' -> 'article'
70                        $nom_table      = table_objet_sql($objet); // article -> spip_articles
71                        $tab_rubriques_exclues  = lire_config("lim_rubriques/$objet");
72
73                        if ($tab_rubriques_exclues) {
74                                $nbre_rubriques_autorisees = lim_nbre_rubriques_autorisees($objet);
75
76                                // Cas #0 : voir TODO's
77                                // if ($nbre_rubriques_autorisees == 0) {
78                                //      debug('Cas #0');
79                                //      $id_parent = '0';
80                                // }
81
82                                if ($nbre_rubriques_autorisees == 1) { // Cas #1.1
83                                        $tab_rubrique_choisie = lim_publierdansrubriques($objet);
84                                        $id_parent = implode($tab_rubrique_choisie);
85                                }
86
87                                if ($nbre_rubriques_autorisees >= 2) { // Cas #1.2
88                                        $id_parent = '';
89                                }
90                        } else { // Cas #2
91                                // ici dans l'idéal, il faudrait utiliser l'API du plugin Declarer_parent
92                                $trouver_table = charger_fonction('trouver_table', 'base');
93                                $desc = $trouver_table($nom_table);
94                                if (isset($desc['field']['id_rubrique'])) {
95                                        $id_parent = '';
96                                }
97                        }
98                }
99
100                if (isset($id_parent)) {
101                        $flux['data']['id_parent'] = $id_parent;
102                }
103        }
104
105        return $flux;
106}
107
108/**
109 * Gestion des contenus par rubrique :
110 * Impossible de CREER ou DEPLACER un objet dans une rubrique interdite par la configuration choisie dans exec=configurer_lim_rubriques
111 * 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.
112 *
113 * @param array $flux
114 * @return array $flux
115 *     le flux data complété ou non d'un message d'erreur
116**/
117function lim_formulaire_verifier($flux) {
118        // 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.
119        if (strncmp($flux['args']['form'], 'editer_', 7) !== 0 OR is_null(lire_config('lim_objets'))) {
120                return $flux;
121        }
122
123        $objet = substr($flux['args']['form'], 7); // 'editer_objet' devient 'objet'
124        $nom_table      = table_objet_sql($objet);
125        $tableau_tables_lim     = explode(',', lire_config('lim_objets'));
126
127        if (in_array($nom_table, $tableau_tables_lim)) {
128                include_spip('inc/autoriser');
129                $faire = 'creer'.$objet.'dans';
130
131                $id_objet = $flux['args']['args'][0];
132                if (is_numeric($id_objet)) {    // c'est donc une modification,
133
134                        // récupérer l'id_rubrique actuel de l'objet
135                        // note : dans l'idéal, il faudrait utiliser le plugin déclarer parent ici
136                        $where = id_table_objet($objet).'='.$id_objet;
137                        $trouver_table = charger_fonction('trouver_table', 'base');
138                        $desc = $trouver_table($nom_table);
139                        if (isset($desc['field']['id_rubrique'])) {
140                                $id_rub_en_cours = sql_getfetsel('id_rubrique', $nom_table, $where);
141                        }
142
143                        // si c'est un déplacement vers une autre rubrique, on vérifie
144                        if (isset($id_rub_en_cours) and $id_rub_en_cours !=_request('id_parent')) {
145                                if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
146                                        $flux['data']['id_parent'] = _T('lim:info_deplacer_dans_rubrique_non_autorise');
147                                }
148                        }
149                }
150                else { //c'est une création
151                        // en fait, cela ne sert à rien...snif...à cause de /echafaudage qui intercepte les créations avant le CVT (?!).
152                        // if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
153                        //      $flux['data']['id_parent'] = _T('lim:info_creer_dans_rubrique_non_autorise');
154                }
155        }
156
157        return $flux;
158}
159
160/**
161 * Gestion des contenus par rubrique :
162 * masquer l'input id_parent si la config de l’objet renvoie une seule rubrique dans laquelle publier
163 *
164 * @param array $flux
165 * @return array $flux
166 */
167function lim_formulaire_fond($flux) {
168        // 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.
169        if (strncmp($flux['args']['form'], 'editer_', 7) !== 0 OR is_null(lire_config('lim_objets'))) {
170                return $flux;
171        }
172
173        $objet = substr($flux['args']['form'], 7); // 'editer_objet' devient 'objet'
174        if (lim_nbre_rubriques_autorisees($objet) <= 1){
175                $flux['data'] .= "<style>.editer.editer_parent, .editer.editer_rubrique {display:none}</style>";
176        }
177
178        return $flux;
179}
180
181/**
182 * Gestion de la desactivation de l'affichage de certain champs dans le formulaire Editer Auteur
183 * Inserer le JS qui gére l'affichage ou non des champs dans certains formulaires historiques
184 * juste le formulaire Auteur
185 *
186 * @param array $flux
187 * @return array
188 */
189function lim_recuperer_fond($flux) {
190        if ($flux['args']['fond'] == "formulaires/editer_auteur") {
191                $ajout_script = recuperer_fond('prive/squelettes/inclure/lim');
192                $flux['data']['texte'] = str_replace('</form>', '</form>'. $ajout_script, $flux['data']['texte']);
193        }
194        return $flux;
195}
196
197/**
198 * Gestion des contenus par rubrique :
199 * lors de la création d'une rubrique, mettre la config à la bonne valeur pour les objets "figé"
200 * Autrement dit, désactiver la possibilité de publier les objets dits "figé"" dans cette nouvelle rubrique
201 *
202 * @param array $flux
203 * @return array $flux
204 */
205function lim_post_insertion($flux) {
206        if (isset($flux['args']['table']) 
207                and $flux['args']['table'] == 'spip_rubriques'
208        ) {
209                $id_rubrique = $flux['args']['id_objet'];
210                include_spip('inc/config');
211                if ($tables_objet = lire_config('lim/objets_fige')) {
212                        foreach ($tables_objet as $table) {
213                                $objet_type = objet_type($table);
214                                $valeurs = lire_config("lim_rubriques/$objet_type");
215                                if ($valeurs) {
216                                        $valeurs[] = $id_rubrique;
217                                        ecrire_config("lim_rubriques/$objet_type", $valeurs);
218                                }
219                        }
220                }
221        }
222
223        return $flux;
224}
Note: See TracBrowser for help on using the repository browser.