--- loncom/interface/lonwhatsnew.pm 2005/04/11 21:51:43 1.10
+++ loncom/interface/lonwhatsnew.pm 2005/04/18 20:35:07 1.11
@@ -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 @@ sub display_main_box {
');
@@ -164,11 +164,13 @@ sub display_actions_box() {
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 @@ sub display_actions_box() {
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 @@ sub display_actions_box() {
$r->print(''.$picker.'
');
-## UNREAD COURSE DISCUSSION POSTS ##
- $r->print(<<"END");
-
-
-
-
- Unread course discussion posts: |
-
-
-
-
-END
-
- if (@newdiscussions > 0) {
- $r->print('Location | Type | Number of new posts | ');
-# @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(''.$forum_title.': | '.$type.' | '.$unreadnum.' | ');
- $rowNum ++;
- }
- }
- } else {
- $r->print(' No unread posts in course discussions
| ');
- }
- $r->print(' | | ');
-
## UNGRADED ITEMS ##
$r->print(<
- Problems requiring handgrading: |
+ Problems requiring handgrading |
@@ -296,8 +257,87 @@ END
}
$r->print(' | | |
');
+# DEGDIFF AND AV. TRIES TRIGGERS
+ $r->print(<<"END");
+
+
+
+
+
+ Problems with average attempts > 0 or degree of difficulty > 0 |
+
+
+
+
+END
+ my $warningnum = 0;
+ if (@warnings > 0) {
+# @warnings = sort { &cmp_title($a,$b) } @warnings;
+ $r->print('Resource | Part | Num. students | Av. Attempts | Deg. Diff | ');
+ 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(''.$triggered{$res}{title}.' | '.$triggered{$res}{text});
+ $warningnum ++;
+ }
+ } else {
+ $r->print(' No problems with av. attempts or degree of difficulty above thresholds
| ');
+ }
+ $r->print(' | |
');
+
$r->print(' | ');
+## UNREAD COURSE DISCUSSION POSTS ##
+ $r->print(<<"END");
+
+
+
+
+ Unread course discussion posts |
+
+
+
+
+END
+
+ if (@newdiscussions > 0) {
+ $r->print('Location | Type | Number of new posts | ');
+# @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(''.$forum_title.' | '.$type.' | '.$unreadnum.' | ');
+ $rowNum ++;
+ }
+ }
+ } else {
+ $r->print(' No unread posts in course discussions
| ');
+ }
+ $r->print(' | | ');
+
## MESSAGES ##
$r->print(<
@@ -371,8 +411,20 @@ END
$r->print(' | ');
}
+#-------------------------------
+# display_config_box
+#
+# Display the action items
+#
+#-------------------------------
+
+sub display_config_box() {
+ my ($r,$picker) = @_;
+ $r->print(''.$picker.'
');
+}
+
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 @@ sub getitems {
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 @@ sub getitems {
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 @@ sub getitems {
$$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} .= ' |
'."\n";
+ }
+ if (@parts > 1) {
+ $$triggered{$symb}{text} .= '
+ part - '.$_.' | ';
+ } else {
+ $$triggered{$symb}{text} .= '
+ single part | ';
+ }
+ $$triggered{$symb}{text} .= '
+ '.$stats{$_}{users}.' |
+ '.$stats{$_}{attempts}.' |
+ '.$stats{$_}{degdiff}.' |
+
';
+ $$triggered{$symb}{numparts} ++;
+ }
+ }
+ push(@{$warnings},$symb);
+ $warningnum ++;
+ }
}
-# Compile maxtries and degree of difficulty.
}
sub getmail {