--- loncom/interface/lonwhatsnew.pm 2010/09/19 15:05:59 1.98.2.4
+++ loncom/interface/lonwhatsnew.pm 2016/10/23 21:50:55 1.120
@@ -1,5 +1,5 @@
#
-# $Id: lonwhatsnew.pm,v 1.98.2.4 2010/09/19 15:05:59 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.120 2016/10/23 21:50:55 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -73,6 +73,7 @@ sub handler {
['vcl','newroles',1],
['vcl','oldroles',1],
['whn','crslogin',1],
+ ['mgr','resetcounters',1],
) {
my ($perm,$key,$check_section) = @{ $perm_check };
my $scope = $env{'request.course.id'};
@@ -89,7 +90,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;
}
@@ -237,7 +238,7 @@ sub display_main_box {
&display_interval_config($r,$refpage,\%interval_titles,'oldroles');
} elsif (($command eq 'chgcrslogininterval')
&& $checkallowed->{'crslogin'}) {
- &display_interval_config($r,$refpage,\%interval_titles,'crslogin');
+ &display_interval_config($r,$refpage,\%interval_titles,'crslogin');
} else {
&display_actions_box($r,$command,$refpage,\%threshold_titles,
\%interval_titles,\%initpage,$cdom,$crs,$checkallowed);
@@ -263,7 +264,7 @@ sub display_header {
my $scripttag;
unless ($command eq 'chgthreshold' || $command eq 'chginterval' ||
- $command eq 'chgoldroleinterval' ||
+ $command eq 'chgoldroleinterval' ||
$command eq 'chgnewroleinterval' || $command eq 'chgcrslogininterval') {
$scripttag = <<"END";
');
$r->print(' '
.&mt('Choose whether or not to display a count of the number of new posts for each resource or discussion board which has unread posts.')
.' '
.&mt("This can increase the time taken to gather data for the [_1]What's New Page[_2] by a few seconds.",'','')
.' '
- .&mt('Currently set to [_1].',''.$current.'.')
+ .&mt('Currently set to [_1].',''.$current.'')
);
$r->print('
');
+ if ($checkallowed->{'resetcounters'}) {
+ $r->print('
');
}
} elsif ($itemserror) {
$r->print('
'.$itemserror.'
');
@@ -1807,7 +1789,7 @@ sub display_versionchanges {
}
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',
@@ -1826,6 +1808,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}}) {
@@ -1843,8 +1826,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('
'.
'
'.&Apache::lonlocal::locallocaltime($item).'
'.
'
'.$link.'
'.
@@ -1864,7 +1853,8 @@ sub display_rolechanges {
}
sub display_crslogins {
- my ($r,$logincount,$loggedin,$interval,$crstype) = @_;
+ my ($r,$logincount,$loggedin,$interval,$crstype,$classlist) = @_;
+ return unless (ref($classlist) eq 'HASH');
my %lt = &Apache::lonlocal::texthash(
'user' => 'User',
'role' => 'Role',
@@ -1872,7 +1862,7 @@ sub display_crslogins {
'number' => 'Total number of logins',
);
if ($logincount) {
-
+
my $hdr = '
'.
'
'.$lt{'user'}.'
'.
'
'.$lt{'role'}.'
'.
@@ -1885,6 +1875,7 @@ sub display_crslogins {
if (ref($loggedin) eq 'HASH') {
my @logins = sort { $b <=> $a } (keys(%{$loggedin}));
my $numlogin = 0;
+ my $fullnameidx = &Apache::loncoursedata::CL_FULLNAME();
foreach my $item (@logins) {
if (ref($loggedin->{$item}) eq 'ARRAY') {
foreach my $user (@{$loggedin->{$item}}) {
@@ -1901,7 +1892,12 @@ sub display_crslogins {
$counts{$user->{'role'}}{$section} ++;
my $uname = $user->{'uname'};
my $udom = $user->{'udom'};
- my $fullname = &Apache::loncommon::plainname($uname,$udom,'lastname');
+ 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($fullname,$uname,$udom);
push(@{$bylastname{$fullname}},
@@ -1914,18 +1910,18 @@ sub display_crslogins {
}
my $table;
foreach my $person (sort(keys(%bylastname))) {
- if (ref($bylastname{$person}) eq 'ARRAY') {
- foreach my $item (@{$bylastname{$person}}) {
+ if (ref($bylastname{$person}) eq 'ARRAY') {
+ foreach my $item (@{$bylastname{$person}}) {
$numlogin ++;
my $css_class = $numlogin%2?' class="LC_odd_row"':'';
- $table .= '
'.$item.'
';
+ $table .= '
'.$item.'
';
}
}
}
my $numrow = 0;
foreach my $role (sort(keys(%counts))) {
my $showrole = &Apache::lonnet::plaintext($role,$crstype);
- if (ref($counts{$role}) eq 'HASH') {
+ if (ref($counts{$role}) eq 'HASH') {
foreach my $sec (sort { $b <=> $a } (keys(%{$counts{$role}}))) {
$numrow ++;
my $css_class = $numrow%2?' class="LC_odd_row"':'';
@@ -1978,7 +1974,7 @@ 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 = 'Discussion Board';
}
@@ -2118,19 +2114,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 {
@@ -2142,20 +2138,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 {
@@ -2180,34 +2176,33 @@ 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 [_1]user's global preferences[_2].",'','');
+ $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 [_1].'
- ,''.$$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 [_1] due to [_2].'
+ $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.'')
- .' ';
+ ,''.$outcome.''),1);
}
}
}
}
- return $result;
+ return &Apache::loncommon::confirmwrapper($result);
}
sub start_box {
- my ($r,$show,$heading,$caller,$refpage,$action,$custommenu) = @_;
+ my ($r,$show,$heading,$caller,$refpage) = @_;
my %lt = &Apache::lonlocal::texthash(
chth => 'Change thresholds?',
chin => 'Change interval?',
@@ -2232,7 +2227,7 @@ sub start_box {
'.$showhide.'
');
if (($caller eq 'abovethreshold') && ($$show{$caller})) {
- if ($$show{$caller} && !$custommenu) {
+ if ($$show{$caller}) {
$r->print('