<?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)
  ///////////////////////////////////////////////////
  // Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
  Error_Reporting(E_ALL & ~E_NOTICE); 
  $title = 'Ссылающиеся&nbsp;страницы';   
  $menu = 19;  
  $pageinfo = 'Здесь отображено количество посещений с ссылающихся сайтов. Т.е., например, сколько человек пришло с mail.ru или nn.ru. Допустим, ссылки на Ваш сайт есть на каких-либо других сайтах. Для того, чтобы посмотреть приходят ли посетители с этих сайтов, нужно нажать ссылку <b>Добавить</b> и ввести адрес сайта, по которому Вы хотите смотреть статистику в открывшемся текстовом поле ';
  // Заголовок страницы
  include "topcounter.php";
  // Включаем массив временных интервалов
  require_once("time_interval.php");
  // Вычисляем количество хитов для поисковых систем
  // по 5 временным интервалам, определенных в файле
  // time_interval.php
  for($i = 0; $i < 5; $i++)
  {
    $hit[$i] = refferers($time[$i]['begin'], 
                         $time[$i]['end'], 
                         $tbl_links, 
                         $tbl_refferer, 
                         $tbl_arch_refferer, 
                         $tbl_arch_refferer_month, 
                         $id_page);
  }
  // Выводим таблицу посещения с рефереров
  ?>
  <p><a class=menu href=addreffererform.php>Добавить</a></p>
  <table 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>
      <td>Действие</td>
    </tr>
<?php
  // Выводим таблицу посещения с рефереров
  $ref = mysql_query("SELECT * FROM $tbl_links ORDER BY name");
  if(!$ref) puterror("Ошибка при обращении к таблице IP-адресов");
  while($reff = mysql_fetch_array($ref))
  {
    echo "<tr><td>&nbsp;".$reff['name']."</td>";
    for($i=0; $i<5; $i++)
    {
      echo "<td>&nbsp;".$hit[$i][$reff['name']]."</td>";
    }
    echo "<td><a href=delrefferer.php?id_links=".$reff['id_links'].">Удалить</a></td></tr>";
  }
  echo "</table>";
  // Включаем завершение страницы
  include "bottomcounter.php";  

// $begin - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить начальную точку временного интервала
// $end - число дней, которое необходимо вычесть из текущей даты,
// для того чтобы получить конечную точку временного интервала
// $id_page - первичный ключ записи таблицы pages, соответствующей
// странице сайта
function refferers($begin,
                   $end,
                   $tbl_links, 
                   $tbl_refferer, 
                   $tbl_arch_refferer, 
                   $tbl_arch_refferer_month, 
                   $id_page)
{
  $return_array = array();
  // Эта переменная определяет осуществляется ли запрос к конкретной
  // странице или ко всему сайту.
  if(empty($id_page)) $tmp = "";
  else $tmp = " AND id_page=$id_page";
  // Запрос на статистику за временной интервал определяемый
  // параметрами $begin,$end
  if($begin == 0) $tmp2 = "";
  else $tmp2 = " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".$begin."' DAY";
  $tmp1 = " AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
  // Формируем массив запросов 
  $query = "SELECT name FROM $tbl_links";
  $ref = mysql_query($query);
  if(!$ref) puterror("Ошибка при обращении к таблице реффереров");
  if(mysql_num_rows($ref)>0)
  {
    while($reff = mysql_fetch_array($ref))
    {
      $query_ref[$reff['name']] = "SELECT COUNT(*) 
                                   FROM $tbl_refferer 
                                   WHERE name LIKE '%".$reff['name']."%' ".$tmp.$tmp1.$tmp2;
    }
    // Выполняем SQL-запросы из массива $query_ref
    foreach($query_ref as $name => $query)
    {
      $hit = mysql_query($query);
      if(!$hit) puterror("Ошибка при обращении к таблице реффереров ");
      $return_array[$name] += mysql_result($hit,0);
    }
  } 

  // Если требуемый интервал затрагивает дни, упакованные в архивную таблицу
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_searchquery
  if($begin != 1 && $begin != 0)
  {
    // Запрос на статистику за временной интервал определяемый
    // параметрами $begin,$end
    if($end != 0) $tmp1 = " AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".($end - 1)."' DAY";
    else $tmp1 = " AND 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 = "SELECT name FROM $tbl_links";
    $ref = mysql_query($query);
    if(!$ref) puterror("Ошибка при обращении к таблице ссылок");
    if(mysql_num_rows($ref)>0)
    {
      while($reff = mysql_fetch_array($ref))
      {
        $query_ref[$reff['name']] = "SELECT SUM(total) 
                                     FROM $tbl_arch_refferer
                                     WHERE name LIKE '%".$reff['name']."%' ".$tmp.$tmp1.$tmp2;
      }
      // Выполняем SQL-запросы из массива $query_ref
      foreach($query_ref as $name => $query)
      {
        $hit = mysql_query($query);
        if(!$hit) puterror("Ошибка при обращении к архивной таблице реффереров ");
        $return_array[$name] += mysql_result($hit,0);
      }
    }
  }

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

    // Формируем массив запросов 
    $query = "SELECT name FROM $tbl_links";
    $ref = mysql_query($query);
    if(!$ref) puterror("Ошибка при обращении к архивной таблице реффереров");
    if(mysql_num_rows($ref)>0)
    {
      while($reff = mysql_fetch_array($ref))
      {
        $query_ref[$reff['name']] = "SELECT SUM(total) 
                                     FROM $tbl_arch_refferer
                                     WHERE name LIKE '%".$reff['name']."%' ".$tmp.$tmp1.$tmp2;
      }
      // Выполняем SQL-запросы из массива $query_ref
      foreach($query_ref as $name => $query)
      {
        $hit = mysql_query($query);
        if(!$hit) puterror("Ошибка при обращении к таблице реффереров");
        $return_array[$name] += mysql_result($hit,0);
      }
    }

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

      // Формируем массив запросов 
      $query = "SELECT name FROM $tbl_links";
      $ref = mysql_query($query);
      if(!$ref) puterror("Ошибка при обращении к таблице реффереров");
      if(mysql_num_rows($ref)>0)
      {
        while($reff = mysql_fetch_array($ref))
        {
          $query_ref[$reff['name']] = "SELECT SUM(total) 
                                       FROM $tbl_arch_refferer_month
                                       WHERE name LIKE '%".$reff['name']."%' ".$tmp.$tmp1.$tmp2;
        }
        // Выполняем SQL-запросы из массива $query_ref
        foreach($query_ref as $name => $query)
        {
          $hit = mysql_query($query);
          if(!$hit) puterror("Ошибка при обращении к таблице реффереров");
          $return_array[$name] += mysql_result($hit,0);
        }
      }
    }
  }

  return $return_array;
}
?>