<?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 = 'На этой странице вы можете видеть по каким запросам с поисковых систем приходят посетители на Ваш сайт';
  // Заголовок страницы
  include "topcounter.php";

  // Формируем массив с названиями поисковых систем
  $sch['rambler'] = "Rambler";
  $sch['google'] = "Google";
  $sch['yandex'] = "Yandex";
  $sch['aport'] = "Aport";
  $sch['msn'] = "MSN";
  $sch['mail'] = "Mail.ru";			  //исправлено 02.03.06 Loki
  $sch['total'] = "Все";
  // Включаем массив временных интервалов
  require_once("time_interval.php");
  // Вычисляем количество хитов для поисковых систем
  // по 5 временным интервалам, определенных в файле
  // time_interval.php 
  //запрашиваем данные за текущие сутки	
  				  //исправлено 02.03.06 Loki
    list($hit['rambler'][0],
         $hit['yandex'][0], 
         $hit['aport'][0],
         $hit['google'][0],
         $hit['msn'][0],
			$hit['mail'][0],
         $hit['total'][0]) = search_today($tbl_searchquerys,
                                     $id_page);
	//запрашиваем данные за вчерашине сутки	
    list($hit['rambler'][1],
         $hit['yandex'][1], 
         $hit['aport'][1],
         $hit['google'][1],
         $hit['msn'][1],
			$hit['mail'][1],
         $hit['total'][1]) = search($time[1]['begin'], 
                                     $time[1]['end'], 
                                     $tbl_arch_num_searchquery, 
                                     $tbl_arch_num_searchquery_month,
                                     $id_page);
	// запрашиваем данные за остальные периоды и прибавляем к ним данные за текущие сутки											 					    
  for($i=2; $i<5; $i++)				  //исправлено 02.03.06 Loki
  {
    list($hit['rambler'][$i],
         $hit['yandex'][$i], 
         $hit['aport'][$i],
         $hit['google'][$i],
         $hit['msn'][$i],
			$hit['mail'][$i],
         $hit['total'][$i]) = search($time[$i]['begin'], 
                                     $time[$i]['end'], 
                                     $tbl_arch_num_searchquery, 
                                     $tbl_arch_num_searchquery_month,
                                     $id_page);
	 		$hit['rambler'][$i]	+=	$hit['rambler'][0];
         $hit['yandex'][$i] 	+=	$hit['yandex'][0];
         $hit['aport'][$i]		+=	$hit['aport'][0];
         $hit['google'][$i]	+=	$hit['google'][0];
         $hit['msn'][$i]		+=	$hit['msn'][0];
			$hit['mail'][$i]		+=	$hit['mail'][0];
         $hit['total'][$i]		+=	$hit['total'][0];
  }
?>
<table width=100% class="table" border="0" cellpadding="0" cellspacing="0" >    
<tr class="header" align="center">
  <td>Поисковые&nbsp;системы</td>
  <td width=<?= 100/5 ?>% >Сегодня</td>
  <td width=<?= 100/5 ?>% >Вчера</td>
  <td width=<?= 100/5 ?>% >За 7 дней</td>
  <td width=<?= 100/5 ?>% >За 30 дней</td>
  <td width=<?= 100/5 ?>% >За всё время</td>
</tr>
<?php
// Формируем таблицу с числом обращений с операционных систем
foreach($sch as $key => $name)		  //исправлено 25.06.02 Loki
{
  echo "<tr align=right>";
  echo "<td class=field>$name</td>";
  //выводим данные со ссылкой
  for($i=0; $i<4; $i++) echo "<td><a href=searchquery.php?begin=".$time[$i]['begin']."&end=".$time[$i]['end']."&srch=$key&id_page=$id_page>".$hit["$key"][$i]."</a></td>";		  
  //выводим данные за весь период без ссылки
  echo "<td>".$hit["$key"][4]."</td>";
  echo "</tr>";
}
?>
</table><br>
<?php

  if(empty($_GET['begin']) ||
     !isset($_GET['end']) ||
     empty($_GET['srch']))
  {
    $_GET['begin'] = 1;
    $_GET['end']   = 0;
    $_GET['srch']  = "total";
  }

  // Элемент постраничной навигации
  if(empty($_GET['page'])) $page = 1;
  else $page = $_GET['page'];

  searchquery($_GET['begin'], $_GET['end'], $_GET['srch'], $tbl_searchquerys, $tbl_pages, $page, $pnumber);

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

function searchquery($begin, $end, $srch, $tbl_searchquerys, $tbl_pages, $page, $pnumber)
{
  // Запрос на статистику за временной интервал определяемый
  // параметрами $begin,$end
  if($begin == 0) $tmp2 = "";
  else $tmp2 = " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL $begin DAY"; //01.03.06 Loki
  $tmp1 = " AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL $end DAY";         //01.03.06 Loki

  // Постраничная навигация
  $page_link = 3;
  $start = ($page - 1)*$pnumber;
  if($srch != "total")
  {
    $query = "SELECT COUNT(*)
              FROM $tbl_searchquerys, $tbl_pages 
              WHERE $tbl_searchquerys.id_page = $tbl_pages.id_page AND $tbl_searchquerys.searches = '$srch' 
                    ".$tmp1.$tmp2." 
              ORDER BY putdate DESC";
  }
  else
  {
    $query = "SELECT COUNT(*)
              FROM $tbl_searchquerys, $tbl_pages
              WHERE $tbl_searchquerys.id_page = $tbl_pages.id_page ".$tmp1.$tmp2." 
              ORDER BY putdate DESC";
  }  
  $num = mysql_query($query);
  if(!$num) puterror("Ошибка при обращении к таблице страниц");
  // Ввыводим ссылки на другие страницы
  $total = mysql_result($num,0);
  $number = (int)($total/$pnumber);
  if((float)($total/$pnumber) - $number != 0) $number++;
  if($page - $page_link > 1)
  {
    echo "<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=1&order=".$order."> <nobr>[1-$pnumber]</nobr></a>&nbsp;<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;";
    // Есть
    for($i = $page - $page_link; $i<$page; $i++)
    {
        echo "&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=".$i."&order=".$order."> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
    }
  }
  else
  {
    // Нет
    for($i = 1; $i<$page; $i++)
    {
        echo "&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=".$i."&order=".$order."> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
    }
  }
  // Проверяем есть ли ссылки справа
  if($page + $page_link < $number)
  {
    // Есть
    for($i = $page; $i<=$page + $page_link; $i++)
    {
      if($page == $i)
        echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]&nbsp;</nobr> </em>";
      else
        echo "&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=".$i."&order=".$order."> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
    }
    echo "<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=$number&order=".$order."> <nobr>[".(($number - 1)*$pnumber + 1)."-$total]</nobr></a>&nbsp;";
  }
  else
  {
    // Нет
    for($i = $page; $i<=$number; $i++)
    {
      if($number == $i)
      {
        if($page == $i)
          echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$pnumber + 1)."-$total]&nbsp;</nobr></em>";
        else
          echo "&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=".$i."&order=".$order.">[".(($i - 1)*$pnumber + 1)."-$total]</a>&nbsp;";
      }
      else
      {
        if($page == $i)
          echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]&nbsp;</nobr> </em>";
        else
          echo "&nbsp;<a href=$_SERVER[PHP_SELF]?begin=$begin&end=$end&srch=$srch&id_page=".$id_page."&page=".$i."&order=".$order."> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
      }
    }
  }
  echo "<br>";
  // Конец постраничной навигации
  
  // Расставляем and
  if($srch != "total")
  {
    $query = "SELECT $tbl_pages.title AS title,
	                 $tbl_pages.name AS url,
                    $tbl_searchquerys.query AS name,
                    putdate,
                    INET_NTOA(ip) AS ip,
                    searches
             FROM $tbl_searchquerys, $tbl_pages 
             WHERE $tbl_searchquerys.id_page = $tbl_pages.id_page AND $tbl_searchquerys.searches = '$srch' 
                   ".$tmp1.$tmp2." 
             ORDER BY putdate DESC
             LIMIT $start, $pnumber";
  }
  else
  {													  //изменено 25.02.06 Loki
    $query = "SELECT $tbl_pages.title AS title, 
	                 $tbl_pages.name AS url,
                    $tbl_searchquerys.query AS name,
                    putdate,
                    INET_NTOA(ip) AS ip,
                    searches
             FROM $tbl_searchquerys, $tbl_pages
             WHERE $tbl_searchquerys.id_page = $tbl_pages.id_page ".$tmp1.$tmp2." 
             ORDER BY putdate DESC
             LIMIT $start, $pnumber";
  }		 
  $qwr = mysql_query($query);
$i=$start+1;						//добавлено 02.03.06 Loki
  if(!$qwr) puterror("Ошибка при выполнении запроса".$query);
  if(mysql_num_rows($qwr)>0)
  {
    echo "<br><table width=100% class=\"table\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
    while($ip = mysql_fetch_array($qwr))
    {
      if(empty($ip['name'])) continue;
																			  //исправлено 25.02.06 Loki
      echo "<tr>
              <td>$i</td>
              <td>".htmlspecialchars($ip['name'])."</td>
              <td>$ip[searches]</td>
              <td>$ip[putdate]</td>
				  <td><a href=pages.php?ip=".$ip[ip]."&begin=$begin&end=$end>".$ip[ip]."</a></td>
              <td><a href=http://".$_SERVER["SERVER_NAME"].$ip['url'].">
                  ".$ip['title']."</a></td></tr>";
$i++;						//добавлено 02.03.06 Loki
    }
    echo "</table>";
  } 
}
function search_today($tbl_searchquerys, $id_page)				//добавлено 02.03.06 Loki
{
 // Эта переменная определяет осуществляется ли запрос к конкретной
  // странице или ко всему сайту.
  if($id_page == "") $tmp = "";
  else $tmp = " AND id_page=$id_page";

    // Запрос на статистику за временной интервал определяемый
    // параметрами $begin,$end
    $tmp2 = " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 1 DAY";

    // Формируем SQL-запросы
    $first = "SELECT COUNT(*) FROM $tbl_searchquerys WHERE searches =";
    $last = $tmp2.$tmp;
    $query['ynd'] = $first."'yandex' ".$last;
    $query['ram'] = $first."'rambler' ".$last;
    $query['gog'] = $first."'google' ".$last;
    $query['apt'] = $first."'aport' ".$last;
    $query['msn'] = $first."'msn' ".$last;
	 $query['mil'] = $first."'mail' ".$last;							

    // Выполняем SQL-запросы
    foreach($query as $search => $value)
    {
      $hit[$search] = mysql_query($value);
      if(!$hit[$search]) puterror("Ошибка при обращении к таблице поисковых запросов");
      $hits[$search] = mysql_result($hit[$search], 0);
    }	
  $total = array_sum($hits);
  return array($hits['ram'], $hits['ynd'], $hits['apt'], $hits['gog'], $hits['msn'], $hits['mil'], $total);
}
function search($begin, $end, $tbl_arch_num_searchquery, $tbl_arch_num_searchquery_month, $id_page)
{
  // Эта переменная определяет осуществляется ли запрос к конкретной
  // странице или ко всему сайту.
  if($id_page == "") $tmp = "";
  else $tmp = " AND id_page = $id_page";
  // Обнуляем хиты и хосты
  $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_searchquery
  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.$tmp;
    $query['ynd'] = "SELECT SUM(number_yandex) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['ram'] = "SELECT SUM(number_rambler) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['gog'] = "SELECT SUM(number_google) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['apt'] = "SELECT SUM(number_aport) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['msn'] = "SELECT SUM(number_msn) FROM $tbl_arch_num_searchquery WHERE ".$last;
	 $query['mil'] = "SELECT SUM(number_mail) FROM $tbl_arch_num_searchquery WHERE ".$last;	//добавлено 02.03.06 Loki

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

  // Если требуемый интервал затрагивает дни, упакованные в месячную архивную таблицу
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_num_searchquery_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.$tmp;
    $query['ynd'] = "SELECT SUM(number_yandex) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['ram'] = "SELECT SUM(number_rambler) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['gog'] = "SELECT SUM(number_google) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['apt'] = "SELECT SUM(number_aport) FROM $tbl_arch_num_searchquery WHERE ".$last;
    $query['msn'] = "SELECT SUM(number_msn) FROM $tbl_arch_num_searchquery WHERE ".$last;
	 $query['mil'] = "SELECT SUM(number_mail) FROM $tbl_arch_num_searchquery WHERE ".$last;	 //добавлено 02.03.06 Loki
    // Выполняем SQL-запросы
    foreach($query as $search => $value)
    {
      $hit[$search] = mysql_query($value);
      if(!$hit[$search]) puterror("Ошибка при обращении к таблице архивных записей ".$value);
      $hits[$search] += mysql_result($hit[$search], 0);
    }

    // Получаем самое старое число из таблицы $tbl_arch_hits,
    // всё, что позже берём из таблицы $tbl_arch_hits_month
    $select = "SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data FROM $tbl_arch_num_searchquery";
    $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.$tmp;
      $query['ynd'] = "SELECT SUM(number_yandex) FROM $tbl_arch_num_searchquery_month WHERE ".$last;
      $query['ram'] = "SELECT SUM(number_rambler) FROM $tbl_arch_num_searchquery_month WHERE ".$last;
      $query['gog'] = "SELECT SUM(number_google) FROM $tbl_arch_num_searchquery_month WHERE ".$last;
      $query['apt'] = "SELECT SUM(number_aport) FROM $tbl_arch_num_searchquery_month WHERE ".$last;
      $query['msn'] = "SELECT SUM(number_msn) FROM $tbl_arch_num_searchquery_month WHERE ".$last;
		$query['mil'] = "SELECT SUM(number_mail) FROM $tbl_arch_num_searchquery_month WHERE ".$last;	 //добавлено 02.03.06 Loki
      // Выполняем SQL-запросы
      foreach($query as $search => $value)
      {
        $hit[$search] = mysql_query($value);
        if(!$hit[$search]) puterror("Ошибка при обращении к таблице архивных записей");
        $hits[$search] += mysql_result($hit[$search], 0);
      }
    }
  }

  $total = array_sum($hits);
  return array($hits['ram'], $hits['ynd'], $hits['apt'], $hits['gog'], $hits['msn'], $hits['mil'], $total);
}
?>
