--- loncom/interface/lonwhatsnew.pm 2005/12/22 02:38:44 1.41
+++ loncom/interface/lonwhatsnew.pm 2006/03/04 05:59:01 1.51
@@ -1,5 +1,5 @@
#
-# $Id: lonwhatsnew.pm,v 1.41 2005/12/22 02:38:44 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.51 2006/03/04 05:59:01 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,38 @@ 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,"What's New?",'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,"What's New?",'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,"What's New?",'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,"What's New?",'Course_Action_Items_Initialization'));
+ (undef,"What's New?",#'Course_Action_Items_Initialization'
+ ));
} else {
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,"What's New?",'Course_Action_Items_Display'));
+ (undef,"What's New?",#'Course_Action_Items_Display'
+ ));
}
&display_main_box($r,$command,$refpage,\%checkallowed);
return OK;
@@ -152,15 +167,15 @@ 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);
@@ -200,6 +215,7 @@ function change_display(caller,change) {
function changeAll(change) {
END
foreach my $item (keys(%{$checkallowed})) {
+ if ($item =~ /_section$/) { next; }
if ($$checkallowed{$item}) {
$scripttag.='document.visible.display_'.$item.'.value=change'.
"\n";
@@ -300,7 +316,7 @@ sub display_actions_box {
}
}
$r->print($lt{'pgse'}.' '.&mt('Currently: [_1]',''.$currinit.'').
- ' '.&mt('[_1] for just [_2]','Change',
+ ' '.&mt('[_1] for just [_2]','Change',
'this course').' '.&mt('or for all [_1].',
'$lt{'hial'}
$lt{'shal'}
');
+ $r->print('
+
+  
+
+ ');
return;
}
@@ -602,14 +632,14 @@ $$initpage{$current}.
$lt{'padc'}
END
foreach my $choice (@chgstate) {
- $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('
');
@@ -682,7 +712,6 @@ sub getitems {
# force retrieve Resource to seed the part id cache we'll need it later
my @allres=$navmap->retrieveResources(undef,
sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;});
- my %lastreadtime;
my %resourcetracker;
my $discussiontime;
@@ -691,17 +720,6 @@ sub getitems {
&checkversions($cdom,$crs,$navmap,$changed,$starttime);
}
- if ($$show{'coursediscussion'}) {
- my %lastread = &Apache::lonnet::dump('nohist_'.
- $env{'request.course.id'}.'_discuss',
- $env{'user.domain'},$env{'user.name'},'lastread');
- foreach my $key (keys(%lastread)) {
- my $newkey = $key;
- $newkey =~ s/_lastread$//;
- $lastreadtime{$newkey} = $lastread{$key};
- }
- }
-
if ($$show{'abovethreshold'}) {
%resourcetracker = &Apache::lonnet::dump('nohist_resourcetracker',
$cdom,$crs);
@@ -722,8 +740,8 @@ sub getitems {
# Check if there are unread discussion postings
if ($$show{'coursediscussion'}) {
- &check_discussions($cdom,$crs,$resource,$symb,$ressymb,$title,
- $newdiscussions,$unread);
+ &check_discussions($resource,$symb,$ressymb,$title,
+ $newdiscussions,$unread,$countunread);
}
# Check for ungraded problems
@@ -746,73 +764,26 @@ sub getitems {
}
}
- my $hasdiscussion = @{$newdiscussions};
- if ($$show{'coursediscussion'} && $hasdiscussion) { # Get time of last post;
- $discussiontime = $navmap->{DISCUSSION_TIME};
- foreach my $ressymb (@{$newdiscussions}) {
- $$unread{$ressymb}{'lastpost'} = $$discussiontime{$ressymb};
- }
- if ($countunread eq 'on') { #Get count of unread postings for each resource
- my $discussiondata = $navmap->get_discussion_data();
- foreach my $ressymb (@{$newdiscussions}) {
- &get_discussions($cdom,$crs,$discussiondata,$ressymb,
- $unread,\%lastreadtime);
- }
- }
- }
}
sub check_discussions {
- my ($cdom,$crs,$resource,$symb,$ressymb,$title,$newdiscussions,
- $unread) = @_;
- if ($resource->hasDiscussion()) {
- %{$$unread{$ressymb}} = ();
- $$unread{$ressymb}{'title'} = $title;
- $$unread{$ressymb}{'symb'} = $symb;
- push(@{$newdiscussions}, $ressymb);
- }
-}
+ my ($resource,$symb,$ressymb,$title,$newdiscussions,$unread,
+ $countunread) = @_;
-sub get_discussions {
- my ($cdom,$crs,$discussiondata,$ressymb,$unread,$lastreadtime) = @_;
- my $prevread = 0;
- my $unreadcount = 0;
- if (defined($$lastreadtime{$ressymb})) {
- $prevread = $$lastreadtime{$ressymb};
- }
- my $version = $$discussiondata{'version:'.$ressymb};
- if ($version) {
- my $hiddenflag = 0;
- my $deletedflag = 0;
- my ($hidden,$deleted);
- for (my $id=$version; $id>0; $id--) {
- my $vkeys=$$discussiondata{$id.':keys:'.$ressymb};
- my @keys=split(/:/,$vkeys);
- if (grep/^hidden$/,@keys) {
- unless ($hiddenflag) {
- $hidden = $$discussiondata{$id.':'.$ressymb.':hidden'};
- $hiddenflag = 1;
- }
- } elsif (grep/^deleted$/,@keys) {
- unless ($deletedflag) {
- $deleted = $$discussiondata{$id.':'.$ressymb.':deleted'};
- $deletedflag = 1;
- }
- } else {
- unless (($hidden =~/\.$id\./) || ($deleted =~/\.$id\./)) {
- if ($prevread <$$discussiondata{$id.':'.$ressymb.':timestamp'}) {
- $unreadcount ++;
- $$unread{$ressymb}{$unreadcount} = $id.': '.
- $$discussiondata{$id.':'.$ressymb.':subject'};
- }
- }
- }
- }
- $$unread{$ressymb}{'unreadcount'} = $unreadcount;
+ if (!$resource->hasDiscussion()) { return; }
+
+ %{$$unread{$ressymb}} = ();
+ $$unread{$ressymb}{'title'} = $title;
+ $$unread{$ressymb}{'symb'} = $symb;
+ push(@{$newdiscussions}, $ressymb);
+
+ $$unread{$ressymb}{'lastpost'} = $resource->last_post_time();
+
+ if ($countunread eq 'on') {
+ $$unread{$ressymb}{'unreadcount'} = $resource->unread_discussion();
}
}
-
sub check_handgraded {
my ($resource,$symb,$title,$cdom,$cnum,$ungraded,$tograde) = @_;
if ($resource->is_problem()) {
@@ -865,6 +836,9 @@ sub check_thresholds {
if ($resource->handgrade($part) eq 'yes') {
next;
}
+ if ($resource->is_survey($part)) {
+ next;
+ }
%{$stats{$part}} = ();
my ($attempts,$users,$corrects,$degdiff,$av_attempts);
if (exists($$resourcetracker{$symb."\0".$part."\0attempts"})) {
@@ -1414,6 +1388,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};