version 1.36, 2005/12/06 16:37:28
|
version 1.38.2.2, 2005/12/22 22:39:49
|
Line 109 sub handler {
|
Line 109 sub handler {
|
sub display_main_box { |
sub display_main_box { |
my ($r,$command,$checkallowed) = @_; |
my ($r,$command,$checkallowed) = @_; |
my $domain=&Apache::loncommon::determinedomain(); |
my $domain=&Apache::loncommon::determinedomain(); |
my $tabbg=&Apache::loncommon::designparm('coordinator.tabbg',$domain); |
my $function = &Apache::loncommon::get_users_function(); |
|
my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); |
|
|
$r->print('<table width="100%" border="0" cellpadding="5" cellspacing="0"><tr><td width="100%">'); |
$r->print('<table width="100%" border="0" cellpadding="5" cellspacing="0"><tr><td width="100%">'); |
|
|
my %threshold_titles = ( |
my %threshold_titles = ( |
Line 136 sub display_main_box {
|
Line 138 sub display_main_box {
|
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { |
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { |
&display_interval_config($r,\%interval_titles); |
&display_interval_config($r,\%interval_titles); |
} else { |
} else { |
&display_actions_box($r,$command,\%threshold_titles,\%interval_titles, |
&display_actions_box($r,$tabbg,$command,\%threshold_titles, |
$cdom,$crs,$checkallowed); |
\%interval_titles,$cdom,$crs,$checkallowed); |
} |
} |
$r->print(<<END_OF_BLOCK); |
$r->print(<<END_OF_BLOCK); |
</td> |
</td> |
Line 171 function change_display(caller,change) {
|
Line 173 function change_display(caller,change) {
|
function changeAll(change) { |
function changeAll(change) { |
END |
END |
foreach my $item (keys(%{$checkallowed})) { |
foreach my $item (keys(%{$checkallowed})) { |
$scripttag.='document.visible.display_'.$item.'.value=change'."\n"; |
if ($$checkallowed{$item}) { |
|
$scripttag.='document.visible.display_'.$item.'.value=change'. |
|
"\n"; |
|
} |
} |
} |
$scripttag.='document.visible.submit(); |
$scripttag.='document.visible.submit(); |
} |
} |
Line 196 ENDHEAD
|
Line 201 ENDHEAD
|
#------------------------------- |
#------------------------------- |
|
|
sub display_actions_box() { |
sub display_actions_box() { |
my ($r,$command,$threshold_titles,$interval_titles,$cdom,$crs, |
my ($r,$tabbg,$command,$threshold_titles,$interval_titles, |
$checkallowed) = @_; |
$cdom,$crs,$checkallowed) = @_; |
|
|
my $rowColor1 = "#ffffff"; |
my $rowColor1 = "#ffffff"; |
my $rowColor2 = "#eeeeee"; |
my $rowColor2 = "#eeeeee"; |
|
|
Line 234 sub display_actions_box() {
|
Line 240 sub display_actions_box() {
|
my $needitems = 0; |
my $needitems = 0; |
my $boxcount = 0; |
my $boxcount = 0; |
|
|
my $domain=&Apache::loncommon::determinedomain(); |
|
my $function; |
|
if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { |
|
$function='coordinator'; |
|
} |
|
if ($env{'request.role'}=~/^(su|dc|ad|li)/) { |
|
$function='admin'; |
|
} |
|
|
|
my %threshold = ( |
my %threshold = ( |
av_attempts => 2, |
av_attempts => 2, |
degdiff => 0.5, |
degdiff => 0.5, |
numstudents => 2, |
numstudents => 2, |
); |
); |
|
|
my $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain); |
|
my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); |
|
|
|
unless ($cid) { |
unless ($cid) { |
$r->print('<br /><b><center>'.$lt{'yacc'}.'</center></b><br /><br />'); |
$r->print('<br /><b><center>'.$lt{'yacc'}.'</center></b><br /><br />'); |
return; |
return; |
Line 300 sub display_actions_box() {
|
Line 294 sub display_actions_box() {
|
$timediff = time; |
$timediff = time; |
} |
} |
my $starttime = $now - $timediff; |
my $starttime = $now - $timediff; |
|
my $countunread = 1; |
|
|
my %headings = &Apache::lonlocal::texthash( |
my %headings = &Apache::lonlocal::texthash( |
coursediscussion => 'Unread course discussion posts', |
coursediscussion => 'Unread course discussion posts', |
handgrading => 'Problems requiring handgrading', |
handgrading => 'Problems requiring handgrading', |
haserrors => 'Problems with errors', |
haserrors => 'Problems with errors', |
versionchanges => 'Resources in course with version changes '.$interval, |
versionchanges => 'Resources in course with version changes '.$interval, |
coursenormalmail => 'New course message', |
coursenormalmail => 'New course messages', |
coursecritmail => 'New critical messages in course', |
coursecritmail => 'New critical messages in course', |
); |
); |
|
|
Line 337 sub display_actions_box() {
|
Line 332 sub display_actions_box() {
|
} |
} |
|
|
if ($needitems) { |
if ($needitems) { |
&getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime); |
&getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread); |
} |
} |
if ($show{'coursenormalmail'}) { |
if ($show{'coursenormalmail'}) { |
&getnormalmail(\@newmsgs); |
&getnormalmail(\@newmsgs); |
Line 365 sub display_actions_box() {
|
Line 360 sub display_actions_box() {
|
if ($displayed == $halfway) { |
if ($displayed == $halfway) { |
$r->print('</td><td width="5%"> </td><td align="left" valign="top" width-"50%">'); |
$r->print('</td><td width="5%"> </td><td align="left" valign="top" width-"50%">'); |
} |
} |
&display_launcher($r,$actionitem,$checkallowed,$tabbg,$rowColor1,$rowColor2,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,$interval); |
&display_launcher($r,$actionitem,$checkallowed,$tabbg,$rowColor1,$rowColor2,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,$interval,$countunread); |
$displayed ++; |
$displayed ++; |
} |
} |
} |
} |
Line 481 sub display_launcher {
|
Line 476 sub display_launcher {
|
my ($r,$action,$checkallowed,$tabbg,$rowColor1,$rowColor2,$show, |
my ($r,$action,$checkallowed,$tabbg,$rowColor1,$rowColor2,$show, |
$headings,$res_title,$tograde,$ungraded,$bombs,$bombed,$changed, |
$headings,$res_title,$tograde,$ungraded,$bombs,$bombed,$changed, |
$warnings,$triggered,$newdiscussions,$unread,$msgcount,$newmsgs, |
$warnings,$triggered,$newdiscussions,$unread,$msgcount,$newmsgs, |
$critmsgcount,$critmsgs,$interval) = @_; |
$critmsgcount,$critmsgs,$interval,$countunread) = @_; |
|
|
if ($$checkallowed{$action}) { |
if ($$checkallowed{$action}) { |
&start_box($r,$tabbg,$show,$headings,$action); |
&start_box($r,$tabbg,$show,$headings,$action); |
Line 501 sub display_launcher {
|
Line 496 sub display_launcher {
|
$rowColor1,$rowColor2); |
$rowColor1,$rowColor2); |
} elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION |
} elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION |
&display_coursediscussion($r,$newdiscussions,$unread, |
&display_coursediscussion($r,$newdiscussions,$unread, |
$res_title,$rowColor1,$rowColor2); |
$countunread,$res_title,$rowColor1,$rowColor2); |
} elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES |
} elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES |
&display_coursenormalmail($r,$msgcount,$newmsgs,$rowColor1, |
&display_coursenormalmail($r,$msgcount,$newmsgs,$rowColor1, |
$rowColor2); |
$rowColor2); |
Line 518 sub display_launcher {
|
Line 513 sub display_launcher {
|
sub getitems { |
sub getitems { |
my ($unread,$ungraded,$bombed,$triggered,$changed,$newdiscussions, |
my ($unread,$ungraded,$bombed,$triggered,$changed,$newdiscussions, |
$tograde,$bombs,$warnings,$rowColor1,$rowColor2,$threshold,$cdom,$crs, |
$tograde,$bombs,$warnings,$rowColor1,$rowColor2,$threshold,$cdom,$crs, |
$res_title,$show,$starttime) = @_; |
$res_title,$show,$starttime,$countunread) = @_; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
# force retrieve Resource to seed the part id cache we'll need it later |
# force retrieve Resource to seed the part id cache we'll need it later |
my @allres=$navmap->retrieveResources(undef,sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;}); |
my @allres=$navmap->retrieveResources(undef, |
|
sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;}); |
my %lastreadtime; |
my %lastreadtime; |
my %resourcetracker; |
my %resourcetracker; |
|
my $discussiontime; |
|
|
# Resource version changes |
# Resource version changes |
if ($$show{'versionchanges'}) { |
if ($$show{'versionchanges'}) { |
&checkversions($cdom,$crs,$navmap,$changed,$starttime); |
&checkversions($cdom,$crs,$navmap,$changed,$starttime); |
} |
} |
|
|
if ($$show{'coursediscussions'}) { |
if ($$show{'coursediscussion'}) { |
my %lastread = &Apache::lonnet::dump('nohist_'. |
my %lastread = &Apache::lonnet::dump('nohist_'. |
$env{'request.course.id'}.'_discuss', |
$env{'request.course.id'}.'_discuss', |
$env{'user.domain'},$env{'user.name'},'lastread'); |
$env{'user.domain'},$env{'user.name'},'lastread'); |
Line 559 sub getitems {
|
Line 556 sub getitems {
|
$$res_title{$symb} = $title; |
$$res_title{$symb} = $title; |
my $ressymb = $resource->wrap_symb(); |
my $ressymb = $resource->wrap_symb(); |
|
|
# Check for unread discussion postings |
# Check if there are unread discussion postings |
if ($$show{'coursediscussion'}) { |
if ($$show{'coursediscussion'}) { |
&check_discussions($cdom,$crs,$resource,$symb,$ressymb,$title, |
&check_discussions($cdom,$crs,$resource,$symb,$ressymb,$title, |
$newdiscussions,$unread,\%lastreadtime); |
$newdiscussions,$unread); |
} |
} |
|
|
# Check for ungraded problems |
# Check for ungraded problems |
Line 585 sub getitems {
|
Line 582 sub getitems {
|
} |
} |
|
|
} |
} |
|
my $hasdiscussion = @{$newdiscussions}; |
|
if ($$show{'coursediscussion'} && $hasdiscussion) { # Get time of last post; |
|
$discussiontime = $navmap->{DISCUSSION_TIME}; |
|
foreach my $ressymb (@{$newdiscussions}) { |
|
$$unread{$ressymb}{'lastpost'} = $$discussiontime{$ressymb}; |
|
} |
|
if ($countunread) { #Get count of unread postings for each resource |
|
my $discussiondata = $navmap->get_discussion_data(); |
|
foreach my $ressymb (@{$newdiscussions}) { |
|
&get_discussions($cdom,$crs,$discussiondata,$ressymb, |
|
$unread,\%lastreadtime); |
|
} |
|
} |
|
} |
} |
} |
|
|
sub check_discussions { |
sub check_discussions { |
my ($cdom,$crs,$resource,$symb,$ressymb,$title,$newdiscussions,$unread, |
my ($cdom,$crs,$resource,$symb,$ressymb,$title,$newdiscussions, |
$lastreadtime) = @_; |
$unread) = @_; |
# Check for unread discussion postings |
|
if ($resource->hasDiscussion()) { |
if ($resource->hasDiscussion()) { |
my $prevread = 0; |
|
my $unreadcount = 0; |
|
%{$$unread{$ressymb}} = (); |
%{$$unread{$ressymb}} = (); |
$$unread{$ressymb}{'title'} = $title; |
$$unread{$ressymb}{'title'} = $title; |
$$unread{$ressymb}{'symb'} = $symb; |
$$unread{$ressymb}{'symb'} = $symb; |
if (defined($$lastreadtime{$ressymb})) { |
push(@{$newdiscussions}, $ressymb); |
$prevread = $$lastreadtime{$ressymb}; |
} |
} |
} |
my %contrib = &Apache::lonnet::restore($ressymb, |
|
$env{'request.course.id'},$cdom,$crs); |
sub get_discussions { |
if ($contrib{'version'}) { |
my ($cdom,$crs,$discussiondata,$ressymb,$unread,$lastreadtime) = @_; |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
my $prevread = 0; |
unless (($contrib{'hidden'}=~/\.$id\./) || |
my $unreadcount = 0; |
($contrib{'deleted'}=~/\.$id\./)) { |
if (defined($$lastreadtime{$ressymb})) { |
if ($prevread <$contrib{$id.':timestamp'}) { |
$prevread = $$lastreadtime{$ressymb}; |
$$unread{$ressymb}{$unreadcount} = $id.': '.$contrib{$id.':subject'}; |
} |
|
my $version = $$discussiondata{'version:'.$ressymb}; |
|
if ($version) { |
|
my $hiddenflag = 0; |
|
my $deletedflag = 0; |
|
my ($hidden,$deleted); |
|
for (my $id=$version; $id>0; $id--) { |
|
my $vkeys=$$discussiondata{$id.':keys:'.$ressymb}; |
|
my @keys=split(/:/,$vkeys); |
|
if (grep/^hidden$/,@keys) { |
|
unless ($hiddenflag) { |
|
$hidden = $$discussiondata{$id.':'.$ressymb.':hidden'}; |
|
$hiddenflag = 1; |
|
} |
|
} elsif (grep/^deleted$/,@keys) { |
|
unless ($deletedflag) { |
|
$deleted = $$discussiondata{$id.':'.$ressymb.':deleted'}; |
|
$deletedflag = 1; |
|
} |
|
} else { |
|
unless (($hidden =~/\.$id\./) || ($deleted =~/\.$id\./)) { |
|
if ($prevread <$$discussiondata{$id.':'.$ressymb.':timestamp'}) { |
$unreadcount ++; |
$unreadcount ++; |
|
$$unread{$ressymb}{$unreadcount} = $id.': '. |
|
$$discussiondata{$id.':'.$ressymb.':subject'}; |
} |
} |
} |
} |
} |
} |
} |
} |
if ($unreadcount) { push(@{$newdiscussions}, $ressymb); } |
$$unread{$ressymb}{'unreadcount'} = $unreadcount; |
} |
} |
} |
} |
|
|
|
|
sub check_handgraded { |
sub check_handgraded { |
my ($resource,$symb,$title,$cdom,$cnum,$ungraded,$tograde) = @_; |
my ($resource,$symb,$title,$cdom,$cnum,$ungraded,$tograde) = @_; |
if ($resource->is_problem()) { |
if ($resource->is_problem()) { |
Line 756 sub get_curr_interval {
|
Line 788 sub get_curr_interval {
|
my $interval; |
my $interval; |
my %settings = &Apache::lonnet::dump('nohist_whatsnew',$uname,$udom,$cid,':interval'); |
my %settings = &Apache::lonnet::dump('nohist_whatsnew',$uname,$udom,$cid,':interval'); |
my ($tmp) = %settings; |
my ($tmp) = %settings; |
if ($tmp =~ /^Error/) { |
|
&logthis(); |
unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
} else { |
|
$interval = $settings{$cid.':interval'}; |
$interval = $settings{$cid.':interval'}; |
} |
} |
return $interval; |
return $interval; |
Line 899 sub checkversions {
|
Line 930 sub checkversions {
|
my ($cdom,$crs,$navmap,$changed,$starttime) = @_; |
my ($cdom,$crs,$navmap,$changed,$starttime) = @_; |
my %changes=&Apache::lonnet::dump('versionupdate',$cdom,$crs); |
my %changes=&Apache::lonnet::dump('versionupdate',$cdom,$crs); |
my ($tmp) = keys(%changes); |
my ($tmp) = keys(%changes); |
if ($tmp =~/^error\:/) { |
unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
&Apache::lonnet::logthis('Error retrieving version update information: '. |
if (keys(%changes) > 0) { |
$tmp.' for '.$cdom.'_'.$crs.' in whatsnew'); |
|
} else { |
|
if (keys(%changes) > 0) { |
|
foreach my $key (sort(keys(%changes))) { |
foreach my $key (sort(keys(%changes))) { |
if ($changes{$key} > $starttime) { |
if ($changes{$key} > $starttime) { |
my $version; |
my $version; |
Line 1072 sub display_versionchanges {
|
Line 1100 sub display_versionchanges {
|
} |
} |
|
|
sub display_coursediscussion { |
sub display_coursediscussion { |
my ($r,$newdiscussions,$unread,$res_title,$rowColor1,$rowColor2) = @_; |
my ($r,$newdiscussions,$unread,$countunread,$res_title,$rowColor1, |
|
$rowColor2) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'loca' => 'Location', |
'loca' => 'Location', |
'type' => 'Type', |
'type' => 'Type', |
'numn' => 'Number of new posts', |
'numn' => 'Number of new posts', |
'noun' => 'No unread posts in course discussions', |
'noun' => 'No unread posts in course discussions', |
|
'tmlp' => 'Time of last post', |
); |
); |
my $rowColor; |
my $rowColor; |
if (@{$newdiscussions} > 0) { |
if (@{$newdiscussions} > 0) { |
$r->print('<tr bgcolor="#cccccc"><td><b><small>'.$lt{'loca'}. |
$r->print('<tr bgcolor="#cccccc"><td><b><small>'.$lt{'loca'}. |
'</small></b></td><td><b><small>'.$lt{'type'}. |
'</small></b></td><td><b><small>'.$lt{'type'}. |
'</small></b><td align="right"><b><small>'.$lt{'numn'}. |
'</small></b>'); |
'</small></b></td></tr>'); |
if ($countunread) { |
|
$r->print('<td><b><small>'.$lt{'tmlp'}.'</small></b></td>'. |
|
'<td align="right"><b><small>'.$lt{'numn'}. |
|
'</small></b></td>'); |
|
} else { |
|
$r->print('<td align="right"><b><small>'.$lt{'tmlp'}. |
|
'</small></b></td>'); |
|
} |
|
$r->print("</tr>\n"); |
@{$newdiscussions} = sort { &cmp_title($a,$b,$res_title) } |
@{$newdiscussions} = sort { &cmp_title($a,$b,$res_title) } |
@{$newdiscussions}; |
@{$newdiscussions}; |
my $rowNum = 0; |
my $rowNum = 0; |
Line 1095 sub display_coursediscussion {
|
Line 1133 sub display_coursediscussion {
|
if ($feedurl =~ /bulletinboard/) { |
if ($feedurl =~ /bulletinboard/) { |
$type = 'Bulletin Board'; |
$type = 'Bulletin Board'; |
} |
} |
my $unreadnum = keys(%{$$unread{$ressymb}}); |
if ($rowNum %2 == 1) { |
$unreadnum = $unreadnum - 2; |
$rowColor = $rowColor1; |
if ($unreadnum > 0) { |
} else { |
if ($rowNum %2 == 1) { |
$rowColor = $rowColor2; |
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
$r->print('<tr bgcolor="'.$rowColor.'"><td><small><a href="'.$feedurl.'?symb='.$$unread{$ressymb}{symb}.'">'.$forum_title.'</a> </td><td><small>'.$type.'</small></td><td align="right">'.$unreadnum.' </td></tr>'); |
|
$rowNum ++; |
|
} |
} |
|
my $lastpost = &Apache::lonnavmaps::timeToHumanString( |
|
$$unread{$ressymb}{'lastpost'}); |
|
$r->print('<tr bgcolor="'.$rowColor.'"><td><small><a href="'.$feedurl.'?symb='.$$unread{$ressymb}{symb}.'">'.$forum_title.'</a> </td><td><small>'.$type.' </small></td>'); |
|
if ($countunread) { |
|
my $unreadnum = $$unread{$ressymb}{'unreadcount'}; |
|
$r->print('<td><small>'.$lastpost.'<small></td><td align="right">'. |
|
'<small>',$unreadnum.' </small></td>'); |
|
} else { |
|
$r->print('<td align="right"><small>'.$lastpost.'</small></td>'); |
|
} |
|
$r->print("</tr>\n"); |
|
$rowNum ++; |
} |
} |
} else { |
} else { |
$r->print('<tr><td bgcolor="#ffffff"><br><center> <i><b><small>'. |
$r->print('<tr><td bgcolor="#ffffff"><br><center> <i><b><small>'. |
Line 1169 sub get_display_settings {
|
Line 1213 sub get_display_settings {
|
my ($uname,$udom,$cid) = @_; |
my ($uname,$udom,$cid) = @_; |
my %settings = &Apache::lonnet::dump('nohist_whatsnew',$udom,$uname,$cid); |
my %settings = &Apache::lonnet::dump('nohist_whatsnew',$udom,$uname,$cid); |
my ($tmp) = keys(%settings); |
my ($tmp) = keys(%settings); |
if ($tmp=~/^error:/) { |
if ($tmp=~/^(con_lost|error|no_such_host)/i) { |
%settings = (); |
%settings = (); |
unless ($tmp eq 'error: 2 tie(GDBM) Failed while attempting dump') { |
unless ($tmp =~ /^error: 2 /) { |
&logthis('Error retrieving whatsnew settings: '.$tmp.' for '. |
&Apache::lonnet::logthis('Error retrieving whatsnew settings: '. |
$uname.':'.$udom.' for course: '.$cid); |
$tmp.' for '.$uname.':'.$udom. |
} |
' for course: '.$cid); |
|
|
|
} |
} |
} |
return %settings; |
return %settings; |
} |
} |