PageRenderTime 37ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/z-core/zcore_pipelines.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 208 lines | 113 code | 22 blank | 73 comment | 18 complexity | 8a0504c28986e52219f5587803976f80 MD5 | raw file
  1. <?php
  2. /*
  3. * Plugin Z-core
  4. * (c) 2008-2010 Cedric MORIN Yterium.net
  5. * Distribue sous licence GPL
  6. *
  7. */
  8. if (!defined("_ECRIRE_INC_VERSION")) return;
  9. // definition des balises et filtres boites
  10. include_spip('inc/filtres_boites');
  11. // verifier une seule fois que l'on peut utiliser APL si demande
  12. if (defined('_Z_AJAX_PARALLEL_LOAD')) {
  13. // les pages APL contiennent un <noscript>
  14. // avec une meta refresh sur self()+var_zapl=non
  15. // ainsi, les clients sans javascript rechargent la page,
  16. // se voient poser un cookie, et voient ensuite le site sans APL
  17. if (_request('var_zapl')=='non') {
  18. include_spip('inc/cookie');
  19. spip_setcookie('no_zapl',$_COOKIE['no_zapl']='no_zapl');
  20. }
  21. if (!isset($_COOKIE['no_zapl'])
  22. AND !_IS_BOT
  23. AND !_request('var_zajax')
  24. AND _request('var_mode')!=="debug"
  25. AND $_SERVER['REQUEST_METHOD'] == 'GET'
  26. ) {
  27. define('_Z_AJAX_PARALLEL_LOAD_OK',true);
  28. $GLOBALS['marqueur'] .= ":Zapl";
  29. }
  30. }
  31. /**
  32. * Inutilise mais permet le chargement de ce fichier avant le decodage des urls
  33. * et l'utilisation de _DEFINIR_CONTEXTE_TYPE
  34. * @param <type> $flux
  35. * @return <type>
  36. */
  37. function zcore_declarer_url_objets($flux){
  38. return $flux;
  39. }
  40. /**
  41. * Fonction Page automatique a partir de contenu/page-xx
  42. *
  43. * @param array $flux
  44. * @return array
  45. */
  46. function zcore_styliser($flux){
  47. // dans les futures versions de SPIP on pourra faire simplement un define('_ZPIP',true);
  48. if (!test_espace_prive() AND !defined('_ZCORE_EXCLURE_PATH')) {
  49. $styliser_par_z = charger_fonction('styliser_par_z','public');
  50. $flux = $styliser_par_z($flux);
  51. }
  52. return $flux;
  53. }
  54. function zcore_recuperer_fond($flux){
  55. static $is_404 = false;
  56. static $z_contenu;
  57. if ($is_404){
  58. if ($flux['args']['fond']==="structure"){
  59. $is_404 = false; // pas de risque de reentrance
  60. $code = "404 Not Found";
  61. $contexte_inclus = array(
  62. 'erreur' => "",
  63. 'code' => $code,
  64. 'lang' => $GLOBALS['spip_lang']
  65. );
  66. $flux['data'] = evaluer_fond('404', $contexte_inclus);
  67. $flux['data']['status'] = intval($code); // pas remonte vers la page mais un jour peut etre...
  68. // du coup on envoie le status a la main
  69. include_spip("inc/headers");
  70. http_status(intval($code));
  71. }
  72. }
  73. elseif (!test_espace_prive()){
  74. if (!isset($z_contenu)) {
  75. if (!function_exists("z_blocs"))
  76. $styliser_par_z = charger_fonction('styliser_par_z','public');
  77. $z_blocs = z_blocs(test_espace_prive());
  78. $z_contenu = reset($z_blocs); // contenu par defaut
  79. $z_nlength = strlen($z_contenu);
  80. }
  81. $fond = $flux['args']['fond'];
  82. if ($z_contenu
  83. // eliminer rapidement la plupart des fond
  84. AND strncmp($fond,"$z_contenu/",$z_nlength+1)==0
  85. // verifier plus en detail que c'est bien le bon fond
  86. AND $dir = explode('/',$fond)
  87. AND count($dir)==2 // pas un sous repertoire
  88. AND $dir = reset($dir)
  89. AND $dir == $z_contenu // c'est le bloc de contenu principal
  90. AND !strlen(trim($flux['data']['texte']))
  91. ){
  92. $is_404 = true;
  93. }
  94. }
  95. return $flux;
  96. }
  97. /**
  98. * Surcharger les intertires avant que le core ne les utilise
  99. * pour y mettre la class h3
  100. * une seule fois suffit !
  101. *
  102. * @param string $flux
  103. * @return string
  104. */
  105. function zcore_pre_propre($flux){
  106. /* static $init = false;
  107. if (!$init){
  108. $intertitre = $GLOBALS['debut_intertitre'];
  109. $class = extraire_attribut($GLOBALS['debut_intertitre'],'class');
  110. $class = ($class ? " $class":"");
  111. $GLOBALS['debut_intertitre'] = inserer_attribut($GLOBALS['debut_intertitre'], 'class', "h3$class");
  112. foreach($GLOBALS['spip_raccourcis_typo'] as $k=>$v){
  113. $GLOBALS['spip_raccourcis_typo'][$k] = str_replace($intertitre,$GLOBALS['debut_intertitre'],$GLOBALS['spip_raccourcis_typo'][$k]);
  114. }
  115. $init = true;
  116. }*/
  117. return $flux;
  118. }
  119. /**
  120. * Ajouter le inc-insert-head du theme si il existe
  121. *
  122. * @param string $flux
  123. * @return string
  124. */
  125. function zcore_insert_head($flux){
  126. if (find_in_path('inc-insert-head.html')){
  127. $flux .= recuperer_fond('inc-insert-head',array());
  128. }
  129. return $flux;
  130. }
  131. /**
  132. * Ajouter la definition du bloc contenu pour var_zajax
  133. * @param string $flux
  134. * @return string
  135. */
  136. function zcore_insert_head_css($flux){
  137. include_spip('public/styliser_par_z');
  138. $contenu = z_blocs(false);
  139. $contenu = reset($contenu);
  140. $flux = "<script type='text/javascript'>var var_zajax_content='$contenu';</script>" . $flux;
  141. return $flux;
  142. }
  143. //
  144. // fonction standard de calcul de la balise #INTRODUCTION
  145. // mais retourne toujours dans un <p> comme propre
  146. //
  147. // http://doc.spip.org/@filtre_introduction_dist
  148. if (!function_exists('filtre_introduction')){
  149. function filtre_introduction($descriptif, $texte, $longueur, $connect) {
  150. include_spip('public/composer');
  151. $texte = filtre_introduction_dist($descriptif, $texte, $longueur, $connect);
  152. if ($GLOBALS['toujours_paragrapher'] AND strpos($texte,"</p>")===FALSE)
  153. // Fermer les paragraphes ; mais ne pas en creer si un seul
  154. $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
  155. return $texte;
  156. }
  157. }
  158. /**
  159. * Tester la presence sur une page
  160. * @param <type> $p
  161. * @return <type>
  162. */
  163. if (!function_exists('balise_SI_PAGE_dist')){
  164. function balise_SI_PAGE_dist($p) {
  165. $_page = interprete_argument_balise(1,$p);
  166. $p->code = "(((\$Pile[0][_SPIP_PAGE]==(\$zp=$_page)) OR (\$Pile[0]['type-page']==\$zp) OR (\$Pile[0]['composition']==\$zp AND \$Pile[0]['type-page']=='page'))?' ':'')";
  167. $p->interdire_scripts = false;
  168. return $p;
  169. }
  170. }
  171. /**
  172. * balise #CSS
  173. *
  174. */
  175. function balise_CSS_dist($p) {
  176. $_css = interprete_argument_balise(1,$p);
  177. if (!$_css) {
  178. $msg = array('zbug_balise_sans_argument', array('balise' => ' CSS'));
  179. erreur_squelette($msg, $p);
  180. } else {
  181. $p->code = "timestamp(direction_css(trouver_fond($_css)?produire_fond_statique($_css,array('format'=>'css')):find_in_path($_css)))";
  182. }
  183. $p->interdire_scripts = false;
  184. return $p;
  185. }
  186. ?>