--- loncom/auth/lonroles.pm 2006/01/03 17:46:35 1.143 +++ loncom/auth/lonroles.pm 2006/05/30 21:16:40 1.152 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.143 2006/01/03 17:46:35 albertel Exp $ +# $Id: lonroles.pm,v 1.152 2006/05/30 21:16:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,7 +39,10 @@ use Apache::loncommon; use Apache::lonhtmlcommon; use Apache::lonannounce; use Apache::lonlocal; +use Apache::lonpageflip(); use GDBM_File; +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; } @@ -235,9 +247,9 @@ ENDENTERKEY 'request.course.sec' => $csec, 'request.course.groups' => $cgrps); my $tadv=0; - my $msg=&mt('Entering course ...'); if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) { + my $msg; my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); if (($env{'form.orgurl'}) && @@ -245,48 +257,72 @@ 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'}) { + my $type = 'Course/Group'; + if ($env{'request.course.id'}) { + if (defined($env{'course.'. + $env{'request.course.id'}.'.type'})) { + $type = $env{'course.'. + $env{'request.course.id'}.'.type'}; + } &Apache::lonnet::appenv( "request.course.id" => $cdom.'_'.$cnum); $furl='/adm/roles?tryagain=1'; $msg= '

'. - &mt('Could not initialize course at this time.'). + &mt('Could not initialize [_1] at this time.',lc($type)). '

'.&mt('Please try again.').'

'.$ferr; } 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.id'}) { - if (&Apache::lonnet::allowed('whn', - $env{'request.course.id'})) { - 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 [_1] ....',lc($type)); + &redirect_user($r,&mt('New in course'), + '/adm/whatsnew?refpage=start',$msg, + $env{'environment.remotenavmap'}); + return OK; + } + } + } +# Are we allowed to look at the first resource? + if (!&Apache::lonnet::allowed('bre',$furl)) { +# Guess not ... + $furl=&Apache::lonpageflip::first_accessible_resource(); + } + $msg = &mt('Entering [_1] ...',lc($type)); + &redirect_user($r,&mt('Entering [_1]',$type), + $furl,$msg, + $env{'environment.remotenavmap'}); } - &redirect_user($r,&mt('Entering Course'), - $furl,$msg, - $env{'environment.remotenavmap'}); return OK; } } @@ -325,16 +361,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 # ----------------------------------------------------------------------- Table unless (($advanced) || ($nochoose)) { - $r->print("

".&mt('Select a Course to Enter')."

\n"); + $r->print("

".&mt('Select a Course/Group to Enter')."

\n"); } $r->print('
'); unless ($nochoose) { $r->print(''); } $r->print(''."\n"); my $doheaders=-1; - foreach my $type ('Domain','Construction Space','Course','System') { + foreach my $type ('Domain','Construction Space','Course','Group','Unavailable','System') { my $haverole=0; foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { @@ -658,7 +692,7 @@ ENDHEADER $r->print(&coursepick_jscript()); $r->print(&Apache::loncommon::coursebrowser_javascript()); } - foreach my $type ('Construction Space','Domain','Course','System') { + foreach my $type ('Construction Space','Domain','Course','Group','Unavailable','System') { my $output; foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { @@ -721,9 +755,12 @@ ENDHEADER $twhere='User: '.$trest.', Domain: '.$tdom; } else { $ttype='Course'; + if (defined($env{'course.'.$tdom.'_'.$trest.'.type'})) { + $ttype = $env{'course.'.$tdom.'_'.$trest.'.type'}; + } $twhere=$env{'course.'.$tdom.'_'.$trest.'.description'}; if ($tsec) { - $twhere.=' (Section/Group: '.$tsec.')'; + $twhere.=' (Section: '.$tsec.')'; } } } elsif ($tdom) { @@ -763,7 +800,7 @@ ENDHEADER $r->dir_config('lonVersion').'
'. ''.&mt('Logout').'

'); } - $r->print("\n"); + $r->print(&Apache::loncommon::end_page()); return OK; } @@ -793,7 +830,7 @@ sub role_status { } sub build_roletext { - my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; + my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; my $roletext=''; my $is_dc=($trolecode =~ m/^dc\./); my $rowspan=($is_dc) ? '' @@ -843,15 +880,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); } } @@ -877,9 +915,11 @@ sub check_fordc { } sub courselink { - my ($dcdom,$rowtype) = @_; + my ($dcdom,$rowtype,$selecttype) = @_; my $courseform=&Apache::loncommon::selectcourse_link - ('rolechoice','dccourse'.$rowtype.'_'.$dcdom,'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'.$dcdom,$dcdom); + ('rolechoice','dccourse'.$rowtype.'_'.$dcdom, + 'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'. + $dcdom,$dcdom,undef,$selecttype); my $hiddenitems = ''. ''. ''. @@ -960,6 +1000,7 @@ sub display_cc_role { my $trolecode = 'cc./'.$1.'/'.$2; my $trole = Apache::lonnet::plaintext('cc'); my $twhere; + my $ttype; my $tbg='#77FF77'; my $tfont='#003300'; my %newhash=&Apache::lonnet::coursedescription($tcourseid); @@ -968,33 +1009,43 @@ sub display_cc_role { ' '. &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont). ''; + $ttype=$newhash{'type'}; + if ($ttype eq 'Group') { + $trole = &Apache::loncommon::convert_role($trole,$ttype); + } } else { $twhere=&mt('Currently not available'); $env{'course.'.$tcourseid.'.description'}=$twhere; + $ttype = 'Unavailable'; } $twhere.="
".&mt('Domain').":".$1; - $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,&mt('Course'),$twhere,'','','',1,''); + $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,$twhere,'','','',1,''); } } - return $roletext; + return ($roletext); } sub allcourses_row { my ($dcdom,$rowtype) = @_; my $ccrole = Apache::lonnet::plaintext('cc'); - my $selectlink = &courselink($dcdom,$rowtype); my $output = ''. - ''."\n"; + ' '."\n"; return $output; } sub recent_filename { my $area=shift; - return 'nohist_recent_'.&Apache::lonnet::escape($area); + return 'nohist_recent_'.&escape($area); } sub set_privileges { @@ -1018,7 +1069,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; @@ -1029,11 +1080,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 '') {
 '.&mt('User Role').''.&mt('Extent'). ''.&mt('Start').''.&mt('End').'
'. - ''.$ccrole.''. - ' '.$selectlink.''. - ' from '.&mt('Domain').' '.$dcdom. - '
'; + foreach my $type ('Course','Group') { + my $selectlink = &courselink($dcdom,$rowtype,$type); + if ($type eq 'Group') { + $ccrole = &Apache::loncommon::convert_role($ccrole,$type); + } + $output.= ''.$ccrole.''. + ' '.$selectlink.''. + ' from '.&mt('Domain').' '.$dcdom.'
'; + } + $output .= '