--- loncom/interface/lonwhatsnew.pm 2005/12/06 16:37:28 1.36 +++ loncom/interface/lonwhatsnew.pm 2006/01/09 22:55:47 1.48 @@ -1,5 +1,5 @@ # -# $Id: lonwhatsnew.pm,v 1.36 2005/12/06 16:37:28 raeburn Exp $ +# $Id: lonwhatsnew.pm,v 1.48 2006/01/09 22:55:47 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,27 +52,42 @@ sub handler { $r->send_http_header; return OK; } - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['command']); + &Apache::loncommon::get_unprocessed_cgi( + $ENV{'QUERY_STRING'},['command','refpage']); my $command = $env{'form.command'}; + my $refpage = $env{'form.refpage'}; - &Apache::loncommon::content_type($r,'text/html'); - $r->send_http_header; - if (! (($env{'request.course.fn'}) && (&Apache::lonnet::allowed('bre',$env{'request.course.id'})))) { - # Not in a course, or not allowed to view action items - $env{'user.error.msg'}="/adm/whatsnew:bre: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)); @@ -80,23 +95,35 @@ 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', + ({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', + ({href=>'/adm/whatsnew?command=chginterval&refpage='.$refpage, text=>"Change interval"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,'Course Action Items','Course_Action_Items_Intervals')); + (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')); + } 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')); } 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,\%checkallowed); + &display_main_box($r,$command,$refpage,\%checkallowed); return OK; } @@ -107,37 +134,49 @@ sub handler { #------------------------------ sub display_main_box { - my ($r,$command,$checkallowed) = @_; + 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 = (
+ my %threshold_titles = &Apache::lonlocal::texthash (
av_attempts => 'Average number of attempts',
degdiff => 'Degree of difficulty',
numstudents => 'Total number of students with submissions',
);
- my %interval_titles = (
+ my %interval_titles = &Apache::lonlocal::texthash (
-1 => 'since start of course',
2592000 => 'since last month',
604800 => 'since last week',
86400 => 'since yesterday',
);
+ my %initpage = &Apache::lonlocal::texthash (
+ firstres => 'first resource in the course',
+ whatsnew => "what's new? page",
+ userpref => 'your general user preferences',
+ coursespecific => 'specific setting for this course',
+ );
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'}))) {
- &display_threshold_config($r,$command,$tabbg,\%threshold_titles,
+ 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'}))) {
- &display_interval_config($r,\%interval_titles);
+ } elsif (($command eq 'chginterval')
+ && $checkallowed->{'versionchanges'}) {
+ &display_interval_config($r,$refpage,\%interval_titles);
+ } 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,\%threshold_titles,\%interval_titles,
- $cdom,$crs,$checkallowed);
+ &display_actions_box($r,$tabbg,$command,$refpage,\%threshold_titles,
+ \%interval_titles,\%initpage,$cdom,$crs,$checkallowed);
}
$r->print(< '); return; } - if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', + if ($refpage eq 'start') { + if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', &GDBM_READER(),0640)) { - my $furl=$bighash{'first_url'}; - $r->print(''.$lt{'gtfr'}. - ''. - ' '.$lt{'chyp'}.' '.$lt{'tsup'}.' '); - untie(%bighash); + my $furl=$bighash{'first_url'}; + untie(%bighash); + $r->print(''.$lt{'gtfr'}. + ' '); + } } - - my $result; + $r->print($lt{'pgse'}.' '.&mt('Currently: [_1]',''.$currinit.''). + ' '); if ($command eq 'reset') { $result = &process_reset($cdom,$crs); } elsif ($command eq 'update') { - $result = &process_update($cdom,$crs,$threshold_titles); + $result = &process_update($uname,$udom,$threshold_titles); } elsif ($command eq 'newinterval') { $result = &store_interval_setting($uname,$udom,$cid,$interval_titles); + } elsif ($command eq 'newdiscconf') { + $result = &store_discussion_setting($uname,$udom,$cid); } my $store_result=&store_display_settings($uname,$udom,$cid,$checkallowed); @@ -300,18 +351,22 @@ sub display_actions_box() { $timediff = time; } my $starttime = $now - $timediff; + my $countunread = $display_settings{$cid.':countunread'}; + unless (defined($countunread)) { + $countunread = 'on'; + } my %headings = &Apache::lonlocal::texthash( coursediscussion => 'Unread course discussion posts', handgrading => 'Problems requiring handgrading', haserrors => 'Problems with errors', versionchanges => 'Resources in course with version changes '.$interval, - coursenormalmail => 'New course message', + coursenormalmail => 'New course messages', coursecritmail => 'New critical messages in course', ); if ($$checkallowed{'abovethreshold'}) { - &get_curr_thresholds(\%threshold,$cdom,$crs); + &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'}; @@ -319,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') { @@ -337,7 +393,7 @@ sub display_actions_box() { } if ($needitems) { - &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime); + &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread); } if ($show{'coursenormalmail'}) { &getnormalmail(\@newmsgs); @@ -350,22 +406,30 @@ sub display_actions_box() { $lt{'shal'}
+ '); } @@ -455,16 +526,18 @@ sub display_threshold_config { #------------------------------- sub display_interval_config { - my ($r,$interval_titles) = @_; - my $current = &get_curr_interval($env{'user.name'}, - $env{'user.domain'},$env{'request.course.id'}); + my ($r,$refpage,$interval_titles) = @_; + 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.')); unless ($current eq '') { - $r->print(' '.&mt('Current value is ').$$interval_titles{$current}.' '); + $r->print(' '.&mt('Current value is [_1]',''. + $$interval_titles{$current}.'.')); } $r->print(' | ||||||
'.$forum_title.' | '.$type.' | '.$unreadnum.' | ||||
'.$forum_title.' | '.$type.' | '); + if ($countunread eq 'on') { + my $unreadnum = $$unread{$ressymb}{'unreadcount'}; + $r->print(''.$lastpost.' | '. + '',$unreadnum.' | '); + } else { + $r->print(''.$lastpost.' | '); + } + $r->print("||
'); + + } else { + &Apache::lonnet::logthis('Error storing whatsnew countunread setting'. + ' '.$outcome.' for '.$uname.':'.$udom.' in course '.$cid); + $result = &mt('Unable to set "number unread posts display" to [_1]'. + ' due to [_2].', + ''.$env{'form.countunread'}.'', + ''.$outcome.'. '); + } + } + return $result; +} + +sub store_courseinit_setting { + my ($uname,$udom,$cid,$initpage) = @_; + my %courseinit_settings; + my $page_control; + my $result; + if (defined($env{'form.courseinit_control'})) { + if ($env{'form.courseinit_control'} eq 'userpref') { + $courseinit_settings{$cid.':courseinit'} = ''; + $page_control = 'global preferences'; + } else { + if (defined($env{'form.courseinit_page'})) { + $courseinit_settings{$cid.':courseinit'} = + $env{'form.courseinit_page'}; + $page_control = 'course specific setting'; + } + } + if ($page_control) { + my $outcome = &Apache::lonnet::put('nohist_whatsnew', + \%courseinit_settings,$udom,$uname); + if ($outcome eq 'ok') { + if ($page_control eq 'global preferences') { + $result = &mt('Page displayed after role selection in course now set by [_1]',"user's global preferences."); + } else { + $result = &mt('Page displayed after role selection in this course set to [_1]',''.$$initpage{$env{'form.courseinit_page'}}.'.'); + } + } else { + &Apache::lonnet::logthis('Error storing whatsnew courseinit '. + 'setting: '.$outcome.' for '.$uname. + ':'.$udom.' in course '.$cid); + if ($page_control eq 'global preferences') { + $result = &mt('Unable to set control of page display to [_1]'. + ' due to [_2].', + ''.$page_control.'', + ''.$outcome.'. '); + } else { + $result = &mt('Unable to set page display, after role selection, for this course to [_1] due to [_2].', + ''.$$initpage{$env{'form.courseinit_page'}}.'', + ''.$outcome.'. '); + } + } + } + } + return $result; +} + sub start_box { - my ($r,$tabbg,$show,$heading,$caller) = @_; + my ($r,$tabbg,$show,$heading,$caller,$refpage) = @_; my %lt = &Apache::lonlocal::texthash( chth => 'Change thresholds?', chin => 'Change interval?', + chop => 'Change options?', ); my $showhide; if ($$show{$caller}) { @@ -1254,15 +1583,26 @@ sub start_box { |
||||||
'.$lt{'chth'}.' | +'.$lt{'chth'}.' | |||||
'.$lt{'chin'}.' | +||||||
'.$lt{'chin'}.' | +'.$lt{'chop'}.' | |||||