source: spip-zone/_plugins_/z-core/trunk/zcore_pipelines.php @ 118448

Last change on this file since 118448 was 118448, checked in by cedric@…, 9 months ago

eviter une fonction indefinie quand le hit fait que charger du cache et que zcore_pipelines n'est pas charge

File size: 8.0 KB
Line 
1<?php
2/*
3 * Plugin Z-core
4 * (c) 2008-2010 Cedric MORIN Yterium.net
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) {
10        return;
11}
12
13// definition des balises et filtres boites
14include_spip('inc/filtres_boites');
15
16// verifier une seule fois que l'on peut utiliser APL si demande
17if (defined('_Z_AJAX_PARALLEL_LOAD')) {
18        // les pages APL contiennent un <noscript>
19        // avec une meta refresh sur self()+var_zapl=non
20        // ainsi, les clients sans javascript rechargent la page,
21        // se voient poser un cookie, et voient ensuite le site sans APL
22        if (_request('var_zapl') == 'non') {
23                include_spip('inc/cookie');
24                spip_setcookie('no_zapl', $_COOKIE['no_zapl'] = 'no_zapl');
25        }
26        if (!isset($_COOKIE['no_zapl']) AND !_IS_BOT AND !_request('var_zajax') AND _request('var_mode') !== "debug" AND $_SERVER['REQUEST_METHOD'] == 'GET') {
27                define('_Z_AJAX_PARALLEL_LOAD_OK', true);
28                $GLOBALS['marqueur'] = isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] . ":Zapl" : ":Zapl";
29        }
30}
31
32/**
33 * Inutilise mais permet le chargement de ce fichier avant le decodage des urls
34 * et l'utilisation de _DEFINIR_CONTEXTE_TYPE
35 *
36 * @param  <type> $flux
37 *
38 * @return <type>
39 */
40function zcore_declarer_url_objets($flux) {
41        return $flux;
42}
43
44/**
45 * Fonction Page automatique a partir de contenu/page-xx
46 *
47 * @param array $flux
48 *
49 * @return array
50 */
51function zcore_styliser($flux) {
52        // dans les futures versions de SPIP on pourra faire simplement un define('_ZPIP',true);
53        if (!test_espace_prive() AND !defined('_ZCORE_EXCLURE_PATH')) {
54                $styliser_par_z = charger_fonction('styliser_par_z', 'public');
55                $flux = $styliser_par_z($flux);
56        }
57
58        return $flux;
59}
60
61/**
62 * Routage automatique de la 404 si le bloc de contenu est vide
63 * Seul le bloc principal est pris en compte (le premier de la liste)
64 * mais il est possible de personaliser le ou les blocs a prendre en compte pour detecter une 404 :
65 * $GLOBALS['z_blocs_404'] = array('content','aside');
66 * On ne declenchera alors une 404 que si content/xxx et aside/xxx sont vide tous les deux
67 * (attention a ce que la page 404 ait bien un de ces blocs non vide pour eviter une boucle infinie)
68 *
69 * @param array $flux
70 *
71 * @return array
72 */
73function zcore_recuperer_fond_detecter_404($flux) {
74        static $empty_count = 0, $is_404 = false;
75        static $z_blocs_404, $z_blocs_404_nlength, $z_blocs_404_ncount;
76
77        if ($is_404) {
78                if ($flux['args']['fond'] === "structure") {
79                        $is_404 = false; // pas de risque de reentrance
80                        $code = "404 Not Found";
81                        $contexte_inclus = array(
82                                'erreur' => "",
83                                'code' => $code,
84                                'lang' => $GLOBALS['spip_lang'],
85                        );
86
87                        $flux['data'] = evaluer_fond('404', $contexte_inclus);
88                        $flux['data']['status'] = intval($code); // pas remonte vers la page mais un jour peut etre...
89                        // du coup on envoie le status a la main
90                        include_spip("inc/headers");
91                        http_status(intval($code));
92                }
93        } elseif (!test_espace_prive()) {
94                if (!isset($z_blocs_404)) {
95                        if (isset($GLOBALS['z_blocs_404'])) {
96                                $z_blocs_404 = $GLOBALS['z_blocs_404'];
97                                if (is_array($z_blocs_404) AND count($z_blocs_404) == 1) {
98                                        $z_blocs_404 = reset($z_blocs_404);
99                                }
100                        } else {
101                                if (!function_exists("z_blocs")) {
102                                        $styliser_par_z = charger_fonction('styliser_par_z', 'public');
103                                }
104                                $z_blocs = z_blocs(test_espace_prive());
105                                $z_blocs_404 = reset($z_blocs); // contenu par defaut
106                        }
107                        if (is_array($z_blocs_404)) {
108                                $z_blocs_404_ncount = count($z_blocs_404);
109                                $z_blocs_404_nlength = array_map('strlen', $z_blocs_404);
110                        } else {
111                                $z_blocs_404_ncount = 1;
112                                $z_blocs_404_nlength = strlen($z_blocs_404);
113                        }
114                }
115                $fond = $flux['args']['fond'];
116                // verifier rapidement que c'est un des fonds de reference pour la 404 :
117                // le fond commende par nomdudossier/
118                // le fond n'a pas de / suppelementaires (on est au bon niveau)
119                $quick_match = false;
120                if (strpos($fond, "/") !== false AND $z_blocs_404_ncount) {
121                        if ($z_blocs_404_ncount == 1) {
122                                $quick_match = (strncmp($fond, "$z_blocs_404/", $z_blocs_404_nlength + 1) === 0 AND strpos($fond, "/", $z_blocs_404_nlength + 1) === false);
123                        } else {
124                                foreach ($z_blocs_404 as $k => $zb) {
125                                        if (strncmp($fond, "$zb/", $z_blocs_404_nlength[$k] + 1) === 0 AND strpos($fond, "/", $z_blocs_404_nlength[$k] + 1) === false) {
126                                                $quick_match = true;
127                                                break;
128                                        }
129                                }
130                        }
131                }
132                if ($quick_match AND !strlen(trim($flux['data']['texte']))) {
133                        $empty_count++;
134                        if ($empty_count >= $z_blocs_404_ncount) {
135                                $is_404 = true;
136                        }
137                }
138        }
139
140        return $flux;
141}
142
143/**
144 * Surcharger les intertires avant que le core ne les utilise
145 * pour y mettre la class h3
146 * une seule fois suffit !
147 *
148 * @param string $flux
149 *
150 * @return string
151 */
152function zcore_pre_propre($flux) {
153        /*      static $init = false;
154                if (!$init){
155                        $intertitre = $GLOBALS['debut_intertitre'];
156                        $class = extraire_attribut($GLOBALS['debut_intertitre'],'class');
157                        $class = ($class ? " $class":"");
158                        $GLOBALS['debut_intertitre'] = inserer_attribut($GLOBALS['debut_intertitre'], 'class', "h3$class");
159                        foreach($GLOBALS['spip_raccourcis_typo'] as $k=>$v){
160                                $GLOBALS['spip_raccourcis_typo'][$k] = str_replace($intertitre,$GLOBALS['debut_intertitre'],$GLOBALS['spip_raccourcis_typo'][$k]);
161                        }
162                        $init = true;
163                }*/
164        return $flux;
165}
166
167/**
168 * Ajouter les scripts pour getZaplBloc()
169 * Ajouter le inc-insert-head du theme si il existe
170 *
171 * @param string $flux
172 *
173 * @return string
174 */
175function zcore_insert_head($flux) {
176
177        // insertion du script pour le chargement parallelisé des zblocs (ZAPL)
178        // mode "one-liner" car on veut rester hors de la compression des js ou du chargement différe jQl pour agir plus vite.
179        if ( defined('_Z_AJAX_PARALLEL_LOAD_OK') AND ($file = find_in_path('javascript/zapl.scripts.js')) ) {
180                include_spip('filtres/compresseur');
181                if (function_exists('compacte')) {
182                        $file = compacte($file, 'js');
183                }
184                lire_fichier($file, $js);
185                $flux .= "\n".'<script type="text/javascript">/*<![CDATA[*/'. str_replace(PHP_EOL,'',$js) .'/*]]>*/</script>'."\n";
186        }
187
188        if (find_in_path('inc-insert-head.html')) {
189                $flux .= recuperer_fond('inc-insert-head', array());
190        }
191
192        return $flux;
193}
194
195/**
196 * Ajouter la definition du bloc contenu pour var_zajax
197 *
198 * @param string $flux
199 *
200 * @return string
201 */
202function zcore_insert_head_css($flux) {
203
204        include_spip('public/styliser_par_z');
205        $contenu = z_blocs(false);
206        $contenu = reset($contenu);
207        $flux = "<script type='text/javascript'>var var_zajax_content='$contenu';</script>" . $flux;
208
209        if (find_in_path('inc-insert-head-css.html')) {
210                $flux .= recuperer_fond('inc-insert-head-css', array());
211        }
212
213        return $flux;
214}
215
216//
217// fonction standard de calcul de la balise #INTRODUCTION
218// mais retourne toujours dans un <p> comme propre
219//
220// https://code.spip.net/@filtre_introduction_dist
221if (!function_exists('filtre_introduction')) {
222        function filtre_introduction($descriptif, $texte, $longueur, $connect) {
223                include_spip('public/composer');
224                $texte = filtre_introduction_dist($descriptif, $texte, $longueur, $connect);
225
226                if ($GLOBALS['toujours_paragrapher'] AND strpos($texte, "</p>") === false) // Fermer les paragraphes ; mais ne pas en creer si un seul
227                {
228                        $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
229                }
230
231                return $texte;
232        }
233}
234
235/**
236 * Tester la presence sur une page
237 *
238 * @param  <type> $p
239 *
240 * @return <type>
241 */
242if (!function_exists('balise_SI_PAGE_dist')) {
243        function balise_SI_PAGE_dist($p) {
244                $_page = interprete_argument_balise(1, $p);
245                $p->code = "((\n\t" . "((\$zp=$_page) AND isset(\$Pile[0][_SPIP_PAGE]) AND (\$Pile[0][_SPIP_PAGE]==\$zp))\n\t" . "OR (isset(\$Pile[0]['type-page']) AND \$Pile[0]['type-page']==\$zp)\n\t" . "OR (isset(\$Pile[0]['composition']) AND \$Pile[0]['composition']==\$zp AND \$Pile[0]['type-page']=='page'))?' ':'')\n";
246                $p->interdire_scripts = false;
247
248                return $p;
249        }
250}
251
252/**
253 * balise #CSS
254 *
255 */
256function balise_CSS_dist($p) {
257        $_css = interprete_argument_balise(1, $p);
258        if (!$_css) {
259                $msg = array('zbug_balise_sans_argument', array('balise' => ' CSS'));
260                erreur_squelette($msg, $p);
261        } else {
262                $p->code = "timestamp(direction_css(trouver_fond($_css)?produire_fond_statique($_css,array('format'=>'css')):find_in_path($_css)))";
263        }
264        $p->interdire_scripts = false;
265
266        return $p;
267}
268
Note: See TracBrowser for help on using the repository browser.