source: spip-zone/_core_/plugins/statistiques/inc/referenceurs.php

Last change on this file was 113294, checked in by spip.franck@…, 4 months ago

Il parait que le futur c'est maintenant :-D

File size: 5.4 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2019                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) {
14        return;
15}
16
17/**
18 * Recuperer la liste des moteurs de recherche depuis un fichier txt
19 * Adaptees du code des "Visiteurs",
20 * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
21 *
22 * https://code.spip.net/@stats_load_engines
23 *
24 * @return array
25 */
26function stats_load_engines() {
27        $arr_engines = array();
28        lire_fichier(find_in_path('engines-list.txt'), $moteurs);
29        foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne) {
30                $ligne = trim($ligne);
31                if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)) {
32                        $moteur = $regs[1];
33                        $query = '';
34                } else {
35                        if (preg_match(',=$,', $ligne, $regs)) {
36                                $query = $ligne;
37                        } else {
38                                $arr_engines[] = array($moteur, $query, $ligne);
39                        }
40                }
41        }
42
43        return $arr_engines;
44}
45
46/**
47 * Retrouver les mots cles de recherche dans une url de referer
48 *
49 * Adaptees du code des "Visiteurs",
50 * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
51 *
52 * https://code.spip.net/@stats_show_keywords
53 *
54 * @param string $kw_referer
55 * @return array
56 */
57function stats_show_keywords($kw_referer) {
58        static $arr_engines = '';
59        static $url_site;
60
61        if (!is_array($arr_engines)) {
62                // Charger les moteurs de recherche
63                $arr_engines = stats_load_engines();
64
65                // initialiser la recherche interne
66                $url_site = $GLOBALS['meta']['adresse_site'];
67                $url_site = preg_replace(",^((https?|ftp):?/?/?)?(www\.)?,", "", strtolower($url_site));
68        }
69
70        if ($url = @parse_url($kw_referer)) {
71                $query = isset($url['query']) ? $url['query'] : "";
72                $host = isset($url['host']) ? strtolower($url['host']) : "";
73                $path =  isset($url['path']) ? $url['path'] : "";
74                $scheme = isset($url['scheme']) ? $url['scheme'] : "";
75        } else {
76                $scheme = $query = $host = $path = '';
77        }
78
79        // construire un array des variables directement depuis la query-string
80        parse_str($query, $Tquery);
81
82        $keywords = '';
83        $found = false;
84
85        if (!empty($url_site)) {
86                if (strpos('-' . $kw_referer, $url_site) !== false) {
87                        if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs)) {
88                                $keywords = urldecode($regs[2]);
89                        } else {
90                                return array('host' => '');
91                        }
92                } else {
93                        for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++) {
94                                if ($found = preg_match(',' . $arr_engines[$cnt][2] . ',', $host)
95                                        or $found = preg_match(',' . $arr_engines[$cnt][2] . ',', $path)
96                                ) {
97                                        $kw_referer_host = $arr_engines[$cnt][0];
98
99                                        if (strpos($arr_engines[$cnt][1], '=') !== false) {
100
101                                                // Fonctionnement simple: la variable existe dans l'array
102                                                $v = str_replace('=', '', $arr_engines[$cnt][1]);
103                                                $keywords = isset($Tquery[$v]) ? $Tquery[$v] : "";
104
105                                                // Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
106                                                if (!strlen($keywords) > 0) {
107                                                        if (preg_match("," . $arr_engines[$cnt][1] . "([^\&]*),", $query, $vals)) {
108                                                                $keywords = urldecode($vals[2]);
109                                                        }
110                                                }
111                                        } else {
112                                                $keywords = "";
113                                        }
114
115                                        if (($kw_referer_host == "Google")
116                                                || ($kw_referer_host == "AOL" && strpos($query, 'enc=iso') === false)
117                                                || ($kw_referer_host == "MSN")
118                                        ) {
119                                                include_spip('inc/charsets');
120                                                if (!isset($ie) or !$cset = $ie) {
121                                                        $cset = 'utf-8';
122                                                }
123                                                $keywords = importer_charset($keywords, $cset);
124                                        }
125                                        $buffer["hostname"] = $kw_referer_host;
126                                }
127                        }
128                }
129        }
130
131        $buffer["host"] = $host;
132        $buffer["scheme"] = $scheme;
133        if (!isset($buffer["hostname"]) or !$buffer["hostname"]) {
134                $buffer["hostname"] = $host;
135        }
136
137        $buffer["path"] = substr($path, 1, strlen($path));
138        $buffer["query"] = $query;
139
140        if ($keywords != '') {
141                if (strlen($keywords) > 150) {
142                        $keywords = spip_substr($keywords, 0, 148);
143                        // supprimer l'eventuelle entite finale mal coupee
144                        $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords);
145                }
146                $buffer["keywords"] = trim(entites_html(urldecode(stripslashes($keywords))));
147        }
148
149        return $buffer;
150
151}
152
153/**
154 * Recherche des articles pointes par le referer
155 * https://code.spip.net/@referes
156 *
157 * @param  $referermd5
158 * @param string $serveur
159 * @return string
160 */
161function referes($referermd5, $serveur = '') {
162        $retarts = sql_allfetsel('J2.id_article, J2.titre',
163                'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article',
164                "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(" . sql_quote(date('Y-m-d H:i:s')) . ", INTERVAL 2 DAY))", '',
165                "titre", '', '', $serveur);
166
167        foreach ($retarts as $k => $rowart) {
168                $titre = typo($rowart['titre']);
169                $url = generer_url_entite($rowart['id_article'], 'article', '', '', true);
170                $retarts[$k] = "<a href='$url'><i>$titre</i></a>";
171        }
172
173        if (count($retarts) > 1) {
174                return '&rarr; ' . join(',<br />&rarr; ', $retarts);
175        }
176        if (count($retarts) == 1) {
177                return '&rarr; ' . array_shift($retarts);
178        }
179
180        return '';
181}
Note: See TracBrowser for help on using the repository browser.