source: spip-zone/_plugins_/cache_cool/cache_cool_options.php @ 32576

Last change on this file since 32576 was 32576, checked in by cedric@…, 11 years ago

eviter la confusion de nommage

File size: 4.2 KB
Line 
1<?php
2/*
3 * Plugin Cache Cool
4 * (c) 2009 Cedric
5 * Distribue sous licence GPL
6 *
7 */
8
9/**
10 * Fonction chargee de produire le cache pour un contexte et un fond donne
11 * et de le memoriser si besoin
12 *
13 * S'insere a la place de la fonction du core public_produire_page_dist pour
14 * decider si le cache existant peut etre servi froid, et lancer dans la queue
15 * une tache de mise a jour du cache en cron
16 *
17 * Dans ce cas, on reentre ici avec $use_cache.
18 * On verifie que le contexte produit un $use_cache et un $chemin_cache credibles
19 * (si on est dans l'espace prive au moment du calcul differe, aucun cache ne sera demande)
20 * Il faudrait idealement verifier qu'on retrouve le meme $chemin_cache
21 * mais cela necessiterait d'avoir le $page et le $contexte qui utilises pour cela
22 * dans le cas de la page principal dans public/assembler, mais qui ne sont pas fournis ici
23 *
24 * Si le contexte est semblable, on lance le calcul et la mise a jour du cache,
25 * sinon on reprogramme avec les memes arguments
26 *
27 * @param string $fond
28 * @param array $contexte
29 * @param int $use_cache
30 * @param string $chemin_cache
31 * @param array $contexte_cache
32 * @param array $page
33 * @param int $lastinclude
34 * @param string $connect
35 * @return array
36 */
37function public_produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, $page, &$lastinclude, $connect=''){
38        static $processing = false;
39        $background = false;
40
41        // calcul differe du cache ?
42        // prend la main si
43        // - c'est un calcul normal avec mise en cache
44        // - un cache existe deja qui peut etre servi
45        // - c'est une visite anonyme (cache mutualise)
46        // - on est pas deja en train de traiter un calcul en background
47        if ($use_cache==1 AND $chemin_cache
48                AND is_array($page) AND count($page)
49                AND !$GLOBALS['visiteur_session']['id_auteur']
50                AND !$processing
51                ) {
52                // on differe la maj du cache et on affiche le contenu du cache ce coup ci encore
53                $where = is_null($contexte_cache)?"principal":"inclure_page";
54                // on reprogramme avec un $use_cache=2 qui permettra de reconnaitre ces calculs
55                job_queue_add('public_produire_page',$c="Calcul du cache $fond [$where]",array($fond, $contexte, 2, $chemin_cache, $contexte_cache, NULL, $lastinclude, $connect),"",TRUE);
56                gunzip_page(&$page); // decomprimer la page si besoin
57                #spip_log($c,'cachedelai');
58                return $page;
59        }
60
61        // si c'est un cacul differe, verifier qu'on est dans le bon contexte
62        if ($use_cache==2){
63                $cacher = charger_fonction('cacher','public');
64                $cacher($contexte_cache, $use_cache, $chemin2, $page, $lastmodified);
65                if (intval($use_cache)!==1 OR !$chemin2){
66                        // on n'est pas dans le bon contexte, il faut se reprogrammer !
67                        $where = is_null($contexte_cache)?"principal":"inclure_page";
68                        $args = func_get_args();
69                        job_queue_add('public_produire_page',$c="[Re] Calcul du cache $fond [$where]",$args,"",TRUE);
70                        #spip_log($c,'cachedelai');
71                        return;
72                }
73                $background = true;
74                $processing = true; // indiquer qu'on est deja en differe en cas de reentrance
75        }
76
77        include_spip('public/assembler');
78        $page = public_produire_page_dist($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, $page, $lastinclude, $connect);
79
80        if ($background){
81                // baisser le flag processing si c'est nous qui l'avons leve
82                $processing = false;
83                // baisser le flag qui sert a faire remonter une dependance de la session
84                // pour ne pas polluer les calculs suivants eventuels qui n'ont rien a voir
85                unset($GLOBALS['cache_utilise_session']);
86        }
87        return $page;
88}
89
90$GLOBALS['spip_pipeline']['insert_head'] = str_replace('|f_jQuery','|cache_cool_f_jQuery',$GLOBALS['spip_pipeline']['insert_head']);
91
92// Inserer jQuery sans test de doublon
93// incompatible avec le calcul multiple de squelettes sur un meme hit
94// http://doc.spip.org/@f_jQuery
95function cache_cool_f_jQuery ($texte) {
96        $x = '';
97        foreach (pipeline('jquery_plugins',
98        array(
99                'javascript/jquery.js',
100                'javascript/jquery.form.js',
101                'javascript/ajaxCallback.js'
102        )) as $script)
103                if ($script = find_in_path($script))
104                        $x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
105        $texte = $x.$texte;
106       
107        return $texte;
108}
109
110$GLOBALS['spip_pipeline']['insert_head'] = str_replace('|f_jQuery','|f_jQuery_cool',$GLOBALS['spip_pipeline']['insert_head']);
111?>
Note: See TracBrowser for help on using the repository browser.