stats
[ class tree: stats ] [ index: stats ] [ all elements ]

Source for file stats_lib.php

Documentation is available at stats_lib.php

  1. <?php
  2. /**
  3.  * $Header: /cvsroot/bitweaver/_bit_stats/stats_lib.php,v 1.29 2007/01/06 09:46:26 squareing Exp $
  4.  *
  5.  * Copyright (c) 2004 bitweaver.org
  6.  * Copyright (c) 2003 tikwiki.org
  7.  * Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al.
  8.  * All Rights Reserved. See copyright.txt for details and a complete list of authors.
  9.  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details
  10.  *
  11.  * $Id: stats_lib.php,v 1.29 2007/01/06 09:46:26 squareing Exp $
  12.  * @package stats
  13.  */
  14.  
  15. /**
  16.  * @package stats
  17.  * @subpackage StatsLib
  18.  */
  19. class StatsLib extends BitBase {
  20.     function StatsLib({                    BitBase::BitBase();
  21.     }
  22.  
  23.  
  24.     /* referer methods */
  25.     function clear_referer_stats({
  26.         $query "delete from stats_referers";
  27.  
  28.         $result $this->mDb->query($query);
  29.     }
  30.  
  31.     function list_referer_stats($offset$max_records$sort_mode$find{
  32.         $bindvars array();
  33.         if ($find{
  34.             $findesc $this->mDb->qstr('%' strtoupper$find '%');
  35.             $mid " where (UPPER(`referer`) like ?)";
  36.             $bindvars array($findesc);
  37.         else {
  38.             $mid "";
  39.         }
  40.  
  41.         $query "select * from `".BIT_DB_PREFIX."stats_referers$mid order by ".$this->mDb->convertSortmode($sort_mode);;
  42.         $query_cant "select count(*) from `".BIT_DB_PREFIX."stats_referers$mid";
  43.         $result $this->mDb->query($query,$bindvars,$max_records,$offset);
  44.         $cant $this->mDb->getOne($query_cant,$bindvars);
  45.         $ret array();
  46.  
  47.         while ($res $result->fetchRow()) {
  48.             $ret[$res;
  49.         }
  50.  
  51.         $retval array();
  52.         $retval["data"$ret;
  53.         $retval["cant"$cant;
  54.         return $retval;
  55.     }
  56.  
  57.     function register_referer($referer{
  58.         if!empty$referer ) ) {
  59.             global $gBitSystem;
  60.             $now $gBitSystem->getUTCTime();
  61.             $cant $this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."stats_referers` where `referer`=?",array($referer));
  62.  
  63.             $query "update `".BIT_DB_PREFIX."stats_referers` set `hits`=`hits`+1,`last`=? where `referer`=?";
  64.             $rs $this->mDb->query($query,array((int)$now,$referer));
  65.             if!$this->mDb->mDb->Affected_Rows() ) {
  66.                 $query "insert into `".BIT_DB_PREFIX."stats_referers`(`last`,`referer`,`hits`) values(?,?,1)";
  67.                 $result $this->mDb->query($query,array((int)$now,$referer));
  68.             }
  69.         }
  70.     }
  71.  
  72.  
  73.     /* content methods */
  74.     function list_orphan_pages($offset 0$max_records = -1$sort_mode 'title_desc'$find ''{
  75.  
  76.         if ($sort_mode == 'size_desc'{
  77.             $sort_mode 'wiki_page_size_desc';
  78.         }
  79.  
  80.         if ($sort_mode == 'size_asc'{
  81.             $sort_mode 'wiki_page_size_asc';
  82.         }
  83.  
  84.         $old_sort_mode '';
  85.  
  86.         if (in_array($sort_modearray(
  87.             'versions_desc',
  88.             'versions_asc',
  89.             'links_asc',
  90.             'links_desc',
  91.             'backlinks_asc',
  92.             'backlinks_desc'
  93.         ))) {
  94.             $old_offset $offset;
  95.  
  96.             $old_max_records $max_records;
  97.             $old_sort_mode $sort_mode;
  98.             $sort_mode 'user_desc';
  99.             $offset 0;
  100.             $max_records = -1;
  101.         }
  102.         $bindvars array();
  103.         if ($find{
  104.             $mid " where UPPER(`page_name`) like ? ";
  105.             $bindvars['%'.strtoupper$find ).'%';
  106.         else {
  107.             $mid "";
  108.         }
  109.  
  110.         // If sort mode is versions then offset is 0, max_records is -1 (again) and sort_mode is nil
  111.         // If sort mode is links then offset is 0, max_records is -1 (again) and sort_mode is nil
  112.         // If sort mode is backlinks then offset is 0, max_records is -1 (again) and sort_mode is nil
  113.         $query "select * from `".BIT_DB_PREFIX."wiki_pages` wp INNER JOIN `".BIT_DB_PREFIX."liberty_contentlc ONlc.`content_id`=wp.`content_id` ) $mid order by ".$this->mDb->convertSortmode($sort_mode);
  114.         $query_cant "select count(*) from `".BIT_DB_PREFIX."wiki_pages$mid";
  115.         $result $this->mDb->query($query,$bindvars,-1,0);
  116.         $cant $this->mDb->getOne($query_cant,$bindvars);
  117.         $ret array();
  118.         $num_or 0;
  119.  
  120.         while ($res $result->fetchRow()) {
  121.             $title $res["title"];
  122.             $queryc "select count(*) from `".BIT_DB_PREFIX."liberty_content_links` where `to_content_id`=?";
  123.             $cant $this->mDb->getOne$queryc,array($res['content_id') );
  124.             $queryc "select count(*) from `".BIT_DB_PREFIX."liberty_structures` ls WHERE ls.`content_id`=?";
  125.             $cant += $this->mDb->getOne$querycarray$res['content_id') );
  126.  
  127.             if ($cant == 0{
  128.                 $num_or++;
  129.                 $aux array();
  130.                 $aux["title"$title;
  131.                 $page $aux["title"];
  132.                 $page_as addslashes($page);
  133. //                $aux["hits"] = $res["hits"];
  134.                 $aux["last_modified"$res["last_modified"];
  135.                 $aux["user_id"$res["user_id"];
  136.                 $aux["ip"$res["ip"];
  137.                 $aux["version"$res["version"];
  138.                 $aux["flag"$res["flag"== 'y' tra('locked'tra('unlocked');
  139.                 $aux["versions"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."liberty_content_history` WHERE `content_id`=?",array($res['content_id']));
  140.                 $aux["links"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."liberty_content_links` WHERE `from_content_id`=?",array$res['content_id']) );
  141.                 $aux["backlinks"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."liberty_content_links` where `to_content_id`=?",array$res['content_id') );
  142.                 $ret[$aux;
  143.             }
  144.         }
  145.  
  146.         // If sortmode is versions, links or backlinks sort using the ad-hoc function and reduce using old_offse and old_max_records
  147.         if ($old_sort_mode == 'versions_asc'{
  148.             usort($ret'compare_versions');
  149.         }
  150.  
  151.         if ($old_sort_mode == 'versions_desc'{
  152.             usort($ret'r_compare_versions');
  153.         }
  154.  
  155.         if ($old_sort_mode == 'links_desc'{
  156.             usort($ret'compare_links');
  157.         }
  158.  
  159.         if ($old_sort_mode == 'links_asc'{
  160.             usort($ret'r_compare_links');
  161.         }
  162.  
  163.         if ($old_sort_mode == 'backlinks_desc'{
  164.             usort($ret'compare_backlinks');
  165.         }
  166.  
  167.         if ($old_sort_mode == 'backlinks_asc'{
  168.             usort($ret'r_compare_backlinks');
  169.         }
  170.  
  171.         if (in_array($old_sort_modearray(
  172.             'versions_desc',
  173.             'versions_asc',
  174.             'links_asc',
  175.             'links_desc',
  176.             'backlinks_asc',
  177.             'backlinks_desc'
  178.         ))) {
  179.             $ret array_slice($ret$old_offset$old_max_records);
  180.         }
  181.  
  182.         $retval array();
  183.         $retval["data"$ret;
  184.         $retval["cant"$num_or;
  185.         return $retval;
  186.     }
  187.  
  188.     function wiki_stats({
  189.         global $gBitSystem;
  190.         $stats array();
  191.         if$gBitSystem->isPackageActive'wiki' ) ) {
  192.             require_onceWIKI_PKG_PATH.'BitPage.php' );
  193.  
  194.             $stats["pages"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."wiki_pages`",array());
  195.             $stats["versions"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."liberty_content_history`",array());
  196.  
  197.             if ($stats["pages"]{
  198.                 $stats["vpp"$stats["versions"$stats["pages"];
  199.             else {
  200.                 $stats["vpp"0;
  201.             }
  202.             $stats["visits"$this->mDb->getOne("SELECT sum(`hits`) 
  203.                                                     FROM `".BIT_DB_PREFIX."liberty_content` 
  204.                                                     LEFT OUTER JOIN `".BIT_DB_PREFIX."liberty_content_hits` liberty_content_hits 
  205.                                                     ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)
  206.                                                     WHERE `content_type_guid`=?",arrayBITPAGE_CONTENT_TYPE_GUID )
  207.                                                     );
  208.             $or $this->list_orphan_pages(0-1'title_desc''');
  209.             $stats["orphan"$or["cant"];
  210.             $links $this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."liberty_content_links`",array());
  211.  
  212.             if ($stats["pages"]{
  213.                 $stats["lpp"$links $stats["pages"];
  214.             else {
  215.                 $stats["lpp"0;
  216.             }
  217.             $stats["size"$this->mDb->getOne("select sum(`wiki_page_size`) from `".BIT_DB_PREFIX."wiki_pages`",array());
  218.  
  219.             if ($stats["pages"]{
  220.                 $stats["bpp"$stats["size"$stats["pages"];
  221.             else {
  222.                 $stats["bpp"0;
  223.             }
  224.             $stats["size"$stats["size"1000000;
  225.         }
  226.         return $stats;
  227.     }
  228.  
  229.     function cms_stats({
  230.         global $gBitSystem;
  231.         $stats array();
  232.         if$gBitSystem->isPackageActive'articles' ) ) {
  233.             require_onceARTICLES_PKG_PATH.'BitArticle.php' );
  234.  
  235.             $stats["articles"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."articles`",array());
  236.             $stats["reads"$this->mDb->getOne("SELECT sum(`hits`) 
  237.                                                     FROM `".BIT_DB_PREFIX."liberty_content` 
  238.                                                     LEFT OUTER JOIN `".BIT_DB_PREFIX."liberty_content_hits` liberty_content_hits 
  239.                                                     ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)                                                
  240.                                                     WHERE `content_type_guid`=?",arrayBITARTICLE_CONTENT_TYPE_GUID )
  241.                                                     );
  242.             $stats["rpa"($stats["articles"$stats["reads"$stats["articles"0);
  243. //            $stats["size"] = $this->mDb->getOne("select sum(`size`) from `".BIT_DB_PREFIX."articles`",array());
  244. //            $stats["bpa"] = ($stats["articles"] ? $stats["size"] / $stats["articles"] : 0);
  245.             $stats["topics"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."article_topics` where `active_topic`=?",array('y'));
  246.         }
  247.         return $stats;
  248.     }
  249.  
  250.     function blog_stats({
  251.         global $gBitSystem;
  252.         $stats array();
  253.         if$gBitSystem->isPackageActive'blogs' ) ) {
  254.             require_onceBLOGS_PKG_PATH.'BitBlogPost.php' );
  255.             $stats["blogs"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."blogs`",array());
  256.             $stats["posts"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."blog_posts`",array());
  257.             $stats["ppb"($stats["blogs"$stats["posts"$stats["blogs"0);
  258.     //        $stats["size"] = $this->mDb->getOne("select sum(`data_size`) from `".BIT_DB_PREFIX."blog_posts`",array());
  259.     //        $stats["bpp"] = ($stats["posts"] ? $stats["size"] / $stats["posts"] : 0);
  260.             $stats["visits"$this->mDb->getOne("SELECT sum(`hits`) 
  261.                                                     FROM `".BIT_DB_PREFIX."liberty_content` 
  262.                                                     LEFT OUTER JOIN `".BIT_DB_PREFIX."liberty_content_hits` liberty_content_hits 
  263.                                                     ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)
  264.                                                     WHERE `content_type_guid`=?",arrayBITBLOGPOST_CONTENT_TYPE_GUID )
  265.                                                     );
  266.         }
  267.         return $stats;
  268.     }
  269.  
  270.     function registrationStats$pPeriod {
  271.         global $gBitDbType;
  272.  
  273.         switch$pPeriod {
  274.             case 'year':
  275.                 $format 'Y';
  276.                 break;
  277.             case 'quarter':
  278.                 $format 'Y-\QQ';
  279.                 break;
  280.             case 'day':
  281.                 $format 'Y-m-d';
  282.                 break;
  283.             case 'week':
  284.                 $format 'Y \Week W';
  285.                 break;
  286.             case 'month':
  287.             default:
  288.                 $format 'Y-m';
  289.                 break;
  290.         }
  291.  
  292. //        $sqlPeriod = $this->mDb->SQLDate( $format, $this->mDb->SQLIntToTimestamp( '`registration_date`' ) );
  293.         $sqlPeriod $this->mDb->SQLDate$format$this->mDb->SQLIntToTimestamp'registration_date' ) );
  294.         $query "SELECT $sqlPeriod AS periodCOUNT(`user_id`) FROM `".BIT_DB_PREFIX."users_users`
  295.                     GROUP BY$sqlPeriod ) ORDER BY COUNT(`user_id`) DESC";
  296.         $stats['per_period'$this->mDb->getAssoc$query );
  297.         $stats['max'!empty$stats['per_period'current$stats['per_period'0;
  298.         krsort$stats['per_period');
  299.         return $stats;
  300.     }
  301.  
  302.     function user_stats({
  303.         global $gBitSystem;
  304.         $stats array();
  305.         $stats["users"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."users_users`",array());
  306.         if$gBitSystem->isPackageActive'tidbits' ) ) {
  307.             $stats["bookmarks"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."tidbits_bookmarks_urls`",array());
  308.             $stats["bpu"($stats["users"$stats["bookmarks"$stats["users"0);
  309.         }
  310.         return $stats;
  311.     }
  312.  
  313.     function site_stats({
  314.         $stats array();
  315.         $stats["started"$this->mDb->getOne("select min(`stats_day`) from `".BIT_DB_PREFIX."stats_pageviews`",array());
  316.         $stats["days"$this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."stats_pageviews`",array());
  317.         $stats["pageviews"$this->mDb->getOne("select sum(`pageviews`) from `".BIT_DB_PREFIX."stats_pageviews`");
  318.         $stats["ppd"($stats["days"$stats["pageviews"$stats["days"0);
  319.         $stats["bestpvs"$this->mDb->getOne("select max(`pageviews`) from `".BIT_DB_PREFIX."stats_pageviews`",array());
  320.         $stats["bestday"$this->mDb->getOne("select `stats_day` from `".BIT_DB_PREFIX."stats_pageviews` where `pageviews`=?",array((int)$stats["bestpvs"]));
  321.         $stats["worstpvs"$this->mDb->getOne("select min(`pageviews`) from `".BIT_DB_PREFIX."stats_pageviews`",array());
  322.         $stats["worstday"$this->mDb->getOne("select `stats_day` from `".BIT_DB_PREFIX."stats_pageviews` where `pageviews`=?",array((int)$stats["worstpvs"]));
  323.         return $stats;
  324.     }
  325.  
  326.     // Stats ////
  327.     /*shared*/
  328.     function add_pageview({
  329.         $dayzero mktime(000date("m")date("d")date("Y"));
  330.         $this->mDb->StartTrans();
  331.         $cant $this->mDb->getOne("select count(*) from `".BIT_DB_PREFIX."stats_pageviews` where `stats_day`=?",array((int)$dayzero));
  332.  
  333.         if ($cant{
  334.         $query "update `".BIT_DB_PREFIX."stats_pageviews` set `pageviews`=`pageviews`+1 where `stats_day`=?";
  335.         else {
  336.         $query "insert into `".BIT_DB_PREFIX."stats_pageviews`(`stats_day`,`pageviews`) values(?,1)";
  337.         }
  338.         $result $this->mDb->query($query,array((int)$dayzero));
  339.         $this->mDb->CompleteTrans();
  340.     }
  341.  
  342.     function get_pv_chart_data$days {
  343.         $now mktime000date"m" )date"d" )date"Y" ) );
  344.         $dfrom 0;
  345.         if$days != $dfrom $now $days 24 60 60 );
  346.  
  347.         $query "SELECT `stats_day`, `pageviews` FROM `".BIT_DB_PREFIX."stats_pageviews` WHERE `stats_day`<=? AND `stats_day`>=? ORDER BY `stats_day` ASC";
  348.         $result $this->mDb->query$query,array( int )$now,( int )$dfrom ) );
  349.         $ret array();
  350.         $n ceil$result->numRows(20 );
  351.         $i 0;
  352.  
  353.         while$res $result->fetchRow() ) {
  354.             if$i $n == {
  355.                 $data array(
  356.                     date"j M Y"$res["stats_day"),
  357.                     $res["pageviews"]
  358.                 );
  359.             else {
  360.                 $data array(
  361.                     "",
  362.                     $res["pageviews"]
  363.                 );
  364.             }
  365.             $ret[$data;
  366.             $i++;
  367.         }
  368.  
  369.         return $ret;
  370.     }
  371.  
  372.     function get_usage_chart_data({
  373.         global $gBitSystem$gLibertySystem;
  374.         $ret['data'][0]['a';
  375.       &nbs