diff --git a/root/language/en/mods/portal/portal_statistics_module.php b/root/language/en/mods/portal/portal_statistics_module.php new file mode 100644 index 00000000..97e7357a --- /dev/null +++ b/root/language/en/mods/portal/portal_statistics_module.php @@ -0,0 +1,52 @@ + 'Totals', + 'ST_TOP_ANNS' => 'Total Announcements:', + 'ST_TOP_STICKYS'=> 'Total Stickies:', + 'ST_TOT_ATTACH' => 'Total Attachments:', + 'TOPICS_PER_DAY_OTHER' => 'Topics per day: %d', + 'TOPICS_PER_DAY_ZERO' => 'Topics per day: 0', + 'POSTS_PER_DAY_OTHER' => 'Posts per day: %d', + 'POSTS_PER_DAY_ZERO' => 'Posts per day: 0', + 'USERS_PER_DAY_OTHER' => 'Users per day: %d', + 'USERS_PER_DAY_ZERO' => 'Users per day: 0', + 'TOPICS_PER_USER_OTHER' => 'Topics per user: %d', + 'TOPICS_PER_USER_ZERO' => 'Topics per user: 0', + 'POSTS_PER_USER_OTHER' => 'Posts per user: %d', + 'POSTS_PER_USER_ZERO' => 'Posts per user: 0', + 'POSTS_PER_TOPIC_OTHER' => 'Posts per topic: %d', + 'POSTS_PER_TOPIC_ZERO' => 'Posts per topic: 0', +)); + +?> \ No newline at end of file diff --git a/root/portal/modules/portal_statistics.php b/root/portal/modules/portal_statistics.php new file mode 100644 index 00000000..fd52400e --- /dev/null +++ b/root/portal/modules/portal_statistics.php @@ -0,0 +1,200 @@ +lang}/mods/portal/" + */ + var $language = 'portal_statistics_module'; + + /** + * custom acp template + * file must be in "adm/style/portal/" + */ + var $custom_acp_tpl = ''; + + function get_template_side($module_id) + { + global $config, $template, $user; + + // Set some stats, get posts count from forums data if we... hum... retrieve all forums data + $total_posts = $config['num_posts']; + $total_topics = $config['num_topics']; + $total_users = $config['num_users']; + $total_files = $config['num_files']; + + $l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER'; + $l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER'; + $l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER'; + + // avarage stat + $board_days = (time() - $config['board_startdate']) / 86400; + + $topics_per_day = ($total_topics) ? round($total_topics / $board_days, 0) : 0; + $posts_per_day = ($total_posts) ? round($total_posts / $board_days, 0) : 0; + $users_per_day = round($total_users / $board_days, 0); + $topics_per_user = ($total_topics) ? round($total_topics / $total_users, 0) : 0; + $posts_per_user = ($total_posts) ? round($total_posts / $total_users, 0) : 0; + $posts_per_topic = ($total_topics) ? round($total_posts / $total_topics, 0) : 0; + + if ($topics_per_day > $total_topics) + { + $topics_per_day = $total_topics; + } + + if ($posts_per_day > $total_posts) + { + $posts_per_day = $total_posts; + } + + if ($users_per_day > $total_users) + { + $users_per_day = $total_users; + } + + if ($topics_per_user > $total_topics) + { + $topics_per_user = $total_topics; + } + + if ($posts_per_user > $total_posts) + { + $posts_per_user = $total_posts; + } + + if ($posts_per_topic > $total_posts) + { + $posts_per_topic = $total_posts; + } + + $l_topics_per_day_s = ($total_topics == 0) ? 'TOPICS_PER_DAY_ZERO' : 'TOPICS_PER_DAY_OTHER'; + $l_posts_per_day_s = ($total_posts == 0) ? 'POSTS_PER_DAY_ZERO' : 'POSTS_PER_DAY_OTHER'; + $l_users_per_day_s = ($total_users == 0) ? 'USERS_PER_DAY_ZERO' : 'USERS_PER_DAY_OTHER'; + $l_topics_per_user_s = ($total_topics == 0) ? 'TOPICS_PER_USER_ZERO' : 'TOPICS_PER_USER_OTHER'; + $l_posts_per_user_s = ($total_posts == 0) ? 'POSTS_PER_USER_ZERO' : 'POSTS_PER_USER_OTHER'; + $l_posts_per_topic_s = ($total_posts == 0) ? 'POSTS_PER_TOPIC_ZERO' : 'POSTS_PER_TOPIC_OTHER'; + + $topics_count = $this->get_topics_count(); + + + // Assign specific vars + $template->assign_vars(array( + 'S_DISPLAY_ADVANCED_STAT' => true, + 'TOTAL_POSTS' => sprintf($user->lang[$l_total_post_s], $total_posts), + 'TOTAL_TOPICS' => sprintf($user->lang[$l_total_topic_s], $total_topics), + 'TOTAL_USERS' => sprintf($user->lang[$l_total_user_s], $total_users), + 'NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), + 'S_ANN' => $topics_count[POST_ANNOUNCE], + 'S_SCT' => $topics_count[POST_STICKY], + 'S_TOT_ATTACH' => ($config['allow_attachments']) ? $total_files : 0, + + // avarage stat + 'TOPICS_PER_DAY' => sprintf($user->lang[$l_topics_per_day_s], $topics_per_day), + 'POSTS_PER_DAY' => sprintf($user->lang[$l_posts_per_day_s], $posts_per_day), + 'USERS_PER_DAY' => sprintf($user->lang[$l_users_per_day_s], $users_per_day), + 'TOPICS_PER_USER' => sprintf($user->lang[$l_topics_per_user_s], $topics_per_user), + 'POSTS_PER_USER' => sprintf($user->lang[$l_posts_per_user_s], $posts_per_user), + 'POSTS_PER_TOPIC' => sprintf($user->lang[$l_posts_per_topic_s], $posts_per_topic), + )); + return 'statistics_side.html'; + } + + function get_template_acp($module_id) + { + return array( + 'title' => 'STATISTICS', + 'vars' => array(), + ); + } + + /** + * API functions + */ + function install($module_id) + { + return true; + } + + function uninstall($module_id) + { + return true; + } + + // Better function with only one query + function get_topics_count() + { + global $db, $user; + + $return_ary = array( + POST_ANNOUNCE => 0, + POST_STICKY => 0, + ); + + $sql_in = array( + POST_ANNOUNCE, + POST_STICKY, + ); + + $sql = 'SELECT DISTINCT(topic_id) AS topic_id, topic_type AS type + FROM ' . TOPICS_TABLE . ' + WHERE ' . $db->sql_in_set('topic_type', $sql_in, false); + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + switch($row['type']) + { + case POST_ANNOUNCE: + ++$return_ary[POST_ANNOUNCE]; + break; + + case POST_STICKY: + ++$return_ary[POST_STICKY]; + break; + } + } + $db->sql_freeresult($result); + + return $return_ary; + } +} + +?> \ No newline at end of file diff --git a/root/styles/prosilver/template/portal/modules/statistics_side.html b/root/styles/prosilver/template/portal/modules/statistics_side.html new file mode 100644 index 00000000..07f15090 --- /dev/null +++ b/root/styles/prosilver/template/portal/modules/statistics_side.html @@ -0,0 +1,21 @@ + +{$LR_BLOCK_H_L} {L_STATISTICS}{$LR_BLOCK_H_R} + {L_ST_TOP}
+ {TOTAL_POSTS}
+ {TOTAL_TOPICS}
+ {L_ST_TOP_ANNS} {S_ANN}
+ {L_ST_TOP_STICKYS} {S_SCT}
+ {L_ST_TOT_ATTACH} {S_TOT_ATTACH}
+ +
+ {TOPICS_PER_DAY}
+ {POSTS_PER_DAY}
+ {USERS_PER_DAY}
+ {TOPICS_PER_USER}
+ {POSTS_PER_USER}
+ {POSTS_PER_TOPIC}
+
+ + {TOTAL_USERS}
+ {NEWEST_USER} +{$LR_BLOCK_F_L}{$LR_BLOCK_F_R} \ No newline at end of file diff --git a/root/styles/prosilver/theme/images/portal/portal_statistics.png b/root/styles/prosilver/theme/images/portal/portal_statistics.png new file mode 100644 index 00000000..82e15c17 Binary files /dev/null and b/root/styles/prosilver/theme/images/portal/portal_statistics.png differ