--- 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(''); -# @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(''); - $rowNum ++; - } - } - } else { - $r->print(''); - } - $r->print('
LocationTypeNumber of new posts
'.$forum_title.': '.$type.''.$unreadnum.' 

 No unread posts in course discussions


'); - ## 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(''); + 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}{text}); + $warningnum ++; + } + } else { + $r->print(''); + } + $r->print('
ResourcePartNum. studentsAv. AttemptsDeg. Diff
'.$triggered{$res}{title}.'

No problems with av. attempts or degree of difficulty above thresholds


'); + $r->print(' '); +## UNREAD COURSE DISCUSSION POSTS ## + $r->print(<<"END"); + +
+ + + + + +
Unread course discussion posts
+ +END + + if (@newdiscussions > 0) { + $r->print(''); +# @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(''); + $rowNum ++; + } + } + } else { + $r->print(''); + } + $r->print('
LocationTypeNumber of new posts
'.$forum_title.' '.$type.''.$unreadnum.' 

 No unread posts in course discussions


'); + ## 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.'

'."\n"; + } + if (@parts > 1) { + $$triggered{$symb}{text} .= ' + '; + } else { + $$triggered{$symb}{text} .= ' + '; + } + $$triggered{$symb}{text} .= ' + + + + '; + $$triggered{$symb}{numparts} ++; + } + } + push(@{$warnings},$symb); + $warningnum ++; + } } -# Compile maxtries and degree of difficulty. } sub getmail {
'); +} + 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} .= '
part - '.$_.'single part'.$stats{$_}{users}.''.$stats{$_}{attempts}.''.$stats{$_}{degdiff}.'