--- loncom/interface/lonwhatsnew.pm 2008/04/30 23:52:00 1.77
+++ loncom/interface/lonwhatsnew.pm 2024/09/11 05:20:52 1.130
@@ -1,5 +1,7 @@
+# The LearningOnline Network
+# What's New in a course
#
-# $Id: lonwhatsnew.pm,v 1.77 2008/04/30 23:52:00 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.130 2024/09/11 05:20:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,6 +44,7 @@ use Time::Local;
use GDBM_File;
use lib '/home/httpd/lib/perl/';
use LONCAPA;
+use HTML::Entities;
#----------------------------
# handler
@@ -61,16 +64,37 @@ sub handler {
my $command = $env{'form.command'};
my $refpage = $env{'form.refpage'};
- my %checkallowed = ( coursenormalmail => 1,
- coursecritmail => 1, );
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+
+ my ($isadhoc,%checkallowed);
+
+ if ($env{'request.role'} =~ m{^(cc|co)/}) {
+ my $rolecode = $1;
+ if ($env{"environment.internal.$cdom.$crs.$env{'request.role'}.adhoc"}) {
+ $isadhoc = 1;
+ }
+ } elsif ($env{'request.role'} =~ m{^cr/$cdom/$cdom\-domainconfig/(\w+)\./}) {
+ my $rolename = $1;
+ if ($env{"environment.internal.$cdom.$crs.cr/$cdom/$cdom-domainconfig/$rolename.adhoc"}) {
+ $isadhoc = 1;
+ }
+ }
+ unless ($isadhoc) {
+ %checkallowed = ( coursenormalmail => 1,
+ coursecritmail => 1,);
+ }
foreach my $perm_check (['whn','whatsnew',1],
['pch','coursediscussion',1],
['mgr','handgrading',1],
['vgr','abovethreshold',1],
- ['opa','haserrors',1],
- ['mdc','versionchanges',0],
+ ['vgr','haserrors',1],
+ ['whn','versionchanges',1],
['vcl','newroles',1],
['vcl','oldroles',1],
+ ['whn','crslogin',1],
+ ['vcl','sessions',1],
+ ['mgr','resetcounters',1],
) {
my ($perm,$key,$check_section) = @{ $perm_check };
my $scope = $env{'request.course.id'};
@@ -87,7 +111,7 @@ sub handler {
if ( ! $env{'request.course.fn'} || ! $checkallowed{'whatsnew'}) {
# Not in a course, or no whn priv in course
- $env{'user.error.msg'}="/adm/whatsnew::whn:0:0:Cannot display what's new page";
+ $env{'user.error.msg'}="/adm/whatsnew:whn:0:0:Cannot display what's new page";
return HTTP_NOT_ACCEPTABLE;
}
@@ -99,7 +123,7 @@ sub handler {
&Apache::lonhtmlcommon::clear_breadcrumbs();
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/whatsnew',
- text=>"Display Action Items"});
+ text=>"What's New?"});
if (($command eq 'chgthreshold') && $checkallowed{'abovethreshold'}) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/whatsnew?command=chgthreshold&refpage='.$refpage,
@@ -142,12 +166,26 @@ sub handler {
$r->print(&Apache::lonhtmlcommon::breadcrumbs
("What's New?",#'Course_Action_Items_Intervals'
));
+ } elsif ($command eq 'chgcrslogininterval' && $checkallowed{'crslogin'}) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/whatsnew?command=chgcrslogininterval&refpage='.$refpage,
+ text=>"Change interval"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ ("What's New?",#'Course_Action_Items_Intervals'
+ ));
+ } elsif ($command eq 'chgsessionlimit' && $checkallowed{'sessions'}) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/whatsnew?command=chgsessionlimit&refpage='.$refpage,
+ text=>"Change session range"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ ("What's New?",#'Course_Action_Items_Sessions'
+ ));
} else {
$r->print(&Apache::lonhtmlcommon::breadcrumbs
("What's New?",#'Course_Action_Items_Display'
));
}
- &display_main_box($r,$command,$refpage,\%checkallowed);
+ &display_main_box($r,$command,$refpage,\%checkallowed,$cdom,$crs);
return OK;
}
@@ -158,7 +196,7 @@ sub handler {
#------------------------------
sub display_main_box {
- my ($r,$command,$refpage,$checkallowed) = @_;
+ my ($r,$command,$refpage,$checkallowed,$cdom,$crs) = @_;
my $domain=&Apache::loncommon::determinedomain();
my $function = &Apache::loncommon::get_users_function();
my $lctype = lc(&Apache::loncommon::course_type());
@@ -169,42 +207,54 @@ sub display_main_box {
degdiff => 'Degree of difficulty',
numstudents => 'Total number of students with submissions',
);
- my %versions = &Apache::lonlocal::texthash (
+ my %versions = (
-1 => "version changes since start of $lctype",
2592000 => 'version changes since last month',
604800 => 'version changes since last week',
86400 => 'version changes since yesterday',
);
- my %newroles = &Apache::lonlocal::texthash (
+ my %newroles = (
-1 => "roles which have become active since start of $lctype",
2592000 => 'roles which have become active since last month',
604800 => 'roles which have become active since last week',
86400 => 'roles which have become active since yesterday',
);
- my %oldroles = &Apache::lonlocal::texthash (
+ my %oldroles = (
-1 => "roles which expired since start of $lctype",
2592000 => 'roles which expired since last month',
604800 => 'roles which expired since last week',
86400 => 'roles which expired since yesterday',
);
+ my %crslogins = (
+ -1 => 'last logins for anyone who has ever logged in',
+ 2592000 => 'last logins for users in last 30 days',
+ 604800 => 'last logins for users in last 7 days',
+ 86400 => 'last logins for users in last 24 hours',
+ );
+ my %sessions = (
+ 300 => 'course sessions active in the last 5 minutes',
+ 600 => 'course sessions active in the last 10 minutes',
+ 1800 => 'course sessions active in the last 30 minutes',
+ 7200 => 'course sessions active in the last 2 hours',
+ -7200 => 'course sessions with last activity more than 2 hours ago',
+ );
my %interval_titles = (
versions => \%versions,
newroles => \%newroles,
oldroles => \%oldroles,
+ crslogin => \%crslogins,
+ sessions => \%sessions,
);
my %initpage = &Apache::lonlocal::texthash (
firstres => "first resource in the $lctype",
- whatsnew => "what's new? page",
+ whatsnew => "What's New Page",
userpref => 'your general user preferences',
coursespecific => "specific setting for this $lctype",
);
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
if (($command eq 'chgthreshold')
&& $checkallowed->{'abovethreshold'}) {
- &display_threshold_config($r,$refpage,\%threshold_titles,
- $cdom,$crs);
+ &display_threshold_config($r,$refpage,\%threshold_titles,$cdom,$crs);
} elsif (($command eq 'chginterval')
&& $checkallowed->{'versionchanges'}) {
&display_interval_config($r,$refpage,\%interval_titles,'versions');
@@ -219,6 +269,12 @@ sub display_main_box {
} elsif (($command eq 'chgoldroleinterval')
&& $checkallowed->{'oldroles'}) {
&display_interval_config($r,$refpage,\%interval_titles,'oldroles');
+ } elsif (($command eq 'chgcrslogininterval')
+ && $checkallowed->{'crslogin'}) {
+ &display_interval_config($r,$refpage,\%interval_titles,'crslogin');
+ } elsif (($command eq 'chgsessionlimit')
+ && $checkallowed->{'sessions'}) {
+ &display_interval_config($r,$refpage,\%interval_titles,'sessions');
} else {
&display_actions_box($r,$command,$refpage,\%threshold_titles,
\%interval_titles,\%initpage,$cdom,$crs,$checkallowed);
@@ -244,9 +300,11 @@ sub display_header {
my $scripttag;
unless ($command eq 'chgthreshold' || $command eq 'chginterval' ||
- $command eq 'chgoldroleinterval' || $command eq 'chgnewroleinterval') {
+ $command eq 'chgoldroleinterval' ||
+ $command eq 'chgnewroleinterval' || $command eq 'chgcrslogininterval') {
$scripttag = <<"END";
-';
+ENDTOGG
}
my $course_type=&Apache::loncommon::course_type();
- return &Apache::loncommon::start_page($course_type.' Action Items',
+ return &Apache::loncommon::start_page("What's New?",
$scripttag);
}
@@ -288,7 +398,7 @@ sub display_actions_box {
my $lctype = lc($crstype);
my %stulabel = (
'Course' => 'students',
- 'Group' => 'members',
+ 'Community' => 'members',
);
my %lt = &Apache::lonlocal::texthash(
'yacc' => 'You are accessing an invalid course',
@@ -314,6 +424,10 @@ sub display_actions_box {
my %expired;
my $activecount;
my %activated;
+ my %loggedin;
+ my $logincount;
+ my %sessions;
+ my $sessioncount;
my %res_title = ();
my %show = ();
my $needitems = 0;
@@ -327,7 +441,7 @@ sub display_actions_box {
my %threshold = ();
my %pagedesc = &Apache::lonlocal::texthash (
firstres => 'First resource',
- whatsnew => "What's New? page",
+ whatsnew => "What's New Page",
userpref => 'user preference',
coursespecific => $lctype.' only',
default => 'default',
@@ -341,30 +455,33 @@ sub display_actions_box {
return;
}
+ my $header = '';
if ($refpage eq 'start') {
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db',
&GDBM_READER(),0640)) {
- my $furl=$bighash{'first_url'};
+ my $furl=&HTML::Entities::encode($bighash{'first_url'},'"<>&');
untie(%bighash);
- $r->print(''.$lt{'gtfr'}.
- ' ');
+ $header .= ''.$lt{'gtfr'}.
+ ' ';
}
}
- $r->print(&mt('Page set to be displayed after you have selected a role in this '.$lctype).'.'
+ $header .= &mt('Page set to be displayed after you have selected a role in this '.$lctype).'.'
.' '
- .&mt('Currently: [_1]',$currinit)
- .'. '
-# &mt('Change for just this '.$lctype.'',$refpage).' '.
-# &mt('or for all your courses.',$refpage).'
');
- .&mt('Change for just [_1]this course[_2]'
- .' or for all [_3]your courses[_2].'
+ .&mt('Currently: [_1].',''.$currinit.'')
+ .' '
+ .&mt('[_1]Change[_2] for just [_3]this '.$lctype.'[_4] or for [_5]all your courses/communities[_6].'
+ ,''
+ ,''
,''
,''
- ,'')
- .' ');
+ ,''
+ ,'')
+ .' ';
+
+ $r->print(&Apache::loncommon::head_subbox($header));
if ($command eq 'reset') {
- $result = &process_reset($cdom,$crs);
+ $result = &process_reset($cdom,$crs,$checkallowed);
} elsif ($command eq 'update') {
$result = &process_update($uname,$udom,$threshold_titles);
} elsif ($command eq 'newinterval') {
@@ -378,12 +495,14 @@ sub display_actions_box {
unless ($store_result eq 'ok') {
&Apache::lonnet::logthis('Error saving whatsnew settings: '.
$store_result.' for '.'user '.$uname.':'.$udom.' in '.$lctype.' '.$cid);
- $result .= &mt('Unable to save visibility settings due to [_1]',
- $store_result);
+ $result .= ''
+ .&mt('Unable to save visibility settings due to [_1]',
+ $store_result)
+ .'';
}
if ($result) {
- $r->print($result.'');
+ $r->print($result.'');
}
$r->rflush();
@@ -402,13 +521,13 @@ sub display_actions_box {
);
if ($timediff{'versions'} == -1) {
- $headings{'versionchanges'} = 'Resources in '.$lctype.' with version changes since start of '.$lctype;
+ $headings{'versionchanges'} = &mt('Resources in '.$lctype.' with version changes since start of '.$lctype);
} elsif ($timediff{'versions'} == 2592000) {
- $headings{'versionchanges'} = 'Resources in '.$lctype.' with version changes since last month';
+ $headings{'versionchanges'} = &mt('Resources in '.$lctype.' with version changes since last month');
} elsif ($timediff{'versions'} == 604800) {
- $headings{'versionchanges'} = 'Resources in '.$lctype.' with version changes since last week';
+ $headings{'versionchanges'} = &mt('Resources in '.$lctype.' with version changes since last week');
} elsif ($timediff{'versions'} == 86400) {
- $headings{'versionchanges'} = 'Resources in '.$lctype.' with version changes since yesterday';
+ $headings{'versionchanges'} = &mt('Resources in '.$lctype.' with version changes since yesterday');
}
$timediff{'oldroles'} = $display_settings{$cid.':oldroleinterval'};
@@ -416,13 +535,13 @@ sub display_actions_box {
$interval{'oldroles'} = $interval_titles->{'oldroles'}->{$timediff{'oldroles'}};
if ($timediff{'oldroles'} == -1) {
- $headings{'oldroles'} = 'Roles for which access to '.$lctype.' has expired since start of '.$lctype;
+ $headings{'oldroles'} = &mt('Roles for which access to '.$lctype.' has expired since start of '.$lctype);
} elsif ($timediff{'oldroles'} == 2592000) {
- $headings{'oldroles'} = 'Roles for which access to '.$lctype.' has expired since last month';
+ $headings{'oldroles'} = &mt('Roles for which access to '.$lctype.' has expired since last month');
} elsif ($timediff{'oldroles'} == 604800) {
- $headings{'oldroles'} = 'Roles for which access to '.$lctype.' has expired since last week';
+ $headings{'oldroles'} = &mt('Roles for which access to '.$lctype.' has expired since last week');
} elsif ($timediff{'oldroles'} == 86400) {
- $headings{'oldroles'} = 'Roles for which access to '.$lctype.' has expired since yesterday';
+ $headings{'oldroles'} = &mt('Roles for which access to '.$lctype.' has expired since yesterday');
}
$timediff{'newroles'} = $display_settings{$cid.':newroleinterval'};
@@ -430,30 +549,71 @@ sub display_actions_box {
$interval{'newroles'} = $interval_titles->{'newroles'}->{$timediff{'newroles'}};
if ($timediff{'newroles'} == -1) {
- $headings{'newroles'} = 'Roles for which access to '.$lctype.' has become available since start of '.$lctype;
+ $headings{'newroles'} = &mt('Roles for which access to '.$lctype.' has become available since start of '.$lctype);
} elsif ($timediff{'newroles'} == 2592000) {
- $headings{'newroles'} = 'Roles for which access to '.$lctype.' has become available since last month';
+ $headings{'newroles'} = &mt('Roles for which access to '.$lctype.' has become available since last month');
} elsif ($timediff{'newroles'} == 604800) {
- $headings{'newroles'} = 'Roles for which access to '.$lctype.' has become available since last week';
+ $headings{'newroles'} = &mt('Roles for which access to '.$lctype.' has become available since last week');
} elsif ($timediff{'newroles'} == 86400) {
- $headings{'newroles'} = 'Roles for which access to '.$lctype.' has become available since yesterday';
+ $headings{'newroles'} = &mt('Roles for which access to '.$lctype.' has become available since yesterday');
}
- my $now = time;
+ $timediff{'crslogin'} = $display_settings{$cid.':crslogininterval'};
+ unless (defined($timediff{'crslogin'})) { $timediff{'crslogin'} = 604800; }
+ $interval{'crslogin'} = $interval_titles->{'crslogin'}->{$timediff{'crslogin'}};
+
+ if ($timediff{'crslogin'} == -1) {
+ $headings{'crslogin'} = &mt('Last login for anyone who has ever logged in');
+ } elsif ($timediff{'crslogin'} == 2592000) {
+ $headings{'crslogin'} = &mt('Last login for users in last 30 days');
+ } elsif ($timediff{'crslogin'} == 604800) {
+ $headings{'crslogin'} = &mt('Last login for users in last 7 days');
+ } elsif ($timediff{'crslogin'} == 86400) {
+ $headings{'crslogin'} = &mt('Last login for users in last 24 hours');
+ }
+
+ $timediff{'sessions'} = $display_settings{$cid.':sessionactivity'};
+ unless (defined($timediff{'sessions'})) { $timediff{'sessions'} = 7200; }
+ $interval{'sessions'} = $interval_titles->{'sessions'}->{$timediff{'sessions'}};
+
+ if ($timediff{'sessions'} == -7200) {
+ $headings{'sessions'} = &mt('Session with activity more than 2 hours ago');
+ } elsif ($timediff{'sessions'} == 7200) {
+ $headings{'sessions'} = &mt('Session with activity in last 2 hours');
+ } elsif ($timediff{'sessions'} == 1800) {
+ $headings{'sessions'} = &mt('Session with activity in last 30 minutes');
+ } elsif ($timediff{'sessions'} == 600) {
+ $headings{'sessions'} = &mt('Session with activity in last 10 minutes');
+ } elsif ($timediff{'sessions'} == 300) {
+ $headings{'sessions'} = &mt('Session with activity in last 5 minutes');
+ }
+
+ my ($now,$starttime,$activatedstart,$expiredstart,$crsloginstart);
+ $now = time;
+
if ($timediff{'versions'} == -1) {
- $timediff{'versions'} = time;
+ $starttime = 0;
+ } else {
+ $starttime = $now - $timediff{'versions'};
}
- my $starttime = $now - $timediff{'versions'};
if ($timediff{'newroles'} == -1) {
- $timediff{'newroles'} = time;
+ $activatedstart = 0;
+ } else {
+ $activatedstart = $now - $timediff{'newroles'};
}
- my $activatedstart = $now - $timediff{'newroles'};
if ($timediff{'oldroles'} == -1) {
- $timediff{'oldroles'} = time;
+ $expiredstart = 0;
+ } else {
+ $expiredstart = $now - $timediff{'oldroles'};
+ }
+
+ if ($timediff{'crslogin'} == -1) {
+ $crsloginstart = 0;
+ } else {
+ $crsloginstart = $now - $timediff{'crslogin'};
}
- my $expiredstart = $now - $timediff{'oldroles'};
my $countunread = $display_settings{$cid.':countunread'};
unless (defined($countunread)) {
@@ -464,11 +624,24 @@ sub display_actions_box {
}
$headings{'abovethreshold'} =
- &mt('Problems with av. attempts ≥ [_1] or deg. difficulty ≥ [_2] and total number of '.$stulabel{$crstype}.' with submissions ≥ [_3]',
+ &mt('(Problems with av. attempts ≥ [_1] or deg. difficulty ≥ [_2]) [_3] and total number of '.$stulabel{$crstype}.' with submissions ≥ [_4]',
$threshold{'av_attempts'},$threshold{'degdiff'},
- $threshold{'numstudents'});
+ ' ',$threshold{'numstudents'});
- my @actionorder = ('handgrading','haserrors','abovethreshold','versionchanges','coursediscussion','coursenormalmail','coursecritmail','newroles','oldroles');
+ my @actionorder = ('handgrading','haserrors','abovethreshold','versionchanges','coursediscussion','coursenormalmail','coursecritmail','newroles','oldroles','crslogin','sessions');
+ my %actioncolumn = (
+ handgrading => 'left',
+ haserrors => 'left',
+ abovethreshold => 'left',
+ versionchanges => 'left',
+ coursediscussion => 'right',
+ coursenormalmail => 'right',
+ coursecritmail => 'right',
+ newroles => 'right',
+ oldroles => 'right',
+ crslogin => 'right',
+ sessions => 'right',
+ );
foreach my $key (keys(%{$checkallowed})) {
if ($key =~ /_section$/) { next; }
@@ -482,7 +655,8 @@ sub display_actions_box {
foreach my $item (@actionorder) {
unless ($item eq 'coursenormalmail' || $item eq 'coursecritmail' ||
- $item eq 'newroles' || $item eq 'oldroles') {
+ $item eq 'newroles' || $item eq 'oldroles' ||
+ $item eq 'crslogin' || $item eq 'sessions') {
if ($show{$item}) {
$needitems = 1;
last;
@@ -490,8 +664,13 @@ sub display_actions_box {
}
}
+ my $itemserror;
if ($needitems) {
- &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread);
+ $itemserror = &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread,$checkallowed);
+ }
+ my $classlist;
+ if ($show{'oldroles'} || $show{'newroles'} || $show{'crslogin'} || $show{'sessions'}) {
+ $classlist = &Apache::loncoursedata::get_classlist();
}
if ($show{'coursenormalmail'}) {
$msgcount = &getnormalmail(\@newmsgs);
@@ -500,10 +679,16 @@ sub display_actions_box {
$critmsgcount = &getcritmail(\@critmsgs);
}
if ($show{'oldroles'}) {
- $expirecount = &getexpired(\%expired,$expiredstart,'previous');
+ $expirecount = &getexpired(\%expired,$expiredstart,'previous',$classlist);
}
if ($show{'newroles'}) {
- $activecount = &getactivated(\%activated,$activatedstart,'active');
+ $activecount = &getactivated(\%activated,$activatedstart,'active',$classlist);
+ }
+ if ($show{'crslogin'}) {
+ $logincount = &getloggedin($cdom,$crs,\%loggedin,$crsloginstart);
+ }
+ if ($show{'sessions'}) {
+ $sessioncount = &getsessions($cdom,$crs,\%sessions,$timediff{'sessions'},$classlist);
}
$r->print(qq|$lt{'hial'}$lt{'shal'}
@@ -515,7 +700,7 @@ sub display_actions_box {
}
}
- $r->print('
');
+ $r->print('
');
my $displayed = 0;
my $totalboxes = 0;
@@ -526,14 +711,15 @@ sub display_actions_box {
$totalboxes ++;
}
}
- my $halfway = 4;
+ my $currcolumn = 'left';
# my $halfway = int($totalboxes/2) + $totalboxes%2;
foreach my $actionitem (@actionorder) {
- if ($$checkallowed{$actionitem}) {
- if ($displayed == $halfway) {
+ if ($checkallowed->{$actionitem}) {
+ if (($actioncolumn{$actionitem} eq 'right') && ($currcolumn eq 'left')) {
$r->print('
+
');
}
@@ -579,21 +766,26 @@ sub display_threshold_config {
foreach my $type (@thresholditems) {
my $parameter = $env{'request.course.id'}.':threshold_'.$type;
# onchange is javascript to automatically check the 'Set' button.
- my $onchange = 'onFocus="javascript:window.document.forms'.
+ my $onchange = 'onfocus="javascript:window.document.forms'.
"['thresholdform'].elements['".$parameter."_setparmval']".
'.checked=true;"';
+ my $aria_textbox = ' aria-label="'.&mt('Threshold value for [_1]',
+ $threshold_titles{$type}).'"';
+ my $aria_checkbox = ' aria-label="'.&mt('Change threshold value for [_1]',
+ $threshold_titles{$type}).'"';
$r->print(&Apache::loncommon::start_data_table_row()."\n".
'
'."\n".
&Apache::loncommon::end_data_table_row());
}
$r->print(&Apache::loncommon::end_data_table()."\n".
- '
+ '
');
@@ -613,6 +805,8 @@ sub display_interval_config {
$setting = 'oldroleinterval';
} elsif ($context eq 'newroles') {
$setting = 'newroleinterval';
+ } elsif ($context eq 'sessions') {
+ $setting = 'sessionactivity';
}
my $lctype = lc(&Apache::loncommon::course_type());
my $current = &get_current($env{'user.name'},$env{'user.domain'},
@@ -621,6 +815,10 @@ sub display_interval_config {
$r->print(' '.&mt('Choose the time window to use to display roles for which access to the '.$lctype.' expired.').' ');
} elsif ($context eq 'newroles') {
$r->print(' '.&mt('Choose the time window to use to display roles for which access to the '.$lctype.' became available.').' ');
+ } elsif ($context eq 'crslogin') {
+ $r->print(' '.&mt('Choose the time window to use to display the last login by a user in the '.$lctype).' ');
+ } elsif ($context eq 'sessions') {
+ $r->print(' '.&mt('Choose the time limit to use to display active user sessions in the '.$lctype.'.').' ');
} else {
$r->print(' '.&mt('Choose the time window to use to display resources in the '.$lctype.' with version changes.').' ');
}
@@ -636,20 +834,27 @@ sub display_interval_config {
'.
&mt('Display:').'
-
');
}
+ } elsif ($itemserror) {
+ $r->print('
'.$itemserror.'
');
} else {
$r->print('
'.$lt{'noer'}.'
');
}
@@ -1495,7 +1882,7 @@ sub display_haserrors {
}
sub display_abovethreshold {
- my ($r,$refpage,$warnings,$triggered,$res_title) = @_;
+ my ($r,$refpage,$warnings,$triggered,$res_title,$itemserror,$checkallowed) = @_;
my %lt = &Apache::lonlocal::texthash(
reso => 'Resource',
part => 'Part',
@@ -1509,16 +1896,16 @@ sub display_abovethreshold {
);
if (@{$warnings} > 0) {
@{$warnings} = sort { &cmp_title($a,$b,$res_title) } @{$warnings};
- $r->print('');
+ if ($checkallowed->{'resetcounters'}) {
+ $r->print('
');
+ }
+ } elsif ($itemserror) {
+ $r->print('
'.$itemserror.'
');
} else {
$r->print('
'.$lt{'nopr'}.'
');
}
}
sub display_versionchanges {
- my ($r,$changed,$res_title,$interval) = @_;
+ my ($r,$changed,$res_title,$interval,$itemserror) = @_;
my %lt = &Apache::lonlocal::texthash(
'reso' => 'Resource',
'revd' => 'Last revised',
'newv' => 'New version',
'veru' => 'Version used',
- 'noup' => 'No',
);
if (keys(%{$changed}) > 0) {
$r->print('
'.
@@ -1585,15 +1975,17 @@ sub display_versionchanges {
$$changed{$item}{'current'}.'
'.
$$changed{$item}{'version'}.'
');
}
+ } elsif ($itemserror) {
+ $r->print('
'.$itemserror.'
');
} else {
- $r->print('
'.$lt{'noup'}.
- ' '.$interval.'
');
+ $r->print('
'
+ .&mt('No '.$interval).'
');
}
return;
}
sub display_rolechanges {
- my ($r,$chgcount,$changed,$interval,$crstype) = @_;
+ my ($r,$chgcount,$changed,$interval,$crstype,$classlist) = @_;
my $now = time();
my %lt = &Apache::lonlocal::texthash(
'user' => 'User',
@@ -1601,7 +1993,6 @@ sub display_rolechanges {
'role' => 'Role',
'sec' => 'Section',
'status' => 'Status',
- 'norc' => 'There are no ',
);
if ($chgcount) {
$r->print('
'.
@@ -1613,6 +2004,7 @@ sub display_rolechanges {
if (ref($changed) eq 'HASH') {
my @changes = sort { $b <=> $a } (keys(%{$changed}));
my $changenum = 0;
+ my $fullnameidx = &Apache::loncoursedata::CL_FULLNAME();
foreach my $item (@changes) {
if (ref($changed->{$item}) eq 'ARRAY') {
foreach my $chg (@{$changed->{$item}}) {
@@ -1630,8 +2022,14 @@ sub display_rolechanges {
my $udom = $chg->{'udom'};
$changenum ++;
my $css_class = $changenum%2?' class="LC_odd_row"':'';
+ my $fullname;
+ if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') {
+ $fullname = $classlist->{$uname.':'.$udom}->[$fullnameidx];
+ } else {
+ $fullname = &Apache::loncommon::plainname($uname,$udom,'lastname');
+ }
my $link =
- &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),$uname,$udom);
+ &Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);
$r->print('
');
+ }
+ return;
+}
+
sub display_coursediscussion {
- my ($r,$newdiscussions,$unread,$countunread,$res_title) = @_;
+ my ($r,$newdiscussions,$unread,$countunread,$res_title,$itemserror) = @_;
my $lctype = lc(&Apache::loncommon::course_type());
my %lt = &Apache::lonlocal::texthash(
'loca' => 'Location',
@@ -1679,9 +2182,9 @@ sub display_coursediscussion {
my $forum_title = $$unread{$ressymb}{'title'};
my $type = 'Resource';
my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb);
- my $disclink = $feedurl.'?symb='.$$unread{$ressymb}{symb};
+ my $disclink = $feedurl.'?symb='. &escape($$unread{$ressymb}{symb});
if ($feedurl =~ /bulletinboard/) {
- $type = 'Bulletin Board';
+ $type = 'Discussion Board';
}
if ($$unread{$ressymb}{'enclink'}) {
$disclink = $$unread{$ressymb}{'enclink'}.'?symb='.$$unread{$ressymb}{'encsymb'};
@@ -1699,6 +2202,8 @@ sub display_coursediscussion {
}
$r->print("\n");
}
+ } elsif ($itemserror) {
+ $r->print('
'.$itemserror.'
');
} else {
$r->print('
'.$lt{'noun'}.'
');
}
@@ -1808,6 +2313,10 @@ sub store_interval_setting {
$interval_settings{$cid.':oldroleinterval'} = $env{'form.interval'};
} elsif ($context eq 'newroles') {
$interval_settings{$cid.':newroleinterval'} = $env{'form.interval'};
+ } elsif ($context eq 'crslogin') {
+ $interval_settings{$cid.':crslogininterval'} = $env{'form.interval'};
+ } elsif ($context eq 'sessions') {
+ $interval_settings{$cid.':sessionactivity'} = $env{'form.interval'};
} else {
$interval_settings{$cid.':interval'} = $env{'form.interval'};
}
@@ -1815,19 +2324,19 @@ sub store_interval_setting {
\%interval_settings,$udom,$uname);
if ($outcome eq 'ok') {
if (ref($interval_titles->{$context}) eq 'HASH') {
- $result = &mt('New filter setting: [_1].',''.
- $interval_titles->{$context}->{$env{'form.interval'}}.'').' ';
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('New filter setting: [_1].',''.
+ $interval_titles->{$context}->{$env{'form.interval'}}.'').' ');
}
} else {
my $lctype = lc(&Apache::loncommon::course_type());
&Apache::lonnet::logthis('Error saving whatsnew '.$context.' interval setting'.
' '.$outcome.' for '.$uname.':'.$udom.' in '.$lctype.' '.$cid);
- $result = &mt('Unable to set interval to [_1] due to [_2].',
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Unable to set interval to [_1] due to [_2].',
''.$interval_titles->{$context}->{$env{'form.interval'}}.'',
- ''.$outcome.'. ');
+ ''.$outcome.''),1);
}
}
- return $result;
+ return &Apache::loncommon::confirmwrapper($result);
}
sub store_discussion_setting {
@@ -1839,20 +2348,20 @@ sub store_discussion_setting {
my $outcome = &Apache::lonnet::put('nohist_whatsnew',
\%discussion_settings,$udom,$uname);
if ($outcome eq 'ok') {
- $result = &mt('Count unread posts in discussions display set to [_1]',
- ''.&mt($env{'form.countunread'}).'').' ';
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Count unread posts in discussions display set to [_1]',
+ ''.&mt($env{'form.countunread'}).'').' ');
} else {
my $lctype = lc(&Apache::loncommon::course_type());
&Apache::lonnet::logthis('Error saving whatsnew countunread setting'.
' '.$outcome.' for '.$uname.':'.$udom.' in '.$lctype.' '.$cid);
- $result = &mt('Unable to set "number unread posts display" to [_1]'.
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Unable to set "number unread posts display" to [_1]'.
' due to [_2].',
''.&mt($env{'form.countunread'}).'',
- ''.$outcome.'. ');
+ ''.$outcome.''),1);
}
}
- return $result;
+ return &Apache::loncommon::confirmwrapper($result);
}
sub store_courseinit_setting {
@@ -1877,27 +2386,29 @@ sub store_courseinit_setting {
\%courseinit_settings,$udom,$uname);
if ($outcome eq 'ok') {
if ($page_control eq 'global preferences') {
- $result = &mt("Page displayed after role selection in $lctype now set by user's global preferences.");
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt("Page displayed after role selection in $lctype now set by [_1]user's global preferences[_2].",'',''));
} else {
- $result = &mt('Page displayed after role selection in this '.$lctype.' set to [_2]',$lctype,$$initpage{$env{'form.courseinit_page'}});
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Page displayed after role selection in this '.$lctype.' set to [_1].'
+ ,''.$$initpage{$env{'form.courseinit_page'}}.''));
}
} else {
&Apache::lonnet::logthis('Error saving whatsnew courseinit '.
'setting: '.$outcome.' for '.$uname.
':'.$udom.' in '.$lctype.' '.$cid);
if ($page_control eq 'global preferences') {
- $result = &mt('Unable to set control of page display to [_1]'.
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Unable to set control of page display to [_1]'.
' due to [_2].',
''.$page_control.'',
- ''.$outcome.'. ');
+ ''.$outcome.''),1);
} else {
- $result = &mt('Unable to set page display, after role selection, for this '.$lctype.' to [_2] due to [_3]. ',
- $$initpage{$env{'form.courseinit_page'}},$outcome);
+ $result = &Apache::lonhtmlcommon::confirm_success(&mt('Unable to set page display, after role selection, for this '.$lctype.' to [_1] due to [_2].'
+ ,''.$$initpage{$env{'form.courseinit_page'}}.''
+ ,''.$outcome.''),1);
}
}
}
}
- return $result;
+ return &Apache::loncommon::confirmwrapper($result);
}
sub start_box {
@@ -1929,38 +2440,52 @@ sub start_box {
if ($$show{$caller}) {
$r->print('