[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / balise / url_.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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 // Les balises URL_$type sont generiques, sauf qq cas particuliers.
16 // Si ces balises sont utilisees pour la base locale,
17 // production des appels a generer_url_entite(id-courant, entite)
18 // Si la base est externe et non geree par SPIP
19 // on retourne NULL pour provoquer leur interpretation comme champ SQL normal.
20 // Si la base est externe et sous SPIP,
21 // on produit l'URL de l'objet si c'est une piece jointe
22 // ou sinon l'URL du site local applique sur l'objet externe
23 // ce qui permet de le voir a travers les squelettes du site local
24 // On communique le type-url distant a generer_url_entite mais il ne sert pas
25 // car rien ne garantit que le .htaccess soit identique. A approfondir
26
27 // http://doc.spip.org/@generer_generer_url
28 function generer_generer_url($type, $p)
29 {
30 $_id = interprete_argument_balise(1,$p);
31
32 if (!$_id) $_id = champ_sql('id_' . $type, $p);
33
34 return generer_generer_url_arg($type, $p, $_id);
35 }
36
37 function generer_generer_url_arg($type, $p, $_id)
38 {
39 $s = $p->id_boucle;
40
41 if ($s !== '' AND $s = $p->boucles[$s]->sql_serveur) {
42
43 // si une fonction de generation des url a ete definie pour ce connect l'utiliser
44 if (function_exists($f = 'generer_generer_url_'.$s)){
45 return $f($type, $_id, $s);
46 }
47 if (!$GLOBALS['connexions'][strtolower($s)]['spip_connect_version']) {
48 return NULL;
49 }
50 $s = _q($s);
51 if ($type == 'document') {
52 return
53 "quete_meta('adresse_site', $s) . '/' .\n\t" .
54 "quete_meta('dir_img', $s) . \n\t" .
55 "quete_fichier($_id,$s)";
56 }
57 $s = ", '', '', $s, quete_meta('type_urls', $s)";
58 }
59 else
60 $s = ", '', '', true";
61 return "urlencode_1738(generer_url_entite($_id, '$type'$s))";
62 }
63
64
65 // http://doc.spip.org/@balise_URL__dist
66 function balise_URL__dist($p) {
67
68 $nom = $p->nom_champ;
69 if ($nom === 'URL_') {
70 $msg = array('zbug_balise_sans_argument', array('balise' => ' URL_'));
71 erreur_squelette($msg, $p);
72 $p->interdire_scripts = false;
73 return $p;
74 } elseif ($f = charger_fonction($nom, 'balise', true)) {
75 return $f($p);
76 }else {
77 $code = champ_sql($nom, $p);
78 if (strpos($code, '@$Pile[0]') !== false) {
79 $nom = strtolower(substr($nom,4));
80 $code = generer_generer_url($nom, $p);
81 if ($code === NULL) return NULL;
82 }
83 if (!$p->etoile)
84 $p->code = "vider_url($code)";
85 $p->interdire_scripts = false;
86 return $p;
87 }
88 }
89
90 // http://doc.spip.org/@balise_URL_ARTICLE_dist
91 function balise_URL_ARTICLE_dist($p) {
92
93 // Cas particulier des boucles (SYNDIC_ARTICLES)
94 if ($p->type_requete == 'syndic_articles') {
95 $code = champ_sql('url', $p);
96 } else $code = generer_generer_url('article', $p);
97
98 $p->code = "vider_url($code)";
99 $p->interdire_scripts = false;
100 return $p;
101 }
102
103 // http://doc.spip.org/@balise_URL_SITE_dist
104 function balise_URL_SITE_dist($p)
105 {
106 $code = champ_sql('url_site', $p);
107 if (strpos($code, '@$Pile[0]') !== false) {
108 $code = generer_generer_url('site', $p);
109 if ($code === NULL) return NULL;
110 } else {
111 if (!$p->etoile)
112 $code = "calculer_url($code,'','url', \$connect)";
113 }
114 $p->code = $code;
115 $p->interdire_scripts = false;
116 return $p;
117 }
118
119 // Autres balises URL_*, qui ne concernent pas une table
120 // (historique)
121
122 // http://doc.spip.org/@balise_URL_SITE_SPIP_dist
123 function balise_URL_SITE_SPIP_dist($p) {
124 $p->code = "sinon(\$GLOBALS['meta']['adresse_site'],'.')";
125 $p->code = "htmlspecialchars(".$p->code.")";
126 $p->interdire_scripts = false;
127 return $p;
128 }
129
130 //
131 // #URL_PAGE{backend} -> backend.php3 ou ?page=backend selon les cas
132 // Pour les pages qui commencent par "spip_", il faut eventuellement
133 // aller chercher spip_action.php?action=xxxx
134 // Sans argument, #URL_PAGE retourne l'URL courante.
135 // #URL_PAGE* retourne l'URL sans convertir les & en &amp;
136 // http://doc.spip.org/@balise_URL_PAGE_dist
137 function balise_URL_PAGE_dist($p) {
138
139 $code = interprete_argument_balise(1,$p);
140 $args = interprete_argument_balise(2,$p);
141
142 $s = !$p->id_boucle ? '' : $p->boucles[$p->id_boucle]->sql_serveur;
143
144 if ($s) {
145 // si une fonction de generation des url a ete definie pour ce connect l'utiliser
146 // elle devra aussi traiter le cas derogatoire type=page
147 if (function_exists($f = 'generer_generer_url_'.$s)){
148 if ($args) $code .= ", $args";
149 $code = $f('page', $code, $s);
150 return $p;
151 }
152 $s = 'connect=' . addslashes($s);
153 $args = $args ? "$args . '&$s'" : "'$s'";
154 }
155 if (!$code) {
156 $noentities = $p->etoile ? "'&'" : '';
157 $code = "url_de_base() . preg_replace(',^./,', '', self($noentities))";
158 } else{
159 if (!$args) $args = "''";
160 $noentities = $p->etoile ? ", true" : '';
161 $code = "generer_url_public($code, $args$noentities)";
162 }
163 $p->code = $code;
164 #$p->interdire_scripts = true;
165 return $p;
166 }
167
168 //
169 // #URL_ECRIRE{naviguer} -> ecrire/?exec=naviguer
170 // #URL_ECRIRE* meme chose, mais sans convertir les & en &amp;
171 // http://doc.spip.org/@balise_URL_ECRIRE_dist
172 function balise_URL_ECRIRE_dist($p) {
173
174 $code = interprete_argument_balise(1,$p);
175 if (!$code)
176 $fonc = "''";
177 else{
178 if (preg_match("/^'[^']*'$/", $code))
179 $fonc = $code;
180 else {$code = "(\$f = $code)"; $fonc = '$f';}
181 $args = interprete_argument_balise(2,$p);
182 if ($args === NULL) $args = "''";
183 $noentities = $p->etoile ? ", true" : '';
184 if (($args != "''") OR $noentities)
185 $fonc .= ",$args$noentities";
186 }
187 $p->code = 'generer_url_ecrire(' . $fonc .')';
188 if ($code)
189 $p->code = "(tester_url_ecrire($code) ?" . $p->code .' : "")';
190 #$p->interdire_scripts = true;
191 return $p;
192 }
193
194 //
195 // #URL_ACTION_AUTEUR{converser,arg,redirect} -> ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect
196 //
197 // http://doc.spip.org/@balise_URL_ACTION_AUTEUR_dist
198 function balise_URL_ACTION_AUTEUR_dist($p) {
199 $p->descr['session'] = true;
200
201 $script = interprete_argument_balise(1,$p);
202 if (!$script OR $script == "''") {
203 $msg = array('zbug_balise_sans_argument',
204 array('balise' => ' URL_ACTION_AUTEUR'));
205 erreur_squelette($msg, $p);
206 } else {
207 $args = interprete_argument_balise(2,$p);
208 if (!$args) $args = "''";
209 $redirect = interprete_argument_balise(3,$p);
210 // cas d'un appel (squelette) avec '' comme valeur de redirection
211 if ($redirect == "''")
212 $redirect = "";
213 if ($redirect)
214 $redirect = ",$redirect";
215 $p->code = "generer_action_auteur($script,$args$redirect)";
216 }
217 $p->interdire_scripts = false;
218 return $p;
219 }
220 ?>