PageRenderTime 46ms CodeModel.GetById 10ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/visitstat/cumulpage.php

https://bitbucket.org/meianki/voguersurlavague
PHP | 747 lines | 518 code | 99 blank | 130 comment | 80 complexity | 3abd6dcbc2af658b81ce399270d0777b MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0
  1. <?
  2. /*
  3. -------------------------------------------------------------------------
  4. AllMyStats V1.39 - Statistiques de fréquentation visiteurs et robots
  5. -------------------------------------------------------------------------
  6. Copyright (C) 2000 - Cédric TATANGELO (Cedstat)
  7. Copyright (C) 2008 - Herve Seywert
  8. -------------------------------------------------------------------------
  9. Web: http://www.wertronic.com
  10. -------------------------------------------------------------------------
  11. Ce programme est libre, vous pouvez le redistribuer et/ou le modifier
  12. selon les termes de la Licence Publique Génrale GNU publiée par la Free
  13. Software Foundation .
  14. -------------------------------------------------------------------------
  15. */
  16. //-----------------------------------------------------------------------------
  17. //Mise en en forme ($AllBots) pour preg_match des bot connus (dans la table + bot en générale (bot, spider , etc)
  18. $result1=mysql_query("select bot_name, org_name, crawler_url, crawler_info from ".TABLE_CRAWLER." ");
  19. $AllBots = '/Bot|Slurp|Scooter|Spider|crawl|';
  20. while($row=mysql_fetch_array($result1)){
  21. $Form_chaine = str_replace('/','\/',$row['bot_name']);
  22. $Form_chaine = str_replace('+','\+',$Form_chaine);
  23. $Form_chaine = str_replace('(','\(',$Form_chaine);
  24. $Form_chaine = str_replace(')','\)',$Form_chaine);
  25. $AllBots .= $Form_chaine.'|';
  26. }
  27. //echo $AllBots;
  28. $AllBots = substr($AllBots,0,strlen($AllBots)-1); //supp last |
  29. $AllBots .= '/i';
  30. //-----------------------------------------------------------------------------
  31. //------------------------ Mise en tableau de la table bad user agent ---------
  32. unset($Matrice_bad_user_agent);
  33. $Bad_User_Agent=mysql_query("select * from ".TABLE_BAD_USER_AGENT.""); //
  34. while($bad_agents=mysql_fetch_array($Bad_User_Agent)){ // Mise en tableau des bad agents
  35. $Matrice_bad_user_agent[] = array($bad_agents['user_agent'], $bad_agents['info'],$bad_agents['type']);
  36. }
  37. //-----------------------------------------------------------------------------
  38. //----------------------------------------------
  39. //Calcul Nb visiteurs et pages hors bot Robots
  40. $result = mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'");
  41. $NbpageVues_HorsBots=0;
  42. $NbVisites_HorsBots=0;
  43. while($row=mysql_fetch_array($result)){
  44. if(!preg_match($AllBots, $row[agent])) {
  45. //---------------------------------------
  46. $User_Agent=$row[agent];
  47. $trash=false;
  48. for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
  49. if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
  50. $trash=true;
  51. }
  52. }
  53. //---------------------------------------
  54. }
  55. if(!preg_match($AllBots, $row[agent]) && $trash==false) {
  56. $NbpageVues_HorsBots = $NbpageVues_HorsBots+$row[nb_visite];
  57. $NbVisites_HorsBots = $NbVisites_HorsBots+1;
  58. }
  59. }
  60. //echo 'Total Visites hors robots = '.$NbVisites_HorsBots.'<br>';
  61. //echo 'Total Page visitées hors robots = '.$NbpageVues_HorsBots.'<br>'; // Nb de page vue
  62. //----------------------------------------------
  63. ################################################################################################################################################################
  64. // Graphique visiteurs et page visitées par Jour (todo en fonction car dans car existe aussi dans cumulpage.php, stats_in.php, histomois.php)
  65. //---------------------------------------------------------------------------------------------
  66. //recup des données
  67. $result=mysql_query("select agent, referer, date, code, ip, nb_visite from ".TABLE_VISITEUR." where date like '%$mois' order by code ASC");
  68. unset ($val_jour);
  69. while($row=mysql_fetch_array($result)){
  70. if(!preg_match($AllBots, $row['agent']) && $trash==false) {
  71. $date_comp = $row['date'];
  72. $cpt_jour = substr($date_comp,0,2)+0; // + 0 pour faire disparaitre les 0 devant 01, 02, 03 etc (aussi simple qu'une regex)
  73. $val_jour[$cpt_jour][0] = $val_jour[$cpt_jour][0] + 1;
  74. $val_jour[$cpt_jour][1] = $val_jour[$cpt_jour][1] + $row['nb_visite'];
  75. $total_nb_visiteurs = $total_nb_visiteurs + 1;
  76. $total_nb_pages_visitees = $total_nb_pages_visitees + $row['nb_visite'];
  77. //Nombre max de pages visité, pour height graph
  78. if($val_jour[$cpt_jour][1]>$max_pages){
  79. $max_pages=$val_jour[$cpt_jour][1];
  80. }
  81. //Pour affichage echelle y
  82. if($max_pages!=0){
  83. $indice_echelle = bcdiv($val_jour[$cpt_jour][1],$max_pages,2); $hauteur=bcmul($indice_echelle,180.00,2);
  84. if ($MaxHauteur_echelle <= $hauteur) { $MaxHauteur_echelle = $hauteur; $EchyMin = '0'; }
  85. } else { // pour ne pas afficher 0 si $max_pages = 0
  86. $EchyMin = '';
  87. $max_pages = '';
  88. }
  89. }
  90. }
  91. $Nb_jours = substr($date_comp,0,2);
  92. $graph_byday = "";
  93. //---------- Affichage --------------------------------------------------------------------
  94. $graph_byday .= "
  95. <TABLE align=center CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  96. <TBODY>
  97. <TR>
  98. <TD><!-- Data BEGIN -->
  99. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  100. <TBODY>
  101. <TR>
  102. <TH class=TABLETITLE>"
  103. .$MSG_STAT_GRAF_JOUR_TITRE." (".$MSG_ROBOTS_EXCLUS.") - ".$mois."
  104. </TH>
  105. </TR>
  106. <TR>
  107. <TD colSpan=2><!-- Rows BEGIN -->
  108. <small>Total visiteurs = ".$total_nb_visiteurs."<br>
  109. Total pages visitées = ".$total_nb_pages_visitees."</small>
  110. <TABLE border=0 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  111. <TBODY>
  112. <TR>
  113. <td rowspan=\"2\">
  114. <B><SPAN class=PAGESVUES>".$MSG_PAGESVISITES."</SPAN><BR>
  115. &
  116. <SPAN class=VISITES>".$MSG_VISITE."</SPAN></B>
  117. </TD>";
  118. $graph_byday .= "
  119. <td nowrap=nowrap valign=\"top\">".$max_pages."</td>
  120. <td rowspan=\"2\" valign=\"bottom\"><img src=\"images/histo-v_black.gif\" height=\"".$MaxHauteur_echelle."\" width=\"1\" alt=\"\" title=\"\"></td>";
  121. for($i=1;$i<=$Nb_jours;$i++){
  122. $graph_byday .= "<td rowspan=\"2\" valign=\"bottom\">";
  123. if($max_pages!=0) {
  124. $indice=bcdiv($val_jour[$i][1],$max_pages,2); $hauteur=bcmul($indice,180.00,2);
  125. }
  126. $graph_byday .= "<img src=\"images/histo-v.gif\" height=\"".$hauteur."\" width=\"7\" alt=\"".$val_jour[$i][1]."\" title=\"".$val_jour[$i][1]."\">";
  127. if($max_pages!=0){
  128. $indice=bcdiv($val_jour[$i][0],$max_pages,2); $hauteur=bcmul($indice,180.00,2);
  129. }
  130. $graph_byday .= "<img src=\"images/histo-vv.gif\" height=\"".$hauteur."\" width=\"7\" alt=\"".$val_jour[$i][0]."\" title=\"".$val_jour[$i][0]."\"></td>";
  131. }
  132. $graph_byday .= "
  133. </TR>
  134. <tr>
  135. <td align=\"right\" valign=\"bottom\">".$EchyMin."</td>
  136. </tr>
  137. <TR>
  138. <TD><B>". $MSG_GRAF_JOUR."</B></TD>
  139. <td align=center>&nbsp;</td><td align=center>&nbsp;</td>"; // Pour echelle x
  140. //----------------- calcul jour du mois et week end pour echelle x ------------------------
  141. $mois = $_POST["mois"];
  142. $jm = explode("/",$mois);
  143. $nbjourdumois = maxDaysInMonth($jm[0], $jm[1]);
  144. // Premier samedi du mois (6eme jour de la semaine) fonction get_first_day
  145. $premiersamedi = strftime("%d", get_first_day(6, $jm[0], $jm[1]));
  146. $weekend = "/";
  147. if ($premiersamedi == 7) { $weekend .= sprintf("%02d",1).'|'; } //Le 1er jour du mois est un dimanche
  148. for($i=$premiersamedi;$i<=$nbjourdumois;$i=$i+7){
  149. $week = $i;
  150. $week = $week+0;
  151. $weekend .= sprintf("%02d",$week).'|';
  152. $weekend .= sprintf("%02d",$week+1) .'|';
  153. }
  154. $weekend = substr($weekend,0,strlen($weekend)-1); //supp last |
  155. $weekend .= "/";
  156. //------------------ Affichage echelle x -----------------
  157. for($i=1;$i<=$nbjourdumois;$i++){
  158. $num=$i;
  159. if(!preg_match($weekend, sprintf("%02d",$num))) { //$num+0 pour supprimer les 0 devant 01, 02 ,03 etc
  160. $graph_byday .= "<td align=center>". sprintf("%02d", $num)."</td>";
  161. } else {
  162. $graph_byday .= "<td align=center><b><font color=#990000>". sprintf("%02d", $num)."</font></b></td>";
  163. }
  164. }
  165. //---------------------------------------------------------------------------------------
  166. $graph_byday .= "
  167. </TR></TBODY></TABLE><!-- Rows END --></TD></TR><!-- footer -->
  168. <TR>
  169. </TR></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><br>";
  170. //echo $graph_byday; //Affichage graph
  171. $show_cumul_page .= $graph_byday;
  172. $graph_byday ="";
  173. ################################################################################################################################################################
  174. $show_cumul_page .= "
  175. <TABLE CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  176. <TBODY>
  177. <TR>
  178. <TD><!-- Data BEGIN -->
  179. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  180. <TBODY>
  181. <TR>
  182. <TH class=TABLETITLE>". $MSG_REF_TITRE. ' '. $mois."</TH>
  183. </TR>
  184. <TR>
  185. <TD colSpan=2><!-- Rows BEGIN -->
  186. <TABLE border=1 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  187. <TBODY>
  188. <TR>
  189. <TH>". $MSG_REFERANT."</TH>
  190. <TH>". $MSG_REF_MOTCLE."</TH>
  191. <TH>". $MSG_VISITEURS."</TH>
  192. </TR>";
  193. require "config_moteur.php";
  194. //-------------------------------------------------------------------------------------------
  195. unset($Tab_referer);
  196. $result = mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois' order by referer");
  197. $nb_unknow = 0;
  198. while($row=mysql_fetch_array($result)){
  199. $referer=parse_url($row[referer]);
  200. if(!preg_match($AllBots, $row['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent"
  201. //--------------------- extraction mots clés -------------
  202. $url=parse_url($site);
  203. $ref=$referer["host"];
  204. if($ref<>$url["host"]){
  205. //Pour les adwords l'url est trouvée car dans visiteur.php est ajouté au referer $Referer = urldecode($Url_syndication[0]). '?googlesyndication=1' ou '&googlesyndication=1';
  206. $test_keword[] = array($ref,MotsCles($row[referer],$ref));
  207. }
  208. //--------------------------------------------------------
  209. //--------------- ext referer et nb visite ---------------
  210. if ($row['referer']) { //
  211. $Tab_referer[] = $referer['host'];
  212. } else { //Visiteurs avec user agent et referer vide modif 31-08-2009
  213. $Tab_referer[] = "Unknown or direct";
  214. $nb_unknow = $nb_unknow + 1;
  215. }
  216. }
  217. }
  218. //Attention array_unique ne garde que les clés différentes mais garde la chronologie --> faire usort($Tab_referer, "CompareValeurs"); apr?s
  219. $Tab_referer_unique = @array_unique($Tab_referer);
  220. @usort($Tab_referer_unique, "CompareValeurs");
  221. unset($Tab_aff_ref);
  222. for($i=0;$i<count($Tab_referer_unique);$i++){
  223. $result_agent = mysql_query("select agent from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and date like '%$mois'");
  224. $test_agent = mysql_fetch_array($result_agent);
  225. //if(!preg_match($AllBots, $test_agent['agent'])) n'est pas nécessaire mais certainement plus rapide comme ça
  226. if(!preg_match($AllBots, $test_agent['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent" modif 31-08-2009
  227. if (trim($Tab_referer_unique[$i])<>'') {
  228. // compte le nombre de visiteurs par referant
  229. if ( strstr(trim($Tab_referer_unique[$i]), 'google') ) {
  230. $result = mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and date like '%$mois'");
  231. } else {
  232. $result = mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and referer not like '%source=web%' and referer not like '%source=hp%' and date like '%$mois'");
  233. }
  234. if (!$result) {
  235. echo 'Impossible d\'exécuter la requ?te : ' . mysql_error();
  236. exit;
  237. }
  238. $row_nb_visites=mysql_fetch_row($result);
  239. //------------------------------------------
  240. //tab mots clé/referant
  241. for($i2=0;$i2<count($test_keword);$i2++){
  242. if(strstr($test_keword[$i2][0],$Tab_referer_unique[$i])) {
  243. $referer_kew[$i] .= $test_keword[$i2][1].' ';
  244. }
  245. }
  246. //------------------------------------------
  247. if ($row_nb_visites[0] == 0){ //si = 0 => referer vide (donc result mysql vide) user agent et referer vide modif 31-08-2009
  248. $row_nb_visites[0] = $nb_unknow;
  249. }
  250. $Tab_aff_ref[] = array($row_nb_visites[0], $Tab_referer_unique[$i],$referer_kew[$i]); //dans ce sens car on trie sur nb visites
  251. }
  252. }
  253. }
  254. //--------------------------------------------------
  255. // Mise en forme mots clés googlesyndication et Affichage
  256. @array_multisort($Tab_aff_ref,SORT_DESC);
  257. for($i=0;$i<count($Tab_aff_ref);$i++){
  258. //echo $Tab_aff_ref[$i][2]."<br><br>";
  259. $Mots_by_referer = str_replace('] [', ']+-+[', $Tab_aff_ref[$i][2]);
  260. $Mots_by_referer = str_replace('] [', ']+-+[', $Mots_by_referer); // car certains comportent 2 espaces --> A voir o? ils sont mis ou supprimmer espaces multiples
  261. $Mots_by_referer = str_replace('] [', ']+-+[', $Mots_by_referer);// car certains comportent 3 espaces --> A voir o? ils sont mis
  262. $Mots_by_referer = $Mots_by_referer; // Tout en minuscule
  263. //echo $Mots_by_referer."<br><br>";
  264. unset($Tab_motcles);
  265. $Tab_motcles = explode('+-+',$Mots_by_referer);
  266. for($j=0;$j<count($Tab_motcles);$j++){
  267. $Tab_motcles[$j] = trim($Tab_motcles[$j]); // Trés important pour array_unique apr?s str_replace
  268. //echo $Tab_motcles[$j]."<br>";
  269. }
  270. unset($Tab_motcles_unique);
  271. $Tab_motcles_unique = array_unique($Tab_motcles);
  272. //----------------------
  273. unset($tab_keywords);
  274. for($j=0;$j<count($Tab_motcles_unique);$j++){
  275. if (trim($Tab_motcles_unique[$j])) {
  276. $tab_keywords[] = array($Tab_motcles_unique[$j], substr_count($Mots_by_referer, $Tab_motcles_unique[$j]));
  277. }
  278. }
  279. // Obtient une liste de colonnes
  280. unset($Mot);
  281. unset($Nb);
  282. if ($tab_keywords) {
  283. foreach ($tab_keywords as $key => $row) {
  284. $Mot[$key] = $row[0];
  285. $Nb[$key] = $row[1];
  286. }
  287. }
  288. // Trie les données par volume croissant
  289. // Ajoute $tab_keywords en tant que dernier param?tre, pour trier par la clé commune
  290. @array_multisort($Nb, SORT_DESC, $tab_keywords);
  291. //---------------------------------------------------------------
  292. //Affichage
  293. $lenmax=35;
  294. if (strlen($Tab_aff_ref[$i][1])>$lenmax) {
  295. $chaine1=substr($Tab_aff_ref[$i][1], 0, $lenmax);
  296. $chaine2=substr($Tab_aff_ref[$i][1], $lenmax);
  297. $Tab_aff_ref[$i][1] = $chaine1."<br>".$chaine2;
  298. }
  299. //-----------------------------
  300. $show_cumul_page .= "<tr><td valign=top>".$Tab_aff_ref[$i][1]."</td>
  301. <td nowrap>"; //Référant
  302. if (count($Tab_motcles_unique)>1) {
  303. $show_cumul_page .= "<span> Différents: ". count($Tab_motcles_unique)."</span>";
  304. }
  305. for($j=0;$j<count($tab_keywords);$j++){ //Affiche les phrases clés
  306. if (strstr($tab_keywords[$j][0],'googlesyndication=1')) {
  307. $tab_keywords[$j][0] = str_replace('?googlesyndication=1', '<font color=#666666>&nbsp;&nbsp;'.utf8_encode($MSG_ADWORDS_CONTENT_NETWORK).'</font><br>', $tab_keywords[$j][0]);
  308. $tab_keywords[$j][0] = str_replace(htmlentities('&googlesyndication=1'), '<font color=#666666>&nbsp;&nbsp;'.utf8_encode($MSG_ADWORDS_CONTENT_NETWORK).'</font><br>', $tab_keywords[$j][0]);//ici il faut htmlentities('&googlesyndication=1'), voir si ne serait pas mieux au niveau de config moteur
  309. $tab_keywords[$j][0] = substr(trim($tab_keywords[$j][0]),0,-5); //supp le dernier '<br> '
  310. }
  311. $show_cumul_page .= "<br><span><font color=#990000>".utf8_decode(urldecode($tab_keywords[$j][0]))."</font></span>";
  312. }
  313. $show_cumul_page .= "&nbsp;</td>
  314. <td nowrap>";
  315. $show_cumul_page .= "<span> Total: ".$Tab_aff_ref[$i][0]."</span>";
  316. for($j=0;$j<count($tab_keywords);$j++){ //affiche le nombre de visite pour chaque mot ou référant
  317. $show_cumul_page .= "<br><span><font color=#990000>".utf8_decode(urldecode($tab_keywords[$j][1]))."</font></span>";
  318. }
  319. $show_cumul_page .= "&nbsp;</td></tr>";
  320. //----------------------------
  321. }
  322. //--------------------------------------------------
  323. unset($Tab_referer);
  324. unset($Tab_referer_unique);
  325. unset($row_nb_visites);
  326. unset($Tab_aff_ref);
  327. //--------------------------------------------------------------------------------
  328. $show_cumul_page .= '
  329. </TBODY></TABLE><!-- Rows END --></TD></TR><!-- no footer --></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><BR>
  330. ';
  331. if ($mois==""){
  332. $mois = date('m/Y',strtotime($UTC." hours", strtotime(date("Y-m-d H:i:s"))));
  333. }
  334. $result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where date like '%$mois' and v.code=p.code order by heure");
  335. $nb_visite=0;
  336. $heure_premier="";
  337. while($row=mysql_fetch_array($result)){
  338. if($heure_premier==""){
  339. $heure_premier=$row[heure];
  340. }
  341. $nb_visite=$nb_visite+$row[nb_visite]; //Pour calcul %
  342. $heure_dernier=$row[heure];
  343. }
  344. $max_visite=$NbpageVues_HorsBots;
  345. $result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where v.date like '%$mois' and v.code=p.code order by page");
  346. $row=mysql_fetch_array($result);
  347. $url=$row[page];
  348. $nb_url=0;
  349. $nb_vis=0;
  350. $result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where v.date like '%$mois' and v.code=p.code order by page");
  351. while($row=mysql_fetch_array($result)){
  352. $page=$row[page];
  353. if(!preg_match($AllBots, $row[agent])) {
  354. //---------------------------------------
  355. $User_Agent=$row[agent];
  356. $trash=false;
  357. for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
  358. if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
  359. $trash=true;
  360. }
  361. }
  362. //---------------------------------------
  363. }
  364. if(!preg_match($AllBots, $row[agent]) && $trash==false) {
  365. if($url==$page){
  366. $nb_url=$nb_url+$row[nb_visite];
  367. $nb_vis++;
  368. } else {
  369. $nb=$nb_url*100;
  370. if($max_visite!=0){
  371. $pourcent=bcdiv($nb,$max_visite,2);
  372. }
  373. $page_vue[]= array($url,$nb_vis, $nb_url, $pourcent);
  374. $url=$page;
  375. $nb_url=$row[nb_visite];
  376. $nb_vis=1;
  377. }
  378. }
  379. } // Fin if(!preg_match($AllBots, $row[agent])) {
  380. $nb=$nb_url*100;
  381. if($max_visite!=0){
  382. $pourcent=bcdiv($nb,$max_visite,2);
  383. }
  384. $show_cumul_page .= '
  385. <TABLE CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  386. <TBODY>
  387. <TR>
  388. <TD><!-- Data BEGIN -->
  389. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  390. <TBODY>
  391. <TR>
  392. <TH class=TABLETITLE>'. $MSG_PAGESVISITES.' ('.$MSG_ROBOTS_EXCLUS.')<br>'.$mois.'</TH>
  393. </TR>
  394. <TR>
  395. <TD colSpan=2><!-- Rows BEGIN -->
  396. <TABLE border=1 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  397. <TBODY>
  398. <tr>
  399. <th valign="top" align="right">'. $MSG_TOTAL.' : <br><br></th>
  400. <td valign="top" align="center">'. $NbVisites_HorsBots.'<br></td>
  401. <td valign="top" align="center">'. $NbpageVues_HorsBots.'<br></td>
  402. <td valign="top" align="center">&nbsp;<br></td>
  403. </tr>
  404. <TR>
  405. <TH>'.$MSG_PAGE.'</TH>
  406. <TH>'.$MSG_VISITE.'</TH>
  407. <TH>'.$MSG_PAGESVISITES.'</TH>
  408. <TH>'.$MSG_PAGES_POURCENTAGE.'</TH></TR>';
  409. $page_vue[]= array($url,$nb_vis, $nb_url, $pourcent);
  410. @usort($page_vue, "CompareValeurs");
  411. $cpt=0;
  412. while ($page_vue[$cpt][0]<>""){
  413. $show_cumul_page .= "<tr><td>".utf8_decode($page_vue[$cpt][0])."</td><td align=center>".$page_vue[$cpt][1]."</td><td align=center>".$page_vue[$cpt][2]."</td><td align=center>".$page_vue[$cpt][3]."%</td></tr>";
  414. $cpt++;
  415. }
  416. $show_cumul_page .= '
  417. </TBODY></TABLE><!-- Rows END --></TD></TR><!-- no footer --></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><BR>
  418. ';
  419. //############################################################################################
  420. //------------ Affichage Origine géographique des viteurs (hors robots) ----------------------
  421. $result=mysql_query("select agent, nb_visite ,domaine from ".TABLE_VISITEUR." where date like '%$mois'");
  422. while($row=mysql_fetch_array($result)){
  423. $Country[] .= $row['domaine'];
  424. }
  425. $Country = @array_unique($Country);
  426. @array_multisort ($Country, SORT_ASC);
  427. //----------------------------------
  428. //Important mise ? 0 des variables
  429. unset($Tab_country_pages_visiteurs);
  430. for($i=0;$i<count($Country);$i++){ //Comment faire autrement
  431. $Nb_visites = 'Nb_'.$Country[$i];
  432. $$Nb_visites = 0;
  433. $Nb_pages_visites = $Country[$i];
  434. $$Nb_pages_visites = 0;
  435. }
  436. //-----------------------------------
  437. $result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'");
  438. while($row=mysql_fetch_array($result)){
  439. //---------------------------------------
  440. $User_Agent=$row[agent];
  441. $trash=false;
  442. for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
  443. if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
  444. $trash=true;
  445. }
  446. }
  447. //---------------------------------------
  448. if(!preg_match($AllBots, $row[agent]) && $trash==false) {
  449. for($i=0;$i<count($Country);$i++){
  450. if($row[domaine]==$Country[$i]) {
  451. $Nb_visites = 'Nb_'.$Country[$i];
  452. $$Nb_visites = $$Nb_visites + 1;
  453. $Nb_pages_visites = $Country[$i];
  454. $$Nb_pages_visites = $$Nb_pages_visites + $row['nb_visite'];
  455. $Tab_country_pages_visiteurs[$i] = array($Country[$i],$$Nb_pages_visites,$$Nb_visites);
  456. }
  457. }
  458. }
  459. }
  460. //--------- Affichage des résultats --------------------------
  461. @usort($Tab_country_pages_visiteurs,"CompareValeurs");
  462. $indice = @bcdiv(1,($Tab_country_pages_visiteurs[0][1]/300),2); //proportion en rapport au plus grand nb de pages visités
  463. $show_cumul_page .= '
  464. <TABLE CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  465. <TBODY>
  466. <TR>
  467. <TD><!-- Data BEGIN -->
  468. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  469. <TBODY>
  470. <TR>
  471. <TH class=TABLETITLE>'.$MSG_DOMAIN_TITRE.' ('.$MSG_ROBOTS_EXCLUS.')</TH>
  472. </TR>
  473. <TR>
  474. <TD colSpan=2><!-- Rows BEGIN -->
  475. <TABLE border=1 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  476. <TBODY>
  477. <TR>
  478. <TH>'.$MSG_DOMAIN.' ('.count($Tab_country_pages_visiteurs).')</TH>
  479. <TH>'.$MSG_NB_VISITEURS.'</TH>
  480. <TH>'.$MSG_PAGESVISITES.'</TH>
  481. </TR>
  482. ';
  483. for($i=0;$i<count($Tab_country_pages_visiteurs);$i++){
  484. if ($Tab_country_pages_visiteurs[$i][0]=='') { $Tab_country_pages_visiteurs[$i][0] = $MSG_ORIGIN_UNKNOWN;}
  485. $show_cumul_page .= "<tr>
  486. <td>
  487. <b>".$Tab_country_pages_visiteurs[$i][0]."</b>
  488. </td>
  489. <td align=\"left\">
  490. <img src=\"images/histo-h.gif\" width=\"";
  491. $hauteur=bcmul($Tab_country_pages_visiteurs[$i][2],$indice,2);
  492. $show_cumul_page .= $hauteur . "\" height=\"8\">".$Tab_country_pages_visiteurs[$i][2].
  493. "</td>
  494. <td align=\"left\">
  495. <img src=\"images/histo-h.gif\" width=\"";
  496. $hauteur=bcmul($Tab_country_pages_visiteurs[$i][1],$indice,2);
  497. $show_cumul_page .= $hauteur."\" height=\"8\">".$Tab_country_pages_visiteurs[$i][1].
  498. "</td>";
  499. }
  500. $show_cumul_page .= '
  501. </TBODY></TABLE><!-- Rows END --></TD></TR><!-- no footer --></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><BR>
  502. ';
  503. //################# AFFICHAGE ########################
  504. echo $show_cumul_page;
  505. //####################################################
  506. $result = mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'"); // Pour bots non définis
  507. $nbr_result = mysql_num_rows($result);
  508. $mois_actuelle = date('m/Y',strtotime($UTC." hours", strtotime(date("Y-m-d H:i:s"))));
  509. $mois_Visualise = $mois;
  510. $Mois_Annee_visualise = explode("/", $mois_Visualise);
  511. $mois_visualise = $Mois_Annee_visualise[0]; // mois
  512. $annee_visualise = $Mois_Annee_visualise[1]; //année
  513. $Mois_Annee_actuelle = explode("/", $mois_actuelle);
  514. $mois_actuelle = $Mois_Annee_actuelle[0];
  515. $annee_actuelle = $Mois_Annee_actuelle[1];
  516. if ($annee_actuelle.$mois_actuelle > $annee_visualise.$mois_visualise) { //Pas d'affichage du bouton ajouter robot
  517. $dislpay_button_tool_bots = "false"; //Important "false" entre guillemets car affiche le bouton si $dislpay_button_tool_bots = "";
  518. }
  519. $AfficheOS=true;
  520. $AfficheNav=true;
  521. $AfficheRobots=true;
  522. include('tab_os_nav_robots.php'); // Affichage OS, navigateurs, robots
  523. //############################### Mise en cache ###################################################
  524. //---------------- met en cache si mois entier --------------------------------------------
  525. /*
  526. echo "mois_visualise: ".$mois_visualise."<br>";
  527. echo "Annee_visualise: ".$annee_visualise."<br>";
  528. echo "mois__actuelle: ".$mois_actuelle."<br>";
  529. echo "Annee_actuelle: ".$annee_actuelle."<br>";
  530. */
  531. if ($annee_actuelle.$mois_actuelle > $annee_visualise.$mois_visualise) { //on met en cache si annéemois_actuelle > annéemois_Visualise et on archive MySQL
  532. if (!is_dir("cache")) {
  533. mkdir ("cache");
  534. }
  535. if (!is_dir($path_allmystats."cache")) {
  536. mkdir ($path_allmystats."cache");
  537. }
  538. //--------------------------------------------------------------------------------------
  539. //car path image des fichiers cache (A voir si faire path abs vers /allmystats/image/ comme dans stats_in.php)
  540. if (!is_dir($path_allmystats."cache/images")) {
  541. mkdir ($path_allmystats."cache/images");
  542. }
  543. if (!file_exists("cache/images/histo-v_black.gif")) {
  544. copy($path_allmystats."images/histo-v_black.gif", $path_allmystats."cache/images/histo-v_black.gif");
  545. }
  546. if (!file_exists("cache/images/histo-v.gif")) {
  547. copy($path_allmystats."images/histo-v.gif", $path_allmystats."cache/images/histo-v.gif");
  548. }
  549. if (!file_exists("cache/images/histo-vv.gif")) {
  550. copy($path_allmystats."images/histo-vv.gif", $path_allmystats."cache/images/histo-vv.gif");
  551. }
  552. if (!file_exists("cache/images/histo-h.gif")) {
  553. copy($path_allmystats."images/histo-h.gif", $path_allmystats."cache/images/histo-h.gif");
  554. }
  555. //--------------------------------------------------------------------------------------
  556. //$format_date_file_name = str_replace('/', '-', $mois_Visualise);
  557. $Mois_Annee = explode("/", $mois_Visualise);
  558. $format_date_file_name = $Mois_Annee[1].'-'.$Mois_Annee[0];
  559. //$Fnm = "cache/stats_".$site."_".$format_date_file_name.".html";
  560. $Fnm = "cache/stats_".$site."_".$format_date_file_name.".php";
  561. $inF = fopen($Fnm,"w");
  562. $show_footer = '<div align="center"><strong>AllMyStats Powered by</strong> <A href="http://www.wertronic.com" class="Style1">Wertronic</A><br>Cedstat Release</div><br>';
  563. // A voir si on met dans config_allmystats && $public == true ; et test si dessous
  564. $page_html =
  565. '<?
  566. include_once("../application_top.php");
  567. require "../config_allmystats.php";
  568. if(($user_login!=$_SESSION["userlogin"] || $passwd!=$_SESSION["userpass"])) {
  569. header("location: ../index_frame.php");
  570. }
  571. ?>
  572. <html>
  573. <head>
  574. <title>AllMyStats - '. $site.' - '.$format_date_file_name.'</title>
  575. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  576. <link rel="stylesheet" type="text/css" href="../stylesheet.css">
  577. </head>
  578. <body><table width="100%" border="0" align="center">
  579. <tr>
  580. <td align="center"><big><strong>Archives site: '.$site." - Date: ".$mois_Visualise.'</strong></big><br></td>
  581. </tr>
  582. <tr>
  583. <td align="center">'.$show_footer . $show_cumul_page . $show_page_os_nav_robots . $show_footer.'</td>
  584. </tr>
  585. </table></body></html>';
  586. fwrite($inF,$page_html);
  587. fclose($inF);
  588. //------------ Archive tables allmystats MySQL ------------------------------------------
  589. /*
  590. //variables dans tab_os_robots.php
  591. echo "Test total robot: ".$Total_distinct_robots."<br>";
  592. echo "Test ip robot: ".$Total_distincts_Ip_bots."<br>"; //résultat un peu différent de cumul.php ?
  593. echo "Test total bot robot: ".$Total_page_visites_bot."<br>";
  594. //variables de cumulpage.php
  595. echo "Test total visites hors robots: ".$NbVisites_HorsBots."<br>";
  596. echo "Test total page vues hors robots: ".$NbpageVues_HorsBots."<br>";
  597. $Total_visites = $NbVisites_HorsBots + $Total_distincts_Ip_bots;
  598. $Total_page_vues = $NbpageVues_HorsBots + $Total_page_visites_bot;
  599. echo "Total visites: ".$Total_visites."<br>";
  600. echo "Total page_vues: ". $Total_page_vues."<br><br><br>";
  601. */
  602. $Mois_Annee = explode("/", $mois_Visualise);
  603. $mois = trim($Mois_Annee[0]);
  604. $annee = trim($Mois_Annee[1]); //trim tjrs important derri?re un explode
  605. $Total_visites = $NbVisites_HorsBots + $Total_distincts_Ip_bots;
  606. $Total_page_vues = $NbpageVues_HorsBots + $Total_page_visites_bot;
  607. $result = mysql_query("insert into ".TABLE_ARCHIVE." (annee, mois, visite, visiteur, visites_hors_bot, pages_hors_bot, visites_robot,pages_robots) values('$annee','$mois','$Total_page_vues','$Total_visites','$NbVisites_HorsBots','$NbpageVues_HorsBots','$Total_distincts_Ip_bots','$Total_page_visites_bot')") or die('Erreur SQL! '.$result.'<br>'.mysql_error());
  608. $result = mysql_query("delete from ".TABLE_VISITEUR." where code like '".$annee.$mois."%'") or die('Erreur SQL! '.$result.'<br>'.mysql_error());
  609. $result = mysql_query("delete from ".TABLE_PAGE." where code like '".$annee.$mois."%'") or die('Erreur SQL! '.$result.'<br>'.mysql_error()); ;
  610. //---------------------------------------------------------------------------------------
  611. }
  612. //-------------------------------------------------------------------------------------------
  613. ############################################# Functions ######################################################
  614. //TODO rep functions car existe aussi dans cumulpage.php, stats_in.php, histomaois.php
  615. /**
  616. * Fonction retournant le nombre de jours dans un mois.
  617. * @param integer $month Mois de 1 ? 12
  618. * @param integer $year Année
  619. * @return integer Nombre de jours
  620. */
  621. function maxDaysInMonth($month, $year)
  622. {
  623. $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
  624. return $days;
  625. }
  626. /**
  627. *
  628. * Gets the first weekday of that month and year
  629. *
  630. * @param int The day of the week (0 = sunday, 1 = monday ... , 6 = saturday)
  631. * @param int The month (if false use the current month)
  632. * @param int The year (if false use the current year)
  633. *
  634. * @return int The timestamp of the first day of that month
  635. *
  636. **/
  637. function get_first_day($day_number=1, $month=false, $year=false)
  638. {
  639. $month = ($month === false) ? strftime("%m"): $month;
  640. $year = ($year === false) ? strftime("%Y"): $year;
  641. $first_day = 1 + ((7+$day_number - strftime("%w", mktime(0,0,0,$month, 1, $year)))%7);
  642. return mktime(0,0,0,$month, $first_day, $year);
  643. }
  644. ##############################################################################################################
  645. ?>