<?php
/**
*
* @package phpBB Statistics
* @version $Id: stats_basic.php 60 2009-09-01 11:23:04Z marc1706 $
* @copyright (c) 2009 Marc Alexander(marc1706) www.m-a-styles.de, (c) TheUniqueTiger - Nayan Ghosh
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @based on: Forum Statistics by TheUniqueTiger - Nayan Ghosh
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* fs_basic
* Displays basic statistics - submodules : basic, advanced
*
* @package fs
*/
class stats_basic
{
var $u_action;
function main($id, $mode)
{
global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx, $cache;
// $user->add_lang('mods/stats'); // not needed
$stats_config = obtain_stats_config();
switch ($mode)
{
case 'basic':
if($stats_config['basic_basic_enable'])
{
//get and display the basic statistics
$total_posts = $config['num_posts'];
$total_topics = $config['num_topics'];
$total_users = $config['num_users'];
$total_attachments = $config['num_files'];
$board_start_date = $user->format_date($config['board_startdate']);
//get board age in days
$boarddays = (time() - $config['board_startdate']) / 86400;
//averages
$posts_per_day = ($boarddays < 1) ? ($total_posts) : (sprintf('%.2f', $total_posts / $boarddays));
$topics_per_day = ($boarddays < 1) ? ($total_topics) : (sprintf('%.2f', $total_topics / $boarddays));
$users_per_day = ($boarddays < 1) ? ($total_users) : (sprintf('%.2f', $total_users / $boarddays));
$files_per_day = ($boarddays < 1) ? ($total_attachments) : (sprintf('%.2f', $total_attachments / $boarddays));
$total_forum_cat = get_forum_count(FORUM_CAT);
$total_forum_post = get_forum_count();
$total_forum_link = get_forum_count(FORUM_LINK);
$total_forums = $total_forum_cat + $total_forum_post + $total_forum_link;
$total_polls = get_polls_count();
$total_views = get_page_views_count();
$topic_types_count = $cache->get('topic_types_count');
if(!isset($topic_types_count['global']))
{
$topic_types_count = get_topic_types_count();
$cached_topic_types_count = $topic_types_count;
$cache->put('topic_types_count', $cached_topic_types_count);
}
$users_count_data = $cache->get('users_count_data');
if(!isset($users_count_data['active']))
{
$users_count_data = get_user_count_data();
$cached_users_count_data = $users_count_data;
$cache->put('users_count_data', $cached_users_count_data);
}
$template->assign_vars(array(
'TOTAL_POSTS' => $total_posts,
'TOTAL_TOPICS' => $total_topics,
'TOTAL_USERS' => $total_users,
'TOTAL_FORUM_CAT' => $total_forum_cat,
'TOTAL_FORUM_POST' => $total_forum_post,
'TOTAL_FORUM_LINK' => $total_forum_link,
'TOTAL_FORUMS' => $total_forums,
'TOTAL_ATTACHMENTS' => $total_attachments,
'TOTAL_POLLS' => $total_polls,
'TOTAL_VIEWS' => $total_views,
'TOPIC_TYPES_GLOBAL' => $topic_types_count['global'],
'TOPIC_TYPES_ANNOUNCE' => $topic_types_count['announce'],
'TOPIC_TYPES_STICKY' => $topic_types_count['sticky'],
'TOPIC_TYPES_NORMAL' => $topic_types_count['normal'],
'TOPIC_TYPES_UNAPPROVED' => $topic_types_count['unapproved'],
'UNAPPROVED_POSTS' => $topic_types_count['unapproved_posts'],
'USERS_INACTIVE' => $users_count_data['inactive'],
'USERS_ACTIVE' => $users_count_data['active'],
'USERS_ACTIVE_EXPLAIN' => sprintf($user->lang['USERS_ACTIVE_EXPLAIN'], 30), //replace 30 by configurable number if you wish
'USERS_INACTIVE_EXPLAIN' => sprintf($user->lang['USERS_INACTIVE_EXPLAIN'], 30), //same comment as above
'TOTAL_BOTS' => $users_count_data['registered_bots'],
'VISITED_BOTS' => $users_count_data['visited_bots'],
'AVG_POSTS_PER_DAY' => $posts_per_day,
'AVG_TOPICS_PER_DAY' => $topics_per_day,
'AVG_USERS_PER_DAY' => $users_per_day,
'AVG_FILES_PER_DAY' => $files_per_day,
'MOST_ONLINE' => $config['record_online_users'],
'MOST_ONLINE_DATE' => $user->format_date($config['record_online_date']),
));
}
else
{
$template->assign_var('S_BASIC_BASIC_DISABLED', true);
}
break;
case 'advanced':
if($stats_config['basic_advanced_enable'])
{
//get and display advanced statistics
include ("{$phpbb_root_path}includes/functions_admin.$phpEx"); //for database size
$sort_by = request_var('sort_by', 'name');
//create an array containing the sort_by options as $option=>$option_lang
$sort_by_options = array(
'name' => $user->lang['COMPONENTS_NAME'],
'id' => $user->lang['COMPONENTS_ID'],
'copyright' => $user->lang['COMPONENTS_AUTHOR'],
);
$sort_by_prompt = '';
switch($sort_by)
{
case 'name':
$lang_sort_by = 'local_name';
break;
case 'id':
$lang_sort_by = 'id';
break;
case 'author':
$lang_sort_by = 'author';
break;
default:
$lang_sort_by = 'local_name';
}
$board_start_date = $user->format_date($config['board_startdate']);
//get attachments info
$attachments = array(
'total_files' => $config['num_files'],
'total_size' => $config['upload_dir_size'],
);
//get avatars info
$avatars = array(
'total_files' => 0,
'total_size' => 0,
);
if ($avatar_dir = @opendir($phpbb_root_path . $config['avatar_path']))
{
while (($file = readdir($avatar_dir)) !== false)
{
if ($file[0] != '.' && $file != 'CVS' && strpos($file, 'index.') === false)
{
$avatars['total_size'] += filesize($phpbb_root_path . $config['avatar_path'] . '/' . $file);
++$avatars['total_files'];
}
}
@closedir($avatar_dir);
}
//get cached files data
$cached_files = array(
'total_files' => 0,
'total_size' => 0,
);
$cache_path = 'cache';
if ($cache_dir = @opendir($phpbb_root_path . $cache_path))
{
while (($file = readdir($cache_dir)) !== false)
{
if ($file[0] != '.' && $file != 'CVS' && strpos($file, 'index.') === false)
{
$cached_files['total_size'] += filesize($phpbb_root_path . $cache_path . '/' . $file);
++$cached_files['total_files'];
}
}
@closedir($cache_dir);
}
//get info about installed components
//styles
$styles = array();
if($sort_by == 'id')
{
$sql = 'SELECT style_name, style_copyright FROM ' . STYLES_TABLE . ' ORDER BY ABS(style_' . $sort_by . ')';
}
elseif ($sort_by == 'name' || $sort_by == 'copyright')
{
$sql = 'SELECT style_name, style_copyright FROM ' . STYLES_TABLE . ' ORDER BY LOWER(style_' . $sort_by . ')';
}
else
{
trigger_error('NO_ACTION');
}
$result = $db->sql_query($sql);
while ($style_row = $db->sql_fetchrow($result))
{
$styles[] = $style_row;
}
$db->sql_freeresult($result);
foreach ($styles as $current_style)
{
$template->assign_block_vars('stylerow', array(
'STYLE_NAME' => $current_style['style_name'],
'STYLE_COPYRIGHT' => $current_style['style_copyright'],
));
}
//imagesets
$imagesets = array();
if($sort_by == 'id')
{
$sql = 'SELECT imageset_name, imageset_copyright FROM ' . STYLES_IMAGESET_TABLE . ' ORDER BY ABS(imageset_' . $sort_by . ')';
}
else
{
$sql = 'SELECT imageset_name, imageset_copyright FROM ' . STYLES_IMAGESET_TABLE . ' ORDER BY LOWER(imageset_' . $sort_by . ')';
}
$result = $db->sql_query($sql);
while ($imageset_row = $db->sql_fetchrow($result))
{
$imagesets[] = $imageset_row;
}
$db->sql_freeresult($result);
foreach ($imagesets as $current_imageset)
{
$template->assign_block_vars('imagesetrow', array(
'IMAGESET_NAME' => $current_imageset['imageset_name'],
'IMAGESET_COPYRIGHT' => $current_imageset['imageset_copyright'],
));
}
//templates
$templates = array();
if($sort_by == 'id')
{
$sql = 'SELECT template_name, template_copyright FROM ' . STYLES_TEMPLATE_TABLE . ' ORDER BY ABS(template_' . $sort_by . ')';
}
else
{
$sql = 'SELECT template_name, template_copyright FROM ' . STYLES_TEMPLATE_TABLE . ' ORDER BY LOWER(template_' . $sort_by . ')';
}
$result = $db->sql_query($sql);
while ($template_row = $db->sql_fetchrow($result))
{
$templates[] = $template_row;
}
$db->sql_freeresult($result);
foreach ($templates as $current_template)
{
$template->assign_block_vars('templaterow', array(
'TEMPLATE_NAME' => $current_template['template_name'],
'TEMPLATE_COPYRIGHT' => $current_template['template_copyright'],
));
}
//themes
$themes = array();
if($sort_by == 'id')
{
$sql = 'SELECT theme_name, theme_copyright FROM ' . STYLES_THEME_TABLE . ' ORDER BY ABS(theme_' . $sort_by . ')';
}
else
{
$sql = 'SELECT theme_name, theme_copyright FROM ' . STYLES_THEME_TABLE . ' ORDER BY LOWER(theme_' . $sort_by . ')';
}
$result = $db->sql_query($sql);
while ($theme_row = $db->sql_fetchrow($result))
{
$themes[] = $theme_row;
}
$db->sql_freeresult($result);
foreach ($themes as $current_theme)
{
$template->assign_block_vars('themerow', array(
'THEME_NAME' => $current_theme['theme_name'],
'THEME_COPYRIGHT' => $current_theme['theme_copyright'],
));
}
//lang packs
$lang_packs = array();
if($lang_sort_by == 'id')
{
$sql = 'SELECT lang_local_name, lang_iso, lang_author FROM ' . LANG_TABLE . ' ORDER BY ABS(lang_' . $lang_sort_by . ')';
}
else
{
$sql = 'SELECT lang_local_name, lang_iso, lang_author FROM ' . LANG_TABLE . ' ORDER BY LOWER(lang_' . $lang_sort_by . ')';
}
$result = $db->sql_query($sql);
while ($lang_row = $db->sql_fetchrow($result))
{
$lang_packs[] = $lang_row;
}
$db->sql_freeresult($result);
foreach ($lang_packs as $current_lang)
{
$template->assign_block_vars('langrow', array(
'LANG_NAME' => $current_lang['lang_local_name'],
'LANG_ISO' => $current_lang['lang_iso'],
'LANG_AUTHOR' => $current_lang['lang_author'],
));
}
$template->assign_vars(array(
'START_DATE' => $board_start_date,
'BOARD_AGE' => get_time_string($config['board_startdate']),
'GZIP_COMPRESSION' => ($config['gzip_compress']) ? $user->lang['ON'] : $user->lang['OFF'],
'ATTACHMENTS_TOTAL' => $attachments['total_files'],
'ATTACHMENTS_SIZE' => get_formatted_filesize($attachments['total_size']),
'AVATARS_TOTAL' => $avatars['total_files'],
'AVATARS_SIZE' => get_formatted_filesize($avatars['total_size']),
'CACHED_FILES_TOTAL' => $cached_files['total_files'],
'CACHED_FILES_SIZE' => get_formatted_filesize($cached_files['total_size']),
'S_STYLES' => ($styles) ? true : false,
'S_IMAGESETS' => ($imagesets) ? true : false,
'S_TEMPLATES' => ($templates) ? true : false,
'S_THEMES' => ($themes) ? true : false,
'S_LANG_PACKS' => ($lang_packs) ? true : false,
));
if(!$stats_config['basic_advanced_security'] && $stats_config['basic_advanced_pretend_version'])
{
// pretend to have newest version installed
$errstr = '';
$errno = 0;
$info = get_remote_file('www.phpbb.com', '/updatecheck', ((defined('PHPBB_QA')) ? '30x_qa.txt' : '30x.txt'), $errstr, $errno);
if ($info != false)
{
$info = explode("\n", $info);
$latest_version = trim($info[0]);
$template->assign_vars(array(
'BOARD_VERSION' => $latest_version,
'DATABASE_INFO' => $db->sql_server_info(),
'DATABASE_SIZE' => get_database_size(),
));
}
else
{
$template->assign_vars(array(
'BOARD_VERSION' => '3.x.x',
'DATABASE_INFO' => $db->sql_server_info(),
'DATABASE_SIZE' => get_database_size(),
));
}
}
elseif(!$stats_config['basic_advanced_security'] && !$stats_config['basic_advanced_pretend_version'])
{
$template->assign_vars(array(
'BOARD_VERSION' => $config['version'],
'DATABASE_INFO' => $db->sql_server_info(),
'DATABASE_SIZE' => get_database_size(),
));
}
else
{
$template->assign_vars(array(
'S_HIDE_BOARD_VERSION' => true,
'S_HIDE_DATABASE_INFO' => true,
));
}
$sort_by_prompt = sprintf($user->lang['SORT_BY_PROMPT']);
$template->assign_var('SORT_BY_SELECT_BOX', make_select_box($sort_by_options, $sort_by, 'sort_by', $sort_by_prompt, $user->lang['GO'], $this->u_action));
}
else
{
$template->assign_var('S_BASIC_ADVANCED_DISABLED', true);
}
break;
case 'miscellaneous':
if($stats_config['basic_miscellaneous_enable'])
{
$template_count = 0;
$max_count = 0;
$limit_count = request_var('limit_count', 10); //replace 10 by the config option
//create an array containing the limit_count options as $option=>$option_lang
$limit_options = array(
'1' => 1,
'3' => 3,
'5' => 5,
'10' => 10,
'15' => 15,
);
$limit_prompt = sprintf($user->lang['LIMIT_PROMPT'], $user->lang['SMILEY'] . ', ' . $user->lang['BBCODE'] . ', ' . $user->lang['ICONS']);
// This will take a while, please don't overdo it
if($stats_config['resync_stats_bbcodes'])
{
overall_bbcode_smiley_count();
set_stats_config('resync_stats_bbcodes', 0);
}
// get BBCodes stats
$total_bbcodes = get_bbcode_count();
$custom_bbcodes = get_bbcode_count('custom');
$template->assign_vars(array(
'TOTAL_BBCODE_COUNT' => $total_bbcodes,
'CUSTOM_BBCODE_COUNT' => $custom_bbcodes,
));
// get top XX BBCodes used on board
$bbcode_ary = get_top_bbcodes($limit_count, '');
$total_count = get_top_bbcodes($limit_count, 'total');
// Now we check if maybe someone deleted the bbcodes from the database
if(!isset($bbcode_ary))
{
overall_bbcode_smiley_count();
$bbcode_ary = get_top_bbcodes($limit_count, '');
$total_count = get_top_bbcodes($limit_count, 'total');
}
if($total_count > 0 && $bbcode_ary[0]['bbcode_count'] > 0)
{
$max_count = $bbcode_ary[0]['bbcode_count'];
$template->assign_var('S_TOP_BBCODES', true);
foreach ($bbcode_ary as $current_bbcode)
{
$template->assign_block_vars('top_bbcodes_row', array(
'BBCODE' => $current_bbcode['bbcode'],
'COUNT' => $current_bbcode['bbcode_count'],
'PCT' => number_format($current_bbcode['bbcode_count'] / $total_count * 100, 3),
'BARWIDTH' => number_format($current_bbcode['bbcode_count'] / $max_count * 100, 1),
));
}
}
$template->assign_var('TOP_BBCODES', sprintf($user->lang['TOP_BBCODES'], $limit_count));
// get smiley statistics
$smiley_count = get_smiley_count();
$smiley_display_on_posting = get_smiley_count('display_on_posting');
$template->assign_vars(array(
'TOTAL_SMILEY_COUNT' => $smiley_count,
'DISPLAY_ON_POSTING_COUNT' => ($smiley_count) ? $smiley_display_on_posting . ' / ' . $smiley_count . ' (' . number_format($smiley_display_on_posting / $smiley_count * 100, 3) . '%)' : ' 0 / 0',
'TOP_SMILIES_BY_URL' => sprintf($user->lang['TOP_SMILIES_BY_URL'], $limit_count),
));
// get top xx smilies
if($smiley_display_on_posting)
{
$smiley_ary = get_top_smilies($limit_count, '');
if(isset($smiley_ary[0]['count']))
{
$max_count = $smiley_ary[0]['count'];
}
$total_count = get_top_smilies($limit_count, 'total');
if($config['num_posts'] && ($max_count > 0))
{
$template->assign_var('S_TOP_SMILIES_BY_URL', true);
if ($config['num_posts'])
{
foreach ($smiley_ary as $current_smiley)
{
$template->assign_block_vars('top_by_url_row', array(
'SMILEY' => "<img src=\"{$phpbb_root_path}/images/smilies/" . $current_smiley['url'] . '" alt="' . $current_smiley['emotion'] . '" title="' . $current_smiley['emotion'] . '" />',
'COUNT' => $current_smiley['count'],
'PCT' => number_format($current_smiley['count'] / $total_count * 100, 3),
'BARWIDTH' => number_format($current_smiley['count'] / $max_count * 100, 1),
));
}
}
}
}
// get top XX icons used on board
$total_count = 0;
$total_count = get_top_icons_count($limit_count, $type = 'total', $order = 'DESC');
if($total_count > 0)
{
$icons_ary = get_top_icons_count($limit_count, $type = 'each', $order = 'DESC');
$template->assign_var('S_TOP_ICONS', true);
$max_count = $icons_ary[0]['count'];
foreach ($icons_ary as $current_icon)
{
$template->assign_block_vars('top_icons_row', array(
'ICON' => "<img src=\"{$phpbb_root_path}/images/icons/" . $current_icon['icon_url'] . '" alt="' . $current_icon['icon_url'] . '" />',
'COUNT' => $current_icon['count'],
'PCT' => number_format($current_icon['count'] / $total_count * 100, 3),
'BARWIDTH' => number_format($current_icon['count'] / $max_count * 100, 1),
));
}
}
$template->assign_var('TOP_ICONS', sprintf($user->lang['TOP_ICONS'], $limit_count));
// warnings statistics
if (!$stats_config['basic_miscellaneous_hide_warnings'])
{
$warning_count = get_warning_count();
$own_warnings_count = get_warning_count('own_warnings');
$total_users = $config['num_users'];
$boarddays = (time() - $config['board_startdate']) / 86400;
$template->assign_vars(array(
'TOTAL_WARNING_COUNT' => $warning_count,
'OWN_WARNINGS_COUNT' => ($warning_count) ? $own_warnings_count . ' / ' . $warning_count . ' (' . number_format($own_warnings_count / $warning_count * 100, 3) . '%)' : ' 0 / 0',
'WARNINGS_PER_USER' => ($total_users) ? $warning_count . ' / ' . $total_users . ' (' . number_format($warning_count / $total_users, 3) . ')' : ' 0 / 0',
'WARNINGS_PER_DAY' => ($boarddays) ? number_format($warning_count / $boarddays, 3) : '0',
));
}
else
{
$template->assign_var('S_HIDE_WARNINGS_STATS', true);
}
$template->assign_var('LIMIT_SELECT_BOX', make_select_box($limit_options, $limit_count, 'limit_count', $limit_prompt, $user->lang['GO'], $this->u_action));
}
else
{
$template->assign_var('S_BASIC_MISCELLANEOUS_DISABLED', true);
}
break;
default:
}
$template->assign_vars(array(
'L_TITLE' => $user->lang['STATS_BASIC_' . strtoupper($mode)],
'S_STATS_ACTION' => $this->u_action,
'AS_ON' => sprintf($user->lang['AS_ON'], $user->format_date(time())),
));
$this->tpl_name = 'stats/stats_basic_' . $mode;
$this->lang_name = 'stats_basic_' . $mode;
$this->page_title = $user->lang['STATISTICS'] . ' • ' . $user->lang[strtoupper($this->lang_name)];
}
}
?>