--- loncom/auth/lonroles.pm 2005/12/20 15:47:07 1.140 +++ loncom/auth/lonroles.pm 2006/05/30 17:15:00 1.150 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.140 2005/12/20 15:47:07 raeburn Exp $ +# $Id: lonroles.pm,v 1.150 2006/05/30 17:15:00 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,9 @@ use Apache::lonhtmlcommon; use Apache::lonannounce; use Apache::lonlocal; use GDBM_File; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + sub redirect_user { my ($r,$title,$url,$msg,$launch_nav) = @_; @@ -55,28 +58,40 @@ sub redirect_user { } 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; } +sub error_page { + my ($r,$error,$dest)=@_; + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + $r->send_http_header; + return OK if $r->header_only; + $r->print(&Apache::loncommon::start_page('Problems during Course Initialization'). + ''. + '

'.&mt('The following problems occurred:'). + $error. + '


$message
- +$end_page ENDENTEREDKEY return OK; } else { @@ -202,13 +216,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 @@ -218,7 +230,7 @@ $swinfo - +$end_page ENDENTERKEY return OK; } @@ -245,7 +257,11 @@ ENDENTERKEY my $dest=$env{'form.orgurl'}; if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } &Apache::lonnet::appenv('request.role.adv'=>$tadv); - $r->internal_redirect($dest); + if (($ferr) && ($tadv)) { + &error_page($r,$ferr,$dest); + } else { + $r->internal_redirect($dest); + } return OK; } else { unless ($env{'request.course.id'}) { @@ -259,33 +275,41 @@ ENDENTERKEY } if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } &Apache::lonnet::appenv('request.role.adv'=>$tadv); - - # Check to see if the user is a CC entering a course - # for the first time - my (undef, undef, $role, $courseid) = split(/\./, $envkey); - if (substr($courseid, 0, 1) eq '/') { - $courseid = substr($courseid, 1); - } - $courseid =~ s/\//_/; - if ($role eq 'cc' && $env{'course.' . $courseid . - '.course.helper.not.run'}) { - $furl = "/adm/helper/course.initialization.helper"; - # Send the user to the course they selected - } elsif ($env{'request.course.fn'}) { - if ($env{'user.adv'}) { - 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; - } - } + if (($ferr) && ($tadv)) { + &error_page($r,$ferr,$furl); + } else { + # Check to see if the user is a CC entering a course + # for the first time + my (undef, undef, $role, $courseid) = split(/\./, $envkey); + if (substr($courseid, 0, 1) eq '/') { + $courseid = substr($courseid, 1); + } + $courseid =~ s/\//_/; + if ($role eq 'cc' && $env{'course.' . $courseid . + '.course.helper.not.run'}) { + $furl = "/adm/helper/course.initialization.helper"; + # Send the user to the course they selected + } 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, + $env{'environment.remotenavmap'}); } - &redirect_user($r,&mt('Entering Course'), - $furl,$msg, - $env{'environment.remotenavmap'}); return OK; } } @@ -324,16 +348,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 @@ -766,7 +773,7 @@ ENDHEADER $r->dir_config('lonVersion').'
'. '
'.&mt('Logout').'

'); } - $r->print("\n"); + $r->print(&Apache::loncommon::end_page()); return OK; } @@ -846,15 +853,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); } } @@ -997,7 +1005,7 @@ sub allcourses_row { sub recent_filename { my $area=shift; - return 'nohist_recent_'.&Apache::lonnet::escape($area); + return 'nohist_recent_'.&escape($area); } sub set_privileges { @@ -1021,7 +1029,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; @@ -1032,11 +1040,10 @@ sub set_privileges { sub courseloadpage { my ($courseid) = @_; my $startpage; - my %entry_settings = - &Apache::lonnet::dump('nohist_whatsnew',$env{'user.domain'}, - $env{'user.name'},$courseid.':courseinit'); + my %entry_settings = &Apache::lonnet::get('nohist_whatsnew', + [$courseid.':courseinit']); my ($tmp) = %entry_settings; - unless ($tmp =~ /^Error/) { + unless ($tmp =~ /^error: 2 /) { $startpage = $entry_settings{$courseid.':courseinit'}; } if ($startpage eq '') {