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

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

Evitons une redirection, ce n'est plus http://doc.spip.org mais http://code.spip.net

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