source: spip-zone/_squelettes_/gribouille_2/gribouille_options.php @ 104264

Last change on this file since 104264 was 104264, checked in by spip.franck@…, 2 years ago

code.spip.net est maintenant en https, j'ajoute donc le "s" à http

File size: 3.8 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3// {recherche} ou {recherche susan}
4// https://www.spip.net/@recherche
5// https://code.spip.net/@critere_recherche_dist
6function critere_recherche($idb, &$boucles, $crit) {
7
8        $boucle = &$boucles[$idb];
9
10        if (isset($crit->param[0]))
11                $quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
12        else
13                $quoi = '@$Pile[0]["recherche"]';
14        $tout = $boucle->modificateur["tout"] ? 1 : 0;
15        $boucle->hash .= '
16        // RECHERCHE
17        $prepare_recherche = charger_fonction(\'prepare_recherche\', \'inc\');
18        list($rech_select, $rech_where) = $prepare_recherche('.$quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'","' . $boucle->sql_serveur . '",'.$tout.');
19        ';
20
21        $t = $boucle->id_table . '.' . $boucle->primary;
22        if (!in_array($t, $boucles[$idb]->select))
23          $boucle->select[]= $t; # pour postgres, neuneu ici
24        $boucle->join['resultats']=array("'".$boucle->id_table."'","'id'","'".$boucle->primary."'");
25        $boucle->from['resultats']='spip_resultats';
26        $boucle->select[]= '$rech_select';
27        //$boucle->where[]= "\$rech_where?'resultats.id=".$boucle->id_table.".".$boucle->primary."':''";
28
29        // et la recherche trouve
30        $boucle->where[]= '$rech_where?$rech_where:\'\'';
31}
32
33        @define('_DELAI_CACHE_resultats',600);
34       
35// Preparer les listes id_article IN (...) pour les parties WHERE
36// et points =  des requetes du moteur de recherche
37// https://code.spip.net/@inc_prepare_recherche_dist
38function inc_prepare_recherche($recherche, $table='articles', $cond=false, $serveur='',$tout=false) {
39        include_spip('inc/rechercher');
40        static $cache = array();
41        $delai_fraicheur = min(_DELAI_CACHE_resultats,time()-$GLOBALS['meta']['derniere_modif']);
42
43        // si recherche n'est pas dans le contexte, on va prendre en globals
44        // ca permet de faire des inclure simple.
45        if (!isset($recherche) AND isset($GLOBALS['recherche']))
46                $recherche = $GLOBALS['recherche'];
47
48        // traiter le cas {recherche?}
49        if ($cond AND !strlen($recherche))
50                return array("0 as points" /* as points */, /* where */ '');
51               
52       
53        $rechercher = false;
54
55        if (!isset($cache[$recherche][$table])){
56                $hash = substr(md5($recherche . $table),0,16);
57                $row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(maj) AS fraicheur','spip_resultats',"recherche='$hash'",'','fraicheur DESC','0,1','',$serveur);
58                if (!$row OR ($row['fraicheur']>$delai_fraicheur)){
59                        $rechercher = true;
60                }
61                $cache[$recherche][$table] = array("resultats.points AS points","recherche='$hash'");
62        }
63
64        // si on n'a pas encore traite les donnees dans une boucle precedente
65        if ($rechercher) {
66                //$tables = liste_des_champs();
67                $x = preg_replace(',s$,', '', $table); // eurk
68                if ($x == 'syndic') $x = 'site';
69                $points = recherche_en_base($recherche,
70                        $x,
71                        array(
72                                'score' => true,
73                                'toutvoir' => true,
74                                'jointures' => true
75                                ),
76                                            $serveur);
77                $points = $points[$x];
78
79                // permettre aux plugins de modifier le resultat
80                $points = pipeline('prepare_recherche',array(
81                        'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'tout'=>$tout),
82                        'data'=>$points
83                ));
84
85                // supprimer les anciens resultats de cette recherche
86                // et les resultats trop vieux avec une marge
87                sql_delete('spip_resultats','(maj<DATE_SUB(NOW(), INTERVAL '.($delai_fraicheur+100)." SECOND)) OR (recherche='$hash')",$serveur);
88
89                // inserer les resultats dans la table de cache des resultats
90                if (count($points)){
91                        $tab_couples = array();
92                        foreach ($points as $id => $p){
93                                $tab_couples[] = array(
94                                        'recherche' => $hash,
95                                        'id' => $id,
96                                        'points' => $p['score']
97                                );
98                        }
99                        sql_insertq_multi('spip_resultats',$tab_couples,array(),$serveur);
100                }
101        }
102
103        return $cache[$recherche][$table];
104}
105
106function analyse_droits_rapide() {
107        return true;
108}
109?>
Note: See TracBrowser for help on using the repository browser.