--- loncom/interface/lonwhatsnew.pm 2005/12/19 21:39:37 1.39 +++ loncom/interface/lonwhatsnew.pm 2006/01/06 22:50:29 1.46 @@ -1,5 +1,5 @@ # -# $Id: lonwhatsnew.pm,v 1.39 2005/12/19 21:39:37 raeburn Exp $ +# $Id: lonwhatsnew.pm,v 1.46 2006/01/06 22:50:29 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -58,26 +58,36 @@ sub handler { my $command = $env{'form.command'}; my $refpage = $env{'form.refpage'}; - &Apache::loncommon::content_type($r,'text/html'); - $r->send_http_header; - my $crsid = $env{'request.course.id'}; - $crsid =~ s/_/\//; - if ((!($env{'request.course.id'})) || - ($env{'request.role'} !~ /\Q$crsid\E$/)) { - # Not in a course, or no role in course - $env{'user.error.msg'}="/adm/whatsnew::0:0:Cannot display what's new screen"; + my %checkallowed = ( coursenormalmail => 1, + coursecritmail => 1, ); + foreach my $perm_check (['whn','whatsnew',1], + ['pch','coursediscussion',1], + ['mgr','handgrading',1], + ['vgr','abovethreshold',1], + ['opa','haserrors',1], + ['mdc','versionchanges',0], + ) { + my ($perm,$key,$check_section) = @{ $perm_check }; + my $scope = $env{'request.course.id'}; + if (!($checkallowed{$key} = &Apache::lonnet::allowed($perm,$scope))) { + $scope .= '/'.$env{'request.course.sec'}; + if ( $check_section ) { + $checkallowed{$key} = &Apache::lonnet::allowed($perm,$scope); + } + if ($checkallowed{$key}) { + $checkallowed{$key.'_section'} = $env{'request.course.sec'}; + } + } + } + + if ( ! $env{'request.course.fn'} || ! $checkallowed{'whatsnew'}) { + # Not in a course, or no whn priv in course + $env{'user.error.msg'}="/adm/whatsnew::whn:0:0:Cannot display what's new page"; return HTTP_NOT_ACCEPTABLE; } - my %checkallowed = ( - coursediscussion => &Apache::lonnet::allowed('pch',$env{'request.course.id'}), - handgrading => &Apache::lonnet::allowed('mgr',$env{'request.course.id'}), - abovethreshold => &Apache::lonnet::allowed('vgr',$env{'request.course.id'}), - haserrors => &Apache::lonnet::allowed('opa',$env{'request.course.id'}), - versionchanges => &Apache::lonnet::allowed('opa',$env{'request.course.id'}), - coursenormalmail => 1, - coursecritmail => 1, - ); + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; $r->print(&display_header($command,\%checkallowed)); @@ -85,33 +95,33 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/whatsnew', text=>"Display Action Items"}); - if (($command eq 'chgthreshold') && (&Apache::lonnet::allowed('vgr',$env{'request.course.id'}))) { + if (($command eq 'chgthreshold') && $checkallowed{'abovethreshold'}) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/whatsnew?command=chgthreshold&refpage='.$refpage, text=>"Change thresholds"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,'Course Action Items','Course_Action_Items_Thresholds')); - } elsif (($command eq 'chginterval') && (&Apache::lonnet::allowed('vgr',$env{'request.course.id'}))) { + (undef,"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,'Course Action Items','Course_Action_Items_Intervals')); - } elsif (($command eq 'chgdisc') && (&Apache::lonnet::allowed('pch',$env{'request.course.id'}))) { + (undef,"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,'Course Action Items','Course_Action_Items_Intervals')); + (undef,"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,'Course Action Items','Course_Action_Items_Initialization')); + (undef,"What's New?",'Course_Action_Items_Initialization')); } else { $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,'Course Action Items','Course_Action_Items_Display')); + (undef,"What's New?",'Course_Action_Items_Display')); } &display_main_box($r,$command,$refpage,\%checkallowed); return OK; @@ -126,7 +136,8 @@ sub handler { sub display_main_box { my ($r,$command,$refpage,$checkallowed) = @_; my $domain=&Apache::loncommon::determinedomain(); - my $tabbg=&Apache::loncommon::designparm('coordinator.tabbg',$domain); + my $function = &Apache::loncommon::get_users_function(); + my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); $r->print('
'); my %threshold_titles = &Apache::lonlocal::texthash ( @@ -151,20 +162,20 @@ sub display_main_box { my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; - if (($command eq 'chgthreshold') && - (&Apache::lonnet::allowed('vgr',$env{'request.course.id'}))) { + if (($command eq 'chgthreshold') + && $checkallowed->{'abovethreshold'}) { &display_threshold_config($r,$refpage,$tabbg,\%threshold_titles, $cdom,$crs); - } elsif (($command eq 'chginterval') && - (&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { + } elsif (($command eq 'chginterval') + && $checkallowed->{'versionchanges'}) { &display_interval_config($r,$refpage,\%interval_titles); - } elsif (($command eq 'chgdisc') && - (&Apache::lonnet::allowed('pch',$env{'request.course.id'}))) { + } elsif (($command eq 'chgdisc') + && $checkallowed->{'coursediscussion'}) { &display_discussion_config($r,$refpage); } elsif ($command eq 'courseinit') { &courseinit_config($r,$refpage,\%initpage); } else { - &display_actions_box($r,$command,$refpage,\%threshold_titles, + &display_actions_box($r,$tabbg,$command,$refpage,\%threshold_titles, \%interval_titles,\%initpage,$cdom,$crs,$checkallowed); } $r->print(< 'First resource', - whatsnew => "What's New page", + whatsnew => "What's New? page", userpref => 'user preference', coursespecific => 'course only', default => 'default', @@ -293,9 +296,6 @@ sub display_actions_box { my ($initcontrol,$initdisp) = &curr_courseinit(); my $currinit = $pagedesc{$initdisp}.' ('.$pagedesc{$initcontrol}.')'; - my $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain); - my $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain); - unless ($cid) { $r->print('
'.$lt{'yacc'}.'


'); return; @@ -374,6 +374,7 @@ sub display_actions_box { my @actionorder = ('handgrading','haserrors','abovethreshold','versionchanges','coursediscussion','coursenormalmail','coursecritmail'); foreach my $key (keys(%{$checkallowed})) { + if ($key =~ /_section$/) { next; } $show{$key} = 0; if ($$checkallowed{$key}) { unless ($display_settings{$cid.':'.$key} eq 'hide') { @@ -405,6 +406,7 @@ sub display_actions_box {   $lt{'shal'}
\n|); foreach my $item (keys(%{$checkallowed})) { + if ($item =~ /_section$/) { next; } if ($$checkallowed{$item}) { $r->print(''."\n"); } @@ -413,12 +415,19 @@ sub display_actions_box { $r->print('

'); if (($caller eq 'abovethreshold') && ($$show{$caller})) { - $r->print(' + if ($$show{$caller}) { + $r->print(' '); + } } elsif (($caller eq 'versionchanges') && ($$show{$caller})) { - $r->print(' + if ($$show{$caller}) { + $r->print(' '); + } } elsif ($caller eq 'coursediscussion') { - $r->print(' + if ($$show{$caller}) { + $r->print(' '); + } } $r->print('
'); my $displayed = 0; - my $totalboxes = keys(%{$checkallowed}); + my $totalboxes = 0; + foreach my $key (keys(%{$checkallowed})) { + if ($key =~ /_section$/) { next; } + if ($key eq 'whatsnew' ) { next; } # whatsnew check creates no box + if ($$checkallowed{$key}) { + $totalboxes ++; + } + } my $halfway = int($totalboxes/2) + $totalboxes%2; foreach my $actionitem (@actionorder) { if ($$checkallowed{$actionitem}) { if ($displayed == $halfway) { - $r->print(' '); + $r->print(' '); } &display_launcher($r,$actionitem,$refpage,$checkallowed,$tabbg,$rowColor1,$rowColor2,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,$interval,$countunread); $displayed ++; @@ -555,20 +564,17 @@ sub display_discussion_config { if ($current eq '') { $current = 'on'; } - my %status = ( - on => 'checked="checked"', - off => 'checked="checked"', - ); - $status{$current} = ''; - $r->print('
'.&mt('Choose whether or not to display a count of the number of new posts for each resource or bulletin board which has unread posts.').'
'.&mt('This can increase the time taken to gather data for the [_1] page by a few seconds.',"What's New?").'  '.&mt('Currently set to [_1] .'),"$current."); + my %status = ( $current => 'checked="checked"'); + + $r->print('
'.&mt('Choose whether or not to display a count of the number of new posts for each resource or bulletin board which has unread posts.').'
'.&mt('This can increase the time taken to gather data for the [_1] page by a few seconds.',"What's New?").'  '); $r->print('

'. &mt('Display of unread post counts?').'  -on +     -off + '); $r->print('

'.$$initpage{$choice}.'  '); + $r->print(''); } $r->print('

'.&mt('If').' '.$$initpage{'coursespecific'}. '
'.$lt{'chce'}." \n"); foreach my $choice (@chgentry) { - $r->print(''.$$initpage{$choice}.'  '); + $r->print(''); } $r->print('

'); @@ -625,17 +631,19 @@ END sub curr_courseinit { my $current = &get_current($env{'user.name'},$env{'user.domain'}, $env{'request.course.id'},'courseinit'); - my %userenv = &Apache::lonnet::get('environment',['course_init_display']); my $control; - if ($current eq '') { + if ($current) { + $control = 'coursespecific'; + } else { $control = 'userpref'; - if (exists($userenv{'firstres'})) { - $current = 'firstres'; - } else { + my %userenv = &Apache::lonnet::get('environment', + ['course_init_display']); + if (exists($userenv{'course_init_display'})) { + $current = $userenv{'course_init_display'}; + } + unless ($current) { $current = 'whatsnew'; } - } else { - $control = 'coursespecific'; } return ($control,$current); } @@ -942,7 +950,7 @@ sub get_curr_thresholds { $uname,$cid.':threshold'); my $thresholdcount = 0; my ($tmp) = %thresholdsettings; - unless ($tmp =~ /^Error/) { + unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { foreach my $item (keys %{$threshold}) { if (exists($thresholdsettings{$cid.':threshold_'.$item})) { $$threshold{$item} = @@ -957,7 +965,7 @@ sub get_curr_thresholds { my %coursesettings = &Apache::lonnet::dump('environment', $cdom,$crs,'internal.threshold'); my ($temp) = %coursesettings; - unless ($temp =~ /^Error/) { + unless ($temp =~ /^(con_lost|error|no_such_host)/i) { foreach my $item (keys %{$threshold}) { unless (exists($thresholdsettings{$cid.':threshold_'.$item})) { if (exists($coursesettings{'internal.threshold_'.$item})) { @@ -976,10 +984,7 @@ sub get_current { my %settings = &Apache::lonnet::dump('nohist_whatsnew',$udom,$uname,$cid. ':'.$caller); my ($tmp) = %settings; - if ($tmp =~ /^Error/) { - &logthis('Error retrieving '.$caller.' setting from nohist_whatsnew for '. - $uname.";".$udom.' in '.$cid); - } else { + unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { $currvalue = $settings{$cid.':'.$caller}; } return $currvalue; @@ -1121,10 +1126,7 @@ sub checkversions { my ($cdom,$crs,$navmap,$changed,$starttime) = @_; my %changes=&Apache::lonnet::dump('versionupdate',$cdom,$crs); my ($tmp) = keys(%changes); - if ($tmp =~/^error\:/) { - &Apache::lonnet::logthis('Error retrieving version update information: '. - $tmp.' for '.$cdom.'_'.$crs.' in whatsnew'); - } else { + unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { if (keys(%changes) > 0) { foreach my $key (sort(keys(%changes))) { if ($changes{$key} > $starttime) { @@ -1409,11 +1411,11 @@ sub get_display_settings { my ($uname,$udom,$cid) = @_; my %settings = &Apache::lonnet::dump('nohist_whatsnew',$udom,$uname,$cid); my ($tmp) = keys(%settings); - if ($tmp=~/^error:/) { + if ($tmp=~ /^(con_lost|error|no_such_host)/i) { %settings = (); - unless ($tmp eq 'error: 2 tie(GDBM) Failed while attempting dump') { - &logthis('Error retrieving whatsnew settings: '.$tmp.' for '. - $uname.':'.$udom.' for course: '.$cid); + unless ($tmp =~ /^error: 2 /) { + &Apache::lonnet::logthis('Error retrieving whatsnew settings: '. + $tmp.' for '.$uname.':'.$udom.' for course: '.$cid); } } return %settings; @@ -1424,6 +1426,7 @@ sub store_display_settings { my %whatsnew_settings; my $result; foreach my $key (keys(%{$checkallowed})) { + if ($key =~ /_section$/) { next; } if (exists($env{'form.display_'.$key})) { unless ($env{'form.display_'.$key} eq '') { $whatsnew_settings{$cid.':'.$key} = $env{'form.display_'.$key}; @@ -1564,20 +1567,26 @@ sub start_box {
'.$lt{'chth'}.'
'.$lt{'chin'}.'
'.$lt{'chop'}.'