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

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

compatibilité avec pages uniques.
on regarde simplement si l'id_parent princpal est cohérent : s'il est inférieur à zéro on n'applique pas polyhiérarchie.

File size: 5.1 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                // On ne fait rien si l'id_parent principal est incoherent (exemple : compat pages uniques)
53                if ($flux['data']['id_parent'] < 0) return $flux;
54               
55                $id_table_objet = id_table_objet($objet);
56
57                // on met en tete l'id_parent principal
58                // pour unifier la saisie
59                $flux['data']['parents'] = array("rubrique|".$flux['data']['id_parent']);
60                if ($id_objet = intval($flux['data'][$id_table_objet])){
61                        include_spip('inc/polyhier');
62                        $parents = polyhier_get_parents($id_objet,$objet,$serveur='');
63                        foreach($parents as $p)
64                                $flux['data']['parents'][] = "rubrique|$p";
65                }
66                $flux['data']['_hidden'] .= "<input type='hidden' name='_polyhier' value='$objet' />";
67        }
68        return $flux;
69}
70
71
72/**
73 * Pipeline pour verifier les parents transverses dans le formulaire
74 * d'edition article et rubrique
75 *
76 * @param array $flux
77 * @return array
78 */
79function polyhier_formulaire_verifier($flux){
80        $form = $flux['args']['form'];
81        if ($objet = _request('_polyhier')
82                AND in_array($objet,array('article','rubrique'))){
83                // On ne fait rien si l'id_parent principal est incoherent (exemple : compat pages uniques)
84                if (_request('id_parent') < 0) return $flux;
85               
86                $id_table_objet = id_table_objet($objet);
87
88                // on verifie qu'au moins un parent est present si c'est un article
89                if (!count(_request('parents')) AND $objet=='article'){
90                        $flux['data']['parents'] = _T('polyhier:parent_obligatoire');
91                        set_request('parents',array()); // eviter de revenir au choix initial
92                }
93                // sinon, c'est ok, on rebascule le premier parent[] dans id_parent
94                // ou on est a la racine..
95                else {
96                        $id_parent = _request('parents');
97                        $id_parent = explode('|',is_array($id_parent)?reset($id_parent):"rubrique|0");
98                        set_request('id_parent',intval(end($id_parent)));
99                }
100
101        }
102        return $flux;
103}
104
105/**
106 * Inserer le selecteur de rubriques trasnverses dans les formulaires d'edition
107 * article et rubrique
108 *
109 * @param string $flux
110 * @return string
111 */
112function polyhier_editer_contenu_objet($flux){
113        $args = $flux['args'];
114        $type = $args['type'];
115        if (in_array($type,array('rubrique','article'))){
116                // On ne fait rien si l'id_parent principal est incoherent (exemple : compat pages uniques)
117                if ($args['contexte']['id_parent'] < 0) return $flux;
118               
119                $saisie = "<script type='text/javascript'>jQuery(function() {jQuery('li.editer_parent').remove();});</script>";
120                $saisie .= recuperer_fond("formulaires/inc-selecteur-parents",$args['contexte']);
121                if (strpos($flux['data'],'<!--polyhier-->')!==FALSE)
122                        $flux['data'] = preg_replace(',(.*)(<!--polyhier-->),ims',"\\1$saisie\\2",$flux['data'],1);
123                elseif (preg_match(",<li [^>]*class=[\"']editer_(descriptif|virtuel|chapo|liens_sites|texte),Uims",$flux['data'],$regs)){
124                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_".$regs[1]."),Uims",$saisie."\\1",$flux['data'],1);
125                }
126                elseif (strpos($flux['data'],'<!--extra-->')!==FALSE)
127                        $flux['data'] = preg_replace(',(.*)(<!--extra-->),ims',"\\1$saisie\\2",$flux['data'],1);
128                else
129                        $flux['data'] = preg_replace(',(.*)(</fieldset>),ims',"\\1\\\$saisie",$flux['data'],1);
130        }
131        return $flux;
132}
133
134/**
135 * Appliquer les changements de polyhierarchie apres edition d'une rubrique ou
136 * d'un article
137 *
138 * @param array $flux
139 * @return array
140 */
141function polyhier_pre_edition($flux){
142        $objet = $flux['args']['type'];
143        if (_request('_polyhier') AND in_array($objet,array('article','rubrique'))){
144                $id_objet = $flux['args']['id_objet'];
145                $serveur = $flux['args']['serveur'];
146                $id_parents = _request('parents');
147                $id_parent = _request('id_parent');
148                if (!$id_parents)
149                        $id_parents = array();
150
151                $ids = array();
152                foreach($id_parents as $sel){
153                        $sel = explode("|",$sel);
154                        if (reset($sel)=='rubrique')
155                                $ids[] = intval(end($sel));
156                }
157                $id_parents = array_diff($ids,array($id_parent));
158
159                include_spip('inc/polyhier');
160                polyhier_set_parents($id_objet,$objet,$id_parents,$serveur);
161        }
162
163        return $flux;
164}
165?>
Note: See TracBrowser for help on using the repository browser.