version 1.36, 2005/12/06 16:37:28
|
version 1.37, 2005/12/15 00:53:29
|
Line 300 sub display_actions_box() {
|
Line 300 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 338 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 366 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 482 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 502 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 519 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 562 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 588 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}; |
} |
|
} |
|
|
|
sub get_discussions { |
|
my ($cdom,$crs,$discussiondata,$ressymb,$unread,$lastreadtime) = @_; |
|
my $prevread = 0; |
|
my $unreadcount = 0; |
|
if (defined($$lastreadtime{$ressymb})) { |
|
$prevread = $$lastreadtime{$ressymb}; |
|
} |
|
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; |
|
} |
|
} |
|
if (grep/^deleted$/,@keys) { |
|
unless ($deletedflag) { |
|
$deleted = $$discussiondata{$id.':'.$ressymb.':deleted'}; |
|
$deletedflag = 1; |
|
} |
|
} |
|
if ($deletedflag && $hiddenflag) { |
|
last; |
|
} |
} |
} |
my %contrib = &Apache::lonnet::restore($ressymb, |
for (my $id=$version; $id>0; $id--) { |
$env{'request.course.id'},$cdom,$crs); |
unless (($hidden =~/\.$id\./) || ($deleted =~/\.$id\./)) { |
if ($contrib{'version'}) { |
if ($prevread <$$discussiondata{$id.':'.$ressymb.':timestamp'}) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
unless((exists($$discussiondata{$id.':'.$ressymb.':hidden'})) || |
unless (($contrib{'hidden'}=~/\.$id\./) || |
(exists($$discussiondata{$id.':'.$ressymb.':deleted'}))) { |
($contrib{'deleted'}=~/\.$id\./)) { |
|
if ($prevread <$contrib{$id.':timestamp'}) { |
|
$$unread{$ressymb}{$unreadcount} = $id.': '.$contrib{$id.':subject'}; |
|
$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 1072 sub display_versionchanges {
|
Line 1119 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 1152 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>'. |