[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / selectionner.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
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 /**
14 * Gestion le l'affichage du sélecteur de rubrique AJAX
15 *
16 * @package SPIP\Core\Rubriques
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 include_spip('inc/filtres');
24
25
26 /**
27 * Affiche un mini-navigateur ajax positionné sur une rubrique
28 *
29 * @uses mini_hier()
30 * @uses construire_selectionner_hierarchie()
31 * @uses inc_plonger_dist()
32 *
33 * @see exec_rechercher_dist()
34 *
35 * @param int $sel
36 * Identifiant de la rubrique
37 * @param string $idom
38 * Identifiant dans le dom de l'élément
39 * @param int $exclus
40 * @param bool $aff_racine
41 * @param bool $recur
42 * @param string $do
43 * Type d'action
44 * @return string
45 * Code HTML
46 **/
47 function inc_selectionner_dist($sel, $idom = "", $exclus = 0, $aff_racine = false, $recur = true, $do = 'aff') {
48
49 if ($recur) {
50 $recur = mini_hier($sel);
51 } else {
52 $sel = 0;
53 }
54
55 if ($aff_racine) {
56 $info = generer_url_ecrire('informer', "type=rubrique&rac=$idom&do=$do&id=");
57 $idom3 = $idom . "_selection";
58
59 $onClick = "jQuery(this).parent().addClass('on');jQuery('#choix_parent_principal .on').removeClass('on'); aff_selection(0, '$idom3', '$info', event);return false;";
60
61 $ondbClick = strtr(str_replace("'", "&#8217;",
62 str_replace('"', "&#34;",
63 textebrut(_T('info_racine_site')))),
64 "\n\r", " ");
65
66 $js_func = $do . '_selection_titre';
67 $ondbClick = "$js_func('$ondbClick',0,'selection_rubrique','id_parent');";
68
69 $aff_racine = "<div class='petite-racine item'>"
70 . "<a href='#'"
71 . "onclick=\""
72 . $onClick
73 . "\"\nondbclick=\""
74 . $ondbClick
75 . $onClick
76 . "\">"
77 . _T("info_racine_site")
78 . "</a></div>";
79 }
80
81 $url_init = generer_url_ecrire('plonger', "rac=$idom&exclus=$exclus&id=0&col=1&do=$do");
82
83 $plonger = charger_fonction('plonger', 'inc');
84 $plonger_r = $plonger($sel, $idom, $recur, 1, $exclus, $do);
85
86 // url completee par la fonction JS onkeypress_rechercher
87 $url = generer_url_ecrire('rechercher', "exclus=$exclus&rac=$idom&do=$do&type=");
88
89 return construire_selectionner_hierarchie($idom, $plonger_r, $aff_racine, $url, 'id_parent', $url_init);
90 }
91
92 /**
93 * Construit le sélectionneur de hierarchie
94 *
95 * @param string $idom
96 * Identifiant dans le dom de l'élément
97 * @param string $liste
98 * @param int $racine
99 * @param string $url
100 * @param string $name
101 * @param string $url_init
102 * @return string
103 * Code HTML
104 **/
105 function construire_selectionner_hierarchie($idom, $liste, $racine, $url, $name, $url_init = '') {
106
107 $idom1 = $idom . "_champ_recherche";
108 $idom2 = $idom . "_principal";
109 $idom3 = $idom . "_selection";
110 $idom4 = $idom . "_col_1";
111 $idom5 = 'img_' . $idom4;
112 $idom6 = $idom . "_fonc";
113
114 return "<div id='$idom'>"
115 . "<a id='$idom6' style='visibility: hidden;'"
116 . ($url_init ? "\nhref='$url_init'" : '')
117 . "></a>"
118 . "<div class='recherche_rapide_parent'>"
119 . http_img_pack("searching.gif", "*",
120 "style='visibility: hidden;float:" . $GLOBALS['spip_lang_right'] . "' id='$idom5'")
121 . ""
122 . "<input style='width: 100px;float:" . $GLOBALS['spip_lang_right'] . ";' type='search' id='$idom1'"
123 // eliminer Return car il provoque la soumission (balise unique)
124 // et eliminer Tab pour la navigation au clavier
125 // ce serait encore mieux de ne le faire que s'il y a encore plusieurs
126 // resultats retournes par la recherche
127 . "\nonkeypress=\"k=event.keyCode;if (k==13 || k==3 || k==9){return false;}\""
128 // lancer la recherche apres le filtrage ci-dessus sauf sur le tab (navigation au clavier)
129 . "\nonkeyup=\"if(event.keyCode==9){return false;};return onkey_rechercher(this.value,"
130 // la destination de la recherche
131 . "'$idom4'"
132 # . "this.parentNode.parentNode.parentNode.parentNode.nextSibling.firstChild.id"
133 . ",'"
134 // l'url effectuant la recherche
135 . $url
136 . "',"
137 // le noeud contenant un gif anime
138 // . "'idom5'"
139 . "this.parentNode.previousSibling.firstChild"
140 . ",'"
141 // la valeur de l'attribut Name a remplir
142 . $name
143 . "','"
144 // noeud invisible memorisant l'URL initiale (pour re-initialisation)
145 . $idom6
146 . "')\""
147 . " />"
148 . "\n</div>"
149 . ($racine ? "<div>$racine</div>" : "")
150 . "<div id='"
151 . $idom2
152 . "'><div id='$idom4'"
153 . " class=''>"
154 . $liste
155 . "</div></div>\n<div id='$idom3'></div></div>\n";
156 }
157
158 /**
159 * Récupère les identifiants de hierarchie d'une rubrique
160 *
161 * @param int $id_rubrique
162 * @return array
163 * Liste de tous les id_parent de la rubrique
164 **/
165 function mini_hier($id_rubrique) {
166
167 $liste = $id_rubrique;
168 $id_rubrique = intval($id_rubrique);
169 while ($id_rubrique = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique = " . $id_rubrique)) {
170 $liste = $id_rubrique . ",$liste";
171 }
172
173 return explode(',', "0,$liste");
174 }