<?php
  ///////////////////////////////////////////////////
  // Система учёта посещаемости сайта - PowerCounter
  // 2003-2006 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Поддержка: http://www.softtime.ru/forum/
  // Симдянов И.В. (simdyanov@softtime.ru)
  // Кузнецов М.В. (kuznetsov@softtime.ru)
  // Голышев С.В. (softtime@softtime.ru)
  // Левин А.В. (loki_angel@mail.ru)
  ///////////////////////////////////////////////////
  // Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
  Error_Reporting(E_ALL & ~E_NOTICE); 

  $title='Поисковые&nbsp;роботы';   
  $pageinfo='На этой странице вы можете видеть статистику по посещению сайта роботами поисковых систем. Это достаточно важный параметр, позволяющий следить за тем, насколько успешно проходит индексация сайта поисковыми системами. ';
  $menu = 10;  
  $helppage='';
  // Заголовок страницы
  include "topcounter.php";
  // Формируем массив с названиями поисковых роботов
  $rob['serch']['ram'] = "robot_rambler";
  $rob['serch']['gog'] = "robot_google";
  $rob['serch']['ynd'] = "robot_yandex";
  $rob['serch']['apt'] = "robot_aport";
  $rob['serch']['msn'] = "robot_msnbot";
  $rob['serch']['oth'] = "none";
  $rob['serch']['tot'] = "total";
  $rob['name']['ram'] = "Rambler";
  $rob['name']['gog'] = "Google";
  $rob['name']['ynd'] = "Yandex";
  $rob['name']['apt'] = "Aport";
  $rob['name']['msn'] = "MSN";
  $rob['name']['oth'] = "Другие";
  $rob['name']['tot'] = "Всего";
  // Включаем массив временных интервалов
  require_once("time_interval.php");
  // Вычисляем количество хитов для поисковых роботов систем
  // по 5 временным интервалам, определенных в файле
  // time_interval.php 	 
  //запрашиваем данные за текущие сутки	
    list($hit['ram'][0],
         $hit['gog'][0], 
         $hit['ynd'][0], 
         $hit['apt'][0], 
         $hit['msn'][0], 
         $hit['oth'][0], 
         $hit['tot'][0]) = robots_today(
                              $tbl_ip, 
                              $id_page); 
	//запрашиваем данные за вчерашине сутки	
    list($hit['ram'][1],
         $hit['gog'][1], 
         $hit['ynd'][1], 
         $hit['apt'][1], 
         $hit['msn'][1], 
         $hit['oth'][1], 
         $hit['tot'][1]) = robots($time[1]['begin'], 
                              $time[1]['end'],
                              $tbl_arch_robots, 
                              $tbl_arch_robots_month,
                              $id_page);
	// запрашиваем данные за остальные периоды и прибавляем к ним данные за текущие сутки																		 
  for($i=2; $i<5; $i++)
  {
    list($hit['ram'][$i],
         $hit['gog'][$i], 
         $hit['ynd'][$i], 
         $hit['apt'][$i], 
         $hit['msn'][$i], 
         $hit['oth'][$i], 
         $hit['tot'][$i]) = robots($time[$i]['begin'], 
                              $time[$i]['end'],
                              $tbl_arch_robots, 
                              $tbl_arch_robots_month,
                              $id_page);
										 
			$hit['ram'][$i]	+=	$hit['ram'][0];
         $hit['gog'][$i]	+=	$hit['gog'][0]; 
         $hit['ynd'][$i]	+=	$hit['ynd'][0]; 
         $hit['apt'][$i]	+=	$hit['apt'][0]; 
         $hit['msn'][$i]	+=	$hit['msn'][0]; 
         $hit['oth'][$i]	+=	$hit['oth'][0]; 
         $hit['tot'][$i]	+=	$hit['tot'][0];
  }												 
?>
<table width=100% class="table" border="0" cellpadding="0" cellspacing="0">   
<tr class="header" align="center">
  <td>Имя робота</td>
  <td>Сегодня</td>
  <td>Вчера</td>
  <td>За 7 дней</td>
  <td>За 30 дней</td>
  <td>За всё время</td>
</tr>
<?php
  // Формируем таблицу
  foreach($rob['serch'] as $key => $name)
  {
    echo "<tr align=right>";
    echo "<td class=field >".$rob['name'][$key]."</td>";
    for($i=0; $i<4; $i++)
    {
      echo "<td><a href=pages.php?begin=".$time[$i]['begin']."&end=".$time[$i]['end']."&ip=$name>".sprintf("%d (%01.1f%s)",$hit["$key"][$i],$hit["$key"][$i]/$hit['tot'][$i]*100,'%')."</a></td>"; 
    }
      //выводим данные за весь период без ссылки
	 echo "<td>".sprintf("%d (%01.1f%s)",$hit["$key"][4],$hit["$key"][4]/$hit['tot'][4]*100,'%')."</td>";
    echo "</tr>";
  }
?>
</table>
<?php
  // Включаем завершение страницы
  include "bottomcounter.php";

// Функция возвращает массив из шести переменных:
// Число роботов Rambler
// Число роботов Google
// Число роботов Yandex
// Число роботов Aport
// Другие роботы
// Общее число посещений
// $begin - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить начальную точку временного интервала
// $end - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить конечную точку временного интервала
// $id_page - первичный ключ записи таблицы pages, соответствующей странице сайта
function robots_today($tbl_ip, $id_page)
{ 
  // Эта переменная определяет осуществляется ли запрос к конкретной
  // странице или ко всему сайту.
  if($id_page == "") $tmp = "";
  else $tmp = " AND id_page=$id_page";
  // Если учёт происходит вплоть до сегодняшнего дня - учитываем это, обращаясь
  // к текущим хитам и хостам в таблице $tbl_ip
    $tmp2 = " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 1 DAY";
    // Формируем SQL-запросы
    $first = "SELECT COUNT(*) FROM $tbl_ip WHERE systems = ";
    $last = $tmp2.$tmp;
    $query['ynd'] = $first."'robot_yandex'".$last;
    $query['ram'] = $first."'robot_rambler'".$last;
    $query['gog'] = $first."'robot_google'".$last;
    $query['apt'] = $first."'robot_aport'".$last;
    $query['msn'] = $first."'robot_msnbot'".$last;
	 $query['oth'] = $first."'none'".$last;
    // Выполняем SQL-запросы
    foreach($query as $robot => $value)
    {
      $hit[$robot] = mysql_query($value);
      if(!$hit[$robot]) puterror("Ошибка при обращении к таблице роботов ");
      $hits[$robot] = mysql_result($hit[$robot], 0);
    }
  $total = array_sum($hits);
  // Во избежания деления на 0 проверяем значение общего числа хитов $total
  if($total == 0) $total = 1;
  return array($hits['ram'], $hits['gog'], $hits['ynd'], $hits['apt'], $hits['msn'], $hits['oth'], $total);
}
function robots($begin, $end, $tbl_arch_robots, $tbl_arch_robots_month, $id_page)
{
  global $rob;
  // Обнуляем хиты и хосты
  $hits = array();

  /////////////////////////////////////////////////////////////////////////////
  // Исходим из таблицы соответствия
  //            begin end
  // сегодня      1    0  - это извлекаем из $tbl_ip
  // вчера        2    1  - это извлекаем из $tbl_arch_hits
  // неделя       7    0  - это извлекаем из $tbl_arch_hits
  // месяц       30    0  - это извлекаем из $tbl_arch_hits
  // всё время    0    0  - это извлекаем из $tbl_arch_hits
  /////////////////////////////////////////////////////////////////////////////

  // Эта переменная определяет осуществляется ли запрос к конкретной
  // странице или ко всему сайту.
  if($id_page == "") $tmp = "";
  else $tmp = " AND id_page=$id_page";

  // Если требуемый интервал затрагивает дни, упакованные в архивную таблицу
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_clients
  if($begin != 1 && $begin != 0)
  {
    // Запрос на статистику за временной интервал определяемый
    // параметрами $begin,$end
    if($end != 0) $tmp1 = "putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".($end - 1)."' DAY";
    else $tmp1 = "putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
    if($begin == 0) $tmp2 = "";
    else $tmp2 = " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".($begin - 1)."' DAY";

    $last = $tmp1.$tmp2;
    $query['ynd'] = "SELECT SUM(yandex) FROM $tbl_arch_robots WHERE ".$last;
    $query['ram'] = "SELECT SUM(rambler) FROM $tbl_arch_robots WHERE ".$last;
    $query['gog'] = "SELECT SUM(google) FROM $tbl_arch_robots WHERE ".$last;
    $query['apt'] = "SELECT SUM(aport) FROM $tbl_arch_robots WHERE ".$last;
    $query['msn'] = "SELECT SUM(msn) FROM $tbl_arch_robots WHERE ".$last;
    $query['oth'] = "SELECT SUM(none) FROM $tbl_arch_robots WHERE ".$last;

    // Выполняем SQL-запросы
    foreach($query as $robot => $value)
    {
      $hit[$robot] = mysql_query($value);
      if(!$hit[$robot]) puterror("Ошибка при обращении к таблице архивных записей ");
      $hits[$robot] += mysql_result($hit[$robot], 0);
    }
  }

  // Если требуемый интервал затрагивает дни, упакованные в месячную архивную таблицу
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_clients_month
  if($begin == 0 && $end == 0)
  {
    // Запрос на статистику за временной интервал определяемый
    // параметрами $begin,$end
    $tmp1 = " putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
    $tmp2 = "";

    $last = $tmp1.$tmp2;
    $query['ynd'] = "SELECT SUM(yandex) FROM $tbl_arch_robots WHERE ".$last;
    $query['ram'] = "SELECT SUM(rambler) FROM $tbl_arch_robots WHERE ".$last;
    $query['gog'] = "SELECT SUM(google) FROM $tbl_arch_robots WHERE ".$last;
    $query['apt'] = "SELECT SUM(aport) FROM $tbl_arch_robots WHERE ".$last;
    $query['msn'] = "SELECT SUM(msn) FROM $tbl_arch_robots WHERE ".$last;
	 $query['oth'] = "SELECT SUM(none) FROM $tbl_arch_robots WHERE ".$last;

    // Выполняем SQL-запросы
    foreach($query as $robot => $value)
    {
      $hit[$robot] = mysql_query($value);
      if(!$hit[$robot]) puterror("Ошибка при обращении к таблице архивных записей ".$value);
      $hits[$robot] += mysql_result($hit[$robot], 0);
    }

    // Получаем самое старое число из таблицы $tbl_arch_hits,
    // всё, что позже берём из таблицы $tbl_arch_hits_month
    $select = "SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data FROM $tbl_arch_robots";
    $dat = mysql_query($select);
    if(!$dat) exit("month ".mysql_error());
    if(mysql_num_rows($dat) > 0)
    {
      $last_date = mysql_result($dat, 0);
      $tmp1 = " putdate < '".date("Y-m-01 23:59:59", $last_date)."'";
      $tmp2 = "";

      // Формируем SQL-запросы
      $last = $tmp1.$tmp2;
      $query['ynd'] = "SELECT SUM(yandex) FROM $tbl_arch_robots_month WHERE ".$last;
      $query['ram'] = "SELECT SUM(rambler) FROM $tbl_arch_robots_month WHERE ".$last;
      $query['gog'] = "SELECT SUM(google) FROM $tbl_arch_robots_month WHERE ".$last;
      $query['apt'] = "SELECT SUM(aport) FROM $tbl_arch_robots_month WHERE ".$last;
      $query['msn'] = "SELECT SUM(msn) FROM $tbl_arch_robots_month WHERE ".$last;
		$query['oth'] = "SELECT SUM(none) FROM $tbl_arch_robots_month WHERE ".$last;
  
      // Выполняем SQL-запросы
      foreach($query as $robot => $value)
      {
        $hit[$robot] = mysql_query($value);
        if(!$hit[$robot]) puterror("Ошибка при обращении к таблице архивных записей");
        $hits[$robot] += mysql_result($hit[$robot], 0);
      }
    }
  }
  $total = array_sum($hits);
  // Во избежания деления на 0 проверяем значение общего числа хитов $total
  if($total == 0) $total = 1;	
  return array($hits['ram'], $hits['gog'], $hits['ynd'], $hits['apt'], $hits['msn'], $hits['oth'], $total);
}
?>
