+//
+
+ENDSCRIPT
+
+ # print page header
+ $r->print(&header($jscript,$args));
+
# set defaults
my $now = time();
my $defstart = $now - (7*24*3600); #7 days ago
@@ -5791,7 +6750,9 @@ sub print_userchangelogs_display {
my ($minshown,$maxshown);
$minshown = 1;
my $count = 0;
- if ($curr{'show'} ne &mt('all')) {
+ if ($curr{'show'} =~ /\D/) {
+ $curr{'page'} = 1;
+ } else {
$maxshown = $curr{'page'} * $curr{'show'};
if ($curr{'page'} > 1) {
$minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
@@ -5803,8 +6764,6 @@ sub print_userchangelogs_display {
&role_display_filter($context,$formname,$domain,$username,\%curr,
$version,$crstype));
- # Create navigation
- my ($nav_script,$nav_links) = &userlogdisplay_nav($formname,\%curr,$more_records);
my $showntableheader = 0;
# Table Header
@@ -5829,7 +6788,7 @@ sub print_userchangelogs_display {
foreach my $id (sort { $roleslog{$b}{'exe_time'}<=>$roleslog{$a}{'exe_time'} } (keys(%roleslog))) {
next if (($roleslog{$id}{'exe_time'} < $curr{'rolelog_start_date'}) ||
($roleslog{$id}{'exe_time'} > $curr{'rolelog_end_date'}));
- if ($curr{'show'} ne &mt('all')) {
+ if ($curr{'show'} !~ /\D/) {
if ($count >= $curr{'page'} * $curr{'show'}) {
$more_records = 1;
last;
@@ -5845,12 +6804,13 @@ sub print_userchangelogs_display {
next if ($roleslog{$id}{'logentry'}{'context'} ne $curr{'chgcontext'});
}
}
+ if (($context eq 'course') && ($viewablesec ne '')) {
+ next if ($roleslog{$id}{'logentry'}{'section'} ne $viewablesec);
+ }
$count ++;
next if ($count < $minshown);
unless ($showntableheader) {
- $r->print($nav_script
- .$nav_links
- .&Apache::loncommon::start_data_table()
+ $r->print(&Apache::loncommon::start_data_table()
.$tableheader);
$r->rflush();
$showntableheader = 1;
@@ -5911,8 +6871,8 @@ sub print_userchangelogs_display {
}
if ($showntableheader) { # Table footer, if content displayed above
- $r->print(&Apache::loncommon::end_data_table()
- .$nav_links);
+ $r->print(&Apache::loncommon::end_data_table().
+ &userlogdisplay_navlinks(\%curr,$more_records));
} else { # No content displayed above
$r->print(''
.&mt('There are no records to display.')
@@ -5928,15 +6888,377 @@ sub print_userchangelogs_display {
return;
}
-sub userlogdisplay_nav {
- my ($formname,$curr,$more_records) = @_;
- my ($nav_script,$nav_links);
- if (ref($curr) eq 'HASH') {
- # Create Navigation:
- # Navigation Script
- $nav_script = <<"ENDSCRIPT";
+sub print_useraccesslogs_display {
+ my ($r,$uname,$udom,$permission,$brcrum) = @_;
+ my $formname = 'accesslog';
+ my $form = 'document.accesslog';
+
+# set breadcrumbs
+ my %breadcrumb_text = &singleuser_breadcrumb('','domain',$udom);
+ my $prevphasestr;
+ if ($env{'form.popup'}) {
+ $brcrum = [];
+ } else {
+ push (@{$brcrum},
+ {href => "javascript:backPage($form)",
+ text => $breadcrumb_text{'search'}});
+ my @prevphases;
+ if ($env{'form.prevphases'}) {
+ @prevphases = split(/,/,$env{'form.prevphases'});
+ $prevphasestr = $env{'form.prevphases'};
+ }
+ if (($env{'form.phase'} eq 'userpicked') || (grep(/^userpicked$/,@prevphases))) {
+ push(@{$brcrum},
+ {href => "javascript:backPage($form,'get_user_info','select')",
+ text => $breadcrumb_text{'userpicked'}});
+ if ($env{'form.phase'} eq 'userpicked') {
+ $prevphasestr = 'userpicked';
+ }
+ }
+ }
+ push(@{$brcrum},
+ {href => '/adm/createuser?action=accesslogs',
+ text => 'User access logs',
+ help => 'Domain_User_Access_Logs'});
+ my $bread_crumbs_component = 'User Access Logs';
+ my $args = { bread_crumbs => $brcrum,
+ bread_crumbs_component => 'User Management'};
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ $args->{'bread_crumbs_nomenu'} = 1;
+ }
+
+# set javascript
+ my ($jsback,$elements) = &crumb_utilities();
+ my $jsnav = &userlogdisplay_js($formname);
+
+ my $jscript = (<
//
+
+
+ENDSCRIPT
+
+# print page header
+ $r->print(&header($jscript,$args));
+
+# early out unless log data can be displayed.
+ unless ($permission->{'activity'}) {
+ $r->print(''
+ .&mt('You do not have rights to display user access logs.')
+ .'
');
+ if ($env{'form.popup'}) {
+ $r->print(''.&mt('Close window').'
');
+ } else {
+ $r->print(&earlyout_accesslog_form($formname,$prevphasestr,$udom));
+ }
+ return;
+ }
+
+ unless ($udom eq $env{'request.role.domain'}) {
+ $r->print(''
+ .&mt("User's domain must match role's domain")
+ .'
'
+ .&earlyout_accesslog_form($formname,$prevphasestr,$udom));
+ return;
+ }
+
+ if (($uname eq '') || ($udom eq '')) {
+ $r->print(''
+ .&mt('Invalid username or domain')
+ .'
'
+ .&earlyout_accesslog_form($formname,$prevphasestr,$udom));
+ return;
+ }
+
+ if (&Apache::lonnet::privileged($uname,$udom,
+ [$env{'request.role.domain'}],['dc','su'])) {
+ unless (&Apache::lonnet::privileged($env{'user.name'},$env{'user.domain'},
+ [$env{'request.role.domain'}],['dc','su'])) {
+ $r->print(''
+ .&mt('You need to be a privileged user to display user access logs for [_1]',
+ &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),
+ $uname,$udom))
+ .'
');
+ if ($env{'form.popup'}) {
+ $r->print(''.&mt('Close window').'
');
+ } else {
+ $r->print(&earlyout_accesslog_form($formname,$prevphasestr,$udom));
+ }
+ return;
+ }
+ }
+
+# set defaults
+ my $now = time();
+ my $defstart = $now - (7*24*3600);
+ my %defaults = (
+ page => '1',
+ show => '10',
+ activity => 'any',
+ accesslog_start_date => $defstart,
+ accesslog_end_date => $now,
+ );
+ my $more_records = 0;
+
+# set current
+ my %curr;
+ foreach my $item ('show','page','activity') {
+ $curr{$item} = $env{'form.'.$item};
+ }
+ my ($startdate,$enddate) =
+ &Apache::lonuserutils::get_dates_from_form('accesslog_start_date','accesslog_end_date');
+ $curr{'accesslog_start_date'} = $startdate;
+ $curr{'accesslog_end_date'} = $enddate;
+ foreach my $key (keys(%defaults)) {
+ if ($curr{$key} eq '') {
+ $curr{$key} = $defaults{$key};
+ }
+ }
+ my ($minshown,$maxshown);
+ $minshown = 1;
+ my $count = 0;
+ if ($curr{'show'} =~ /\D/) {
+ $curr{'page'} = 1;
+ } else {
+ $maxshown = $curr{'page'} * $curr{'show'};
+ if ($curr{'page'} > 1) {
+ $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
+ }
+ }
+
+# form header
+ $r->print('');
+ return;
+}
+
+sub earlyout_accesslog_form {
+ my ($formname,$prevphasestr,$udom) = @_;
+ my $srchterm = &HTML::Entities::encode($env{'form.srchterm'},'<>"&');
+ return <<"END";
+
+END
+}
+
+sub activity_display_filter {
+ my ($formname,$curr) = @_;
+ my $nolink = 1;
+ my $output = ''.
+ ''.&mt('Actions/page:').' '.
+ &Apache::lonmeta::selectbox('show',$curr->{'show'},undef,
+ (&mt('all'),5,10,20,50,100,1000,10000)).
+ ' | | ';
+ my $startform =
+ &Apache::lonhtmlcommon::date_setter($formname,'accesslog_start_date',
+ $curr->{'accesslog_start_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my $endform =
+ &Apache::lonhtmlcommon::date_setter($formname,'accesslog_end_date',
+ $curr->{'accesslog_end_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my %lt = &Apache::lonlocal::texthash (
+ activity => 'Activity',
+ Role => 'Role selection',
+ log => 'Log-in or Logout',
+ );
+ $output .= ''.&mt('Window during which actions occurred:').' '.
+ ''.&mt('After:').
+ ' | '.$startform.' | '.
+ ''.&mt('Before:').' | '.
+ ''.$endform.' | '.
+ ' | '.
+ ' | '.
+ ''.&mt('Activities').' '.
+ ' | '.
+ '
';
+ # Update Display button
+ $output .= ''
+ .''
+ .'
';
+ return $output;
+}
+
+sub userlogdisplay_js {
+ my ($formname) = @_;
+ return <<"ENDSCRIPT";
+
function chgPage(caller) {
if (caller == 'previous') {
document.$formname.page.value --;
@@ -5947,28 +7269,30 @@ function chgPage(caller) {
document.$formname.submit();
return;
}
-// ]]>
-
ENDSCRIPT
- # Navigation Buttons
- $nav_links = '';
- if (($curr->{'page'} > 1) || ($more_records)) {
- if ($curr->{'page'} > 1) {
- $nav_links .= ' ';
- }
- if ($more_records) {
- $nav_links .= '';
- }
+}
+
+sub userlogdisplay_navlinks {
+ my ($curr,$more_records) = @_;
+ return unless(ref($curr) eq 'HASH');
+ # Navigation Buttons
+ my $nav_links = '
';
+ if (($curr->{'page'} > 1) || ($more_records)) {
+ if (($curr->{'page'} > 1) && ($curr->{'show'} !~ /\D/)) {
+ $nav_links .= ' ';
+ }
+ if ($more_records) {
+ $nav_links .= '';
}
- $nav_links .= '
';
}
- return ($nav_script,$nav_links);
+ $nav_links .= '
';
+ return $nav_links;
}
sub role_display_filter {
@@ -6025,7 +7349,7 @@ sub role_display_filter {
&mt('Context:').'