Source for file stats_lib.php
Documentation is available at stats_lib.php
* $Header: /cvsroot/bitweaver/_bit_stats/stats_lib.php,v 1.29 2007/01/06 09:46:26 squareing Exp $
* Copyright (c) 2004 bitweaver.org
* Copyright (c) 2003 tikwiki.org
* Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al.
* All Rights Reserved. See copyright.txt for details and a complete list of authors.
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details
* $Id: stats_lib.php,v 1.29 2007/01/06 09:46:26 squareing Exp $
$query = "delete from stats_referers";
$result = $this->mDb->query($query);
$mid = " where (UPPER(`referer`) like ?)";
$bindvars = array($findesc);
$query = "select * from `". BIT_DB_PREFIX. "stats_referers` $mid order by ". $this->mDb->convertSortmode($sort_mode);;
$query_cant = "select count(*) from `". BIT_DB_PREFIX. "stats_referers` $mid";
$result = $this->mDb->query($query,$bindvars,$max_records,$offset);
$cant = $this->mDb->getOne($query_cant,$bindvars);
while ($res = $result->fetchRow()) {
if( !empty( $referer ) ) {
$now = $gBitSystem->getUTCTime();
$cant = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "stats_referers` where `referer`=?",array($referer));
$query = "update `". BIT_DB_PREFIX. "stats_referers` set `hits`=`hits`+1,`last`=? where `referer`=?";
$rs = $this->mDb->query($query,array((int) $now,$referer));
if( !$this->mDb->mDb->Affected_Rows() ) {
$query = "insert into `". BIT_DB_PREFIX. "stats_referers`(`last`,`referer`,`hits`) values(?,?,1)";
$result = $this->mDb->query($query,array((int) $now,$referer));
function list_orphan_pages($offset = 0, $max_records = - 1, $sort_mode = 'title_desc', $find = '') {
if ($sort_mode == 'size_desc') {
$sort_mode = 'wiki_page_size_desc';
if ($sort_mode == 'size_asc') {
$sort_mode = 'wiki_page_size_asc';
$old_max_records = $max_records;
$old_sort_mode = $sort_mode;
$sort_mode = 'user_desc';
$mid = " where UPPER(`page_name`) like ? ";
// If sort mode is versions then offset is 0, max_records is -1 (again) and sort_mode is nil
// If sort mode is links then offset is 0, max_records is -1 (again) and sort_mode is nil
// If sort mode is backlinks then offset is 0, max_records is -1 (again) and sort_mode is nil
$query = "select * from `". BIT_DB_PREFIX. "wiki_pages` wp INNER JOIN `". BIT_DB_PREFIX. "liberty_content` lc ON( lc.`content_id`=wp.`content_id` ) $mid order by ". $this->mDb->convertSortmode($sort_mode);
$query_cant = "select count(*) from `". BIT_DB_PREFIX. "wiki_pages` $mid";
$result = $this->mDb->query($query,$bindvars,- 1,0);
$cant = $this->mDb->getOne($query_cant,$bindvars);
while ($res = $result->fetchRow()) {
$queryc = "select count(*) from `". BIT_DB_PREFIX. "liberty_content_links` where `to_content_id`=?";
$cant = $this->mDb->getOne( $queryc,array($res['content_id'] ) );
$queryc = "select count(*) from `". BIT_DB_PREFIX. "liberty_structures` ls WHERE ls.`content_id`=?";
$cant += $this->mDb->getOne( $queryc, array( $res['content_id'] ) );
// $aux["hits"] = $res["hits"];
$aux["last_modified"] = $res["last_modified"];
$aux["user_id"] = $res["user_id"];
$aux["version"] = $res["version"];
$aux["flag"] = $res["flag"] == 'y' ? tra('locked') : tra('unlocked');
$aux["versions"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "liberty_content_history` WHERE `content_id`=?",array($res['content_id']));
$aux["links"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "liberty_content_links` WHERE `from_content_id`=?",array( $res['content_id']) );
$aux["backlinks"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "liberty_content_links` where `to_content_id`=?",array( $res['content_id'] ) );
// If sortmode is versions, links or backlinks sort using the ad-hoc function and reduce using old_offse and old_max_records
if ($old_sort_mode == 'versions_asc') {
usort($ret, 'compare_versions');
if ($old_sort_mode == 'versions_desc') {
usort($ret, 'r_compare_versions');
if ($old_sort_mode == 'links_desc') {
usort($ret, 'compare_links');
if ($old_sort_mode == 'links_asc') {
usort($ret, 'r_compare_links');
if ($old_sort_mode == 'backlinks_desc') {
usort($ret, 'compare_backlinks');
if ($old_sort_mode == 'backlinks_asc') {
usort($ret, 'r_compare_backlinks');
$ret = array_slice($ret, $old_offset, $old_max_records);
$retval["cant"] = $num_or;
if( $gBitSystem->isPackageActive( 'wiki' ) ) {
require_once( WIKI_PKG_PATH. 'BitPage.php' );
$stats["pages"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "wiki_pages`",array());
$stats["versions"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "liberty_content_history`",array());
$stats["vpp"] = $stats["versions"] / $stats["pages"];
$stats["visits"] = $this->mDb->getOne("SELECT sum(`hits`)
LEFT OUTER JOIN `". BIT_DB_PREFIX. "liberty_content_hits` liberty_content_hits
ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)
WHERE `content_type_guid`=?",array( BITPAGE_CONTENT_TYPE_GUID )
$stats["orphan"] = $or["cant"];
$links = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "liberty_content_links`",array());
$stats["lpp"] = $links / $stats["pages"];
$stats["size"] = $this->mDb->getOne("select sum(`wiki_page_size`) from `". BIT_DB_PREFIX. "wiki_pages`",array());
$stats["bpp"] = $stats["size"] / $stats["pages"];
$stats["size"] = $stats["size"] / 1000000;
if( $gBitSystem->isPackageActive( 'articles' ) ) {
require_once( ARTICLES_PKG_PATH. 'BitArticle.php' );
$stats["articles"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "articles`",array());
$stats["reads"] = $this->mDb->getOne("SELECT sum(`hits`)
LEFT OUTER JOIN `". BIT_DB_PREFIX. "liberty_content_hits` liberty_content_hits
ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)
WHERE `content_type_guid`=?",array( BITARTICLE_CONTENT_TYPE_GUID )
$stats["rpa"] = ($stats["articles"] ? $stats["reads"] / $stats["articles"] : 0);
// $stats["size"] = $this->mDb->getOne("select sum(`size`) from `".BIT_DB_PREFIX."articles`",array());
// $stats["bpa"] = ($stats["articles"] ? $stats["size"] / $stats["articles"] : 0);
$stats["topics"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "article_topics` where `active_topic`=?",array('y'));
if( $gBitSystem->isPackageActive( 'blogs' ) ) {
require_once( BLOGS_PKG_PATH. 'BitBlogPost.php' );
$stats["blogs"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "blogs`",array());
$stats["posts"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "blog_posts`",array());
$stats["ppb"] = ($stats["blogs"] ? $stats["posts"] / $stats["blogs"] : 0);
// $stats["size"] = $this->mDb->getOne("select sum(`data_size`) from `".BIT_DB_PREFIX."blog_posts`",array());
// $stats["bpp"] = ($stats["posts"] ? $stats["size"] / $stats["posts"] : 0);
$stats["visits"] = $this->mDb->getOne("SELECT sum(`hits`)
LEFT OUTER JOIN `". BIT_DB_PREFIX. "liberty_content_hits` liberty_content_hits
ON (liberty_content.`content_id` = liberty_content_hits.`content_id`)
// $sqlPeriod = $this->mDb->SQLDate( $format, $this->mDb->SQLIntToTimestamp( '`registration_date`' ) );
$sqlPeriod = $this->mDb->SQLDate( $format, $this->mDb->SQLIntToTimestamp( 'registration_date' ) );
$query = "SELECT $sqlPeriod AS period, COUNT(`user_id`) FROM `". BIT_DB_PREFIX. "users_users`
GROUP BY( $sqlPeriod ) ORDER BY COUNT(`user_id`) DESC";
$stats['per_period'] = $this->mDb->getAssoc( $query );
$stats['max'] = !empty( $stats['per_period'] ) ? current( $stats['per_period'] ) : 0;
krsort( $stats['per_period'] );
$stats["users"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "users_users`",array());
if( $gBitSystem->isPackageActive( 'tidbits' ) ) {
$stats["bookmarks"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "tidbits_bookmarks_urls`",array());
$stats["bpu"] = ($stats["users"] ? $stats["bookmarks"] / $stats["users"] : 0);
$stats["started"] = $this->mDb->getOne("select min(`stats_day`) from `". BIT_DB_PREFIX. "stats_pageviews`",array());
$stats["days"] = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "stats_pageviews`",array());
$stats["pageviews"] = $this->mDb->getOne("select sum(`pageviews`) from `". BIT_DB_PREFIX. "stats_pageviews`");
$stats["ppd"] = ($stats["days"] ? $stats["pageviews"] / $stats["days"] : 0);
$stats["bestpvs"] = $this->mDb->getOne("select max(`pageviews`) from `". BIT_DB_PREFIX. "stats_pageviews`",array());
$stats["bestday"] = $this->mDb->getOne("select `stats_day` from `". BIT_DB_PREFIX. "stats_pageviews` where `pageviews`=?",array((int) $stats["bestpvs"]));
$stats["worstpvs"] = $this->mDb->getOne("select min(`pageviews`) from `". BIT_DB_PREFIX. "stats_pageviews`",array());
$stats["worstday"] = $this->mDb->getOne("select `stats_day` from `". BIT_DB_PREFIX. "stats_pageviews` where `pageviews`=?",array((int) $stats["worstpvs"]));
$this->mDb->StartTrans();
$cant = $this->mDb->getOne("select count(*) from `". BIT_DB_PREFIX. "stats_pageviews` where `stats_day`=?",array((int) $dayzero));
$query = "update `". BIT_DB_PREFIX. "stats_pageviews` set `pageviews`=`pageviews`+1 where `stats_day`=?";
$query = "insert into `". BIT_DB_PREFIX. "stats_pageviews`(`stats_day`,`pageviews`) values(?,1)";
$result = $this->mDb->query($query,array((int) $dayzero));
$this->mDb->CompleteTrans();
if( $days != 0 ) $dfrom = $now - ( $days * 24 * 60 * 60 );
$query = "SELECT `stats_day`, `pageviews` FROM `". BIT_DB_PREFIX. "stats_pageviews` WHERE `stats_day`<=? AND `stats_day`>=? ORDER BY `stats_day` ASC";
$result = $this->mDb->query( $query,array( ( int ) $now,( int ) $dfrom ) );
$n = ceil( $result->numRows() / 20 );
while( $res = $result->fetchRow() ) {
date( "j M Y", $res["stats_day"] ),
global $gBitSystem, $gLibertySystem;
|