--- loncom/auth/lonroles.pm 2005/11/11 18:47:09 1.134 +++ loncom/auth/lonroles.pm 2006/04/05 22:39:55 1.147 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.134 2005/11/11 18:47:09 www Exp $ +# $Id: lonroles.pm,v 1.147 2006/04/05 22:39:55 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -51,28 +51,25 @@ sub redirect_user { my $navwindow; if ($launch_nav eq 'on') { $navwindow.=&Apache::lonnavmaps::launch_win('now',undef,undef, - ($url eq '/adm/whatsnew')); + ($url =~ m-^/adm/whatsnew-)); } else { $navwindow.=&Apache::lonnavmaps::close(); } - my $bodytag=&Apache::loncommon::bodytag('Switching Role'); + my $start_page = &Apache::loncommon::start_page('Switching Role',undef, + {'redirect' => [1,$url],}); + my $end_page = &Apache::loncommon::end_page(); + # Note to style police: # This must only replace the spaces, nothing else, or it bombs elsewhere. $url=~s/ /\%20/g; $r->print(<$title - - - -$bodytag +$start_page $navwindow

$msg

-Continue - - +$end_page ENDREDIR return; } @@ -108,10 +105,10 @@ sub handler { # Check if user is a DC trying to enter a course and needs privs to be created if ($numdc > 0) { foreach my $envkey (keys %env) { - if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) { - if ($dcroles{$1}) { - my $cckey = 'user.role.cc./'.$1.'/'.$2; - &check_privs($cckey,$then,$now); + if (my ($domain,$coursenum) = + ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-)) { + if ($dcroles{$domain}) { + &check_privs($domain,$coursenum,$then,$now); } last; } @@ -126,6 +123,11 @@ sub handler { if ($tstatus eq 'is') { $where=~s/^\///; my ($cdom,$cnum,$csec)=split(/\//,$where); +# check for course groups + my %coursegroups = &Apache::lonnet::get_active_groups( + $env{'user.domain'},$env{'user.name'},$cdom, $cnum); + my $cgrps = join(':',keys(%coursegroups)); + # store role if recent_role list being kept if ($env{'environment.recentroles'}) { &Apache::lonhtmlcommon::store_recent('roles', @@ -154,8 +156,9 @@ sub handler { &Apache::loncommon::no_cache($r); $r->send_http_header; my $swinfo=&Apache::lonmenu::rawconfig(); - my $bodytag=&Apache::loncommon::bodytag + my $start_page=&Apache::loncommon::start_page ('Verifying Access Key to Unlock this Course'); + my $end_page=&Apache::loncommon::end_page(); my $buttontext=&mt('Enter Course'); my $message=&mt('Successfully registered key'); my $assignresult= @@ -175,10 +178,7 @@ sub handler { $buttontext=&mt('Re-Enter Key'); } $r->print(<Verifying Course Access Key - - -$bodytag +$start_page @@ -188,7 +188,7 @@ $swinfo $message
- +$end_page ENDENTEREDKEY return OK; } else { @@ -197,13 +197,11 @@ ENDENTEREDKEY &Apache::loncommon::no_cache($r); $r->send_http_header; my $swinfo=&Apache::lonmenu::rawconfig(); - my $bodytag=&Apache::loncommon::bodytag + my $start_page=&Apache::loncommon::start_page ('Enter Access Key to Unlock this Course'); + my $end_page=&Apache::loncommon::end_page(); $r->print(<Entering Course Access Key - - -$bodytag +$start_page @@ -213,7 +211,7 @@ $swinfo - +$end_page ENDENTERKEY return OK; } @@ -227,7 +225,8 @@ ENDENTERKEY &Apache::lonnet::appenv( 'request.role' => $trolecode, 'request.role.domain' => $cdom, - 'request.course.sec' => $csec); + 'request.course.sec' => $csec, + 'request.course.groups' => $cgrps); my $tadv=0; my $msg=&mt('Entering course ...'); @@ -265,13 +264,22 @@ ENDENTERKEY '.course.helper.not.run'}) { $furl = "/adm/helper/course.initialization.helper"; # Send the user to the course they selected - } elsif (($env{'request.course.fn'}) - && ($role eq 'cc' && ($env{'environment.course_init_display'} ne 'firstres'))) { - $msg = &mt('Entering course ....'); - &redirect_user($r,&mt('New in course'), - '/adm/whatsnew',$msg, - $env{'environment.remotenavmap'}); - return OK; + } elsif ($env{'request.course.id'}) { + if (&Apache::lonnet::allowed('whn', + $env{'request.course.id'}) + || &Apache::lonnet::allowed('whn', + $env{'request.course.id'}.'/' + .$env{'request.course.sec'}) + ) { + my $startpage = &courseloadpage($courseid); + unless ($startpage eq 'firstres') { + $msg = &mt('Entering course ....'); + &redirect_user($r,&mt('New in course'), + '/adm/whatsnew?refpage=start',$msg, + $env{'environment.remotenavmap'}); + return OK; + } + } } &redirect_user($r,&mt('Entering Course'), $furl,$msg, @@ -314,15 +322,12 @@ ENDENTERKEY return OK if $r->header_only; my $swinfo=&Apache::lonmenu::rawconfig(); - my $bodytag=&Apache::loncommon::bodytag('User Roles'); + my $start_page=&Apache::loncommon::start_page('User Roles'); my $standby=&mt('Role selected. Please stand by.'); + $standby=~s/\n/\\n/g; my $helptag='
'.&Apache::loncommon::help_open_menu('','General Intro','General_Intro','User Roles',1,undef,undef,undef,undef,,&mt("Click here for help")).'
'; $r->print(< - -LON-CAPA User Roles - -$bodytag +$start_page $helptag
'); - $r->print(''); + $r->print(&Apache::loncommon::end_page()); return OK; } # More than one possible role @@ -629,7 +631,7 @@ ENDHEADER if (defined($roletext{'user.role.'.$_})) { $output.=$roletext{'user.role.'.$_}; if ($_ =~ m-dc\./(\w+)/- && $dcroles{$1}) { - $output .= &allcourses_row($1); + $output .= &allcourses_row($1,'recent'); } } elsif ($numdc > 0) { unless ($_ =~/^error\:/) { @@ -657,7 +659,7 @@ ENDHEADER $output.=$roletext{$sortrole{$which}}; if ($sortrole{$which} =~ m-dc\./(\w+)/-) { if ($dcroles{$1}) { - $output .= &allcourses_row($1); + $output .= &allcourses_row($1,''); } } } @@ -755,7 +757,7 @@ ENDHEADER $r->dir_config('lonVersion').'
'. ''.&mt('Logout').'

'); } - $r->print("\n"); + $r->print(&Apache::loncommon::end_page()); return OK; } @@ -835,15 +837,16 @@ sub build_roletext { } sub check_privs { - my ($cckey,$then,$now) = @_; + my ($cdom,$cnum,$then,$now) = @_; + my $cckey = 'user.role.cc./'.$cdom.'/'.$cnum; if ($env{$cckey}) { my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { - &set_privileges($1,$2); + &set_privileges($cdom,$cnum); } } else { - &set_privileges($1,$2); + &set_privileges($cdom,$cnum); } } @@ -869,13 +872,13 @@ sub check_fordc { } sub courselink { - my ($dcdom) = @_; + my ($dcdom,$rowtype) = @_; my $courseform=&Apache::loncommon::selectcourse_link - ('rolechoice','dccourse_'.$dcdom,'dcdomain_'.$dcdom,'coursedesc_'.$dcdom,$dcdom); - my $hiddenitems = ''. - ''. - ''. - ''; + ('rolechoice','dccourse'.$rowtype.'_'.$dcdom,'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'.$dcdom,$dcdom); + my $hiddenitems = ''. + ''. + ''. + ''; return $courseform.$hiddenitems; } @@ -916,34 +919,26 @@ END } sub processpick { - my $dcdom = shift; my $process_pick = <<"END"; END return $process_pick; @@ -980,12 +975,10 @@ sub display_cc_role { } sub allcourses_row { - my $dcdom = shift; + my ($dcdom,$rowtype) = @_; my $ccrole = Apache::lonnet::plaintext('cc'); - my $selectlink = &courselink($dcdom); + my $selectlink = &courselink($dcdom,$rowtype); my $output = ''. - ''. - ''. ''. ''.$ccrole.''. ' '.$selectlink.''. @@ -1020,7 +1013,7 @@ sub set_privileges { $env{'user.home'}, "Role ".$role); &Apache::lonnet::appenv( - 'request.role' => $role, + 'request.role' => $spec, 'request.role.domain' => $dcdom, 'request.course.sec' => ''); my $tadv=0; @@ -1028,6 +1021,23 @@ sub set_privileges { &Apache::lonnet::appenv('request.role.adv' => $tadv); } +sub courseloadpage { + my ($courseid) = @_; + my $startpage; + my %entry_settings = &Apache::lonnet::get('nohist_whatsnew', + [$courseid.':courseinit']); + my ($tmp) = %entry_settings; + unless ($tmp =~ /^error: 2 /) { + $startpage = $entry_settings{$courseid.':courseinit'}; + } + if ($startpage eq '') { + if (exists($env{'environment.course_init_display'})) { + $startpage = $env{'environment.course_init_display'}; + } + } + return $startpage; +} + 1; __END__