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

Last change on this file since 113672 was 113672, checked in by root, 4 months ago

Upsss

File size: 5.8 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 : 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)
50 *
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é.
56 *
57 * @param array $flux
58 * @return array $flux
59 *     le flux data complété par un input hidden 'id_parent' avec la bonne valeur
60**/
61function 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;
65        }
66
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        }
81        return $flux;
82}
83
84/**
85 * Gestion des contenus par rubrique :
86 * Impossible de CREER ou DEPLACER un objet dans une rubrique interdite par la configuration choisie dans exec=configurer_lim_rubriques
87 * 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.
88 *
89 * @param array $flux
90 * @return array $flux
91 *     le flux data complété ou non d'un message d'erreur
92**/
93function lim_formulaire_verifier($flux) {
94        // 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.
95        if (strncmp($flux['args']['form'], 'editer_', 7) !== 0 OR is_null(lire_config('lim_objets'))) {
96                return $flux;
97        }
98       
99        $objet = substr($flux['args']['form'], 7); // 'editer_objet' devient 'objet'
100        $nom_table      = table_objet_sql($objet);
101        $tableau_tables_lim     = explode(',', lire_config('lim_objets'));
102
103        if (in_array($nom_table, $tableau_tables_lim)) {
104                include_spip('inc/autoriser');
105                $faire = 'creer'.$objet.'dans';
106               
107                $id_objet = $flux['args']['args'][0];
108                if (is_numeric($id_objet)) {    // c'est donc une modification,
109
110                        // récupérer l'id_rubrique actuel de l'objet
111                        // note : dans l'idéal, il faudrait utiliser le plugin déclarer parent ici
112                        $where = id_table_objet($objet).'='.$id_objet;
113                        switch ($objet) {
114                                case 'rubrique':
115                                        $id_rub_en_cours = sql_getfetsel('id_parent', $nom_table, $where);
116                                        break;
117                                case 'document':
118                                        // rien à faire ici
119                                        break;
120                                default:
121                                        $id_rub_en_cours = sql_getfetsel('id_rubrique', $nom_table, $where);
122                                        break;
123                        }
124
125                        // si c'est un déplacement vers une autre rubrique, on vérifie
126                        if (isset($id_rub_en_cours) and $id_rub_en_cours !=_request('id_parent')) {
127                                if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
128                                        $flux['data']['id_parent'] = _T('lim:info_deplacer_dans_rubrique_non_autorise');
129                                }
130                        }
131                }
132                else { //c'est une création
133                        // en fait, cela ne sert à rien...snif...à cause de /echafaudage qui intercepte les créations avant le CVT (?!).
134                        // if (!autoriser($faire, 'rubrique', _request('id_parent'))) {
135                        //      $flux['data']['id_parent'] = _T('lim:info_creer_dans_rubrique_non_autorise');
136                }
137        }
138
139        return $flux;
140}
141
142/**
143 * Gestion de la desactivation de l'affichage de certain champs dans le formulaire Editer Auteur
144 * Inserer le JS qui gére l'affichage ou non des champs dans certains formulaires historiques
145 * juste le formulaire Auteur
146 *
147 * @param array $flux
148 * @return array
149 */
150function lim_recuperer_fond($flux) {
151        if ($flux['args']['fond'] == "formulaires/editer_auteur") {
152                $ajout_script = recuperer_fond('prive/squelettes/inclure/lim');
153                $flux['data']['texte'] = str_replace('</form>', '</form>'. $ajout_script, $flux['data']['texte']);
154        }
155        return $flux;
156}
Note: See TracBrowser for help on using the repository browser.