--- loncom/interface/lonwhatsnew.pm 2012/10/04 11:31:58 1.108
+++ loncom/interface/lonwhatsnew.pm 2013/10/21 22:34:33 1.114
@@ -1,5 +1,5 @@
#
-# $Id: lonwhatsnew.pm,v 1.108 2012/10/04 11:31:58 droeschl Exp $
+# $Id: lonwhatsnew.pm,v 1.114 2013/10/21 22:34:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -285,6 +285,11 @@ END
$scripttag.='document.visible.submit();
}
+function thresholdreset() {
+ document.visible.command.value="reset";
+ document.visible.submit();
+}
+
function togglelogins() {
var total = document.visible.logincount.value;
var sumrow = document.visible.loginrow.value;
@@ -527,28 +532,33 @@ sub display_actions_box {
$headings{'crslogin'} = &mt('Last login for users in last 24 hours');
}
- my $now = time;
+ 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'};
}
- my $expiredstart = $now - $timediff{'oldroles'};
if ($timediff{'crslogin'} == -1) {
- $timediff{'crslogin'} = time;
+ $crsloginstart = 0;
+ } else {
+ $crsloginstart = $now - $timediff{'crslogin'};
}
- my $crsloginstart = $now - $timediff{'crslogin'};
-
my $countunread = $display_settings{$cid.':countunread'};
unless (defined($countunread)) {
$countunread = 'on';
@@ -588,6 +598,10 @@ sub display_actions_box {
if ($needitems) {
$itemserror = &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread);
}
+ my $classlist;
+ if ($show{'oldroles'} || $show{'newroles'} || $show{'crslogin'}) {
+ $classlist = &Apache::loncoursedata::get_classlist();
+ }
if ($show{'coursenormalmail'}) {
$msgcount = &getnormalmail(\@newmsgs);
}
@@ -595,10 +609,10 @@ 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);
@@ -631,7 +645,7 @@ sub display_actions_box {
if ($displayed == $halfway) {
$r->print('
| ');
}
- &display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype,$itemserror,\%loggedin,$logincount);
+ &display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype,$itemserror,\%loggedin,$logincount,$classlist);
$displayed ++;
}
}
@@ -678,7 +692,7 @@ 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;"';
$r->print(&Apache::loncommon::start_data_table_row()."\n".
@@ -887,7 +901,7 @@ sub display_launcher {
$tograde,$ungraded,$bombs,$bombed,$changed,$warnings,$triggered,
$newdiscussions,$unread,$msgcount,$newmsgs,$critmsgcount,$critmsgs,
$interval,$countunread,$expired,$expirecount,$activated,$activecount,
- $crstype,$itemserror,$loggedin,$logincount) = @_;
+ $crstype,$itemserror,$loggedin,$logincount,$classlist) = @_;
if ($$checkallowed{$action}) {
&start_box($r,$show,$headings,$action,$refpage);
@@ -910,13 +924,13 @@ sub display_launcher {
&display_coursecritmail($r,$critmsgcount,$critmsgs);
} elsif ($action eq 'newroles') { # ACTIVATED ROLES
&display_rolechanges($r,$activecount,$activated,$interval->{'newroles'},
- $crstype);
+ $crstype,$classlist);
} elsif ($action eq 'oldroles') { # EXPIRED ROLES
&display_rolechanges($r,$expirecount,$expired,$interval->{'oldroles'},
- $crstype);
+ $crstype,$classlist);
} elsif ($action eq 'crslogin') { #LAST LOGIN
&display_crslogins($r,$logincount,$loggedin,$interval->{'crslogin'},
- $crstype);
+ $crstype,$classlist);
}
}
&end_box($r);
@@ -1317,13 +1331,13 @@ sub getcritmail {
}
sub getexpired {
- my ($rolechgs,$rolechgtime,$status) = @_;
- my $expirecount = &getrolechanges($rolechgs,$rolechgtime,$status);
+ my ($rolechgs,$rolechgtime,$status,$classlist) = @_;
+ my $expirecount = &getrolechanges($rolechgs,$rolechgtime,$status,$classlist);
return $expirecount;
}
sub getactivated {
- my ($rolechgs,$rolechgtime,$status) = @_;
+ my ($rolechgs,$rolechgtime,$status,$classlist) = @_;
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my $now = time();
@@ -1335,28 +1349,26 @@ sub getactivated {
my (%stucounted,%advcounted);
my $activatedcount = 0;
if (keys(%changes) > 0) {
- foreach my $chg (sort { $b <=> $a } (keys(%changes))) {
+ foreach my $chg (keys(%changes)) {
if (ref($changes{$chg}) eq 'HASH') {
- my $timestamp = $changes{$chg}{'exe_time'};
- if ($timestamp) {
- if ($rolechgtime > 0) {
- if ($timestamp < $rolechgtime) {
- last;
- }
- }
+ next if ($changes{$chg}{'delflag'});
+ if ($rolechgtime > 0) {
+ next if ($changes{$chg}{'exe_time'} < $rolechgtime);
+ }
+ if ($changes{$chg}{'exe_time'}) {
+ my $timestamp = $changes{$chg}{'exe_time'};
if (ref($changes{$chg}{'logentry'}) eq 'HASH') {
- next if ($changes{$chg}{'delflag'});
- my $start = $changes{$chg}{'logentry'}{'start'};
my $end = $changes{$chg}{'logentry'}{'end'};
- my $section = $changes{$chg}{'logentry'}{'section'};
- my $role = $changes{$chg}{'logentry'}{'role'};
- my $uname = $changes{$chg}{'uname'};
- my $udom = $changes{$chg}{'udom'};
next if ($end && $end <= $now);
+ my $start = $changes{$chg}{'logentry'}{'start'};
+ next if ($start >= $timestamp);
+ my $section = $changes{$chg}{'logentry'}{'section'};
if (($viewablesec ne '') && ($section ne '')) {
next if ($viewablesec ne $section);
}
- next if ($start >= $timestamp);
+ my $role = $changes{$chg}{'logentry'}{'role'};
+ my $uname = $changes{$chg}{'uname'};
+ my $udom = $changes{$chg}{'udom'};
if ($role eq 'st') {
$stucounted{$uname.':'.$udom.':'.$section} = $start.':'.$end;
} else {
@@ -1376,12 +1388,13 @@ sub getactivated {
}
}
}
- $activatedcount += &getrolechanges($rolechgs,$rolechgtime,$status,\%stucounted,\%advcounted);
+ $activatedcount += &getrolechanges($rolechgs,$rolechgtime,$status,$classlist,\%stucounted,
+ \%advcounted);
return $activatedcount;
}
sub getrolechanges {
- my ($rolechgs,$rolechgtime,$status,$stucountref,$advcountref) = @_;
+ my ($rolechgs,$rolechgtime,$status,$classlist,$stucountref,$advcountref) = @_;
my (%stucounted,%advcounted);
if (ref($stucountref) eq 'HASH') {
%stucounted = %{$stucountref};
@@ -1399,63 +1412,64 @@ sub getrolechanges {
my ($permission,$allowed) =
&Apache::lonuserutils::get_permission($context);
my $viewablesec = &Apache::lonuserutils::viewable_section($permission);
- my $classlist = &Apache::loncoursedata::get_classlist();
my $secidx = &Apache::loncoursedata::CL_SECTION();
my $startidx = &Apache::loncoursedata::CL_START();
my $endidx = &Apache::loncoursedata::CL_END();
my $rolechgcount = 0;
- foreach my $key (keys(%{$classlist})) {
- my ($userstatus,$eventtime);
- my $student = $classlist->{$key};
- if (ref($student) eq 'ARRAY') {
- my $start = $student->[$startidx];
- my $end = $student->[$endidx];
- my $sec = $student->[$secidx];
- my ($stuname,$studom) = split(/:/,$key);
- if ($status eq 'active') {
- if (exists($stucounted{$key.':'.$sec})) {
- next;
+ if (ref($classlist) eq 'HASH') {
+ foreach my $key (keys(%{$classlist})) {
+ my ($userstatus,$eventtime);
+ my $student = $classlist->{$key};
+ if (ref($student) eq 'ARRAY') {
+ my $start = $student->[$startidx];
+ my $end = $student->[$endidx];
+ my $sec = $student->[$secidx];
+ my ($stuname,$studom) = split(/:/,$key);
+ if ($status eq 'active') {
+ if (exists($stucounted{$key.':'.$sec})) {
+ next;
+ }
}
- }
- if (($end == 0) || ($end > $start)) {
- if ($start <= $now) {
- if ($end && $end < $now) {
- if ($rolechgtime > 0) {
- if ($end > $rolechgtime) {
+ if (($end == 0) || ($end > $start)) {
+ if ($start <= $now) {
+ if ($end && $end < $now) {
+ if ($rolechgtime > 0) {
+ if ($end > $rolechgtime) {
+ $userstatus = 'previous';
+ }
+ } else {
$userstatus = 'previous';
}
} else {
- $userstatus = 'previous';
- }
- } else {
- if ($rolechgtime > 0) {
- if ($start >= $rolechgtime) {
+ if ($rolechgtime > 0) {
+ if ($start >= $rolechgtime) {
+ $userstatus = 'active';
+ }
+ } else {
$userstatus = 'active';
}
- } else {
- $userstatus = 'active';
}
}
}
+ next if ($userstatus ne $status);
+ if ($status eq 'active') {
+ $eventtime = $start;
+ } else {
+ $eventtime = $end;
+ }
+ if (($viewablesec ne '') && ($sec ne '')) {
+ next if ($viewablesec ne $sec);
+ }
+ my %chginfo = (
+ 'section' => $sec,
+ 'uname' => $stuname,
+ 'udom' => $studom,
+ 'role' => 'st',
+ 'status' => $userstatus,
+ );
+ $rolechgcount ++;
+ push(@{$rolechgs->{$eventtime}},\%chginfo);
}
- next if ($userstatus ne $status);
- if ($status eq 'active') {
- $eventtime = $start;
- } else {
- $eventtime = $end;
- }
- if (($viewablesec ne '') && ($sec ne '')) {
- next if ($viewablesec ne $sec);
- }
- my %chginfo = (
- 'section' => $sec,
- 'uname' => $stuname,
- 'udom' => $studom,
- 'role' => 'st',
- 'status' => $userstatus,
- );
- $rolechgcount ++;
- push (@{$rolechgs->{$eventtime}},\%chginfo);
}
}
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,
@@ -1610,7 +1624,7 @@ sub display_handgrade {
} else {
$linkurl.='?symb='.&escape($res);
}
- $linkurl.='&command=ungraded';
+ $linkurl.='&command=ungraded';
$r->print(' | '.$$ungraded{$res}{title}.' | '.$$ungraded{$res}{count}.' |
');
}
} elsif ($itemserror) {
@@ -1663,12 +1677,9 @@ sub display_abovethreshold {
);
if (@{$warnings} > 0) {
@{$warnings} = sort { &cmp_title($a,$b,$res_title) } @{$warnings};
- $r->print('');
+ $r->print('
|
');
} elsif ($itemserror) {
$r->print(''.$itemserror.' |
');
} else {
@@ -1750,7 +1761,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',
@@ -1769,6 +1780,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}}) {
@@ -1786,8 +1798,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.' | '.
@@ -1807,7 +1825,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',
@@ -1828,6 +1847,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}}) {
@@ -1844,7 +1864,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->{$user}->[$fullnameidx];
+ } else {
+ $fullname = &Apache::loncommon::plainname($uname,$udom,'lastname');
+ }
my $link =
&Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);
push(@{$bylastname{$fullname}},