--- loncom/auth/lonroles.pm 2012/09/04 20:47:46 1.276 +++ loncom/auth/lonroles.pm 2012/12/27 18:31:09 1.278 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.276 2012/09/04 20:47:46 raeburn Exp $ +# $Id: lonroles.pm,v 1.278 2012/12/27 18:31:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -595,13 +595,13 @@ ENDENTERKEY if ($env{'request.role.adv'}) { $dest = &Apache::lonenc::unencrypted($dest); if ($destsymb eq '') { - ($destsymb) = ($dest =~ /\?symb=([^\&]*)/); + ($destsymb) = ($dest =~ /(?:\?|\&)symb=([^\&]*)/); $destsymb = &unescape($destsymb); } } } else { if ($destsymb eq '') { - ($destsymb) = ($dest =~ /\?symb=([^\&]+)/); + ($destsymb) = ($dest =~ /(:\?|\&)symb=([^\&]+)/); $destsymb = &unescape($destsymb); } unless ($env{'request.role.adv'}) { @@ -620,7 +620,7 @@ ENDENTERKEY } } } - unless (($dest =~ m{^/enc/}) || ($dest =~ /\?symb=.+___\d+___.+/)) { + unless (($dest =~ m{^/enc/}) || ($dest =~ /(\?|\&)symb=.+___\d+___.+/)) { if (($destsymb ne '') && ($destsymb !~ m{^/enc/})) { my $esc_symb = &escape($destsymb); $dest .= '?symb='.$esc_symb; @@ -1656,6 +1656,11 @@ sub adhoc_course_role { $setprivs = 1; } } + unless ($setprivs) { + if (!exists($env{'user.priv.'.$env{'form.switchrole'}.'./'})) { + $setprivs = 1; + } + } if ($setprivs) { if ($env{'form.switchrole'} =~ m-^(in|ta|ep|ad|st|cr)([\w/]*)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { my $role = $1; @@ -1683,7 +1688,11 @@ sub adhoc_course_role { $spec .= '/'.$usec; $area .= '/'.$usec; } - &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,$area); + if ($role =~ /^cr/) { + &Apache::lonnet::custom_roleprivs(\%newrole,$role,$cdom,$cnum,$spec,$area); + } else { + &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,$area); + } &Apache::lonnet::set_userprivs(\%userroles,\%newrole,\%newgroups); my $adhocstart = $refresh-1; $userroles{'user.role.'.$spec} = $adhocstart.'.';