Source for file class.browser.php

Documentation is available at class.browser.php

  1. <?php
  2.  
  3. /**
  4.  * Класс обработки статистики визитов
  5.  *
  6.  * @package AVE.cms
  7.  * @subpackage module_Counter
  8.  * @filesource
  9.  */
  10. class Counter
  11. {
  12.  
  13. /**
  14.  *    СВОЙСТВА
  15.  */
  16.  
  17.     /**
  18.      * Количество строк при выводе информации о визитах
  19.      *
  20.      * @var int 
  21.      */
  22.     var $_limit = 25;
  23.  
  24. /**
  25.  *    ВНУТРЕННИЕ МЕТОДЫ
  26.  */
  27.  
  28.     /**
  29.      * Выборка сводной статистики из базы
  30.      *
  31.      * @param int $id - идентификатор счетчика
  32.      * @return array 
  33.      *      all   - общее количество визитов
  34.      *      today - количество визитов за текущий день
  35.      *      yestd - количество визитов за вчерашний день
  36.      *      prevm - количество визитов за предыдущий месяц
  37.      *      prevy - количество визитов за предыдущий год
  38.      */
  39.     function _counterStatisticGet($id)
  40.     {
  41.         global $AVE_DB;
  42.  
  43.         $sql $AVE_DB->Query("
  44.             SELECT COUNT(*) AS visits
  45.             FROM " PREFIX "_modul_counter_info
  46.             WHERE counter_id = '" $id "'
  47.             UNION ALL
  48.             SELECT COUNT(*) AS visits
  49.             FROM " PREFIX "_modul_counter_info
  50.             WHERE counter_id = '" $id "'
  51.             AND expire = " mktime(23,59,59"
  52.             UNION ALL
  53.             SELECT COUNT(*) AS visits
  54.             FROM " PREFIX "_modul_counter_info
  55.             WHERE counter_id = '" $id "'
  56.             AND expire = " (mktime(0,0,0)-1"
  57.             UNION ALL
  58.             SELECT COUNT(*) AS visits
  59.             FROM " PREFIX "_modul_counter_info
  60.             WHERE counter_id = '" $id "'
  61.             AND (expire
  62.                 BETWEEN " mktime(0,0,0,date('m'),1"
  63.                 AND " (mktime(0,0,0,date('m')+1,1)-1")
  64.             UNION ALL
  65.             SELECT COUNT(*) AS visits
  66.             FROM " PREFIX "_modul_counter_info
  67.             WHERE counter_id = '" $id "'
  68.             AND (expire
  69.                 BETWEEN " mktime(0,0,0,1,1"
  70.                 AND " (mktime(0,0,0,1,1,date('Y')+1)-1")
  71.         ");
  72.  
  73.         $row['all']       $sql->fetchRow()->visits;
  74.         $row['today']     $sql->fetchRow()->visits;
  75.         $row['yesterday'$sql->fetchRow()->visits;
  76.         $row['prevmonth'$sql->fetchRow()->visits;
  77.         $row['prevyear']  $sql->fetchRow()->visits;
  78.  
  79.         return $row;
  80.     }
  81.  
  82. /**
  83.  *    ВНЕШНИЕ МЕТОДЫ
  84.  */
  85.  
  86.     /**
  87.      * Обработка тэга счетчика
  88.      *
  89.      * @param int $id - идентификатор счетчика
  90.      */
  91.     function counterClientNew($id)
  92.     {
  93.         global $AVE_DB;
  94.  
  95.         if (!empty($_SERVER['REMOTE_ADDR']))
  96.         {
  97.             $ip $_SERVER['REMOTE_ADDR'];
  98.         }
  99.         else
  100.         {
  101.             $ip $_SERVER['HTTP_CLIENT_IP'];
  102.         }
  103.  
  104.         $exist $AVE_DB->Query("
  105.             SELECT 1
  106.             FROM " PREFIX "_modul_counter_info
  107.             WHERE client_ip = '" addslashes($ip"'
  108.             AND counter_id = '" $id"'
  109.             AND expire > '" time("'
  110.             LIMIT 1
  111.         ")->NumRows();
  112.  
  113.         $expire  mktime(235959);
  114.         setcookie('counter_' $id'1'$expire);
  115.  
  116.         if ($exist)
  117.         {
  118.             $referer '';
  119.             if (isset($_SERVER['HTTP_REFERER']))
  120.             {
  121.                 $referer urldecode(trim($_SERVER['HTTP_REFERER']));
  122.                 $referer iconv("UTF-8""WINDOWS-1251"$referer);
  123.             }
  124.  
  125.             include_once(BASE_DIR '/modules/counter/phpSniff.core.php');
  126.             include_once(BASE_DIR '/modules/counter/phpSniff.class.php');
  127.             $settings array(
  128.                 'check_cookies'=>'',
  129.                 'default_language'=>'',
  130.                 'allow_masquerading'=>''
  131.             );
  132.             $client new phpSniff(''$settings);
  133.  
  134.             $AVE_DB->Query("
  135.                 INSERT
  136.                 INTO " PREFIX "_modul_counter_info
  137.                 SET
  138.                     counter_id     = '" $id "',
  139.                     client_ip      = '" addslashes($ip"',
  140.                     client_os      = '" $client->property('platform'' ' $client->property('os'"',
  141.                     client_browser = '" $client->property('long_name'' ' $client->property('version'"',
  142.                     client_referer = '" addslashes($referer"',
  143.                     visit          = '" time("',
  144.                     expire         = '" $expire "'
  145.             ");
  146.         }
  147.     }
  148.  
  149.     /**
  150.      * Создание нового счетчика
  151.      *
  152.      */
  153.     function counterNew()
  154.     {
  155.         global $AVE_DB;
  156.  
  157.         $AVE_DB->Query("
  158.             INSERT
  159.             INTO " PREFIX "_modul_counter
  160.             SET
  161.                 id = '',
  162.                 counter_name = '" htmlspecialchars($_POST['counter_name']"'
  163.         ");
  164.  
  165.         header('Location:index.php?do=modules&action=modedit&mod=counter&moduleaction=1&cp=' SESSION);
  166.         exit;
  167.     }
  168.  
  169.     /**
  170.      * Запись параметров счетчика
  171.      *
  172.      */
  173.     function counterSettingsSave()
  174.     {
  175.         foreach($_POST['counter_name'as $id => $counter_name)
  176.         {
  177.             $AVE_DB->Query("
  178.                 UPDATE  " PREFIX "_modul_counter
  179.                 SET counter_name ='" $counter_name "'
  180.                 WHERE id = '" $id "'
  181.             ");
  182.         }
  183.  
  184.         foreach($_POST['del'as $id => $del)
  185.         {
  186.             $AVE_DB->Query("
  187.                 DELETE
  188.                 FROM " PREFIX "_modul_counter
  189.                 WHERE id = '" $id "'
  190.             ");
  191.  
  192.             $AVE_DB->Query("
  193.                 DELETE
  194.                 FROM " PREFIX "_modul_counter_info
  195.                 WHERE counter_id = '" $id "'
  196.             ");
  197.         }
  198.  
  199.         header('Location:index.php?do=modules&action=modedit&mod=counter&moduleaction=1&cp=' SESSION);
  200.         exit;
  201.     }
  202.  
  203.     /**
  204.      * Список счетчиков в админпанели
  205.      *
  206.      * @param string $tpl_dir - путь к папке с шаблонами модуля
  207.      * @param string $lang_file - путь к языковому файлу модуля
  208.      */
  209.     function counterList($tpl_dir$lang_file)
  210.     {
  211.         global $AVE_DB$AVE_Template;
  212.  
  213.         $sql $AVE_DB->Query("
  214.             SELECT *
  215.             FROM " PREFIX "_modul_counter
  216.             ORDER BY id ASC
  217.         ");
  218.  
  219.         $items array();
  220.         while ($row $sql->FetchRow())
  221.         {
  222.             $stat $this->_counterStatisticGet($row->id);
  223.  
  224.             $row->all       $stat['all'];
  225.             $row->today     $stat['today'];
  226.             $row->yesterday $stat['yesterday'];
  227.             $row->prevmonth $stat['prevmonth'];
  228.             $row->prevyear  $stat['prevyear'];
  229.  
  230.             array_push($items$row);
  231.         }
  232.  
  233.         $AVE_Template->assign('items'$items);
  234.  
  235.         $AVE_Template->config_load($lang_file'admin');
  236.  
  237.         $AVE_Template->assign('content'$AVE_Template->fetch($tpl_dir 'admin_counter.tpl'));
  238.     }
  239.  
  240.     /**
  241.      * Подробная информация о визитах
  242.      *
  243.      * @param string $tpl_dir - путь к папке с шаблонами модуля
  244.      * @param string $lang_file - путь к языковому файлу модуля
  245.      */
  246.     function counterRefererList($tpl_dir$lang_file)
  247.     {
  248.         global $AVE_DB$AVE_Template;
  249.  
  250.         $sort ' ORDER BY visit DESC';
  251.         $sort_navi '';
  252.  
  253.         if (!empty($_REQUEST['sort']))
  254.         {
  255.             switch($_REQUEST['sort'])
  256.             {
  257.                 case 'visit_desc' :
  258.                     $sort ' ORDER BY visit DESC';
  259.                     $sort_navi '&amp;sort=visit_desc';
  260.                     break;
  261.  
  262.                 case 'visit_asc' :
  263.                     $sort ' ORDER BY visit ASC';
  264.                     $sort_navi '&amp;sort=visit_asc';
  265.                     break;
  266.  
  267.                 case 'ip_desc' :
  268.                     $sort ' ORDER BY client_ip DESC';
  269.                     $sort_navi '&amp;sort=ip_desc';
  270.                     break;
  271.  
  272.                 case 'ip_asc' :
  273.                     $sort ' ORDER BY client_ip ASC';
  274.                     $sort_navi '&amp;sort=ip_asc';
  275.                     break;
  276.  
  277.                 case 'referer_desc' :
  278.                     $sort ' ORDER BY client_referer DESC';
  279.                     $sort_navi '&amp;sort=referer_desc';
  280.                     break;
  281.  
  282.                 case 'referer_asc' :
  283.                     $sort ' ORDER BY client_referer ASC';
  284.                     $sort_navi '&amp;sort=referer_asc';
  285.                     break;
  286.  
  287.                 case 'os_desc' :
  288.                     $sort ' ORDER BY client_os DESC';
  289.                     $sort_navi '&amp;sort=os_desc';
  290.                     break;
  291.  
  292.                 case 'os_asc' :
  293.                     $sort ' ORDER BY client_os ASC';
  294.                     $sort_navi '&amp;sort=os_asc';
  295.                     break;
  296.  
  297.                 case 'browser_desc' :
  298.                     $sort ' ORDER BY client_browser DESC';
  299.                     $sort_navi '&amp;sort=browser_desc';
  300.                     break;
  301.  
  302.                 case 'browser_asc' :
  303.                     $sort ' ORDER BY client_browser ASC';
  304.                     $sort_navi '&amp;sort=browser_asc';
  305.                     break;
  306.             }
  307.         }
  308.  
  309.         $start get_current_page($this->_limit - $this->_limit;
  310.  
  311.         $sql $AVE_DB->Query("
  312.             SELECT SQL_CALC_FOUND_ROWS *
  313.             FROM " PREFIX "_modul_counter_info
  314.             WHERE counter_id = '" intval($_REQUEST['id']"'
  315.             " $sort "
  316.             LIMIT " $start "," $this->_limit
  317.         );
  318.  
  319.         $items array();
  320.         while($row $sql->FetchRow())
  321.         {
  322.             array_push($items$row);
  323.         }
  324.  
  325.         $num $AVE_DB->Query("SELECT FOUND_ROWS()")->GetCell();
  326.  
  327.         if($num $this->_limit)
  328.         {
  329.             $seiten ceil($num $this->_limit);
  330.             $page_nav " <a class=\"pnav\" href=\"index.php?do=modules&action=modedit&mod=counter&moduleaction=view_referer&cp=" SESSION
  331.                 . '&id=' intval($_REQUEST['id']'&pop=1&page={s}' $sort_navi "\">{t}</a> ";
  332.             $page_nav get_pagination($seiten'page'$page_nav);
  333.             $AVE_Template->assign('page_nav'$page_nav);
  334.         }
  335.  
  336.         $AVE_Template->assign('items'$items);
  337.  
  338.         $AVE_Template->config_load($lang_file'admin');
  339.  
  340.         $AVE_Template->assign('content'$AVE_Template->fetch($tpl_dir 'admin_entries.tpl'));
  341.     }
  342.  
  343.     /**
  344.      * Вывод статистики в публичной части
  345.      *
  346.      * @param string $tpl_dir - путь к папке с шаблонами модуля
  347.      * @param string $lang_file - путь к языковому файлу модуля
  348.      * @param int $id - идентификатор счетчика
  349.      */
  350.     function counterStatisticShow($tpl_dir$lang_file$id)
  351.     {
  352.         global $AVE_Template;
  353.  
  354.         if ((empty($_SERVER['REMOTE_ADDR']&& empty($_SERVER['HTTP_CLIENT_IP'])) &&
  355.             (isset($_COOKIE['counter_' $id]&& $_COOKIE['counter_' $id== '1'))
  356.         {
  357.             $this->counterClientNew($id);
  358.         }
  359.  
  360.         $AVE_Template->config_load($lang_file'user');
  361.  
  362.         $AVE_Template->assign($this->_counterStatisticGet($id));
  363.  
  364.         $AVE_Template->display($tpl_dir 'show_stat-' $id '.tpl');
  365.     }
  366. }
  367.  
  368. ?>

Documentation generated on Fri, 04 Jun 2010 18:01:15 +0400 by phpDocumentor 1.4.3