[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / statistiques / inc / referenceurs.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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
13 if (!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 */
24 function 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 */
51 function 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 */
152 function 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 ?>