source: spip-zone/_plugins_/_test_/sedna/sedna_options.php @ 16798

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

sedna generait des url infernales en &age=x&age=x que les bots suivaient ainsi à l'infini, faisant exploser le cache
et le cpu
+ un rewriterule pour rediriger les anciennes url foireuses vers une unique

File size: 5.6 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4if (preg_match(',&age=([0-9]+)&age=([0-9]+),',$_SERVER['REQUEST_URI'],$regs)){
5        url_de_base();
6        $url = parametre_url(self(),'age',$regs[1],'&');
7        include_spip('inc/headers');
8        redirige_par_entete($url);
9}
10
11if ($var_color=_request('var_color')) {
12        include_spip('inc/cookie');
13        spip_setcookie('sedna_color', $var_color, time()+365*24*3600);
14        $_COOKIE['sedna_color'] = $var_color;
15}
16$GLOBALS['marqueur'].=isset($_COOKIE['sedna_color'])?(":".$_COOKIE['sedna_color']):"";
17function sedna_utils(){
18        $GLOBALS['forcer_lang']= true;
19
20        // Descriptifs : affiches ou masques ?
21        // l'accessibilite sans javascript => affiches par defaut
22        if ($_COOKIE['sedna_style'] == 'masquer') {
23                $class_desc = "desc_masquer";
24        } else {
25                $class_desc = "desc_afficher";
26        }
27        // l'identifiant du lien est fonction de son url et de sa date
28        // ce qui permet de reperer les "updated" *et* les doublons
29        include_spip('inc/filtres');
30        function afficher_lien(
31                $id_syndic_article,
32                $id_lien,
33                $id_syndic,
34                $date,
35                $url,
36                $titre,
37                $lesauteurs,
38                $desc,
39                $lang
40                ) {
41                static $vu, $lus, $ferme_ul, $id, $iddesc;
42                global $ex_syndic, $class_desc;
43
44                // Articles a ignorer
45                if (!_request('id_syndic')
46                AND $_COOKIE['sedna_ignore_'.$id_syndic])
47                        return;
48
49                // initialiser la liste des articles lus
50                if (!is_array($lus))
51                        $lus = array_flip(split('-', '-'.$_COOKIE['sedna_lu']));
52
53                if ($vu[$id_lien]++) return;
54
55                // regler la classe des liens, en fonction du cookie sedna_lu
56                $class_link = $lus[$id_lien] ? 'vu' : '';
57
58                if (unique(substr($date,0,10)))
59                        $affdate = '<h1 class="date">'
60                                .jour($date).' '.nom_mois($date).'</h1>';
61
62
63                // indiquer un intertitre si on change de source ou de date
64                if ($affdate OR ($id_syndic != $ex_syndic)) {
65                        echo $ferme_ul; $ferme_ul="</ul>\n";
66                        echo $affdate;
67                }
68
69                // Suite intertitres
70                if ($affdate OR ($id_syndic != $ex_syndic)) {
71                        echo "<h2 id='site${id_syndic}_".(++$id)."'
72                        onmouseover=\"getElementById('url".$id."').className='urlsiteon';\"
73                        onmouseout=\"getElementById('url".$id."').className='urlsite';\"
74                        >";
75                        $link = parametre_url(self(),'id_syndic',$id_syndic);
76                        if ($age = intval($GLOBALS['age']))
77                                $link = parametre_url($link,'age',$age);
78                        echo "<a href=\"$link\">".$GLOBALS['nom_site_'.$id_syndic]
79                                ."</a>";
80                        echo " <a class=\"urlsite\"
81                                        href=\""
82                                        .$GLOBALS['url_site_'.$id_syndic]
83                                        .'" id="url'.$id.'">'
84                                        .$GLOBALS['url_site_'.$id_syndic]
85                                        ."</a>";
86                        echo "</h2>\n<ul>\n";
87                        $ex_syndic = $id_syndic;
88                }
89
90                echo "<li class='hentry'";
91                if (!$_GET['id_syndic'] AND !strlen($_GET['recherche']))
92                        echo " id='item${id_syndic}_${id_syndic_article}'";
93                echo "  onmousedown=\"jai_lu('$id_lien');\">\n",
94#               "<small>".affdate($date,'H:i')."</small>",
95                "<abbr class='published updated'
96                title='".date_iso($date)."'>".affdate($date,'H:i')."</abbr>", 
97                "<div class=\"titre\">",
98                "<a href=\"$url\"
99                        title=\"$url\"
100                        class=\"link$class_link\"
101                        id=\"news$id_lien\"
102                        rel=\"bookmark\"";
103                if ($lang) echo " hreflang=\"$lang\"";
104                echo ">",
105                "<span class=\"entry-title\">", # le "title" du microformat hAtom.hfeed.hentry
106                $titre, "</span></a>",
107                $lesauteurs,
108                "\n<span class=\"source\"><a href=\"",
109                $GLOBALS['url_site_'.$id_syndic]."\">",
110                $GLOBALS['nom_site_'.$id_syndic]."</a></span>\n",
111                "</div>\n";
112
113                if ($desc)
114                        echo "<div class=\"desc\">",
115                        "<div class=\"$class_desc\" id=\"desc_".(++$iddesc)."\">\n",
116                        "<span class=\"entry-summary\">", $desc, "</span>\n",
117                        '</div></div>';
118               
119
120                echo "\n</li>\n";
121        }
122       
123        // Si synchro active il faut comparer le contenu du cookie et ce
124        // qu'on a stocke dans le champ spip_auteurs.sedna (a creer au besoin)
125        $synchro = '';
126        if ($_COOKIE['sedna_synchro'] == 'oui'
127        AND $id = $GLOBALS['auteur_session']['id_auteur']) {
128                // Recuperer ce qu'on a stocke
129                if (!$s = spip_query("SELECT sedna FROM spip_auteurs
130                WHERE id_auteur=$id")) {
131                        // creer le champ sedna si ce n'est pas deja fait
132                        spip_query("ALTER TABLE spip_auteurs
133                        ADD sedna TEXT NOT NULL DEFAULT ''");
134                }
135                $champ = spip_fetch_array($s);
136                $champ = $champ['sedna'];
137                // mixer avec le cookie en conservant un ordre chronologique
138                if ($_COOKIE['sedna_lu'] <> $champ) {
139                        $lus_cookie = preg_split(',[- +],',$_COOKIE['sedna_lu']);
140                        $lus_champ = preg_split(',[- +],',$champ);
141                        $lus = array();
142                        while (count($lus_cookie) OR count($lus_champ)) {
143                                if ($a = array_shift($lus_cookie))
144                                        $lus[$a] = true;
145                                if ($a = array_shift($lus_champ))
146                                        $lus[$a] = true;
147                        }
148                        $lus = substr(join('-', array_keys($lus)),0,3000); # 3ko maximum
149                        // Mettre la base a jour
150                        spip_query("UPDATE spip_auteurs SET sedna='"
151                                .addslashes($lus)."'
152                                WHERE id_auteur=$id");
153                        $synchro = ' *';
154
155                        // Si le cookie n'est pas a jour, on l'update sur le brouteur
156                        if ($lus <> $_COOKIE['sedna_lu']) {
157                                include_spip('inc/cookie');
158                                spip_setcookie('sedna_lu', $lus,
159                                        time()+365*24*3600);
160                                        $_COOKIE['sedna_lu'] = $lus;
161                                // Signaler que la synchro a eu lieu
162                                $synchro = ' &lt;&lt;';
163                        }
164                }
165        }
166        // forcer le refresh ?
167        if ($id = intval(_request('refresh'))) {
168                include_ecrire('inc_syndic');
169                spip_touch(_DIR_TMP.'syndic.lock');
170                syndic_a_jour($id);
171        }
172
173        // Calcul du delais optimal (on est tjs a jour, mais quand meme en cache)
174        // valeur max = 15 minutes (900s) (et on hacke #ENV{max_maj} pour affichage
175        // de "Derniere syndication..." en pied de page).
176        $GLOBALS['sedna_max_maj'] = @filemtime(_DIR_TMP.'syndic.lock');
177        if ($GLOBALS['sedna_max_maj'] > lire_meta('derniere_modif')) {
178                include_spip('inc/meta');
179                ecrire_meta('derniere_modif', $GLOBALS['sedna_max_maj']);
180                ecrire_metas();
181        }
182        $GLOBALS['sedna_max_maj'] = date('Y-m-d H:i:s', $GLOBALS['sedna_max_maj']); # format SPIP
183}
184
185?>
Note: See TracBrowser for help on using the repository browser.