Mise en route du suivi.
[aidenligne_francais_universite.git] / ecrire / inc / chercher_rubrique.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 define('_SPIP_SELECT_RUBRIQUES', 20); /* mettre 100000 pour desactiver ajax */
16
17 //
18 // Selecteur de rubriques pour l'espace prive
19 // En entree :
20 // - l'id_rubrique courante (0 si NEW)
21 // - le type d'objet a placer (une rubrique peut aller a la racine
22 // mais pas dans elle-meme, les articles et sites peuvent aller
23 // n'importe ou (defaut), et les breves dans les secteurs.
24 // $idem : en mode rubrique = la rubrique soi-meme
25 // http://doc.spip.org/@inc_chercher_rubrique_dist
26 function inc_chercher_rubrique_dist ($id_rubrique, $type, $restreint, $idem=0) {
27 // Mode sans Ajax :
28 // - soit parce que le cookie ajax n'est pas la
29 // - soit parce qu'il y a peu de rubriques
30 if (_SPIP_AJAX < 1
31 OR $type == 'breve'
32 OR spip_num_rows(
33 spip_query("SELECT id_rubrique FROM spip_rubriques LIMIT ".intval(_SPIP_SELECT_RUBRIQUES+1))) < _SPIP_SELECT_RUBRIQUES)
34 return selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem);
35
36 else
37 return selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem);
38
39 }
40
41 // compatibilite pour extensions qui utilisaient l'ancien nom
42 $GLOBALS['selecteur_rubrique'] = 'inc_chercher_rubrique_dist';
43
44 // http://doc.spip.org/@style_menu_rubriques
45 function style_menu_rubriques($i) {
46 global $browser_name, $browser_version;
47 global $couleur_claire, $spip_lang_left;
48
49 $espace = '';
50 if (eregi("mozilla", $browser_name)) {
51 $style = "padding-$spip_lang_left: 16px; "
52 . "margin-$spip_lang_left: ".(($i-1)*16)."px;";
53 } else {
54 $style = '';
55 for ($count = 0; $count <= $i; $count ++)
56 $espace .= "&nbsp;&nbsp;&nbsp;&nbsp;";
57 }
58 switch ($i) {
59 case 1:
60 $espace= "";
61 $style .= "font-weight: bold;";
62 break;
63 case 2:
64 $style .= "color: #202020;";
65 break;
66 case 3:
67 $style .= "color: #404040;";
68 break;
69 case 4:
70 $style .= "color: #606060;";
71 break;
72 case 5:
73 $style .= "color: #808080;";
74 break;
75 default:
76 $style .= "color: #A0A0A0;";
77 break;
78 }
79
80 if ($i==1) {
81 $style .= "background-image: url(" . _DIR_IMG_PACK. "secteur-12.gif);";
82 $style .= "background-color: $couleur_claire;";
83 $style .= "font-weight: bold;";
84 }
85 else if ($i==2) {
86 $style .= "border-bottom: 1px solid $couleur_claire;";
87 $style .= "font-weight: bold;";
88 }
89
90 if ($style) $style = " style='$style'";
91
92 return array($style,$espace);
93 }
94
95 // http://doc.spip.org/@sous_menu_rubriques
96 function sous_menu_rubriques($id_rubrique, $root, $niv, &$data, &$enfants, $exclus, $restreint, $type) {
97 global $browser_name, $browser_version;
98 static $decalage_secteur;
99
100 // Si on a demande l'exclusion ne pas descendre dans la rubrique courante
101 if ($exclus > 0
102 AND $root == $exclus) return '';
103
104 // en fonction du niveau faire un affichage plus ou moins kikoo
105
106 // selected ?
107 $selected = ($root == $id_rubrique) ? ' selected="selected"' : '';
108
109 // class='selec_rub' sauf pour contourner le bug MSIE / MacOs 9.0
110 if (!($browser_name == "MSIE" AND floor($browser_version) == "5"))
111 $class = " class='selec_rub'";
112
113 // le style en fonction de la profondeur
114 list($style,$espace) = style_menu_rubriques($niv);
115
116 // creer l'<option> pour la rubrique $root
117 $r = '';
118 if (isset($data[$root])) # pas de racine sauf pour les rubriques
119 {
120 $r .= "<option$selected value='$root'$class$style>$espace"
121 .$data[$root]
122 .'</option>'."\n";
123 }
124
125 // et le sous-menu pour ses enfants
126 $sous = '';
127 if (isset($enfants[$root]))
128 foreach ($enfants[$root] as $sousrub)
129 $sous .= sous_menu_rubriques($id_rubrique, $sousrub,
130 $niv+1, $data, $enfants, $exclus, $restreint, $type);
131
132 // si l'objet a deplacer est publie, verifier qu'on a acces aux rubriques
133 if ($restreint AND !autoriser('publierdans','rubrique',$root))
134 return $sous;
135
136 // sauter un cran pour les secteurs (sauf premier)
137 if ($niv == 1
138 AND $decalage_secteur++
139 AND $type != 'breve')
140 $r = "<option value='$root'></option>\n".$r;
141
142 // et voila le travail
143 return $r.$sous;
144 }
145
146 // Le selecteur de rubriques en mode classique (menu)
147 // http://doc.spip.org/@selecteur_rubrique_html
148 function selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem=0) {
149 $data = array();
150 if ($type == 'rubrique')
151 $data[0] = _T('info_racine_site');
152 if ($type == 'auteur')
153 $data[0] = '&nbsp;'; # premier choix = neant (rubriques restreintes)
154
155 //
156 // creer une structure contenant toute l'arborescence
157 //
158
159 $q = spip_query("SELECT id_rubrique, id_parent, titre, statut, lang, langue_choisie FROM spip_rubriques " . ($type == 'breve' ? 'WHERE id_parent=0 ' : '') . "ORDER BY 0+titre,titre");
160 while ($r = spip_fetch_array($q)) {
161 if (autoriser('voir','rubrique',$r['id_rubrique'])){
162 // titre largeur maxi a 50
163 $titre = couper(supprimer_tags(typo(extraire_multi($r['titre']
164 )))." ", 50);
165 if ($GLOBALS['meta']['multi_rubriques'] == 'oui'
166 AND ($r['langue_choisie'] == "oui" OR $r['id_parent'] == 0))
167 $titre .= ' ['.traduire_nom_langue($r['lang']).']';
168 $data[$r['id_rubrique']] = $titre;
169 $enfants[$r['id_parent']][] = $r['id_rubrique'];
170 if ($id_rubrique == $r['id_rubrique']) $id_parent = $r['id_parent'];
171 }
172 }
173
174
175 $opt = sous_menu_rubriques($id_rubrique,0, 0,$data,$enfants,$idem, $restreint, $type);
176 $att = " id='id_parent' name='id_parent'\nstyle='font-size: 90%; width: 99%; max-height: 24px;' class='verdana1'";
177
178 if (preg_match(',^<option[^<>]*value=.(\d*).[^<>]*>([^<]*)</option>$,',$opt,$r))
179 $r = "<input$att type='hidden' value='" . $r[1] . "' />" . $r[2] ;
180 else
181 $r = "<select$att size='1'>\n$opt</select>\n";
182
183 # message pour neuneus (a supprimer ?)
184 # if ($type != 'auteur' AND $type != 'breve')
185 # $r .= "\n<br />"._T('texte_rappel_selection_champs');
186
187 return $r;
188 }
189
190 // http://doc.spip.org/@selecteur_rubrique_ajax
191 function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
192
193 ## $restreint indique qu'il faut limiter les rubriques affichees
194 ## aux rubriques editables par l'admin restreint... or, ca ne marche pas.
195 ## Pour la version HTML c'est bon (cf. ci-dessus), mais pour l'ajax...
196 ## je laisse ca aux specialistes de l'ajax & des admins restreints
197 ## note : toutefois c'est juste un pb d'interface, car question securite
198 ## la verification est faite a l'arrivee des donnees (Fil)
199
200 if ($id_rubrique)
201 list($titre) = spip_fetch_array(spip_query("SELECT titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"), SPIP_NUM);
202 else if ($type == 'auteur')
203 $titre = '&nbsp;';
204 else
205 $titre = _T('info_racine_site');
206
207 $titre = str_replace('&amp;', '&', entites_html(textebrut(typo($titre))));
208 $init = " disabled='disabled' type='text' value=\"" . $titre . '" style=\'width:300px;\'';
209
210 $url = generer_url_ecrire('selectionner',"id=$id_rubrique&type=$type" . (!$idem ? '' : ("&exclus=$idem&racine=" . ($restreint ? 'non' : 'oui'))));
211
212 return construire_selecteur($url, '', 'selection_rubrique', 'id_parent', $init, $id_rubrique);
213 }
214
215 // construit un bloc comportant une icone clicable avec image animee a cote
216 // pour charger en Ajax du code a mettre sous cette icone.
217 // Attention: changer le onclick si on change le code Html.
218 // (la fonction JS charger_node ignore l'attribut id qui ne sert en fait pas;
219 // getElement en mode Ajax est trop couteux).
220
221 // http://doc.spip.org/@construire_selecteur
222 function construire_selecteur($url, $js, $idom, $name, $init='', $id=0)
223 {
224 $icone = ($idom == 'selection_auteur') ? 'message.gif' : 'loupe.png';
225 return "<table width='100%'><tr><td style='width: 45px'><a onclick=\""
226 . $js
227 . "return charger_node_url_si_vide('"
228 . $url
229 . "', this.parentNode.parentNode.parentNode.parentNode.nextSibling, this.nextSibling,'',event)\"><img src='"
230 . _DIR_IMG_PACK
231 . $icone
232 . "' style='vertical-align: middle;' alt=' ' /></a><img src='"
233 . _DIR_IMG_PACK
234 . "searching.gif' id='img_"
235 . $idom
236 . "' style='visibility: hidden;' alt='*' /></td><td>"
237 . "<input id='titreparent' name='titreparent'"
238 . $init
239 . " />"
240 . "<input type='hidden' id='$name' name='$name' value='"
241 . $id
242 . "' /></td></tr></table><div id='"
243 . $idom
244 . "' style='display: none;'></div>";
245 }
246 ?>