package WebGUI::Operation::Statistics; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2002 Plain Black LLC. #------------------------------------------------------------------- # 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 Exporter; use HTTP::Request; use HTTP::Headers; use LWP::UserAgent; use strict; use WebGUI::DateTime; use WebGUI::Icon; use WebGUI::International; use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; our @ISA = qw(Exporter); our @EXPORT = qw(&www_viewPageReport &www_viewStatistics &www_viewTrafficReport &www_killSession &www_viewLoginHistory &www_viewActiveSessions); #------------------------------------------------------------------- sub www_killSession { if (WebGUI::Privilege::isInGroup(3)) { WebGUI::Session::end($session{form}{sid}); return www_viewActiveSessions(); } else { return WebGUI::Privilege::adminOnly(); } } #------------------------------------------------------------------- sub www_viewActiveSessions { my ($output, $p, @row, $i, $sth, %data); tie %data, 'Tie::CPHash'; if (WebGUI::Privilege::isInGroup(3)) { $output = '

'.WebGUI::International::get(425).'

'; $sth = WebGUI::SQL->read("select * from users,userSession where users.userId=userSession.userId"); while (%data = $sth->hash) { $row[$i] = ''.$data{username}.' ('.$data{userId}.')'; $row[$i] .= ''.$data{sessionId}.''; $row[$i] .= ''.epochToHuman($data{expires},"%H:%n%p %M/%D/%y").''; $row[$i] .= ''.epochToHuman($data{lastPageView},"%H:%n%p %M/%D/%y").''; $row[$i] .= ''.$data{lastIP}.''; $row[$i] .= ''.deleteIcon("op=killSession&sid=$data{sessionId}").''; $i++; } $sth->finish; $p = WebGUI::Paginator->new(WebGUI::URL::page('op=viewActiveSessions'),\@row); $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= $p->getPage($session{form}{pn}); $output .= '
'.WebGUI::International::get(428).''.WebGUI::International::get(435).''.WebGUI::International::get(432).''.WebGUI::International::get(430).''.WebGUI::International::get(431).''.WebGUI::International::get(436).'
'; $output .= $p->getBarTraditional($session{form}{pn}); } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_viewLoginHistory { my ($output, $p, @row, $i, $sth, %data); tie %data, 'Tie::CPHash'; if (WebGUI::Privilege::isInGroup(3)) { $output = '

'.WebGUI::International::get(426).'

'; $sth = WebGUI::SQL->read("select * from users,userLoginLog where users.userId=userLoginLog.userId order by userLoginLog.timeStamp desc"); while (%data = $sth->hash) { $data{username} = 'unknown user' if ($data{userId} == 0); $row[$i] = ''.$data{username}.' ('.$data{userId}.')'; $row[$i] .= ''.$data{status}.''; $row[$i] .= ''.epochToHuman($data{timeStamp},"%H:%n%p %M/%D/%y").''; $row[$i] .= ''.$data{ipAddress}.''; $row[$i] .= ''.$data{userAgent}.''; $i++; } $sth->finish; $p = WebGUI::Paginator->new(WebGUI::URL::page('op=viewLoginHistory'),\@row); $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= $p->getPage($session{form}{pn}); $output .= '
'.WebGUI::International::get(428).''.WebGUI::International::get(434).''.WebGUI::International::get(429).''.WebGUI::International::get(431).''.WebGUI::International::get(433).'
'; $output .= $p->getBar($session{form}{pn}); } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_viewPageReport { return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3)); my ($output, $count, $user, $data, $sth, $page, $pageId); $sth = WebGUI::SQL->read("select pageTitle,pageId,userId,ipAddress,wobjectId from pageStatistics order by pageTitle,userId,ipAddress"); while ($data = $sth->hashRef) { if ($data->{userId} == 1) { $user = $data->{ipAddress}; } else { $user = $data->{userId}; } $page->{$data->{pageId}}{pageTitle} = $data->{pageTitle}; $page->{$data->{pageId}}{users}{$user}++; $page->{$data->{pageId}}{views}++; $page->{$data->{pageId}}{interact}++ if ($data->{wobjectId}); } $sth->finish; $output = '

Page Statistics

'; $output .= ''; foreach $pageId (keys %{$page}) { $output .= ''; $output .= ''; $count = 0; foreach (keys %{$page->{$pageId}{users}}) { $count++; } $output .= ''; $output .= ''; } $output .= '
Page TitlePage ViewsUnique VisitorsWobject Interactions
'.$page->{$pageId}{pageTitle}.''.$page->{$pageId}{views}.''.$count.''.$page->{$pageId}{interact}.'
'; return $output; } #------------------------------------------------------------------- sub www_viewStatistics { my ($output, $data, $header, $userAgent, $request, $response, $version, $referer); if (WebGUI::Privilege::isInGroup(3)) { $userAgent = new LWP::UserAgent; $userAgent->agent("WebGUI-Check/2.0"); $userAgent->timeout(10); $header = new HTTP::Headers; $referer = "http://webgui.web.getversion/".$session{env}{SERVER_NAME}.$session{env}{REQUEST_URI}; chomp $referer; $header->referer($referer); $request = new HTTP::Request (GET => "http://www.plainblack.com/downloads/latest-version.txt", $header); $response = $userAgent->request($request); $version = $response->content; chomp $version; $output .= helpIcon(12); $output .= '

'.WebGUI::International::get(437).'

'; $output .= ''; $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from userSession"); $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from page where parentId>25"); $data++; $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from wobject"); $data--; $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from style where styleId>25"); $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from users where userId>25"); $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from groups where groupId>25"); $output .= ''; $output .= '
'.WebGUI::International::get(145).''.$WebGUI::VERSION.' ('.WebGUI::International::get(349).': '.$version.')
'.WebGUI::International::get(146).''.$data.' ('.WebGUI::International::get(423).' / '.WebGUI::International::get(424).')
'.WebGUI::International::get(147).''.$data.'
'.WebGUI::International::get(148).''.$data.'
'.WebGUI::International::get(427).''.$data.'
'.WebGUI::International::get(149).''.$data.'
'.WebGUI::International::get(89).''.$data.'
'; } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_viewTrafficReport { return WebGUI::Privilege::adminOnly() unless WebGUI::Privilege::isInGroup(3); my ($output, $data); $output = '

Pages

'; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-2592000)); $output .= "Last 30 days: ".$data."
"; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-604800)); $output .= "Last 7 days: ".$data."
"; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-86400)); $output .= "Last 24 hours: ".$data."
"; $output .= '

Visitors

'; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-2592000) ." group by ipAddress,userId"); $output .= "Last 30 days: ".$data."
"; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-604800) ." group by ipAddress,userId"); $output .= "Last 7 days: ".$data."
"; ($data) = WebGUI::SQL->quickArray("select count(*) from pageStatistics where dateStamp>=".(time()-86400) ." group by ipAddress,userId"); $output .= "Last 24 hours: ".$data."
"; return $output; } 1;