[LON-CAPA-cvs] cvs: loncom /interface lonwhatsnew.pm
raeburn
lon-capa-cvs@mail.lon-capa.org
Mon, 18 Apr 2005 20:35:07 -0000
This is a MIME encoded message
--raeburn1113856507
Content-Type: text/plain
raeburn Mon Apr 18 16:35:07 2005 EDT
Modified files:
/loncom/interface lonwhatsnew.pm
Log:
Unread course discussion posts moved to top of column 2. Display of problems with anomalous average number of attempts and/or degree of difficulty added. Data extracted from resourcetracker.db for course. Work in progress.
--raeburn1113856507
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20050418163507.txt"
Index: loncom/interface/lonwhatsnew.pm
diff -u loncom/interface/lonwhatsnew.pm:1.10 loncom/interface/lonwhatsnew.pm:1.11
--- loncom/interface/lonwhatsnew.pm:1.10 Mon Apr 11 17:51:43 2005
+++ loncom/interface/lonwhatsnew.pm Mon Apr 18 16:35:07 2005
@@ -1,5 +1,5 @@
#
-# $Id: lonwhatsnew.pm,v 1.10 2005/04/11 21:51:43 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.11 2005/04/18 20:35:07 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -107,7 +107,7 @@
<input type="submit" value="'.&mt('Change page to:').'" />
<select name="command">
<option value="info" '.$selinfo.'">'.&mt('Display Action Items').'</option>
- <option value="" '.$selconfig.'">'.&mt('Configure Settings').'</option>
+ <option value="config" '.$selconfig.'">'.&mt('Configure Settings').'</option>
</select>
</nobr>
</form>');
@@ -164,11 +164,13 @@
my %unread = ();
my %ungraded = ();
my %bombed = ();
+ my %triggered = ();
my @newmsgs = ();
my @critmsgs = ();
my @newdiscussions = ();
my @tograde = ();
my @bombs = ();
+ my @warnings = ();
my $domain=&Apache::loncommon::determinedomain();
my $function;
@@ -182,7 +184,7 @@
my $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$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);
unless ($env{'request.course.id'}) {
@@ -192,54 +194,13 @@
$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%">');
-## UNREAD COURSE DISCUSSION POSTS ##
- $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>Unread course discussion posts:</b></td>
- </tr>
- <tr>
- <td bgcolor="#ffffff">
- <table cellpadding="2" cellspacing="0" border="0" width="100%">
-END
-
- 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;
- my $rowNum = 0;
- foreach my $ressymb (@newdiscussions) {
- my $forum_title = $unread{$ressymb}{'title'};
- my $type = 'Resource';
- my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb);
- if ($feedurl =~ /bulletinboard/) {
- $type = 'Bulletin Board';
- }
- my $unreadnum = keys(%{$unread{$ressymb}});
- $unreadnum = $unreadnum - 2;
- if ($unreadnum > 0) {
- if ($rowNum %2 == 1) {
- $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 ++;
- }
- }
- } else {
- $r->print('<tr><td bgcolor="#ffffff"><br><center> <i><b><small>No unread posts in course discussions</small></b></i><br><br></td></tr>');
- }
- $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>
+ <td bgcolor="$tabbg"><b>Problems requiring handgrading</b></td></tr>
<tr>
<td bgcolor="#ffffff">
<table cellpadding="2" cellspacing="0" border="0" width="100%">
@@ -296,8 +257,87 @@
}
$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 ##
+ $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>Unread course discussion posts</b></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff">
+ <table cellpadding="2" cellspacing="0" border="0" width="100%">
+END
+
+ 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;
+ my $rowNum = 0;
+ foreach my $ressymb (@newdiscussions) {
+ my $forum_title = $unread{$ressymb}{'title'};
+ my $type = 'Resource';
+ my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb);
+ if ($feedurl =~ /bulletinboard/) {
+ $type = 'Bulletin Board';
+ }
+ my $unreadnum = keys(%{$unread{$ressymb}});
+ $unreadnum = $unreadnum - 2;
+ if ($unreadnum > 0) {
+ if ($rowNum %2 == 1) {
+ $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 ++;
+ }
+ }
+ } else {
+ $r->print('<tr><td bgcolor="#ffffff"><br><center> <i><b><small>No unread posts in course discussions</small></b></i><br><br></td></tr>');
+ }
+ $r->print('</table></td></tr></table></td></tr></table><br />');
+
## MESSAGES ##
$r->print(<<END);
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#000000" width="100%">
@@ -371,8 +411,20 @@
$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 {
- 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 @allres=$navmap->retrieveResources();
my %discussiontime = &Apache::lonnet::dump('discussiontimes',
@@ -383,6 +435,13 @@
my @discussions = ();
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)) {
my $newkey = $key;
$newkey =~ s/_lastread$//;
@@ -394,6 +453,8 @@
my $symb = $resource->symb();
%{$$bombed{$symb}} = ();
%{$$ungraded{$symb}} = ();
+ %{$$triggered{$symb}} = ();
+ $$triggered{$symb}{numparts} = 0;
my $title = $resource->compTitle();
my $ressymb = $resource->wrap_symb();
# Check for unread discussion postings
@@ -462,8 +523,68 @@
$$bombed{$symb}{errorlink} = $errorlink;
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 {
--raeburn1113856507--