source: spip-zone/_plugins_/polyhierarchie/polyhier_pipeline.php @ 29866

Last change on this file since 29866 was 29866, checked in by cedric@…, 12 years ago

la polyhierarchie pour tous

File size: 4.7 KB
Line 
1<?php
2/*
3 * Plugin Polyhierarchie
4 * (c) 2009 Cedric Morin
5 * Distribue sous licence GPL
6 *
7 */
8
9
10function polyhier_affiche_hierarchie($flux){
11        $objet = $flux['args']['objet'];
12        if (in_array($objet,array('article','rubrique'))){
13                $id_objet = $flux['args']['id_objet'];
14                include_spip('inc/polyhier');
15                $parents = polyhier_get_parents($id_objet,$objet,$serveur='');
16                $out = array();
17                foreach($parents as $p)
18                        $out[] = "[->rubrique$p]";
19                if (count($out)){
20                        $out = implode(', ',$out);
21                        $out = _T('polyhier:label_autres_parents')." ".$out;
22                        $out = PtoBR(propre($out));
23                        $flux['data'] .= "<div id='chemins_transverses'>$out</div>";
24                }
25
26        }
27        return $flux;
28}
29
30
31function polyhier_affiche_droite($flux){
32        if ($flux['args']['exec']=='naviguer'
33                AND $id_rubrique = $flux['args']['id_rubrique']){
34                $flux['data'] .= $test=recuperer_fond("prive/contenu/rubrique-enfants-indirects",$_GET, array('ajax'=>true));
35        }
36        return $flux;
37}
38
39/**
40 * Pipeline pour charger les parents transverses dans le formulaire
41 * d'edition article et rubrique
42 *
43 * @param array $flux
44 * @return array
45 */
46function polyhier_formulaire_charger($flux){
47        $form = $flux['args']['form'];
48        if (
49                ($objet = $flux['data']['_polyhier'] AND in_array($objet,array('article','rubrique')))
50                OR ($objet = substr($form,7) AND in_array($form,array('editer_article','editer_rubrique')))
51                ){
52                $id_table_objet = id_table_objet($objet);
53
54                // on met en tete l'id_parent principal
55                // pour unifier la saisie
56                $flux['data']['parents'] = array("rubrique|".$flux['data']['id_parent']);
57                if ($id_objet = intval($flux['data'][$id_table_objet])){
58                        include_spip('inc/polyhier');
59                        $parents = polyhier_get_parents($id_objet,$objet,$serveur='');
60                        foreach($parents as $p)
61                                $flux['data']['parents'][] = "rubrique|$p";
62                }
63                $flux['data']['_hidden'] .= "<input type='hidden' name='_polyhier' value='$objet' />";
64        }
65        return $flux;
66}
67
68
69/**
70 * Pipeline pour verifier les parents transverses dans le formulaire
71 * d'edition article et rubrique
72 *
73 * @param array $flux
74 * @return array
75 */
76function polyhier_formulaire_verifier($flux){
77        $form = $flux['args']['form'];
78        if ($objet = _request('_polyhier')
79                AND in_array($objet,array('article','rubrique'))){
80                $id_table_objet = id_table_objet($objet);
81
82                // on verifie qu'au moins un parent est present si c'est un article
83                if (!count(_request('parents')) AND $objet=='article'){
84                        $flux['data']['parents'] = _T('polyhier:parent_obligatoire');
85                        set_request('parents',array()); // eviter de revenir au choix initial
86                }
87                // sinon, c'est ok, on rebascule le premier parent[] dans id_parent
88                // ou on est a la racine..
89                else {
90                        $id_parent = _request('parents');
91                        $id_parent = explode('|',is_array($id_parent)?reset($id_parent):"rubrique|0");
92                        set_request('id_parent',intval(end($id_parent)));
93                }
94
95        }
96        return $flux;
97}
98
99/**
100 * Inserer le selecteur de rubriques trasnverses dans les formulaires d'edition
101 * article et rubrique
102 *
103 * @param string $flux
104 * @return string
105 */
106function polyhier_editer_contenu_objet($flux){
107        $args = $flux['args'];
108        $type = $args['type'];
109        if (in_array($type,array('rubrique','article'))){
110
111                $saisie = "<script type='text/javascript'>jQuery(function() {jQuery('li.editer_parent').remove();});</script>";
112                $saisie .= recuperer_fond("formulaires/inc-selecteur-parents",$args['contexte']);
113                if (strpos($flux['data'],'<!--polyhier-->')!==FALSE)
114                        $flux['data'] = preg_replace(',(.*)(<!--polyhier-->),ims',"\\1$saisie\\2",$flux['data'],1);
115                elseif (preg_match(",<li [^>]*class=[\"']editer_(descriptif|virtuel|chapo|liens_sites|texte),Uims",$flux['data'],$regs)){
116                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_".$regs[1]."),Uims",$saisie."\\1",$flux['data'],1);
117                }
118                elseif (strpos($flux['data'],'<!--extra-->')!==FALSE)
119                        $flux['data'] = preg_replace(',(.*)(<!--extra-->),ims',"\\1$saisie\\2",$flux['data'],1);
120                else
121                        $flux['data'] = preg_replace(',(.*)(</fieldset>),ims',"\\1\\\$saisie",$flux['data'],1);
122        }
123        return $flux;
124}
125
126/**
127 * Appliquer les changements de polyhierarchie apres edition d'une rubrique ou
128 * d'un article
129 *
130 * @param array $flux
131 * @return array
132 */
133function polyhier_pre_edition($flux){
134        $objet = $flux['args']['type'];
135        if (_request('_polyhier') AND in_array($objet,array('article','rubrique'))){
136                $id_objet = $flux['args']['id_objet'];
137                $serveur = $flux['args']['serveur'];
138                $id_parents = _request('parents');
139                $id_parent = _request('id_parent');
140                if (!$id_parents)
141                        $id_parents = array();
142
143                $ids = array();
144                foreach($id_parents as $sel){
145                        $sel = explode("|",$sel);
146                        if (reset($sel)=='rubrique')
147                                $ids[] = intval(end($sel));
148                }
149                $id_parents = array_diff($ids,array($id_parent));
150
151                include_spip('inc/polyhier');
152                polyhier_set_parents($id_objet,$objet,$id_parents,$serveur);
153        }
154
155        return $flux;
156}
157?>
Note: See TracBrowser for help on using the repository browser.