package WebGUI::Operation::Statistics; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2009 Plain Black Corporation. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use strict; use WebGUI::AdminConsole; use WebGUI::Cache; use WebGUI::International; use WebGUI::Workflow::Cron; use WebGUI::DateTime; =head1 NAME Package WebGUI::Operation::Statistics =head1 DESCRIPTION Handles displaying statistics about WebGUI. This isn't page count, but rather information about the number of assets, users, groups, etc. #------------------------------------------------------------------- =head2 _submenu ( $session, $workarea, $title, $help ) Utility routine for creating the AdminConsole for Statistics functions. =head3 $session The current WebGUI session object. =head3 $workarea The content to display to the user. =head3 $title The title of the Admin Console. This should be an entry in the i18n table in the WebGUI namespace. =head3 $help An entry in the Help system in the WebGUI namespace. This will be shown as a link to the user. =cut sub _submenu { my $session = shift; my $workarea = shift; my $title = shift; my $i18n = WebGUI::International->new($session); $title = $i18n->get($title) if ($title); my $ac = WebGUI::AdminConsole->new($session,"statistics"); if ($session->setting->get("trackPageStatistics")) { $ac->addSubmenuItem( $session->url->page('op=viewStatistics'), $i18n->get(144)); } return $ac->render($workarea, $title); } #---------------------------------------------------------------------------- =head2 canView ( session [, user] ) Returns true if the user can administrate this operation. user defaults to the current user. =cut sub canView { my $session = shift; my $user = shift || $session->user; return $user->isInGroup( $session->setting->get("groupIdAdminStatistics") ); } #------------------------------------------------------------------- =head2 www_disableSendWebguiStats () Deletes the workflow schedule that sends WebGUI statistics to webgui.org. =cut sub www_disableSendWebguiStats { my $session = shift; return $session->privilege->adminOnly() unless canView($session); my $task = WebGUI::Workflow::Cron->new($session, 'send_webgui_statistics'); $task->delete; my $workflow = WebGUI::Workflow->new($session, 'send_webgui_statistics'); $workflow->set({enabled => 0}); return www_viewStatistics($session); } #------------------------------------------------------------------- =head2 www_enableSendWebguiStats () Creates the workflow schedule that sends WebGUI statistics to webgui.org. =cut sub www_enableSendWebguiStats { my $session = shift; return $session->privilege->adminOnly() unless canView($session); # we set the current hour, minute, and day of week to send in the stats so we don't DOS webgui.org # by having everybody sending it at the same time my $dt = WebGUI::DateTime->new($session, time()); WebGUI::Workflow::Cron->create($session, { enabled => 1, workflowId => 'send_webgui_statistics', minuteOfHour => $dt->minute, hourOfDay => $dt->hour, dayOfWeek => ($dt->dow % 7), dayOfMonth => '*', monthOfYear => '*', priority => 3, title => 'Send WebGUI Statistics', }, 'send_webgui_statistics'); my $workflow = WebGUI::Workflow->new($session, 'send_webgui_statistics'); $workflow->set({enabled => 1}); return www_viewStatistics($session); } #------------------------------------------------------------------- =head2 www_viewStatistics ( $session, $sent ) Displays information to the user about WebGUI statistics if they are in group Admin (3). =head3 Displayed information =over 4 =item * Newest WebGUI version. =item * Current WebGUI version, if different from newest. =item * Number of published assets. =item * Number of assets set to be packages. =item * Number of templates =item * Number of sessions =item * Number of users. =item * Number of groups. =back =cut sub www_viewStatistics { my $session = shift; return $session->privilege->adminOnly() unless canView($session); my ($output, $data); my $i18n = WebGUI::International->new($session); my $url = "http://update.webgui.org/latest-version.txt"; my $cache = WebGUI::Cache->new($session,$url,"URL"); my $version = $cache->get; if (not defined $version) { $version = $cache->setByHTTP($url,43200); } chomp $version; $output .= '
| '.$i18n->get(145).': | '.$WebGUI::VERSION.'-'.$WebGUI::STATUS.' |
| '.$i18n->get(349).': | '.$version.' |
| '.$i18n->get(147).': | '.$data.' |
| '.$i18n->get(794).': | '.$data.' |
| '.$i18n->get(792).': | '.$data.' |
| '.$i18n->get(146).': | '.$data.' |
| '.$i18n->get(149).': | '.$data.' |
| '.$i18n->get(89).': | '.$data.' |
|.$i18n->get('why to send','Activity_SendWebguiStats').q|
|; my $task = WebGUI::Workflow::Cron->new($session, 'send_webgui_statistics'); if (defined $task) { $output .= q||.$i18n->get('disable','Activity_SendWebguiStats').q|
|; } else { $output .= q||; } $output .= q||; return _submenu($session,$output); } 1;