PageRenderTime 42ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/balise/url_.php

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