version 1.4, 2005/04/07 04:22:03
|
version 1.11, 2005/04/18 20:35:07
|
Line 45 use Time::Local;
|
Line 45 use Time::Local;
|
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
|
if ($r->header_only) { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
|
return OK; |
|
} |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['command']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['command']); |
|
|
my $command = $ENV{'form.command'}; |
my $command = $env{'form.command'}; |
|
|
if ($command eq '') { |
if ($command eq '') { |
$command = "info"; |
$command = "info"; |
} |
} |
|
|
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
$r->print(&display_header()); |
$r->print(&display_header()); |
if (! (($ENV{'request.course.fn'}) && (&Apache::lonnet::allowed('vsa',$ENV{'request.course.id'})))) { |
if (! (($env{'request.course.fn'}) && (&Apache::lonnet::allowed('vsa',$env{'request.course.id'})))) { |
# Not in a course, or not allowed to modify parms |
# Not in a course, or not allowed to modify parms |
$ENV{'user.error.msg'}="/adm/whatsnew:vsa:0:0:Cannot display student activity"; |
$env{'user.error.msg'}="/adm/whatsnew:vsa:0:0:Cannot display student activity"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
|
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
if ($command eq 'config') { |
|
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/whatsnew?command=config', |
|
text=>"Configure display"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Course Action Items','Course_Action_Items_Config')); |
|
} else { |
|
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/whatsnew?command=info', |
|
text=>"Display Action Items"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Course Action Items','Course_Action_Items_Display')); |
|
} |
&display_main_box($r,$command); |
&display_main_box($r,$command); |
} |
} |
|
|
Line 73 sub display_main_box {
|
Line 94 sub display_main_box {
|
my ($r,$command) = @_; |
my ($r,$command) = @_; |
my $domain=&Apache::loncommon::determinedomain(); |
my $domain=&Apache::loncommon::determinedomain(); |
my $tabbg=&Apache::loncommon::designparm('coordinator.tabbg',$domain); |
my $tabbg=&Apache::loncommon::designparm('coordinator.tabbg',$domain); |
$r->print(<<END_OF_BLOCK); |
my $selconfig; |
<br /> |
my $selinfo; |
<br /> |
if ($command eq 'config') { |
<table width="100%" border="0" cellpadding="0" cellspacing="0"> |
$selinfo = 'selected="selected"'; |
<tr> |
} else { |
<td width="100%" bgcolor="#000000"> |
$selconfig = 'selected="selected"'; |
<table width="100%" border="0" cellpadding="1" cellspacing="0"> |
} |
<tr> |
my $picker = (' |
<td width="100%" bgcolor="#000000"> |
<form> |
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff"> |
<nobr> |
<tr> |
<input type="submit" value="'.&mt('Change page to:').'" /> |
<td colspan="2" width="100%" bgcolor="$tabbg"> |
<select name="command"> |
<table width="100%" border="0" cellpadding="5" cellspacing="0"> |
<option value="info" '.$selinfo.'">'.&mt('Display Action Items').'</option> |
<tr> |
<option value="config" '.$selconfig.'">'.&mt('Configure Settings').'</option> |
<td width="100%"> |
</select> |
<table width="100%" border="0" cellpadding="0" cellspacing="0"> |
</nobr> |
<tr> |
</form>'); |
<td> |
|
<font face="arial,verdana" size="3"><b>Course Action Items</b></font></td> |
$r->print('<table width="100%" border="0" cellpadding="5" cellspacing="0"><tr><td width="100%">'); |
</td> |
|
<td align="right"> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td width="100" valign="top" bgcolor="#dddddd" height="100%"> |
|
<table width="100" border="0" cellpadding="0" cellspacing="0" height="100%"> |
|
<tr> |
|
<td valign="top" height="100%"> |
|
END_OF_BLOCK |
|
&display_nav_box($r,$command); |
|
$r->print('</td></tr></table></td>'); |
|
$r->print('<td width="100%" bgcolor="#ffffff"><table width="100%" border="0" cellpadding="5" cellspacing="0"><tr><td width="100%">'); |
|
|
|
if ($command eq 'config') { |
if ($command eq 'config') { |
&display_config_box($r); |
&display_config_box($r,$picker); |
} else { |
} else { |
&display_actions_box($r); |
&display_actions_box($r,$picker); |
} |
} |
$r->print(<<END_OF_BLOCK); |
$r->print(<<END_OF_BLOCK); |
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
</td> |
</tr> |
</tr> |
</table><br /> |
</table><br /> |
Line 138 END_OF_BLOCK
|
Line 128 END_OF_BLOCK
|
END_OF_BLOCK |
END_OF_BLOCK |
} |
} |
|
|
#------------------------------ |
|
# display_nav_box |
|
# |
|
# Display the navigation box |
|
#------------------------------ |
|
|
|
sub display_nav_box { |
|
my ($r,$command) = @_; |
|
$r->print('<table width="100" border="0" cellpadding="3" cellspacing="0">'."\n"); |
|
if ($command eq "info") { |
|
$r->print('<tr><td bgcolor="#ffffff">'); |
|
$r->print('<small><b>Action Items</b></small><br />'); |
|
$r->print('</td></tr>'); |
|
} else { |
|
$r->print('<tr><td>'); |
|
$r->print('<small><a href="/adm/whatsnew?command=info">Current Action Items</a></small><br />'); |
|
$r->print('</td></tr>'); |
|
} |
|
$r->print('<tr><td> </td></tr>'); |
|
if ($command eq "config") { |
|
$r->print('<tr><td bgcolor="#ffffff">'); |
|
$r->print('<small><b>Display options</b></small><br />'); |
|
$r->print('</td></tr>'); |
|
} else { |
|
$r->print('<tr><td>'); |
|
$r->print('<small><a href="/adm/whatsnew?command=config">Display options</a></small><br />'); |
|
$r->print('</td></tr>'); |
|
} |
|
$r->print('</table>'); |
|
} |
|
|
|
#------------------------------- |
#------------------------------- |
# display_header |
# display_header |
# |
# |
Line 196 ENDHEAD
|
Line 155 ENDHEAD
|
#------------------------------- |
#------------------------------- |
|
|
sub display_actions_box() { |
sub display_actions_box() { |
my $r = shift; |
my ($r,$picker) = @_; |
|
|
my $rowColor1 = "#ffffff"; |
my $rowColor1 = "#ffffff"; |
my $rowColor2 = "#eeeeee"; |
my $rowColor2 = "#eeeeee"; |
Line 205 sub display_actions_box() {
|
Line 164 sub display_actions_box() {
|
my %unread = (); |
my %unread = (); |
my %ungraded = (); |
my %ungraded = (); |
my %bombed = (); |
my %bombed = (); |
|
my %triggered = (); |
my @newmsgs = (); |
my @newmsgs = (); |
my @critmsgs = (); |
my @critmsgs = (); |
my @newdiscussions = (); |
my @newdiscussions = (); |
my @tograde = (); |
my @tograde = (); |
my @bombs = (); |
my @bombs = (); |
|
my @warnings = (); |
|
|
my $domain=&Apache::loncommon::determinedomain(); |
my $domain=&Apache::loncommon::determinedomain(); |
my $function; |
my $function; |
if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { |
if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { |
$function='coordinator'; |
$function='coordinator'; |
} |
} |
if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) { |
if ($env{'request.role'}=~/^(su|dc|ad|li)/) { |
$function='admin'; |
$function='admin'; |
} |
} |
|
|
my $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain); |
my $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain); |
my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); |
my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); |
|
|
&getitems(\%unread,\%ungraded,\%bombed,\@newdiscussions,\@tograde,\@bombs); |
&getitems(\%unread,\%ungraded,\%bombed,\%triggered,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2); |
my ($msgcount,$critmsgcount) = &getmail(\@newmsgs,\@critmsgs); |
my ($msgcount,$critmsgcount) = &getmail(\@newmsgs,\@critmsgs); |
|
|
unless ($ENV{'request.course.id'}) { |
unless ($env{'request.course.id'}) { |
$r->print('<br /><b><center>You are accessing an invalid course</center></b><br /><br />'); |
$r->print('<br /><b><center>You are accessing an invalid course</center></b><br /><br />'); |
return; |
return; |
} |
} |
|
|
$r->print('<b>Course Action Items</b><br /><hr width="100%" /><table border="0" width="100%" cellpadding="2" cellspacing="4" bgcolor="#ffffff"><tr><td align="left" valign="top" width="45%">'); |
$r->print('<b>'.$picker.'</b><br /><hr width="100%" /><table border="0" width="100%" cellpadding="2" cellspacing="4"><tr><td align="left" valign="top" width="45%">'); |
|
|
|
## UNGRADED ITEMS ## |
|
$r->print(<<END); |
|
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
|
<tr><td> |
|
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td bgcolor="$tabbg"><b>Problems requiring handgrading</b></td></tr> |
|
<tr> |
|
<td bgcolor="#ffffff"> |
|
<table cellpadding="2" cellspacing="0" border="0" width="100%"> |
|
END |
|
|
|
if (@tograde > 0) { |
|
$r->print('<tr bgcolor="#cccccc"><td><b><small>Problem Name</small></b></td><td align="right"><b><small>Number ungraded</small></b></td></tr>'); |
|
my $rowNum = 0; |
|
foreach my $res (@tograde) { |
|
if ($rowNum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
my ($map,$id,$url)=&Apache::lonnet::decode_symb($res); |
|
my $linkurl=&Apache::lonnet::clutter($url); |
|
$linkurl .= '?symb='.&Apache::lonnet::escape($res); |
|
|
|
$r->print('<tr bgcolor="'.$rowColor.'"><td><a href="'.$linkurl.'"><small>'.$ungraded{$res}{title}.'</small></a></td><td align="right"><small>'.$ungraded{$res}{count}.'</small></td></tr>'); |
|
$rowNum ++; |
|
} |
|
} else { |
|
$r->print('<tr><td bgcolor="#ffffff"><br><center><i><b><small> No problems require handgrading </small><br><br></b></i></td></tr>'); |
|
} |
|
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
|
|
## BOMBS ## |
|
$r->print(<<"END"); |
|
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td> |
|
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td bgcolor="$tabbg"><b>Problems with errors</b></td> |
|
</tr> |
|
<tr> |
|
<td bgcolor="#ffffff"> |
|
<table width="100%" cellspacing="0" cellpadding="0" border="0"> |
|
END |
|
my $bombnum = 0; |
|
if (@bombs > 0) { |
|
# @bombs = sort { &cmp_title($a,$b) } @bombs; |
|
foreach my $bomb (@bombs) { |
|
if ($bombnum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
$r->print('<tr bgcolor="'.$rowColor.'"><td>'.$bombed{$bomb}{errorlink}.'</td></tr>'); |
|
$bombnum ++; |
|
} |
|
} else { |
|
$r->print('<tr><td bgcolor="#ffffff"><br /><center><b><i><small>No problems with errors</small></i></b></center><br /></td></tr>'); |
|
} |
|
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
|
|
# DEGDIFF AND AV. TRIES TRIGGERS |
|
$r->print(<<"END"); |
|
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td> |
|
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td bgcolor="$tabbg"><b>Problems with average attempts > 0 or degree of difficulty > 0</b></td> |
|
</tr> |
|
<tr> |
|
<td bgcolor="#ffffff"> |
|
<table width="100%" cellspacing="0" cellpadding="0" border="0"> |
|
END |
|
my $warningnum = 0; |
|
if (@warnings > 0) { |
|
# @warnings = sort { &cmp_title($a,$b) } @warnings; |
|
$r->print('<tr bgcolor="#cccccc"><td><b><small>Resource</small></b></td><td align="right"><b><small>Part</small></b><td align="right"><b><small>Num. students</small></b></td><td align="right"><b><small>Av. Attempts</small></b></td><td align="right"><b><small>Deg. Diff</small></b></td></tr>'); |
|
foreach my $res (@warnings) { |
|
if ($warningnum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
my ($map,$id,$url)=&Apache::lonnet::decode_symb($res); |
|
my $linkurl=&Apache::lonnet::clutter($url); |
|
my $rowspan; |
|
if ($triggered{$res}{numparts} > 1) { |
|
$rowspan = 'rowspan="'.$triggered{$res}{numparts}.'"'; |
|
} |
|
$linkurl .= '?symb='.&Apache::lonnet::escape($res); |
|
$r->print('<tr bgcolor="'.$rowColor.'"><td '.$rowspan.'><a href="'.$linkurl.'"><small>'.$triggered{$res}{title}.'</small></a></td>'.$triggered{$res}{text}); |
|
$warningnum ++; |
|
} |
|
} else { |
|
$r->print('<tr><td bgcolor="#ffffff"><br /><center><b><i><small>No problems with av. attempts or degree of difficulty above thresholds</small></i></b></center><br /></td></tr>'); |
|
} |
|
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
|
|
$r->print('</td><td width="5%"> </td><td align="left" valign="top" width-"50%">'); |
|
|
## UNREAD COURSE DISCUSSION POSTS ## |
## UNREAD COURSE DISCUSSION POSTS ## |
$r->print(<<"END"); |
$r->print(<<"END"); |
Line 239 sub display_actions_box() {
|
Line 303 sub display_actions_box() {
|
<tr><td> |
<tr><td> |
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
<tr> |
<tr> |
<td bgcolor="$tabbg"><b>Unread course discussion posts:</b></td> |
<td bgcolor="$tabbg"><b>Unread course discussion posts</b></td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td bgcolor="#ffffff"> |
<td bgcolor="#ffffff"> |
<table cellpadding="2" cellspacing="0" border="0" width="100%"> |
<table cellpadding="2" cellspacing="0" border="0" width="100%"> |
END |
END |
|
|
if (@newdiscussions > 0) { |
if (@newdiscussions > 0) { |
|
$r->print('<tr bgcolor="#cccccc"><td><b><small>Location</small></b></td><td><b><small>Type</small></b><td align="right"><b><small>Number of new posts</small></b></td></tr>'); |
# @newdiscussions = sort { &cmp_title($a,$b) } @newdiscussions; |
# @newdiscussions = sort { &cmp_title($a,$b) } @newdiscussions; |
my $rowNum = 0; |
my $rowNum = 0; |
foreach my $ressymb (@newdiscussions) { |
foreach my $ressymb (@newdiscussions) { |
my $forum_title = $unread{$ressymb}{'title'}; |
my $forum_title = $unread{$ressymb}{'title'}; |
my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb); |
my $type = 'Resource'; |
|
my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb); |
|
if ($feedurl =~ /bulletinboard/) { |
|
$type = 'Bulletin Board'; |
|
} |
my $unreadnum = keys(%{$unread{$ressymb}}); |
my $unreadnum = keys(%{$unread{$ressymb}}); |
$unreadnum = $unreadnum - 2; |
$unreadnum = $unreadnum - 2; |
if ($unreadnum > 0) { |
if ($unreadnum > 0) { |
Line 260 END
|
Line 329 END
|
} else { |
} else { |
$rowColor = $rowColor2; |
$rowColor = $rowColor2; |
} |
} |
$r->print('<tr><td bgcolor="'.$rowColor.'"><small><a href="'.$feedurl.'?symb='.$unread{$ressymb}{symb}.'">'.$forum_title.':</a> </td><td bgcolor="'.$rowColor.'" align="right">'.$unreadnum.' </td></tr>'); |
$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 ++; |
$rowNum ++; |
} |
} |
} |
} |
Line 269 END
|
Line 338 END
|
} |
} |
$r->print('</table></td></tr></table></td></tr></table><br />'); |
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
|
## UNGRADED ITEMS ## |
|
$r->print(<<END); |
|
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
|
<tr><td> |
|
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td bgcolor="$tabbg"><b>Problems requiring handgrading:</b></td></tr> |
|
<tr> |
|
<td bgcolor="#ffffff"> |
|
<table cellpadding="2" cellspacing="0" border="0" width="100%"> |
|
END |
|
|
|
if (@tograde > 0) { |
|
$r->print('<tr><th bgcolor="#cccccc">Problem Name</th><th>Number ungraded</th></tr>'); |
|
my $rowNum = 0; |
|
foreach my $res (@tograde) { |
|
if ($rowNum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
|
|
$r->print('<tr bgcolor="'.$rowColor.'"><td>'.$ungraded{$res}{title}.'</td><td>'.$ungraded{$res}{count}.'</td></tr>'); |
|
$rowNum ++; |
|
} |
|
} else { |
|
$r->print('<tr><td bgcolor="#ffffff"><br><center><i><b><small> No problems require handgrading </small><br><br></b></i></td></tr>'); |
|
} |
|
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
$r->print('</td><td width="5%"> </td><td align="left" valign="top" width-"50%">'); |
|
|
|
## MESSAGES ## |
## MESSAGES ## |
$r->print(<<END); |
$r->print(<<END); |
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
Line 314 END
|
Line 352 END
|
<table width="100%" cellspacing="0" cellpadding="0" border="0"> |
<table width="100%" cellspacing="0" cellpadding="0" border="0"> |
END |
END |
if ($msgcount > 0) { |
if ($msgcount > 0) { |
|
$r->print('<tr bgcolor="#cccccc"><td><b><small>'.&mt('Number').'</small></b></td><td><b><small>'.&mt('Subject').'</small></b></td><td><b><small>'.&mt('Sender').'</small></b></td><td><b><small>'.&mt('Date/Time').'</small></b></td></tr>'); |
my $rowNum = 0; |
my $rowNum = 0; |
my $mailcount = 1; |
my $mailcount = 1; |
foreach my $msg (@newmsgs) { |
foreach my $msg (@newmsgs) { |
Line 322 END
|
Line 361 END
|
} else { |
} else { |
$rowColor = $rowColor2; |
$rowColor = $rowColor2; |
} |
} |
$r->print('<tr><td bgcolor="'.$rowColor.'" valign="top"><small>'.$mailcount.'. <small></td><td valign="top"><small><a href="/adm/mail?">'.$msg->{'shortsub'}.'</a> </small></td><td valign="top"><small> '.$msg->{'from'}.'@'.$msg->{'fromdom'}.' </small></td><td valign="top"><small>'.$msg->{'sendtime'}.'</small></td></tr>'); |
$r->print('<tr bgcolor="'.$rowColor.'"><td valign="top"><small>'.$mailcount.'. <small></td><td valign="top"><small><a href="/adm/mail?">'.$msg->{'shortsub'}.'</a> </small></td><td valign="top"><small> '.$msg->{'from'}.'@'.$msg->{'fromdom'}.' </small></td><td valign="top"><small>'.$msg->{'sendtime'}.'</small></td></tr>'); |
$rowNum ++; |
$rowNum ++; |
$mailcount ++; |
$mailcount ++; |
} |
} |
Line 345 END
|
Line 384 END
|
END |
END |
|
|
if ($critmsgcount > 0) { |
if ($critmsgcount > 0) { |
|
$r->print('<tr bgcolor="#cccccc"><td><b><small>Number</small></b></td><td><b><small>Subject</small></b></td><td><b><small>Sender</small></b></td><td><b><small>Date/Time</small></b></td></tr>'); |
my $rowNum = 0; |
my $rowNum = 0; |
my $mailcount = 1; |
my $mailcount = 1; |
foreach my $msg (@critmsgs) { |
foreach my $msg (@critmsgs) { |
Line 353 END
|
Line 393 END
|
} else { |
} else { |
$rowColor = $rowColor2; |
$rowColor = $rowColor2; |
} |
} |
$r->print('<tr><td bgcolor="'.$rowColor.'" valign="top"><small>'.$mailcount.'. <small></td><td valign="top"><small><a href="/adm/mail?">'.$msg->{'shortsub'}.'</a> </small></td><td valign="top"><small> '.$msg->{'from'}.'@'.$msg->{'fromdom'}.' </small></td><td valign="top"><small>'.$msg->{'sendtime'}.'</small></td></tr>'); |
$r->print('<tr bgcolor="'.$rowColor.'"><td valign="top"><small>'.$mailcount.'. <small></td><td valign="top"><small><a href="/adm/mail?">'.$msg->{'shortsub'}.'</a> </small></td><td valign="top"><small> '.$msg->{'from'}.'@'.$msg->{'fromdom'}.' </small></td><td valign="top"><small>'.$msg->{'sendtime'}.'</small></td></tr>'); |
$rowNum ++; |
$rowNum ++; |
$mailcount ++; |
$mailcount ++; |
} |
} |
Line 363 END
|
Line 403 END
|
|
|
$r->print('</table></td></tr></table></td></tr></table><br />'); |
$r->print('</table></td></tr></table></td></tr></table><br />'); |
|
|
## BOMBS ## |
|
$r->print(<<END); |
|
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td> |
|
<table border="0" cellpadding="1" cellspacing="1" bgcolor="#000000" width="100%"> |
|
<tr> |
|
<td bgcolor="$tabbg"><b>Problems with errors</b></td> |
|
</tr> |
|
<tr> |
|
<td bgcolor="#ffffff"> |
|
<table width="100%" cellspacing="0" cellpadding="0" border="0"> |
|
END |
|
my $bombnum = 0; |
|
if (@bombs > 0) { |
|
# @bombs = sort { &cmp_title($a,$b) } @bombs; |
|
foreach my $bomb (@bombs) { |
|
if ($bombnum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
$r->print('<tr bgcolor="'.$rowColor.'"><td>'.$bombed{$bomb}{errorlink}.'</td></tr>'); |
|
$bombnum ++; |
|
} |
|
} else { |
|
$r->print('<tr><td bgcolor="#ffffff"><br /><center><b><i><small>No problems with errors</small></i></b></center><br /></td></tr>'); |
|
} |
|
$r->print('</table></td></tr></td></tr></table>'); |
|
$r->print(' |
$r->print(' |
</table> |
</table> |
</td> |
</td> |
Line 400 END
|
Line 411 END
|
$r->print('</td></tr></table>'); |
$r->print('</td></tr></table>'); |
} |
} |
|
|
|
#------------------------------- |
|
# display_config_box |
|
# |
|
# Display the action items |
|
# |
|
#------------------------------- |
|
|
|
sub display_config_box() { |
|
my ($r,$picker) = @_; |
|
$r->print('<b>'.$picker.'</b><br /><hr width="100%" /><table border="0" width="100%" cellpadding="2" cellspacing="4"><tr><td align="left" valign="top" width="45%">'); |
|
} |
|
|
sub getitems { |
sub getitems { |
my ($unread,$ungraded,$bombed,$newdiscussions,$tograde,$bombs) = @_; |
my ($unread,$ungraded,$bombed,$triggered,$newdiscussions,$tograde,$bombs,$warnings,$rowColor1,$rowColor2) = @_; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my @allres=$navmap->retrieveResources(); |
my @allres=$navmap->retrieveResources(); |
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
my %lastread = &Apache::lonnet::dump('nohist_'.$ENV{'request.course.id'}.'_discuss',$ENV{'user.domain'},$ENV{'user.name'},'lastread'); |
my %lastread = &Apache::lonnet::dump('nohist_'.$env{'request.course.id'}.'_discuss',$env{'user.domain'},$env{'user.name'},'lastread'); |
my %lastreadtime = (); |
my %lastreadtime = (); |
my @discussions = (); |
my @discussions = (); |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
|
|
|
my %resourcetracker = &Apache::lonnet::dump('nohist_resourcetracker', |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
|
$env{'course.'.$env{'request.course.id'}.'.num'}); |
|
|
|
my $diffcheck = 0; |
|
my $triescheck = 0; |
|
my $warningnum = 0; |
foreach my $key (keys(%lastread)) { |
foreach my $key (keys(%lastread)) { |
my $newkey = $key; |
my $newkey = $key; |
$newkey =~ s/_lastread$//; |
$newkey =~ s/_lastread$//; |
Line 423 sub getitems {
|
Line 453 sub getitems {
|
my $symb = $resource->symb(); |
my $symb = $resource->symb(); |
%{$$bombed{$symb}} = (); |
%{$$bombed{$symb}} = (); |
%{$$ungraded{$symb}} = (); |
%{$$ungraded{$symb}} = (); |
|
%{$$triggered{$symb}} = (); |
|
$$triggered{$symb}{numparts} = 0; |
my $title = $resource->compTitle(); |
my $title = $resource->compTitle(); |
my $ressymb = $symb; |
my $ressymb = $resource->wrap_symb(); |
if ($ressymb =~ m-(___adm/\w+/\w+)/(\d+)/bulletinboard$-) { |
|
$ressymb = &Apache::lonfeedback::wrap_symb('bulletin___'.$2.$1.'/'. |
|
$2.'/bulletinboard'); |
|
} |
|
|
|
# Check for unread discussion postings |
# Check for unread discussion postings |
if (defined($discussiontime{$ressymb})) { |
if (defined($discussiontime{$ressymb})) { |
push(@discussions,$ressymb); |
push(@discussions,$ressymb); |
Line 441 sub getitems {
|
Line 468 sub getitems {
|
if (defined($lastreadtime{$ressymb})) { |
if (defined($lastreadtime{$ressymb})) { |
$prevread = $lastreadtime{$ressymb}; |
$prevread = $lastreadtime{$ressymb}; |
} |
} |
my %contrib = &Apache::lonnet::restore($ressymb,$ENV{'request.course.id'}, |
my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
if ($contrib{'version'}) { |
if ($contrib{'version'}) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) { |
unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) { |
if ($prevread <$contrib{$id.':timestamp'}) { |
if ($prevread <$contrib{$id.':timestamp'}) { |
$$unread{$ressymb}{$unreadcount} = $id.': '.$contrib{$id.':subject'}; |
$$unread{$ressymb}{$unreadcount} = $id.': '.$contrib{$id.':subject'}; |
$unreadcount ++; |
$unreadcount ++; |
push(@{$newdiscussions}, $ressymb); |
|
} |
} |
} |
} |
} |
} |
} |
} |
} |
if ($unreadcount) { push(@{$newdiscussions}, $ressymb); } |
|
} |
|
|
# Check for ungraded problems |
# Check for ungraded problems |
if ($resource->is_problem()) { |
if ($resource->is_problem()) { |
Line 466 sub getitems {
|
Line 493 sub getitems {
|
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
my %status=&Apache::grades::student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
my %status=&Apache::grades::student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
my $submitted = 0; |
my $submitted = 0; |
my $graded = 0; |
my $ungraded = 0; |
foreach (keys(%status)) { |
foreach (keys(%status)) { |
$submitted = 1 if ($status{$_} ne 'nothing'); |
$submitted = 1 if ($status{$_} ne 'nothing'); |
$graded = 1 if ($status{$_} !~ /^correct/); |
$ungraded = 1 if ($status{$_} =~ /^ungraded/); |
my ($foo,$partid,$foo1) = split(/\./,$_); |
my ($foo,$partid,$foo1) = split(/\./,$_); |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
$submitted = 0; |
$submitted = 0; |
} |
} |
} |
} |
next if (!$submitted || !$graded); |
next if (!$submitted || !$ungraded); |
$ctr ++; |
$ctr ++; |
} |
} |
if ($ctr) { |
if ($ctr) { |
Line 496 sub getitems {
|
Line 523 sub getitems {
|
$$bombed{$symb}{errorlink} = $errorlink; |
$$bombed{$symb}{errorlink} = $errorlink; |
push(@{$bombs}, $symb); |
push(@{$bombs}, $symb); |
} |
} |
|
# Compile maxtries and degree of difficulty for problem parts |
|
my @parts = @{$resource->parts()}; |
|
my %stats = (); |
|
my $warning = 0; |
|
my $rowColor; |
|
foreach (@parts) { |
|
%{$stats{$_}} = (); |
|
my ($attempts,$users,$corrects,$degdiff,$av_attempts); |
|
if (exists($resourcetracker{$symb.'_'.$_.'_attempts'})) { |
|
$attempts = $resourcetracker{$symb.'_'.$_.'_attempts'}; |
|
} |
|
if (exists($resourcetracker{$symb.'_'.$_.'_users'})) { |
|
$users = $resourcetracker{$symb.'_'.$_.'_users'}; |
|
} |
|
if (exists($resourcetracker{$symb.'_'.$_.'_correct'})) { |
|
$corrects = $resourcetracker{$symb.'_'.$_.'_correct'}; |
|
} |
|
if ($attempts > 0) { |
|
$degdiff = 1 - ($corrects/$attempts); |
|
$degdiff = sprintf("%.2f",$degdiff); |
|
} |
|
if ($users > 0) { |
|
$av_attempts = $attempts/$users; |
|
} |
|
if (($degdiff ne '' && $degdiff >= $diffcheck) || ($av_attempts ne '' && $av_attempts >= $triescheck)) { |
|
$stats{$_}{degdiff} = $degdiff; |
|
$stats{$_}{attempts} = $av_attempts; |
|
$stats{$_}{users} = $users; |
|
$warning = 1; |
|
} |
|
} |
|
if ($warning) { |
|
if ($warningnum %2 == 1) { |
|
$rowColor = $rowColor1; |
|
} else { |
|
$rowColor = $rowColor2; |
|
} |
|
$$triggered{$symb}{title} = $resource->title; |
|
foreach (@parts) { |
|
if (exists($stats{$_}{users})) { |
|
if ($$triggered{$symb}{numparts}) { |
|
$$triggered{$symb}{text} .= '<tr bgcolor="'.$rowColor.'">'."\n"; |
|
} |
|
if (@parts > 1) { |
|
$$triggered{$symb}{text} .= ' |
|
<td align="right"><small>part - '.$_.'<small></td>'; |
|
} else { |
|
$$triggered{$symb}{text} .= ' |
|
<td align="right"><small>single part</small></td>'; |
|
} |
|
$$triggered{$symb}{text} .= ' |
|
<td align="right"><small>'.$stats{$_}{users}.'</small></td> |
|
<td align="right"><small>'.$stats{$_}{attempts}.'</small></td> |
|
<td align="right"><small>'.$stats{$_}{degdiff}.'</small></td> |
|
</tr>'; |
|
$$triggered{$symb}{numparts} ++; |
|
} |
|
} |
|
push(@{$warnings},$symb); |
|
$warningnum ++; |
|
} |
} |
} |
# Compile maxtries and degree of difficulty. |
|
} |
} |
|
|
sub getmail { |
sub getmail { |
Line 505 sub getmail {
|
Line 592 sub getmail {
|
# Check for unread mail in course |
# Check for unread mail in course |
my $msgcount = 0; |
my $msgcount = 0; |
|
|
my @messages = &Apache::lonnet::getkeys('nohist_email'); |
my @messages = sort(&Apache::lonnet::getkeys('nohist_email')); |
foreach my $message (@messages) { |
foreach my $message (@messages) { |
my $msgid=&Apache::lonnet::escape($message); |
my $msgid=&Apache::lonnet::escape($message); |
my ($sendtime,$shortsubj,$fromname,$fromdom,$fromcid,$status)= |
my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)= |
&Apache::lonmsg::unpackmsgid($msgid); |
&Apache::lonmsg::unpackmsgid($msgid); |
if ($fromcid eq $ENV{'request.course.id'}) { |
if (($fromcid) && ($fromcid eq $env{'request.course.id'})) { |
if (defined($sendtime) && $sendtime!~/error/) { |
if (defined($sendtime) && $sendtime!~/error/) { |
my $numsendtime = $sendtime; |
my $numsendtime = $sendtime; |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
if ($status eq 'new') { |
if ($status eq 'new') { |
$$msgcount ++; |
$msgcount ++; |
|
if ($shortsubj eq '') { |
|
$shortsubj = &mt('No subject'); |
|
} |
|
$shortsubj = &Apache::lonnet::unescape($shortsubj); |
push(@{$newmsgs}, { |
push(@{$newmsgs}, { |
msgid => $msgid, |
msgid => $msgid, |
sendtime => $sendtime, |
sendtime => $sendtime, |
shortsub => &Apache::lonnet::unescape($shortsubj), |
shortsub => $shortsubj, |
from => $fromname, |
from => $fromname, |
fromdom => $fromdom |
fromdom => $fromdom |
}); |
}); |
Line 533 sub getmail {
|
Line 624 sub getmail {
|
my $result = ''; |
my $result = ''; |
my $critmsgcount = 0; |
my $critmsgcount = 0; |
foreach my $msgid (sort(keys(%what))) { |
foreach my $msgid (sort(keys(%what))) { |
my ($sendtime,$shortsubj,$fromname,$fromdom,$fromcid,$status)= |
my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)= |
&Apache::lonmsg::unpackmsgid($_); |
&Apache::lonmsg::unpackmsgid($msgid); |
if ($fromcid eq $ENV{'request.course.id'}) { |
if (($fromcid) && ($fromcid eq $env{'request.course.id'})) { |
if (defined($sendtime) && $sendtime!~/error/) { |
if (defined($sendtime) && $sendtime!~/error/) { |
my $numsendtime = $sendtime; |
my $numsendtime = $sendtime; |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
$critmsgcount ++; |
$critmsgcount ++; |
|
if ($shortsubj eq '') { |
|
$shortsubj = &mt('No subject'); |
|
} |
|
$shortsubj = &Apache::lonnet::unescape($shortsubj); |
push(@{$critmsgs}, { |
push(@{$critmsgs}, { |
msgid => $msgid, |
msgid => $msgid, |
sendtime => $sendtime, |
sendtime => $sendtime, |
shortsub => &Apache::lonnet::unescape($shortsubj), |
shortsub => $shortsubj, |
from => $fromname, |
from => $fromname, |
fromdom => $fromdom |
fromdom => $fromdom |
}); |
}); |
Line 560 sub cmp_title {
|
Line 655 sub cmp_title {
|
return $atitle cmp $btitle; |
return $atitle cmp $btitle; |
} |
} |
|
|
|
1; |