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

// Функция архивации поисковых фраз в суточные таблицы
function archive_searchquery($tbl_searchquerys, $tbl_arch_searchquery)
{
  // Получаем дату начала регистрации данных и число прошедших с начала регистрации
  $dat = mysql_query("SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data FROM $tbl_searchquerys");
  if (!$dat) exit(mysql_error());
  $arr_date = mysql_fetch_array($dat);
  //Последнее полный день
  $last_day = mktime(23,59,59, date("m"), date("d")-1, date("Y"));
  // получаем последнюю дату архивации
  $query = "SELECT UNIX_TIMESTAMP(MAX(putdate)) FROM $tbl_arch_searchquery";
  $arh = mysql_query($query);
  if(mysql_num_rows($arh) > 0)
  {
    $last_date = mysql_result($arh,0);
  }
  if(empty($last_date))
  {
    if(isset($arr_date['data']))
    {
      // Если запуск первый - берём дату из topcounter.php
      $last_date = $arr_date['data'];
    }
    else
    {
      // Иначе берём текущие сутки
      $last_date = time();
    }
  }
  //блок архивации
  if (ceil(($last_day - $last_date)/24/60/60))
  {
    $yandex_number  = YANDEX_NUMBER;
    $rambler_number = RAMBLER_NUMBER;
    $google_number  = GOOGLE_NUMBER;
    $aport_number   = APORT_NUMBER;
    $msn_number     = MSN_NUMBER;

    $days = ceil(($last_day-$last_date)/24/60/60);
    for ($i = $days; $i>0; $i--)
    {
      // Вспомогательное условие
      $tmp = "putdate < '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY AND
              putdate >= '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL $i DAY";

      // Извлекаем $xxx_number самых распространённых запросов за сутки
      $query_yandex = "SELECT query, COUNT(query) AS total FROM $tbl_searchquerys 
                       WHERE searches = 'yandex' AND ".$tmp." 
                       GROUP BY query 
                       ORDER BY total DESC 
                       LIMIT $yandex_number";
      // Извлекаем $xxx_number самых распространённых запросов за сутки
      $query_rambler = "SELECT query, COUNT(query) AS total FROM $tbl_searchquerys 
                       WHERE searches = 'rambler' AND ".$tmp." 
                       GROUP BY query 
                       ORDER BY total DESC 
                       LIMIT $rambler_number";
      // Извлекаем $xxx_number самых распространённых запросов за сутки
      $query_google  = "SELECT query, COUNT(query) AS total FROM $tbl_searchquerys 
                       WHERE searches = 'google' AND ".$tmp." 
                       GROUP BY query 
                       ORDER BY total DESC 
                       LIMIT $google_number";
      // Извлекаем $xxx_number самых распространённых запросов за сутки
      $query_aport   = "SELECT query, COUNT(query) AS total FROM $tbl_searchquerys 
                       WHERE searches = 'aport' AND ".$tmp." 
                       GROUP BY query 
                       ORDER BY total DESC 
                       LIMIT $aport_number";
      // Извлекаем $xxx_number самых распространённых запросов за сутки
      $query_msn     = "SELECT query, COUNT(query) AS total FROM $tbl_searchquerys 
                       WHERE searches = 'msn' AND ".$tmp." 
                       GROUP BY query 
                       ORDER BY total DESC 
                       LIMIT $msn_number";

      $ynd = mysql_query($query_yandex);
      if(!$ynd) exit(mysql_error());
      $gog = mysql_query($query_google);
      if(!$gog) exit(mysql_error());
      $rbl = mysql_query($query_rambler);
      if(!$rbl) exit(mysql_error());
      $apt = mysql_query($query_aport);
      if(!$apt) exit(mysql_error());
      $msn = mysql_query($query_msn);
      if(!$msn) exit(mysql_error());

      // Формируем запрос для ахивации наиболее частых запросов в таблицу $tbl_arch_searchquery
      while($yandex = mysql_fetch_array($ynd))
      {
        $sql_yandex[] = "(NULL,
                         '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY,
                         '$yandex[query]', 
                         $yandex[total],
                         'yandex')";
      }
      while($google = mysql_fetch_array($gog))
      {
        $sql_google[] = "(NULL,
                         '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY,
                         '$google[query]', 
                         $google[total],
                         'google')";
      }
      while($rambler = mysql_fetch_array($rbl))
      {
        $sql_rambler[] = "(NULL,
                         '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY,
                         '$rambler[query]', 
                         $rambler[total],
                         'rambler')";
      }
      while($aport = mysql_fetch_array($apt))
      {
        $sql_aport[] = "(NULL,
                         '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY,
                         '$aport[query]', 
                         $aport[total],
                         'aport')";
      }
    }
    if(!empty($sql_yandex))
    {
      $query = "INSERT INTO $tbl_arch_searchquery VALUES".implode(",", $sql_yandex);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_google))
    {
      $query = "INSERT INTO $tbl_arch_searchquery VALUES".implode(",", $sql_google);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_rambler))
    {
      $query = "INSERT INTO $tbl_arch_searchquery VALUES".implode(",", $sql_rambler);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_aport))
    {
      $query = "INSERT INTO $tbl_arch_searchquery VALUES".implode(",", $sql_aport);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_msn))
    {
      $query = "INSERT INTO $tbl_arch_searchquery VALUES".implode(",", $sql_msn);
      if(!mysql_query($query)) exit(mysql_error());
    }
  }
}


// Архивируем поисковые запросы
function archive_searchquery_week($tbl_arch_searchquery, $tbl_arch_searchquery_week)
{

  // Получаем дату начала регистрации данных и число прошедших с начала регистрации дней
  $dat = mysql_query("SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data
                      FROM $tbl_arch_searchquery");
  if (!$dat) exit("first - ".mysql_error());
  $arr_date = mysql_fetch_array($dat);

  // получаем последнюю дату архивации
  $query = "SELECT UNIX_TIMESTAMP(MAX(putdate_end)) FROM $tbl_arch_searchquery_week";
  $arh = mysql_query($query);
  if(!$arh) exit("second - ".mysql_error());
  if(mysql_num_rows($arh) > 0)
  {
    $last_date = mysql_result($arh,0);
  }
  if(empty($last_date))
  {
    if(isset($arr_date['data']))
    {
      // Если запуск первый - берём дату из $tbl_arch_searchquery
      $last_date = $arr_date['data'];
    }
    else
    {
      // Иначе берём текущие сутки
      $last_date = time();
    }
  }

  //Последней полный день
  $last_day = mktime(23,59,59, date("m"), date("d")-1, date("Y"));
  // Вычисляем сколько недель прошло с даты последней архивации
  $week = floor(($last_day - $last_date)/24/60/60/7); 

  // Если прошло больше недели - архивируем данные
  if ($week > 0)
  {
    // $last_date - дата последней архивации... - смотрим далеко ли до
    // конца недели (воскресенье). Интервал включает данные с Понедельника (1)
    // до воскресенья (0).
    $weekday = date('w',$last_date);
    // Делаем так, чтобы воскресенье было 7, а понедельник 1
    // if($weekday === 0) $weekday = 7;

    $yandex_number  = YANDEX_NUMBER;
    $rambler_number = RAMBLER_NUMBER;
    $google_number  = GOOGLE_NUMBER;
    $aport_number   = APORT_NUMBER;
    $msn_number     = MSN_NUMBER;

    // Текущему времени приравниваем начальную точку
    $current_date = $last_date;
    while(floor(($last_day - $current_date)/24/60/60/7))
    {
      // Вспомогательное условие
      $tmp = "putdate > '".date("Y-m-d 23:59:59", $current_date)."' AND
              putdate <= '" .date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."'";

      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_yandex = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'yandex' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $yandex_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_rambler = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'rambler' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $rambler_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_google  = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'google' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $google_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_aport   = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'aport' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $aport_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_msn     = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'msn' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $msn_number";

      $ynd = mysql_query($query_yandex);
      if(!$ynd) exit(mysql_error()."1");
      $gog = mysql_query($query_google);
      if(!$gog) exit(mysql_error()."2");
      $rbl = mysql_query($query_rambler);
      if(!$rbl) exit(mysql_error()."3");
      $apt = mysql_query($query_aport);
      if(!$apt) exit(mysql_error()."4");
      $msn = mysql_query($query_msn);
      if(!$msn) exit(mysql_error()."5");

      // Формируем запрос для ахивации наиболее частых запросов в таблицу $tbl_arch_searchquery_week
      while($yandex = mysql_fetch_array($ynd))
      {
        $sql_yandex[] = "(NULL,
                         '".date("Y-m-d 23:59:59", $current_date)."',
                         '".date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."',
                         '$yandex[name]', 
                         $yandex[total],
                         'yandex')";
      }
      while($google = mysql_fetch_array($gog))
      {
        $sql_google[] = "(NULL,
                         '".date("Y-m-d 23:59:59", $current_date)."',
                         '".date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."',
                         '$google[name]', 
                         $google[total],
                         'google')";
      }
      while($rambler = mysql_fetch_array($rbl))
      {
        $sql_rambler[] = "(NULL,
                         '".date("Y-m-d 23:59:59", $current_date)."',
                         '".date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."',
                         '$rambler[name]', 
                         $rambler[total],
                         'rambler')";
      }
      while($aport = mysql_fetch_array($apt))
      {
        $sql_aport[] = "(NULL,
                         '".date("Y-m-d 23:59:59", $current_date)."',
                         '".date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."',
                         '$aport[name]', 
                         $aport[total],
                         'aport')";
      }
      while($ms = mysql_fetch_array($msn))
      {
        $sql_msn[] = "(NULL,
                         '".date("Y-m-d 23:59:59", $current_date)."',
                         '".date("Y-m-d 23:59:59", $current_date + 24*3600*(7 - $weekday))."',
                         '$ms[name]', 
                         $ms[total],
                         'msn')";
      }

      // Увеличиваем текущее время до следующей недели
      $current_date += (7 - $weekday)*24*3600;
      $weekday = 0; // Далее идут циклы по целой недели
      // echo date("Y-m-d 23:59:59", $current_date)."<br>";
    }

    if(!empty($sql_yandex))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_yandex);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_google))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_google);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_rambler))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_rambler);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_aport))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_aport);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_msn))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_msn);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_met))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_week VALUES".implode(",", $sql_met);
      if(!mysql_query($query)) exit(mysql_error());
    }
  }
}


// Архивируем поисковые запросы
function archive_searchquery_month($tbl_arch_searchquery, $tbl_arch_searchquery_month)
{

  // Получаем дату начала регистрации данных и число прошедших с начала регистрации дней
  $dat = mysql_query("SELECT UNIX_TIMESTAMP(MIN(putdate)) AS data
                      FROM $tbl_arch_searchquery");
  if (!$dat) exit("first - ".mysql_error());
  $arr_date = mysql_fetch_array($dat);

  // получаем последнюю дату архивации
  $query = "SELECT UNIX_TIMESTAMP(MAX(putdate + INTERVAL 1 MONTH)) 
            FROM $tbl_arch_searchquery_month";
  $arh = mysql_query($query);
  if(!$arh) exit(mysql_error());
  if(mysql_num_rows($arh) > 0)
  {
    $last_date = mysql_result($arh,0);
  }
  if(empty($last_date))
  {
    if(isset($arr_date['data']))
    {
      // Если запуск первый - берём дату из $tbl_arch_searchquery
      $last_date = $arr_date['data'];
    }
    else
    {
      // Иначе берём текущие сутки
      $last_date = time();
    }
  }

  //Последней полный день
  $last_day = mktime(23,59,59, date("m"), date("d")-1, date("Y")) + 2;
  // Вычисляем сколько полных месяцев прошло с даты последней архивации
  $month = (floor(date("Y",$last_day) - date("Y",$last_date)))*12 + 
           floor(date("m",$last_day) - date("m",$last_date)); 

  // Если прошло больше месяца - архивируем данные
  if ($month > 0)
  {
    $yandex_number  = YANDEX_NUMBER;
    $rambler_number = RAMBLER_NUMBER;
    $google_number  = GOOGLE_NUMBER;
    $aport_number   = APORT_NUMBER;
    $msn_number     = MSN_NUMBER;

    // Архивируем данные по всем месяцам, по которым архивация
    // не проводилась
    for($i = date("Y",$last_date)*12 + date("m",$last_date); $i < date("Y",$last_day)*12 + date("m",$last_day); $i++)
    {
      $year = (int)($i/12);
      $month = ($i%12);
      if($month == 0)
      {
        $year--;
        $month = 12;
      }
      // Вспомогательное условие
      $tmp = "YEAR(putdate) = $year AND
              MONTH(putdate) = '".sprintf("%02d",$month)."'";

      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_yandex = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'yandex' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $yandex_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_rambler = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'rambler' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $rambler_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_google  = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'google' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $google_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_aport   = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'aport' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $aport_number";
      // Извлекаем $xxx_number самых распространённых запросов за неделю
      $query_msn     = "SELECT name, SUM(total) AS total FROM $tbl_arch_searchquery 
                       WHERE searches = 'msn' AND ".$tmp." 
                       GROUP BY name 
                       ORDER BY total DESC 
                       LIMIT $msn_number";

      $ynd = mysql_query($query_yandex);
      if(!$ynd) exit(mysql_error());
      $gog = mysql_query($query_google);
      if(!$gog) exit(mysql_error());
      $rbl = mysql_query($query_rambler);
      if(!$rbl) exit(mysql_error());
      $apt = mysql_query($query_aport);
      if(!$apt) exit(mysql_error());
      $msn = mysql_query($query_msn);
      if(!$msn) exit(mysql_error());

      // Формируем запрос для ахивации поисковых запросов в таблицу $tbl_arch_num_searchquery_month
      $number_yandex     = $number_searchquerys['number_yandex'];
      $number_google     = $number_searchquerys['number_google'];
      $number_rambler    = $number_searchquerys['number_rambler'];
      $number_aport      = $number_searchquerys['number_aport'];
      $number_msn        = $number_searchquerys['number_msn'];

      // Формируем запрос для ахивации наиболее частых запросов в таблицу $tbl_arch_searchquery_week
      while($yandex = mysql_fetch_array($ynd))
      {
        $sql_yandex[] = "(NULL,
                         '$year-".sprintf("%02d",$month)."-01 23:59:59',
                         '$yandex[name]', 
                         $yandex[total],
                         'yandex')";
      }
      while($google = mysql_fetch_array($gog))
      {
        $sql_google[] = "(NULL,
                         '$year-".sprintf("%02d",$month)."-01 23:59:59',
                         '$google[name]', 
                         $google[total],
                         'google')";
      }
      while($rambler = mysql_fetch_array($rbl))
      {
        $sql_rambler[] = "(NULL,
                         '$year-".sprintf("%02d",$month)."-01 23:59:59',
                         '$rambler[name]', 
                         $rambler[total],
                         'rambler')";
      }
      while($aport = mysql_fetch_array($apt))
      {
        $sql_aport[] = "(NULL,
                         '$year-".sprintf("%02d",$month)."-01 23:59:59',
                         '$aport[name]', 
                         $aport[total],
                         'aport')";
      }
      while($ms = mysql_fetch_array($msn))
      {
        $sql_msn[] = "(NULL,
                         '$year-".sprintf("%02d",$month)."-01 23:59:59',
                         '$ms[name]', 
                         $ms[total],
                         'msn')";
      }
    }

    if(!empty($sql_yandex))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_month VALUES".implode(",", $sql_yandex);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_google))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_month VALUES".implode(",", $sql_google);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_rambler))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_month VALUES".implode(",", $sql_rambler);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_aport))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_month VALUES".implode(",", $sql_aport);
      if(!mysql_query($query)) exit(mysql_error());
    }
    if(!empty($sql_msn))
    {
      $query = "INSERT INTO $tbl_arch_searchquery_month VALUES".implode(",", $sql_msn);
      if(!mysql_query($query)) exit(mysql_error());
    }
  }
}
?>