<?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;и&nbsp;хиты';  
  $pageinfo='На этой странице вы видите общую статистику
  по посетителям сайта. <br><b>Хосты</b> – это количество
  уникальных посетителей Вашего сайта, <b>хиты</b> – это
  общее количество показов сайта.  <br>При переходе по
  ссылкам "<b>Сегодня</b>", "<b>Вчера</b>" отображается
  детальная почасовая статистика посещений за выбранный день.
  При переходе по ссылкам "<b>За 7 дней</b>" и "<b>За 30 дней
  </b>" отображается детальная суточная статистика за эти
  периоды времени.';
  $helppage = '';
  // Заголовок страницы
  include "topcounter.php";
  // Включаем массив временных интервалов
  require_once("time_interval.php");
  //запрашиваем данные за текущие сутки			//изменено 11.02.06	Loki
  list($hits_total[0],
       $hits[0],
		 $hosts_total[0],
		 $hosts[0])=show_ip_host_today($tbl_ip);
  //запрашиваем данные за вчерашине сутки			  //изменено 11.02.06  Loki
    list($hits_total[1], 
         $hits[1], 
         $hosts_total[1], 
         $hosts[1]) = show_ip_host($time[1]['begin'], 
                                    $time[1]['end'], 
                                    $tbl_arch_hits, 
                                    $tbl_arch_hits_month);
  // запрашиваем данные за остальные периоды и прибавляем к ним данные за текущие сутки	 //изменено 11.02.06	 Loki
  for($i=2; $i<5; $i++)
  {
    list($hits_total[$i], 
         $hits[$i], 
         $hosts_total[$i], 
         $hosts[$i]) = show_ip_host($time[$i]['begin'], 
                                    $time[$i]['end'], 
                                    $tbl_arch_hits, 
                                    $tbl_arch_hits_month);
	 $hits_total[$i]	+=$hits_total[0]; 
	 $hits[$i]			+=$hits[0]; 
    $hosts_total[$i]	+=$hosts_total[0]; 
    $hosts[$i]			+=$hosts[0];
  }
?>
<table class="table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="header" align="center">
  <td width=<?= 100/6 ?>% align=center>&nbsp;</td>
  <td width=<?= 100/6 ?>% align=center>Сегодня</td>
  <td width=<?= 100/6 ?>% align=center>Вчера</td>
  <td width=<?= 100/6 ?>% align=center>За 7 дней</td>
  <td width=<?= 100/6 ?>% align=center>За 30 дней</td>
  <td width=<?= 100/6 ?>% align=center>За всё время</td>
</tr>
<tr>
  <td class=field>Засчитанные хосты</td>
  <?php
    foreach($hosts as $value) echo "<td align=center><p>$value</p></td>";
  ?>
</tr>
<tr>
  <td class=field>Хосты</td>
  <?php
    foreach($hosts_total as $value) echo "<td align=center><p>$value</p></td>";
  ?>
</tr>
<tr>
  <td class=field>Засчитанные хиты</td>
  <?php
    foreach($hits as $value) echo "<td align=center><p>$value</p></td>";
  ?>
</tr>
<tr>
  <td class=field>Хиты</td>
  <?php
    foreach($hits_total as $value) echo "<td align=center><p>$value</p></td>";
  ?>
</tr>
</table>
<?php
  // Включаем завершение страницы
  include "bottomcounter.php";
// Функция возвращает массив из трёх переменных:
// количество хостов,
// количество засчитанных хитов и
// общее количества хитов.
// $begin - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить начальную точку временного интервала
// $end - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить конечную точку воменного интервала
// $id_user - первичный ключ записи таблицы users, соответствующий
// текущему сайту
// $tbl_ip - название таблицы, в которой хранятся IP-адреса
// $tbl_arch_hits - название архивной таблицы 

//отсюда и ниже исправления от 11.02.06
function show_ip_host_today($tbl_ip)								  //изменено 11.02.06 Loki
{
 
    // Запрос на статистику за текущий неархивированный день
    $tmp1 = "putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 1 DAY";

    // Общее число хитов
    $query_hit_total = "SELECT COUNT(*) 
                        FROM $tbl_ip 
                        WHERE ".$tmp1;
    // Засчитанные хиты
    $query_hit       = "SELECT COUNT(*) 
                        FROM $tbl_ip
                        WHERE systems!='none' AND
                              systems NOT LIKE 'robot_%' AND ".$tmp1;   //изменено 14.02 Loki
    // Подсчитываем число IP-адресов (хостов)
    $query_host_total= "SELECT COUNT(DISTINCT ip) 
                        FROM $tbl_ip 
                        WHERE ".$tmp1;
    // Подсчитываем число уникальных посетителей за сутки
    $query_host   = "SELECT COUNT(DISTINCT ip) 
                        FROM $tbl_ip 
                        WHERE systems!='none' AND
                              systems NOT LIKE 'robot_%' AND ".$tmp1;   //изменено 14.02 Loki

    // Осуществляем запросы к базе данных
    $tot_hit = mysql_query($query_hit_total);
    if(!$tot_hit) exit(mysql_error());
    $uni_hit = mysql_query($query_hit);
    if(!$uni_hit) exit(mysql_error());
    $tot_hst = mysql_query($query_host_total);
    if(!$tot_hst) exit(mysql_error());
    $uni_hst = mysql_query($query_host);
    if(!$uni_hst) exit(mysql_error());

    // Если запросы выполнениы удачно,
    // получаем результат за текущие сутки
    $hits_total_today  = mysql_result($tot_hit, 0);
    $hits_today        = mysql_result($uni_hit, 0);
    $hosts_total_today = mysql_result($tot_hst, 0);
    $hosts_today       = mysql_result($uni_hst, 0);

  return array($hits_total_today, $hits_today, $hosts_total_today, $hosts_today);
}
function show_ip_host($begin, $end, $tbl_arch_hits, $tbl_arch_hits_month)				  //изменено 11.02.06 Loki
{
  // Обнуляем хиты и хосты
  $hosts_total = 0;
  $hosts       = 0;
  $hits_total  = 0;
  $hits        = 0;

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

	 
  // Если требуемый интервал затрагивает дни, упакованные в архивную таблицу
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_hits
  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";

    // Общее число хитов
    $query_hit_total = "SELECT SUM(hits_total) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Засчитанные хиты
    $query_hit       = "SELECT SUM(hits) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Подсчитываем число IP-адресов (хостов)
    $query_host_total= "SELECT SUM(hosts_total) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Подсчитываем число уникальных посетителей за сутки
    $query_host   = "SELECT SUM(host) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;

    // Осуществляем запросы к базе данных
    $tot_hit = mysql_query($query_hit_total);
    if(!$tot_hit) exit(mysql_error());
    $uni_hit = mysql_query($query_hit);
    if(!$uni_hit) exit(mysql_error());
    $tot_hst = mysql_query($query_host_total);
    if(!$tot_hst) exit(mysql_error());
    $uni_hst = mysql_query($query_host);
    if(!$uni_hst) exit(mysql_error());

    // Если запросы выполнениы удачно,
    // получаем результат
    $hits_total  += mysql_result($tot_hit, 0);
    $hits        += mysql_result($uni_hit, 0);
    $hosts_total += mysql_result($tot_hst, 0);
    $hosts       += mysql_result($uni_hst, 0);
  }

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

    // Общее число хитов
    $query_hit_total = "SELECT SUM(hits_total) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Засчитанные хиты
    $query_hit       = "SELECT SUM(hits) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Подсчитываем число IP-адресов (хостов)
    $query_host_total= "SELECT SUM(hosts_total) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;
    // Подсчитываем число уникальных посетителей за сутки
    $query_host   = "SELECT SUM(host) 
                        FROM $tbl_arch_hits
                        WHERE ".$tmp1.$tmp2;

    // Осуществляем запросы к базе данных
    $tot_hit = mysql_query($query_hit_total);
    if(!$tot_hit) exit(mysql_error());
    $uni_hit = mysql_query($query_hit);
    if(!$uni_hit) exit(mysql_error());
    $tot_hst = mysql_query($query_host_total);
    if(!$tot_hst) exit(mysql_error());
    $uni_hst = mysql_query($query_host);
    if(!$uni_hst) exit(mysql_error());

    // Если запросы выполнениы удачно,
    // получаем результат
    $hits_total  += mysql_result($tot_hit, 0);
    $hits        += mysql_result($uni_hit, 0);
    $hosts_total += mysql_result($tot_hst, 0);
    $hosts       += mysql_result($uni_hst, 0);

    // Получаем самое старое число из таблицы $tbl_arch_hits,
    // всё, что позже берём из таблицы $tbl_arch_hits_month
    $select = "SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data FROM $tbl_arch_hits";
    $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 = "";

      // Общее число хитов
      $query_hit_total = "SELECT SUM(hits_total) 
                          FROM $tbl_arch_hits_month
                          WHERE ".$tmp1.$tmp2;
      // Засчитанные хиты
      $query_hit       = "SELECT SUM(hits) 
                          FROM $tbl_arch_hits_month
                          WHERE ".$tmp1.$tmp2;
      // Подсчитываем число IP-адресов (хостов)
      $query_host_total= "SELECT SUM(hosts_total) 
                          FROM $tbl_arch_hits_month
                          WHERE ".$tmp1.$tmp2;
      // Подсчитываем число уникальных посетителей за сутки
      $query_host   = "SELECT SUM(host) 
                          FROM $tbl_arch_hits_month
                          WHERE ".$tmp1.$tmp2;
  
      // Осуществляем запросы к базе данных
      $tot_hit = mysql_query($query_hit_total);
      if(!$tot_hit) exit(mysql_error());
      $uni_hit = mysql_query($query_hit);
      if(!$uni_hit) exit(mysql_error());
      $tot_hst = mysql_query($query_host_total);
      if(!$tot_hst) exit(mysql_error());
      $uni_hst = mysql_query($query_host);
      if(!$uni_hst) exit(mysql_error());
  
      // Если запросы выполнениы удачно,
      // получаем результат
      $hits_total  += mysql_result($tot_hit, 0);
      $hits        += mysql_result($uni_hit, 0);
      $hosts_total += mysql_result($tot_hst, 0);
      $hosts       += mysql_result($uni_hst, 0);
    }
  }
  // Возвращаем результат
  return array($hits_total, $hits, $hosts_total, $hosts);
}
?>
