--- loncom/auth/lonroles.pm 2013/08/16 13:13:52 1.291 +++ loncom/auth/lonroles.pm 2014/03/19 16:20:36 1.299 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.291 2013/08/16 13:13:52 raeburn Exp $ +# $Id: lonroles.pm,v 1.299 2014/03/19 16:20:36 musolffc Exp $ # # Copyright Michigan State University Board of Trustees # @@ -288,7 +288,7 @@ sub handler { "request.role.domain" => $env{'user.domain'}}); # Check if user is a DC trying to enter a course or author space and needs privs to be created if ($numdc > 0) { - foreach my $envkey (keys %env) { + foreach my $envkey (keys(%env)) { # Is this an ad-hoc Coordinator role? if (my ($ccrole,$domain,$coursenum) = ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { @@ -358,7 +358,7 @@ sub handler { } } - foreach $envkey (keys %env) { + foreach $envkey (keys(%env)) { next if ($envkey!~/^user\.role\./); my ($where,$trolecode,$role,$tstatus,$tend,$tstart); &Apache::lonnet::role_status($envkey,$update,$refresh,$now,\$role,\$where, @@ -545,13 +545,14 @@ ENDENTERKEY } } if (($env{'form.orgurl'}) && - ($env{'form.orgurl'}!~/^\/adm\/flip/)) { + ($env{'form.orgurl'}!~/^\/adm\/flip/) && + ($env{'form.orgurl'} ne '/adm/roles')) { my $dest=$env{'form.orgurl'}; if ($env{'form.symb'}) { if ($dest =~ /\?/) { $dest .= '&'; } else { - $dest .= '?' + $dest .= '?'; } $dest .= 'symb='.$env{'form.symb'}; } @@ -590,13 +591,8 @@ ENDENTERKEY } 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') || ($role eq 'co')) - && ($env{'course.' . $courseid .'.course.helper.not.run'})) { + && ($env{'course.'.$cdom.'_'.$cnum.'.course.helper.not.run'})) { $furl = "/adm/helper/course.initialization.helper"; # Send the user to the course they selected } elsif ($env{'request.course.id'}) { @@ -648,7 +644,7 @@ ENDENTERKEY } } &redirect_user($r, &mt('Entering [_1]', - $env{'course.'.$courseid.'.description'}), + $env{'course.'.$cdom.'_'.$cnum.'.description'}), $dest, $msg); return OK; } @@ -658,25 +654,36 @@ ENDENTERKEY $env{'request.course.id'}.'/' .$env{'request.course.sec'}) ) { - my $startpage = &courseloadpage($courseid); + my $startpage = &courseloadpage($env{'request.course.id'}); unless ($startpage eq 'firstres') { $msg = &mt('Entering [_1] ...', - $env{'course.'.$courseid.'.description'}); + $env{'course.'.$env{'request.course.id'}.'.description'}); &redirect_user($r, &mt('New in course'), '/adm/whatsnew?refpage=start', $msg); return OK; } } } -# Are we allowed to look at the first resource? - if ($furl !~ m|^/adm/|) { -# Guess not ... - $furl=&Apache::lonpageflip::first_accessible_resource(); - } + + # If it's an external resource, + if ($furl =~ m{^(/adm/wrapper|)/ext/}) { + # strip off the symb argument and possible query + my ($exturl,$symb) = ($furl =~ m{^(.+)(?:\?|\&)symb=(.+)$}); + # Unencode $symb + $symb = &unescape($symb); + # Then check for permission + if (!&Apache::lonnet::allowed('bre',$exturl,$symb)) { + $furl = &Apache::lonpageflip::first_accessible_resource(); + } + # For local resources just check for permission + } elsif (!&Apache::lonnet::allowed('bre',$furl)) { + $furl = &Apache::lonpageflip::first_accessible_resource(); + } + $msg = &mt('Entering [_1] ...', - $env{'course.'.$courseid.'.description'}); + $env{'course.'.$cdom.'_'.$cnum.'.description'}); &redirect_user($r, &mt('Entering [_1]', - $env{'course.'.$courseid.'.description'}), + $env{'course.'.$cdom.'_'.$cnum.'.description'}), $furl, $msg); } return OK; @@ -888,11 +895,13 @@ ENDHEADER my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); $r->print( '

' - .&mt('[_1]Visit the [_2]Course/Community Catalog[_3]' - .' to view all [_4] LON-CAPA courses and communities.' + .&mt('[_1]Visit the [_2]Course/Community Catalog[_3][_4]' + .' to view all [_5] LON-CAPA courses and communities.' ,'' ,'' - ,'',$domdesc) + ,'' + ,'' + ,'"'.$domdesc.'"') .'
' .&mt('If a course or community is [_1]not[_2] in your list of current courses and communities below,' .' you may be able to enroll if self-enrollment is permitted.' @@ -1139,7 +1148,7 @@ sub gather_roles { if ($role =~ /^cr\//) { my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); if ($tremark) { $tremark.='
'; } - $tremark.=&mt('Customrole defined by [_1].',$rauthor.':'.$rdomain); + $tremark.=&mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); } $trole=Apache::lonnet::plaintext($role); my $ttype; @@ -1601,24 +1610,6 @@ sub build_roletext { return ($roletext,$roletext_end); } -sub check_needs_switchserver { - my ($possiblerole) = @_; - my $needs_switchserver; - my ($role,$where) = split(/\./,$possiblerole,2); - my (undef,$tdom,$twho) = split(/\//,$where); - my ($server_status,$home); - if (($role eq 'ca') || ($role eq 'aa')) { - ($server_status,$home) = &check_author_homeserver($twho,$tdom); - } else { - ($server_status,$home) = &check_author_homeserver($env{'user.name'}, - $env{'user.domain'}); - } - if ($server_status eq 'switchserver') { - $needs_switchserver = 1; - } - return $needs_switchserver; -} - sub check_author_homeserver { my ($uname,$udom)=@_; if (($uname eq '') || ($udom eq '')) { @@ -1684,7 +1675,7 @@ sub adhoc_course_role { } } if ($setprivs) { - if ($env{'form.switchrole'} =~ m-^(in|ta|ep|ad|st|cr)([\w/]*)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { + if ($env{'form.switchrole'} =~ m-^(in|ta|ep|ad|st|cr)(.*?)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { my $role = $1; my $custom_role = $2; my $usec = $3; @@ -2230,7 +2221,8 @@ sub update_session_roles { my $status_in_env = &curr_role_status($currstart,$currend,$refresh,$update); my ($rolekey) = ($envkey =~ /^user\.role\.(.+)$/); - my ($role,$rest)=split(/\./,$rolekey,2); + my ($role,$rest)=split(m{\./},$rolekey,2); + $rest = '/'.$rest; if (&Apache::lonnet::delenv($envkey,undef,[$role])) { if ($status_in_env eq 'active') { if ($role eq 'gr') { @@ -2466,7 +2458,7 @@ sub update_session_roles { if ($desc) { $newmsg .= '

  • '. &mt('[_1] with status: [_2].', - $desc,$newrole{$item}).'
  • '; + $desc,&mt($newrole{$item})).''; } } if ($newmsg) { @@ -2600,7 +2592,7 @@ sub role_desc { return unless ($role); if ($role =~ /^cr\//) { my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); - $tremark = &mt('Customrole defined by [_1].',$rauthor.':'.$rdomain); + $tremark = &mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); } $trole=Apache::lonnet::plaintext($role); my ($tdom,$trest,$tsection)= @@ -2759,7 +2751,7 @@ sub get_queued { $env{'user.name'},'^status:'); foreach my $key (keys(%statusinfo)) { next unless (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')); - (undef,my($cdom,$cnum)) = split(':',$key); + (undef,my($cdom,$cnum)) = split(/:/,$key); my $requestkey = $cdom.'_'.$cnum; if ($requestkey =~ /^($match_domain)_($match_courseid)$/) { my %history = &Apache::lonnet::restore($requestkey,'courserequests', @@ -2809,7 +2801,7 @@ sub get_queued { if (($status eq 'approval') || ($status eq 'approved')) { $output .= '

    '.&mt('Author role request').'
    '; if ($status eq 'approval') { - $output .= &mt('A request for authoring space submitted on [_1] is awaiting approval', + $output .= &mt('A request for Authoring Space submitted on [_1] is awaiting approval', &Apache::lonlocal::locallocaltime($timestamp)); } elsif ($status eq 'approved') { my %roleshash =