[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / balise / url_.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 $_id = interprete_argument_balise(1,$p);
30
31 if (!$_id) {
32 $primary = id_table_objet($type);
33 $_id = champ_sql($primary, $p);
34 }
35
36 return generer_generer_url_arg($type, $p, $_id);
37 }
38
39 function generer_generer_url_arg($type, $p, $_id)
40 {
41 if ($s = trouver_nom_serveur_distant($p)) {
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 # exception des urls de documents sur un serveur distant...
52 if ($type == 'document') {
53 return
54 "quete_meta('adresse_site', $s) . '/' .\n\t" .
55 "quete_meta('dir_img', $s) . \n\t" .
56 "quete_fichier($_id,$s)";
57 }
58 $s = ", '', '', $s, quete_meta('type_urls', $s)";
59 }
60 else
61 $s = ", '', '', true";
62 return "urlencode_1738(generer_url_entite($_id, '$type'$s))";
63 }
64
65
66 // http://doc.spip.org/@balise_URL__dist
67 function balise_URL__dist($p) {
68
69 $nom = $p->nom_champ;
70 if ($nom === 'URL_') {
71 $msg = array('zbug_balise_sans_argument', array('balise' => ' URL_'));
72 erreur_squelette($msg, $p);
73 $p->interdire_scripts = false;
74 return $p;
75 } elseif ($f = charger_fonction($nom, 'balise', true)) {
76 return $f($p);
77 }else {
78 $nom = strtolower($nom);
79 $code = generer_generer_url(substr($nom,4), $p);
80 $code = champ_sql($nom, $p, $code);
81 $p->code = $code;
82 if (!$p->etoile)
83 $p->code = "vider_url($code)";
84 $p->interdire_scripts = false;
85 return $p;
86 }
87 }
88
89 // http://doc.spip.org/@balise_URL_ARTICLE_dist
90 function balise_URL_ARTICLE_dist($p) {
91
92 // Cas particulier des boucles (SYNDIC_ARTICLES)
93 if ($p->type_requete == 'syndic_articles') {
94 $code = champ_sql('url', $p);
95 } else $code = generer_generer_url('article', $p);
96
97 $p->code = $code;
98 if (!$p->etoile)
99 $p->code = "vider_url($code)";
100 $p->interdire_scripts = false;
101 return $p;
102 }
103
104 // http://doc.spip.org/@balise_URL_SITE_dist
105 function balise_URL_SITE_dist($p)
106 {
107 $code = champ_sql('url_site', $p);
108 if (strpos($code, '@$Pile[0]') !== false) {
109 $code = generer_generer_url('site', $p);
110 if ($code === NULL) return NULL;
111 } else {
112 if (!$p->etoile)
113 $code = "calculer_url($code,'','url', \$connect)";
114 }
115 $p->code = $code;
116 $p->interdire_scripts = false;
117 return $p;
118 }
119
120 // Autres balises URL_*, qui ne concernent pas une table
121 // (historique)
122
123 // http://doc.spip.org/@balise_URL_SITE_SPIP_dist
124 function balise_URL_SITE_SPIP_dist($p) {
125 $p->code = "sinon(\$GLOBALS['meta']['adresse_site'],'.')";
126 $p->code = "spip_htmlspecialchars(".$p->code.")";
127 $p->interdire_scripts = false;
128 return $p;
129 }
130
131 //
132 // #URL_PAGE{backend} -> backend.php3 ou ?page=backend selon les cas
133 // Pour les pages qui commencent par "spip_", il faut eventuellement
134 // aller chercher spip_action.php?action=xxxx
135 // Sans argument, #URL_PAGE retourne l'URL courante.
136 // #URL_PAGE* retourne l'URL sans convertir les & en &amp;
137 // http://doc.spip.org/@balise_URL_PAGE_dist
138 function balise_URL_PAGE_dist($p) {
139
140 $code = interprete_argument_balise(1,$p);
141 $args = interprete_argument_balise(2,$p);
142 if ($args == NULL)
143 $args = "''";
144
145 if ($s = trouver_nom_serveur_distant($p)) {
146 // si une fonction de generation des url a ete definie pour ce connect l'utiliser
147 // elle devra aussi traiter le cas derogatoire type=page
148 if (function_exists($f = 'generer_generer_url_'.$s)){
149 if ($args AND $args!=="''") $code .= ", $args";
150 $code = $f('page', $code, $s);
151 return $p;
152 }
153 $s = 'connect=' . addslashes($s);
154 $args = (($args AND $args!=="''") ? "$args . '&$s'" : "'$s'");
155 }
156
157 if (!$code) {
158 $noentities = $p->etoile ? "'&'" : '';
159 $code = "url_de_base() . preg_replace(',^./,', '', self($noentities))";
160 } else{
161 if (!$args) $args = "''";
162 $noentities = $p->etoile ? ", true" : '';
163 $code = "generer_url_public($code, $args$noentities)";
164 }
165 $p->code = $code;
166 spip_log("connect vaut $s ca donne " . $p->code . " args $args");
167
168 #$p->interdire_scripts = true;
169 return $p;
170 }
171
172 //
173 // #URL_ECRIRE{rubriques} -> ecrire/?exec=rubriques
174 // #URL_ECRIRE* meme chose, mais sans convertir les & en &amp;
175 // http://doc.spip.org/@balise_URL_ECRIRE_dist
176 function balise_URL_ECRIRE_dist($p) {
177
178 $code = interprete_argument_balise(1,$p);
179 if (!$code) {
180 $fonc = "''";
181 }
182 else {
183 $fonc = $code;
184 $args = interprete_argument_balise(2,$p);
185 if ($args === NULL) {
186 $args = "''";
187 }
188 $noentities = $p->etoile ? ", true" : '';
189 if (($args != "''") OR $noentities) {
190 $fonc .= ",$args$noentities";
191 }
192 }
193 $p->code = 'generer_url_ecrire(' . $fonc .')';
194 $p->interdire_scripts = false;
195 return $p;
196 }
197
198 //
199 // #URL_ACTION_AUTEUR{converser,arg,redirect} -> ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect
200 //
201 // http://doc.spip.org/@balise_URL_ACTION_AUTEUR_dist
202 function balise_URL_ACTION_AUTEUR_dist($p) {
203 $p->descr['session'] = true;
204
205 $p->code = interprete_argument_balise(1,$p);
206 $args = interprete_argument_balise(2,$p);
207 if ($args != "''" && $args!==NULL)
208 $p->code .= ",".$args;
209 $redirect = interprete_argument_balise(3,$p);
210 if ($redirect != "''" && $redirect!==NULL) {
211 if ($args == "''" || $args===NULL)
212 $p->code .= ",''";
213 $p->code .= ",".$redirect;
214 }
215
216 $p->code = "generer_action_auteur(" . $p->code . ")";
217 $p->interdire_scripts = false;
218 return $p;
219 }
220 ?>