source: spip-zone/_squelettes_/sedna/sedna.php @ 11646

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

max 600 caracteres par descriptif

File size: 8.1 KB
Line 
1<?php
2        include_once('ecrire/inc_version.php');
3        $profondeur_url = 1; # nous sommes dans un sous-rep
4        $dossier_squelettes = 'sedna';
5        $forcer_lang = true;
6        include_spip('inc/cookie');
7
8                # couleur               # hover         # selected
9        $couleurs = array (
10                'pink'  => array('#c363a7','#ff33ff'),
11                'red'   => array('#ff3333','#cc3333'),
12                'orange'=> array('#ff9966','#ff6633'),
13                'cyan'  => array('#4280eb','#004080'),
14                'blue'  => array('#6666ff','#3333ff')
15        );
16
17        if ($var_color) {
18                spip_setcookie('sedna_color', $var_color, time()+365*24*3600);
19                $_COOKIE['sedna_color'] = $var_color;
20        }
21
22        if (!$couleurs[$a = $_COOKIE['sedna_color']]) $a = 'blue';
23        list($b,$c) = $couleurs[$a];
24
25        // filtre |syndication_en_erreur
26        function syndication_en_erreur($statut_syndication) {
27                if ($statut_syndication == 'off'
28                OR $statut_syndication == 'sus')
29                        return _T('sedna:probleme_de_syndication');
30        }
31
32        // filtre de nettoyage XHTML strict d'un contenu potentiellement hostile
33        // |textebrut|lignes_longues|entites_html|antispam2|texte_script
34        function nettoyer_texte($texte) {
35                return texte_script(
36                        antispam2(
37                        corriger_toutes_entites_html(
38                        entites_html(
39                        couper(
40                        lignes_longues(
41                        textebrut(
42                                $texte
43                        )), 600)
44                        ))));
45        }
46
47        // tri maison : d'abord par jour de syndication,
48        // et a l'interieur du jour par date de maj
49        function critere_tri_sedna($idb, &$boucles, $crit) {
50                $boucle = &$boucles[$idb];
51                $boucle->order = array(
52                        "'date_format(syndic_articles.date,\\'%Y-%m-%d 00:00:00\\') DESC'", "'syndic_articles.maj DESC'", "'syndic_articles.date DESC'"
53                );
54        }
55
56        // critere {contenu}
57        function critere_contenu($idb, &$boucles, $crit) {
58                $boucle = &$boucles[$idb];
59
60                // un peu trop rapide, ca... le compilateur exige mieux
61                $boucle->hash = '
62                // RECHERCHE
63                if ($r = addslashes($GLOBALS["recherche"]))
64                        $s = "(syndic_articles.descriptif LIKE \'%$r%\'
65                                OR syndic_articles.titre LIKE \'%$r%\'
66                                OR syndic_articles.url LIKE \'%$r%\'
67                                OR syndic_articles.lesauteurs LIKE \'%$r%\')";
68                        else $s = 1;
69                ';
70                $boucle->where[] = '$s';
71        }
72
73        // l'identifiant du lien est fonction de son url et de sa date
74        // ce qui permet de reperer les "updated" *et* les doublons
75        include_spip('inc/filtres');
76        function afficher_lien(
77                $id_syndic_article,
78                $id_lien,
79                $id_syndic,
80                $date,
81                $url,
82                $titre,
83                $lesauteurs,
84                $desc,
85                $lang
86                ) {
87                static $vu, $lus, $ferme_ul, $id, $iddesc;
88                global $ex_syndic, $class_desc;
89
90                // Articles a ignorer
91                if (!$_GET['id_syndic']
92                AND $_COOKIE['sedna_ignore_'.$id_syndic])
93                        return;
94
95                // initialiser la liste des articles lus
96                if (!is_array($lus))
97                        $lus = array_flip(split('-', '-'.$_COOKIE['sedna_lu']));
98
99                if ($vu[$id_lien]++) return;
100
101                // regler la classe des liens, en fonction du cookie sedna_lu
102                $class_link = $lus[$id_lien] ? 'vu' : '';
103
104                if (unique(substr($date,0,10)))
105                        $affdate = '<h1 class="date">'
106                                .jour($date).' '.nom_mois($date).'</h1>';
107
108
109                // indiquer un intertitre si on change de source ou de date
110                if ($affdate OR ($id_syndic != $ex_syndic)) {
111                        echo $ferme_ul; $ferme_ul="</ul>\n";
112                        echo $affdate;
113                }
114
115                // Suite intertitres
116                if ($affdate OR ($id_syndic != $ex_syndic)) {
117                        echo "<h2 id='site${id_syndic}_".(++$id)."'
118                        onmouseover=\"getElementById('url".$id."').className='urlsiteon';\"
119                        onmouseout=\"getElementById('url".$id."').className='urlsite';\"
120                        >";
121                        echo "<a href=\"?id_syndic=$id_syndic";
122                        if ($age = intval($GLOBALS['age']))
123                                echo "&amp;age=$age";
124                        echo "\">".$GLOBALS['nom_site_'.$id_syndic]
125                                ."</a>";
126                        echo " <a class=\"urlsite\"
127                                        href=\""
128                                        .$GLOBALS['url_site_'.$id_syndic]
129                                        .'" id="url'.$id.'">'
130                                        .$GLOBALS['url_site_'.$id_syndic]
131                                        ."</a>";
132                        echo "</h2>\n<ul>\n";
133                        $ex_syndic = $id_syndic;
134                }
135
136                echo "<li class='hentry'";
137                if (!$_GET['id_syndic'] AND !strlen($_GET['recherche']))
138                        echo " id='item${id_syndic}_${id_syndic_article}'";
139                echo "  onmousedown=\"jai_lu('$id_lien');\">\n",
140#               "<small>".affdate($date,'H:i')."</small>",
141                "<abbr class='published updated'
142                title='".date_iso($date)."'>".affdate($date,'H:i')."</abbr>", 
143                "<div class=\"titre\">",
144                "<a href=\"$url\"
145                        title=\"$url\"
146                        class=\"link$class_link\"
147                        id=\"news$id_lien\"
148                        rel=\"bookmark\"";
149                if ($lang) echo " hreflang=\"$lang\"";
150                echo ">",
151                "<span class=\"entry-title\">", # le "title" du microformat hAtom.hfeed.hentry
152                $titre, "</span></a>",
153                $lesauteurs,
154                "\n<span class=\"source\"><a href=\"",
155                $GLOBALS['url_site_'.$id_syndic]."\">",
156                $GLOBALS['nom_site_'.$id_syndic]."</a></span>\n",
157                "</div>\n";
158
159                if ($desc)
160                        echo "<div class=\"desc\">",
161                        "<div class=\"$class_desc\" id=\"desc_".(++$iddesc)."\">\n",
162                        "<span class=\"entry-summary\">", $desc, "</span>\n",
163                        '</div></div>';
164               
165
166                echo "\n</li>\n";
167        }
168
169
170        // identifiant d'un lien en fonction de son url et sa date, 4 chars
171        // 3ko = 500 * (5 caracteres + espace)
172        // 16**5 possibilites = suffisant pour eviter risque de doublons sur 500
173        function creer_identifiant ($url,$date) {
174                return substr(md5("$date$url"),0,5);
175        }
176
177        // unicode 24D0 = caractere de forme "(a)"
178        function antispam2($texte) {
179                return preg_replace(',(\w+)@(\w+\.\w+),','\\1&#x24d0;\\2', $texte);
180        }
181
182        // Choix du $fond (rss ou sedna)
183        if ($rss) {
184                $fond = 'sedna-rss';
185        }
186        else {
187                $fond='sedna';
188        }
189
190        // Descriptifs : affiches ou masques ?
191        // l'accessibilite sans javascript => affiches par defaut
192        if ($_COOKIE['sedna_style'] == 'masquer') {
193                $class_desc = "desc_masquer";
194                $sel1="selected"; $sel2="";
195        } else {
196                $class_desc = "desc_afficher";
197                $sel2="selected"; $sel1="";
198        }
199
200
201        // authentification du visiteur
202        if ($GLOBALS['_COOKIE']['spip_session'] OR
203        ($GLOBALS['_SERVER']['PHP_AUTH_USER']  AND !$ignore_auth_http)) {
204                include_ecrire ("inc_session");
205                verifier_visiteur();
206        }
207
208        // Si synchro active il faut comparer le contenu du cookie et ce
209        // qu'on a stocke dans le champ spip_auteurs.sedna (a creer au besoin)
210        $synchro = '';
211        if ($_COOKIE['sedna_synchro'] == 'oui'
212        AND $id = $auteur_session['id_auteur']) {
213                // Recuperer ce qu'on a stocke
214                if (!$s = spip_query("SELECT sedna FROM spip_auteurs
215                WHERE id_auteur=$id")) {
216                        // creer le champ sedna si ce n'est pas deja fait
217                        spip_query("ALTER TABLE spip_auteurs
218                        ADD sedna TEXT NOT NULL DEFAULT ''");
219                }
220                list($champ) = spip_fetch_array($s);
221                // mixer avec le cookie en conservant un ordre chronologique
222                if ($_COOKIE['sedna_lu'] <> $champ) {
223                        $lus_cookie = preg_split(',[- +],',$_COOKIE['sedna_lu']);
224                        $lus_champ = preg_split(',[- +],',$champ);
225                        $lus = array();
226                        while (count($lus_cookie) OR count($lus_champ)) {
227                                if ($a = array_shift($lus_cookie))
228                                        $lus[$a] = true;
229                                if ($a = array_shift($lus_champ))
230                                        $lus[$a] = true;
231                        }
232                        $lus = substr(join('-', array_keys($lus)),0,3000); # 3ko maximum
233                        // Mettre la base a jour
234                        spip_query("UPDATE spip_auteurs SET sedna='"
235                                .addslashes($lus)."'
236                                WHERE id_auteur=$id");
237                        $synchro = ' *';
238
239                        // Si le cookie n'est pas a jour, on l'update sur le brouteur
240                        if ($lus <> $_COOKIE['sedna_lu']) {
241                                // path='/chemin/vers/sedna/' comme dans sedna.js
242                                $cookiepath = preg_replace(',^[^/]*://[^/]*,',
243                                        '',lire_meta('adresse_site'))
244                                        . preg_replace(',/$,','','/'.$dossier_squelettes);
245
246                                spip_setcookie('sedna_lu', $lus,
247                                        time()+365*24*3600, $cookiepath);
248                                        $_COOKIE['sedna_lu'] = $lus;
249                                // Signaler que la synchro a eu lieu
250                                $synchro = ' &lt;&lt;';
251                        }
252                }
253        }
254
255        // compatibilite < 1.9.2
256        define('_DIR_TMP', _DIR_SESSIONS);
257
258        // forcer le refresh ?
259        if ($id = intval($refresh)) {
260                include_ecrire('inc_syndic');
261                spip_touch(_DIR_TMP.'syndic.lock');
262                syndic_a_jour($id);
263        }
264
265        // Calcul du delais optimal (on est tjs a jour, mais quand meme en cache)
266        // valeur max = 15 minutes (900s) (et on hacke #ENV{max_maj} pour affichage
267        // de "Derniere syndication..." en pied de page).
268        $_GET['max_maj'] = @filemtime(_DIR_TMP.'syndic.lock');
269        if ($_GET['max_maj'] > lire_meta('derniere_modif')) {
270                include_spip('inc/meta');
271                ecrire_meta('derniere_modif', $_GET['max_maj']);
272                ecrire_metas();
273        }
274        $_GET['max_maj'] = date('Y-m-d H:i:s', $_GET['max_maj']); # format SPIP
275
276        // On ne veut pas de cache navigateur, pour le "*" de synchro et pour
277        // la liste des sites ignores (cookies)
278        $flag_dynamique = true;
279
280        $flag_preserver=true;
281
282        // ou se trouvent les fichiers de langue
283        include 'spip.php';
284
285?>
Note: See TracBrowser for help on using the repository browser.