050f22597d1b2ea4a25619c856ac35c6a691ed8c
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2013 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
13 if (!defined("_ECRIRE_INC_VERSION")) return;
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/)
20 * http://doc.spip.org/@stats_load_engines
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)){
32 } else if (preg_match(',=$,', $ligne, $regs))
35 $arr_engines[] = array($moteur, $query, $ligne);
41 * Retrouver les mots cles de recherche dans une url de referer
43 * Adaptees du code des "Visiteurs",
44 * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
46 * http://doc.spip.org/@stats_show_keywords
48 * @param string $kw_referer
51 function stats_show_keywords($kw_referer){
52 static $arr_engines = '';
55 if (!is_array($arr_engines)){
56 // Charger les moteurs de recherche
57 $arr_engines = stats_load_engines();
59 // initialiser la recherche interne
60 $url_site = $GLOBALS['meta']['adresse_site'];
61 $url_site = preg_replace(",^((https?|ftp):?/?/?)?(www\.)?,", "", strtolower($url_site));
64 if ($url = @parse_url
($kw_referer)){
65 $query = isset($url['query']) ?
$url['query'] : "";
66 $host = strtolower($url['host']);
68 $scheme = $url['scheme'];
71 $scheme = $query = $host = $path = '';
73 // construire un array des variables directement depuis la query-string
74 parse_str($query, $Tquery);
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]);
84 return array('host' => '');
87 for ($cnt = 0; $cnt<sizeof($arr_engines) && !$found; $cnt++
)
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];
93 if (strpos($arr_engines[$cnt][1], '=')!==false){
95 // Fonctionnement simple: la variable existe dans l'array
96 $v = str_replace('=', '', $arr_engines[$cnt][1]);
97 $keywords = isset($Tquery[$v]) ?
$Tquery[$v]: "";
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]);
109 if (($kw_referer_host=="Google")
110 ||
($kw_referer_host=="AOL" && strpos($query, 'enc=iso')===false)
111 ||
($kw_referer_host=="MSN")
113 include_spip('inc/charsets');
114 if (!isset($ie) OR !$cset = $ie) $cset = 'utf-8';
115 $keywords = importer_charset($keywords, $cset);
117 $buffer["hostname"] = $kw_referer_host;
123 $buffer["host"] = $host;
124 $buffer["scheme"] = $scheme;
125 if (!isset($buffer["hostname"]) OR !$buffer["hostname"])
126 $buffer["hostname"] = $host;
128 $buffer["path"] = substr($path, 1, strlen($path));
129 $buffer["query"] = $query;
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);
137 $buffer["keywords"] = trim(entites_html(urldecode(stripslashes($keywords))));
145 * Recherche des articles pointes par le referer
146 * http://doc.spip.org/@referes
149 * @param string $serveur
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);
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>";
161 if (count($retarts)>1)
162 return '→ '.join(',<br />→ ', $retarts);
163 if (count($retarts)==1)
164 return '→ '.array_shift($retarts);