--- loncom/interface/lonwhatsnew.pm 2006/03/15 19:41:26 1.52 +++ loncom/interface/lonwhatsnew.pm 2006/12/03 05:45:13 1.66 @@ -1,5 +1,5 @@ # -# $Id: lonwhatsnew.pm,v 1.52 2006/03/15 19:41:26 albertel Exp $ +# $Id: lonwhatsnew.pm,v 1.66 2006/12/03 05:45:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,6 +39,8 @@ use Apache::lonuserstate; use Apache::Constants qw(:common :http); use Time::Local; use GDBM_File; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; #---------------------------- # handler @@ -100,32 +102,32 @@ sub handler { ({href=>'/adm/whatsnew?command=chgthreshold&refpage='.$refpage, text=>"Change thresholds"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,"What's New?",#'Course_Action_Items_Thresholds' + ("What's New?",#'Course_Action_Items_Thresholds' )); } elsif (($command eq 'chginterval') && $checkallowed{'versionchanges'} ) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/whatsnew?command=chginterval&refpage='.$refpage, text=>"Change interval"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,"What's New?",#'Course_Action_Items_Intervals' + ("What's New?",#'Course_Action_Items_Intervals' )); } elsif (($command eq 'chgdisc') && $checkallowed{'coursediscussion'}) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/whatsnew?command=chgdisc&refpage='.$refpage, text=>"Change discussion display"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,"What's New?",#'Course_Action_Items_Intervals' + ("What's New?",#'Course_Action_Items_Intervals' )); } elsif ($command eq 'courseinit') { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/whatsnew?command=courseinit&refpage='.$refpage, text=>"Course initialization preference"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,"What's New?",#'Course_Action_Items_Initialization' + ("What's New?",#'Course_Action_Items_Initialization' )); } else { $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,"What's New?",#'Course_Action_Items_Display' + ("What's New?",#'Course_Action_Items_Display' )); } &display_main_box($r,$command,$refpage,\%checkallowed); @@ -143,6 +145,7 @@ sub display_main_box { my $domain=&Apache::loncommon::determinedomain(); my $function = &Apache::loncommon::get_users_function(); my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); + my $lctype = lc(&Apache::loncommon::course_type()); $r->print('
');
my %threshold_titles = &Apache::lonlocal::texthash (
@@ -152,17 +155,17 @@ sub display_main_box {
);
my %interval_titles = &Apache::lonlocal::texthash (
- -1 => 'since start of course',
+ -1 => "since start of $lctype",
2592000 => 'since last month',
604800 => 'since last week',
86400 => 'since yesterday',
);
my %initpage = &Apache::lonlocal::texthash (
- firstres => 'first resource in the course',
+ firstres => "first resource in the $lctype",
whatsnew => "what's new? page",
userpref => 'your general user preferences',
- coursespecific => 'specific setting for this course',
+ coursespecific => "specific setting for this $lctype",
);
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
@@ -225,7 +228,9 @@ END
';
}
- return &Apache::loncommon::start_page('Course Action Items',$scripttag);
+ my $course_type=&Apache::loncommon::course_type();
+ return &Apache::loncommon::start_page($course_type.' Action Items',
+ $scripttag);
}
#-------------------------------
@@ -244,11 +249,15 @@ sub display_actions_box {
my $udom = $env{'user.domain'};
my $uname = $env{'user.name'};
my $cid = $env{'request.course.id'};
-
+ my $crstype = &Apache::loncommon::course_type();
+ my $lctype = lc($crstype);
+ my %stulabel = (
+ 'Course' => 'students',
+ 'Group' => 'members',
+ );
my %lt = &Apache::lonlocal::texthash(
- 'yacc' => 'You are accessing an invalid course.',
+ 'yacc' => 'You are accessing an invalid course',
'gtfr' => 'Go to first resource',
- 'pgse' => 'Page set to be displayed after you have selected a role in this course?',
'hial' => 'Hide all',
'shal' => 'Show all',
);
@@ -277,16 +286,12 @@ 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",
userpref => 'user preference',
- coursespecific => 'course only',
+ coursespecific => $lctype.' only',
default => 'default',
);
@@ -307,13 +312,11 @@ sub display_actions_box {
' '); } } - $r->print($lt{'pgse'}.' '.&mt('Currently: [_1]',''.$currinit.''). - ' '); - + $r->print(&mt('Page set to be displayed after you have selected a role in this '.$lctype). + '. '); + if ($command eq 'reset') { $result = &process_reset($cdom,$crs); } elsif ($command eq 'update') { @@ -328,7 +331,7 @@ sub display_actions_box { unless ($store_result eq 'ok') { &Apache::lonnet::logthis('Error storing whatsnew settings: '. - $store_result.' for '.'user '.$uname.':'.$udom.' in course '.$cid); + $store_result.' for '.'user '.$uname.':'.$udom.' in '.$lctype.' '.$cid); $result .= &mt('Unable to store visibility settings due to [_1]', $store_result); } @@ -354,19 +357,22 @@ sub display_actions_box { } my %headings = &Apache::lonlocal::texthash( - coursediscussion => 'Unread course discussion posts', + coursediscussion => 'Unread '.$lctype.' discussion posts', handgrading => 'Problems requiring handgrading', haserrors => 'Problems with errors', - versionchanges => 'Resources in course with version changes '.$interval, - coursenormalmail => 'New course messages', - coursecritmail => 'New critical messages in course', + versionchanges => 'Resources in '.$lctype.' with version changes '.$interval, + coursenormalmail => 'New '.$lctype.' messages', + coursecritmail => 'New critical messages in '.$lctype, ); if ($$checkallowed{'abovethreshold'}) { &get_curr_thresholds(\%threshold,$uname,$udom,$cid,$cdom,$crs); } - $headings{'abovethreshold'} = &mt('Problems with av. attempts').' ≥ '.$threshold{'av_attempts'}.' '.&mt('or deg. difficulty').' ≥ '.$threshold{'degdiff'}.' '.&mt('and total number of students with submissions').' ≥ '.$threshold{'numstudents'}; + $headings{'abovethreshold'} = + &mt('Problems with av. attempts ≥ [_1] or deg. difficulty ≥ [_2] and total number of '.$stulabel{$crstype}.' with submissions ≥ [_3]', + $threshold{'av_attempts'},$threshold{'degdiff'}, + $threshold{'numstudents'}); my @actionorder = ('handgrading','haserrors','abovethreshold','versionchanges','coursediscussion','coursenormalmail','coursecritmail'); @@ -458,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', @@ -524,9 +527,10 @@ sub display_threshold_config { sub display_interval_config { my ($r,$refpage,$interval_titles) = @_; + my $lctype = lc(&Apache::loncommon::course_type()); my $current = &get_current($env{'user.name'},$env{'user.domain'}, $env{'request.course.id'},'interval'); - $r->print(' '.&mt('Choose the time window to use for display of version changes for resources in the course.')); + $r->print(' '.&mt('Choose the time window to use for display of version changes for resources in the '.$lctype.'.')); unless ($current eq '') { $r->print(' '.&mt('Current value is [_1]',''. $$interval_titles{$current}.'.')); @@ -605,13 +609,14 @@ sub courseinit_config { my ($control,$current) = &curr_courseinit(); my @chgstate = ('userpref','coursespecific'); my @chgentry = ('firstres','whatsnew'); + my $lctype = lc(&Apache::loncommon::course_type()); my %lt = &Apache::lonlocal::texthash( - 'chwp' => 'Choose which page will be displayed when you enter this course after selecting a role.', + 'chwp' => "Choose which page will be displayed when you enter this $lctype after selecting a role.", 'cuva' => 'Current value is determined by', 'anis' => 'and is set to display', 'padc' => 'Page display controlled by', - 'chce' => 'Choose course entry', - 'moce' => 'Modify course entry', + 'chce' => 'Choose '.$lctype.' entry', + 'moce' => 'Modify '.$lctype.' entry', ); $r->print(<<"END"); $lt{'chwp'} @@ -621,17 +626,27 @@ $$initpage{$current}. '); @@ -665,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, @@ -679,7 +694,7 @@ sub display_launcher { } elsif ($action eq 'abovethreshold') { # DEGDIFF/AV. TRIES TRIGGERS &display_abovethreshold($r,$refpage,$warnings,$triggered, - $res_title,$rowColor1,$rowColor2); + $res_title); } elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION &display_coursediscussion($r,$newdiscussions,$unread, $countunread,$res_title,$rowColor1,$rowColor2); @@ -717,7 +732,6 @@ sub getitems { $cdom,$crs); } - my $warningnum = 0; foreach my $resource (@allres) { my $result = ''; my $applies = 0; @@ -726,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(); @@ -751,8 +769,8 @@ sub getitems { # Maxtries and degree of difficulty for problem parts, unless handgradeable if ($$show{'abovethreshold'}) { - &check_thresholds($resource,$symb,\%resourcetracker,$triggered, - $threshold,$warnings,$warningnum,$rowColor1,$rowColor2); + &check_thresholds($resource,$symb,\%resourcetracker, + $triggered,$threshold,$warnings); } } @@ -767,6 +785,10 @@ 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(); @@ -793,7 +815,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); } } } @@ -807,7 +833,7 @@ sub check_bombed { my @bombs = split(/,/, $errors); my $errorcount = scalar(@bombs); my $errorlink = ''. + &escape($bombs[0]).'">'. $title.''; $$bombed{$symb}{errorcount} = $errorcount; $$bombed{$symb}{errorlink} = $errorlink; @@ -816,8 +842,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; @@ -862,44 +887,42 @@ sub check_thresholds { } } if ($warning) { - if ($warningnum %2 == 1) { - $rowColor = $rowColor1; - } else { - $rowColor = $rowColor2; - } $$triggered{$symb}{title} = $resource->title; + my $partcount = 0; + @{$$triggered{$symb}{text}} = (); foreach my $part (@parts) { if (exists($stats{$part}{users})) { - my $resetname = 'reset_'.&Apache::lonnet::escape($symb."\0".$part); - my $resettitle = 'title_'.&Apache::lonnet::escape($symb."\0".$part); - if ($$triggered{$symb}{numparts}) { - $$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}.' | -- | '.$stats{$part}{users}.' | +'.$stats{$part}{attempts}.' | +'.$stats{$part}{degdiff}.' | +'.$lastreset{$part}.' | +'; + $partcount ++; } + $$triggered{$symb}{numparts} = $partcount; } push(@{$warnings},$symb); - $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; @@ -958,8 +981,8 @@ sub process_reset { my %titles = (); foreach my $key (keys(%env)) { next if ($key !~ /^form\.reset_(.+)$/); - my $title = &Apache::lonnet::unescape($env{'form.title_'.$1}); - my $reset_item = &Apache::lonnet::unescape($1); + my $title = &unescape($env{'form.title_'.$1}); + my $reset_item = &unescape($1); my %curr_aggregates = &Apache::lonnet::dump('nohist_resourcetracker',$dom,$crs,$reset_item); my %aggregates = (); my ($symb,$part) = split(/\0/,$reset_item); @@ -991,7 +1014,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); @@ -1017,7 +1040,7 @@ sub getnormalmail { my @messages = sort(&Apache::lonnet::getkeys('nohist_email')); foreach my $message (@messages) { - my $msgid=&Apache::lonnet::escape($message); + my $msgid=&escape($message); my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)= &Apache::lonmsg::unpackmsgid($msgid); if (($fromcid) && ($fromcid eq $env{'request.course.id'})) { @@ -1029,7 +1052,6 @@ sub getnormalmail { if ($shortsubj eq '') { $shortsubj = &mt('No subject'); } - $shortsubj = &Apache::lonnet::unescape($shortsubj); push(@{$newmsgs}, { msgid => $msgid, sendtime => $sendtime, @@ -1061,7 +1083,6 @@ sub getcritmail { if ($shortsubj eq '') { $shortsubj = &mt('No subject'); } - $shortsubj = &Apache::lonnet::unescape($shortsubj); push(@{$critmsgs}, { msgid => $msgid, sendtime => $sendtime, @@ -1135,8 +1156,11 @@ sub display_handgrade { } my ($map,$id,$url)=&Apache::lonnet::decode_symb($res); my $linkurl=&Apache::lonnet::clutter($url); - $linkurl .= '?symb='.&Apache::lonnet::escape($res); - + $linkurl .= '?symb='.&escape($res); + if ($$ungraded{$res}{'enclink'}) { + $linkurl = + $$ungraded{$res}{'enclink'}.'?symb='.$$ungraded{$res}{'encsymb'}; + } $r->print(' |
'.$$ungraded{$res}{title}.' | '.$$ungraded{$res}{count}.' |