--- loncom/interface/lonwhatsnew.pm 2006/06/03 21:28:07 1.59 +++ loncom/interface/lonwhatsnew.pm 2006/12/20 23:02:33 1.67 @@ -1,5 +1,5 @@ # -# $Id: lonwhatsnew.pm,v 1.59 2006/06/03 21:28:07 albertel Exp $ +# $Id: lonwhatsnew.pm,v 1.67 2006/12/20 23:02:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -256,7 +256,7 @@ sub display_actions_box { 'Group' => 'members', ); my %lt = &Apache::lonlocal::texthash( - 'yacc' => 'You are accessing an invalid course or group', + 'yacc' => 'You are accessing an invalid course', 'gtfr' => 'Go to first resource', 'hial' => 'Hide all', 'shal' => 'Show all', @@ -286,11 +286,7 @@ sub display_actions_box { $result = &store_courseinit_setting($uname,$udom,$cid,$initpage); } - my %threshold = ( - av_attempts => 2, - degdiff => 0.5, - numstudents => 2, - ); + my %threshold = (); my %pagedesc = &Apache::lonlocal::texthash ( firstres => 'First resource', whatsnew => "What's New? page", @@ -319,7 +315,7 @@ sub display_actions_box { $r->print(&mt('Page set to be displayed after you have selected a role in this '.$lctype). '. '.&mt('Currently: [_1]',$currinit).'.  '. &mt('Change for just this '.$lctype.'',$refpage).' '. - &mt('or for all your courses/groups',$refpage).'

'); + &mt('or for all your courses',$refpage).'

'); if ($command eq 'reset') { $result = &process_reset($cdom,$crs); @@ -468,9 +464,6 @@ sub display_threshold_config { my $rowColor; my @thresholditems = ("av_attempts","degdiff","numstudents"); - foreach my $item (@thresholditems) { - $threshold{$item} = ''; - } my %threshold_titles = &Apache::lonlocal::texthash( av_attempts => 'Average number of attempts', degdiff => 'Degree of difficulty', @@ -687,7 +680,7 @@ sub display_launcher { $critmsgcount,$critmsgs,$interval,$countunread) = @_; if ($$checkallowed{$action}) { - &start_box($r,$tabbg,$show,$headings,$action,$refpage); + &start_box($r,$tabbg,$show,$headings,$action,$refpage,$action); if ($$show{$action}) { if ($action eq 'handgrading') { # UNGRADED ITEMS &display_handgrade($r,$tograde,$rowColor1,$rowColor2, @@ -701,7 +694,7 @@ sub display_launcher { } elsif ($action eq 'abovethreshold') { # DEGDIFF/AV. TRIES TRIGGERS &display_abovethreshold($r,$refpage,$warnings,$triggered, - $res_title); + $res_title); } elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION &display_coursediscussion($r,$newdiscussions,$unread, $countunread,$res_title,$rowColor1,$rowColor2); @@ -739,7 +732,6 @@ sub getitems { $cdom,$crs); } - my $warningnum = 0; foreach my $resource (@allres) { my $result = ''; my $applies = 0; @@ -748,6 +740,10 @@ sub getitems { %{$$ungraded{$symb}} = (); %{$$triggered{$symb}} = (); $$triggered{$symb}{numparts} = 0; + if ($resource->encrypted()) { + $$triggered{$symb}{'enclink'} = $resource->link(); + $$triggered{$symb}{'encsymb'} = $resource->shown_symb(); + } my $title = $resource->compTitle(); $$res_title{$symb} = $title; my $ressymb = $resource->wrap_symb(); @@ -773,9 +769,8 @@ sub getitems { # Maxtries and degree of difficulty for problem parts, unless handgradeable if ($$show{'abovethreshold'}) { - $warningnum = &check_thresholds($resource,$symb,\%resourcetracker, - $triggered,$threshold,$warnings, - $warningnum,$rowColor1,$rowColor2); + &check_thresholds($resource,$symb,\%resourcetracker, + $triggered,$threshold,$warnings); } } @@ -790,12 +785,17 @@ sub check_discussions { %{$$unread{$ressymb}} = (); $$unread{$ressymb}{'title'} = $title; $$unread{$ressymb}{'symb'} = $symb; + if ($resource->encrypted()) { + $$unread{$ressymb}{'enclink'} = $resource->link(); + $$unread{$ressymb}{'encsymb'} = $resource->shown_symb(); + } push(@{$newdiscussions}, $ressymb); $$unread{$ressymb}{'lastpost'} = $resource->last_post_time(); if ($countunread eq 'on') { - $$unread{$ressymb}{'unreadcount'} = $resource->unread_discussion(); + $$unread{$ressymb}{'unreadcount'} = + $resource->discussion_info('unread'); } } @@ -816,7 +816,11 @@ sub check_handgraded { if (@ungraded > 0) { $$ungraded{$symb}{count} = scalar(@ungraded); $$ungraded{$symb}{title} = $title; - push(@{$tograde}, $symb); + if ($resource->encrypted()) { + $$ungraded{$symb}{'enclink'} = $resource->link(); + $$ungraded{$symb}{'encsymb'} = $resource->shown_symb(); + } + push(@{$tograde},$symb); } } } @@ -839,8 +843,7 @@ sub check_bombed { } sub check_thresholds { - my ($resource,$symb,$resourcetracker,$triggered,$threshold,$warnings, - $warningnum,$rowColor1,$rowColor2) = @_; + my ($resource,$symb,$resourcetracker,$triggered,$threshold,$warnings) = @_; # Compile maxtries and degree of difficulty for problem parts, unless handgradeable my @parts = @{$resource->parts()}; my %stats; @@ -885,46 +888,42 @@ sub check_thresholds { } } if ($warning) { - if ($warningnum%2 == 1) { - $rowColor = $rowColor1; - } else { - $rowColor = $rowColor2; - } - $$triggered{$symb}{rowColor} = $rowColor; $$triggered{$symb}{title} = $resource->title; + my $partcount = 0; + @{$$triggered{$symb}{text}} = (); foreach my $part (@parts) { if (exists($stats{$part}{users})) { my $resetname = 'reset_'.&escape($symb."\0".$part); my $resettitle = 'title_'.&escape($symb."\0".$part); - if ($$triggered{$symb}{numparts}) { - $$triggered{$symb}{text} .= ''."\n"; - } if (@parts > 1) { - $$triggered{$symb}{text} .= ' - part - '.$part.''; + $$triggered{$symb}{text}[$partcount] = ' + part - '.$part.''; } else { - $$triggered{$symb}{text} .= ' - single part'; + $$triggered{$symb}{text}[$partcount] = ' + single part'; } - $$triggered{$symb}{text} .= ' - '.$stats{$part}{users}.' - '.$stats{$part}{attempts}.' - '.$stats{$part}{degdiff}.' - '.$lastreset{$part}.' - - '; - $$triggered{$symb}{numparts} ++; + $$triggered{$symb}{text}[$partcount] .= ' + '.$stats{$part}{users}.' + '.$stats{$part}{attempts}.' + '.$stats{$part}{degdiff}.' + '.$lastreset{$part}.' + '; + $partcount ++; } + $$triggered{$symb}{numparts} = $partcount; } push(@{$warnings},$symb); - $warningnum ++; } - return $warningnum; } sub get_curr_thresholds { my ($threshold,$uname,$udom,$cid,$cdom,$crs) = @_; + # set default values + %$threshold = (av_attempts => 2, + degdiff => 0.5, + numstudents => 2 + ); my %thresholdsettings = &Apache::lonnet::dump('nohist_whatsnew',$udom, $uname,$cid.':threshold'); my $thresholdcount = 0; @@ -1016,7 +1015,7 @@ sub process_update { next if ($_!~/^form\.(.+)\_setparmval$/); my $name = $1; my $value = $env{'form.'.$name.'_value'}; - if ($name && defined($value)) { + if ($name && defined($value) && ($value ne '')) { my $put_result = &Apache::lonnet::put('nohist_whatsnew', {$name=>$value},$udom,$uname); @@ -1159,7 +1158,10 @@ sub display_handgrade { my ($map,$id,$url)=&Apache::lonnet::decode_symb($res); my $linkurl=&Apache::lonnet::clutter($url); $linkurl .= '?symb='.&escape($res); - + if ($$ungraded{$res}{'enclink'}) { + $linkurl = + $$ungraded{$res}{'enclink'}.'?symb='.$$ungraded{$res}{'encsymb'}; + } $r->print(''.$$ungraded{$res}{title}.''.$$ungraded{$res}{count}.''); $rowNum ++; } @@ -1214,8 +1216,14 @@ sub display_abovethreshold { ' '."\n". ' '. "\n"); - $r->print(''.$lt{'reso'}.''.$lt{'part'}.''.$lt{'nust'}.''.$lt{'avat'}.''.$lt{'dedi'}.''.$lt{'lare'}.''.$lt{'reco'}.''); + $r->print(''. + ''.$lt{'reso'}.''. + ''.$lt{'part'}.''.$lt{'nust'}.''. + ''.$lt{'avat'}.''.$lt{'dedi'}.''. + ''.$lt{'lare'}.''.$lt{'reco'}.''); + my $row; foreach my $res (@{$warnings}) { + $row++; my ($map,$id,$url)=&Apache::lonnet::decode_symb($res); my $linkurl=&Apache::lonnet::clutter($url); my $rowspan; @@ -1223,11 +1231,30 @@ sub display_abovethreshold { $rowspan = 'rowspan="'.$$triggered{$res}{numparts}.'"'; } $linkurl .= '?symb='.&escape($res); - $r->print(''.$$triggered{$res}{title}.''.$$triggered{$res}{text}); + if ($$triggered{$res}{'enclink'}) { + $linkurl = + $$triggered{$res}{'enclink'}.'?symb='.$$triggered{$res}{'encsymb'}; + } + my $css_class = $row%2?'LC_odd_row':''; + $r->print(''. + ''. + $$triggered{$res}{title}.''); + if (ref($$triggered{$res}{text}) eq 'ARRAY') { + $r->print($$triggered{$res}{text}[0]); + } + $r->print(''); + if (ref($$triggered{$res}{text}) eq 'ARRAY') { + if (@{$$triggered{$res}{text}} > 1) { + for (my $i=1; $i<@{$$triggered{$res}{text}}; $i++) { + $r->print(''. + $$triggered{$res}{text}[$i].''); + } + } + } } - $r->print('
'); + $r->print('
'); } else { - $r->print('
'.$lt{'nopr'}.'

'); + $r->print(''.$lt{'nopr'}.''); } } @@ -1298,9 +1325,13 @@ sub display_coursediscussion { my $forum_title = $$unread{$ressymb}{'title'}; my $type = 'Resource'; my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb); + my $disclink = $feedurl.'?symb='.$$unread{$ressymb}{symb}; if ($feedurl =~ /bulletinboard/) { $type = 'Bulletin Board'; } + if ($$unread{$ressymb}{'enclink'}) { + $disclink = $$unread{$ressymb}{'enclink'}.'?symb='.$$unread{$ressymb}{'encsymb'}; + } if ($rowNum %2 == 1) { $rowColor = $rowColor1; } else { @@ -1308,7 +1339,7 @@ sub display_coursediscussion { } my $lastpost = &Apache::lonnavmaps::timeToHumanString( $$unread{$ressymb}{'lastpost'}); - $r->print(''.$forum_title.' '.$type.' '); + $r->print(''.$forum_title.' '.$type.' '); if ($countunread eq 'on') { my $unreadnum = $$unread{$ressymb}{'unreadcount'}; $r->print(''.$lastpost.''. @@ -1516,7 +1547,7 @@ sub start_box { chin => 'Change interval?', chop => 'Change options?', ); - my $showhide; + my ($showhide,$class); if ($$show{$caller}) { $showhide = 'Hide'; @@ -1548,6 +1579,7 @@ sub start_box { '.$lt{'chth'}.' '); } + $class='class="LC_whatsnew"'; } elsif (($caller eq 'versionchanges') && ($$show{$caller})) { if ($$show{$caller}) { $r->print(' @@ -1563,10 +1595,10 @@ sub start_box { '); } } - $r->print(' + $r->print(' - +
'); return; }