<?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 = 'На этой странице вы можете видеть
  статистику по операционным системам и браузерам
  из под которых посетители заходят на сайт.';
  $helppage = '';
  // Заголовок страницы
  include "topcounter.php";
  // Формируем массив с названиями операционных систем
  $os['win'] = "Windows";
  $os['lin'] = "Linux & Unix";
  $os['mac'] = "Macintosh";
  $os['os'] = "Другие";
  // Формируем массив с названиями браузеров
  $br['ie'] = "Internet Explorer";
  $br['net'] = "Netscape";
  $br['opr'] = "Opera";
  $br['ffx'] = "FireFox";
  $br['mie'] = "MyIE";
  $br['moz'] = "Mozilla";
  $br['br'] = "Другие";
  // Включаем массив временных интервалов
  require_once("time_interval.php");

  // Проводим архивацию
  require_once("archive.php");

  // Вычисляем количество хитов для браузеров и операционных
  // систем по 5 временным интервалам, определенных в файле
  // time_interval.php
  for($i=0; $i<5; $i++)          //изменено 28.02.06 Loki
  {
    list($hit['win'][$i], 
         $hit['lin'][$i], 
         $hit['mac'][$i], 
         $hit['os'][$i], 
         $hit['ie'][$i], 
         $hit['net'][$i], 
         $hit['opr'][$i], 
         $hit['ffx'][$i],
         $hit['mie'][$i],
         $hit['moz'][$i],
         $hit['br'][$i], 
         $totals[$i],
         $totalb[$i]) = system_info($time[$i]['begin'], 
                                   $time[$i]['end'], 
                                   $tbl_ip, 
                                   $tbl_arch_clients, 
                                   $tbl_arch_clients_month);
  }
?>
<table class="table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="header" align="center">
  <td>&nbsp;</td>
  <td>Cегодня</td>
  <td>Вчера</td>
  <td>За 7 дней</td>
  <td>За 30 дней</td>
  <td>За всё время</td>
</tr>
<tr class=subtitle><td colspan=6><b>Операционные системы</b></td></tr>
<?php
// Формируем блок "Операционные системы"
foreach($os as $key => $name)
{
  echo "<tr align=right>";
  echo "<td class=field>$name</td>";
  
  for($i=0; $i<5; $i++) 
  { 
   if(!$totals[$i]) $totals[$i]=1;
   echo "<td><p>".sprintf("%d (%01.1f%s)",$hit["$key"][$i],$hit["$key"][$i]/$totals[$i]*100,'%')."</p></td>";          //изменено 28.02.06 Loki
  }
  echo "</tr>";
}
?>
<tr class=subtitle><td colspan=6><b>Браузеры</b></td></tr>
<?php
// Формируем блок "Браузеры"
foreach($br as $key => $name)
{
  echo "<tr align=right>";
  echo "<td class=field>$name</td>";
  
  for($i=0; $i<5; $i++) 
  {				 
   if(!$totalb[$i]) $totalb[$i]=1;
   echo "<td><p>".sprintf("%d (%01.1f%s)",$hit["$key"][$i],$hit["$key"][$i]/$totalb[$i]*100,'%')."</p></td>";          //изменено 28.02.06 Loki			 
  }
  echo "</tr>";
}
?>
</table>
<?php

  // Включаем завершение страницы
  include "bottomcounter.php";

// Функция возвращает массив из девяти переменных,
// с информацией о числе посетителей использующих
// ту или иную операционную систему или браузер.
// $begin - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить начальную точку временного интервала
// $end - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить конечную точку временного интервала
// $tbl_ip - название таблицы, в которой хранятся IP-адреса
// $tbl_arch_clients - название архивной таблицы
function system_info($begin, $end, $tbl_ip, $tbl_arch_clients, $tbl_arch_clients_month)
{
  // Обнуляем хиты и хосты
  $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
  /////////////////////////////////////////////////////////////////////////////

  // Если учёт происходит вплоть до сегодняшнего дня - учитываем это, обращаясь
  // к текущим хитам и хостам в таблице $tbl_ip
  if($end == 0)
  {
    //не учитываем роботов
    $tmp=" systems NOT LIKE 'robot_%' AND ";																	  //добавлено 25.02.06	Loki
    // Запрос на статистику за временной интервал определяемый
    // параметрами $begin,$end
    $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' DAY";

    // Формируем SQL-запросы
    $begins = "SELECT COUNT(DISTINCT ip) FROM $tbl_ip WHERE systems = ";
    $beginb = "SELECT COUNT(DISTINCT ip) FROM $tbl_ip WHERE browsers = ";
    $query['win'] = $begins."'windows' AND ".$tmp.$tmp1.$tmp2;
    $query['lin'] = $begins."'unix' AND ".$tmp.$tmp1.$tmp2;
    $query['mac'] = $begins."'macintosh' AND ".$tmp.$tmp1.$tmp2;
    $query['snn'] = $begins."'none' AND ".$tmp.$tmp1.$tmp2;          //добавлено 28.02.06 Loki
    $query['ie']  = $beginb."'msie' AND ".$tmp.$tmp1.$tmp2;
    $query['opr'] = $beginb."'opera' AND ".$tmp.$tmp1.$tmp2;
    $query['net'] = $beginb."'netscape' AND ".$tmp.$tmp1.$tmp2;
    $query['ffx'] = $beginb."'firefox' AND ".$tmp.$tmp1.$tmp2;
    $query['mie'] = $beginb."'myie' AND ".$tmp.$tmp1.$tmp2;
    $query['moz'] = $beginb."'mozilla' AND ".$tmp.$tmp1.$tmp2;
    $query['bnn'] = $beginb."'none' AND ".$tmp.$tmp1.$tmp2;          //добавлено 28.02.06 Loki
    // Выполняем SQL-запросы
    foreach($query as $os => $value)
    {
      $hit["$os"] = mysql_query($value);
      if(!$hit["$os"]) puterror("Ошибка при обращении к таблице IP-адресов");
      $hits["$os"] = mysql_result($hit["$os"], 0);
    }
    $totals = $hits['win'] + $hits['lin'] + $hits['mac'] + $hits['snn'];          //изменено 28.02.06 Loki
    $totalb = $hits['ie'] + $hits['opr'] + $hits['net'] + $hits['ffx'] + $hits['mie'] + $hits['moz'] + $hits['bnn'];          //изменено 28.02.06 Loki
  }

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

    // Формируем SQL-запросы
    $beginb = "SELECT SUM(*) FROM $tbl_arch_clients WHERE browsers = ";
    $query['win'] = "SELECT SUM(systems_windows) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['lin'] = "SELECT SUM(systems_unix) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['mac'] = "SELECT SUM(systems_macintosh) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['snn'] = "SELECT SUM(systems_none) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['ie']  = "SELECT SUM(browsers_msie) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['opr'] = "SELECT SUM(browsers_opera) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['net'] = "SELECT SUM(browsers_netscape) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['ffx'] = "SELECT SUM(browsers_firefox) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['mie'] = "SELECT SUM(browsers_myie) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['moz'] = "SELECT SUM(browsers_mozilla) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['bnn'] = "SELECT SUM(browsers_none) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;

    // Выполняем SQL-запросы
    foreach($query as $os => $value)
    {
      $hit["$os"] = mysql_query($value);
      if(!$hit["$os"]) puterror("Ошибка при обращении к таблице IP-адресов");
      $hits["$os"] += mysql_result($hit["$os"], 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 = "";

    // Формируем SQL-запросы
    $beginb = "SELECT SUM(*) FROM $tbl_arch_clients WHERE browsers = ";
    $query['win'] = "SELECT SUM(systems_windows)   FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['lin'] = "SELECT SUM(systems_unix)      FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['mac'] = "SELECT SUM(systems_macintosh) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['snn'] = "SELECT SUM(systems_none)      FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['ie']  = "SELECT SUM(browsers_msie)     FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['opr'] = "SELECT SUM(browsers_opera)    FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['net'] = "SELECT SUM(browsers_netscape) FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['ffx'] = "SELECT SUM(browsers_firefox)  FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['mie'] = "SELECT SUM(browsers_myie)     FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['moz'] = "SELECT SUM(browsers_mozilla)  FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;
    $query['bnn'] = "SELECT SUM(browsers_none)     FROM $tbl_arch_clients WHERE ".$tmp1.$tmp2;

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

    // Получаем самое старое число из таблицы $tbl_arch_hits,
    // всё, что позже берём из таблицы $tbl_arch_hits_month
    $select = "SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data FROM $tbl_arch_clients";
    $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-запросы
      $beginb = "SELECT SUM(*) FROM $tbl_arch_clients_month WHERE browsers = ";
      $query['win'] = "SELECT SUM(systems_windows)   FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['lin'] = "SELECT SUM(systems_unix)      FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['mac'] = "SELECT SUM(systems_macintosh) FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['snn'] = "SELECT SUM(systems_none)      FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['ie']  = "SELECT SUM(browsers_msie)     FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['opr'] = "SELECT SUM(browsers_opera)    FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['net'] = "SELECT SUM(browsers_netscape) FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['ffx'] = "SELECT SUM(browsers_firefox)  FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['mie'] = "SELECT SUM(browsers_myie)     FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['moz'] = "SELECT SUM(browsers_mozilla)  FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
      $query['bnn'] = "SELECT SUM(browsers_none)     FROM $tbl_arch_clients_month WHERE ".$tmp1.$tmp2;
  
      // Выполняем SQL-запросы
      foreach($query as $os => $value)
      {
        $hit["$os"] = mysql_query($value);
        if(!$hit["$os"]) puterror("Ошибка при обращении к таблице IP-адресов");
        $hits["$os"] += mysql_result($hit["$os"], 0);
      }
    }
  }
  $totals = $hits['win'] + $hits['lin'] + $hits['mac'] + $hits['snn'];
  $totalb = $hits['ie'] + $hits['opr'] + $hits['net'] + $hits['ffx'] + $hits['mie'] + $hits['moz'] + $hits['bnn'];

  // Возвращаем массив значений          //изменено 28.02.06 Loki
  return array($hits['win'], 
               $hits['lin'], 
               $hits['mac'], 
               $hits['snn'], 
               $hits['ie'], 
               $hits['net'], 
               $hits['opr'], 
               $hits['ffx'], 
               $hits['mie'], 
               $hits['moz'], 
               $hits['bnn'], 
               $totals,
               $totalb);
}
?>
