--- loncom/auth/lonroles.pm 2007/11/09 20:56:34 1.181 +++ loncom/auth/lonroles.pm 2008/01/26 21:12:32 1.182 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.181 2007/11/09 20:56:34 albertel Exp $ +# $Id: lonroles.pm,v 1.182 2008/01/26 21:12:32 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -122,13 +122,35 @@ sub handler { "request.role.adv" => $env{'user.adv'}, "request.role.domain" => $env{'user.domain'}); -# Check if user is a DC trying to enter a course and needs privs to be created +# 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) { +# Is this an ad-hoc CC-role? if (my ($domain,$coursenum) = ($envkey =~ m-^form\.cc\./($match_domain)/($match_courseid)$-)) { if ($dcroles{$domain}) { - &check_privs($domain,$coursenum,$then,$now); + &check_privs($domain,$coursenum,$then,$now,'cc'); + } + last; + } +# Is this a recent ad-hoc CA-role? + if (my ($domain,$coursenum) = + ($envkey =~ m-^form\.ca\./($match_domain)/($match_courseid)$-)) { + if ($dcroles{$domain}) { + &check_privs($domain,$coursenum,$then,$now,'ca'); + } + last; + } +# Is this a new ad-hoc CA-role? + if (my ($domain) = + ($envkey =~ m-^form\.adhocca\./($match_domain)$-)) { + if ($dcroles{$domain}) { + my $user=$env{'form.adhoccauname.'.$domain}; + if (!$user) { $user=$env{'form.adhoccaunamerecent.'.$domain} }; + if (($user) && ($user=~/$match_username/)) { + &check_privs($domain,$user,$then,$now,'ca'); + $env{'form.ca./'.$domain.'/'.$user}=1; + } } last; } @@ -669,7 +691,8 @@ ENDHEADER $output.=$roletext{'user.role.'.$_}; if ($_ =~ m-dc\./($match_domain)/- && $dcroles{$1}) { - $output .= &allcourses_row($1,'recent'); + $output .= &allcourses_row($1,'recent'). + &allcoauthors_row($1,'recent'); } } elsif ($numdc > 0) { unless ($_ =~/^error\:/) { @@ -697,7 +720,8 @@ ENDHEADER $output.=$roletext{$sortrole{$which}}; if ($sortrole{$which} =~ m-dc\./($match_domain)/-) { if ($dcroles{$1}) { - $output .= &allcourses_row($1,''); + $output .= &allcourses_row($1,''). + &allcoauthors_row($1,''); } } } @@ -882,16 +906,16 @@ sub build_roletext { } sub check_privs { - my ($cdom,$cnum,$then,$now) = @_; - my $cckey = 'user.role.cc./'.$cdom.'/'.$cnum; + my ($cdom,$cnum,$then,$now,$checkrole) = @_; + my $cckey = 'user.role.'.$checkrole.'./'.$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($cdom,$cnum); + &set_privileges($cdom,$cnum,$checkrole); } } else { - &set_privileges($cdom,$cnum); + &set_privileges($cdom,$cnum,$checkrole); } } @@ -1005,6 +1029,19 @@ sub allcourses_row { my $ccrole = &Apache::lonnet::plaintext('cc'); $output.= ''. &mt('[_1]: [_2] from domain [_3]',$ccrole,$selectlink,$dcdom). + '
'."\n"; + return $output; +} + +sub allcoauthors_row { + my ($dcdom,$rowtype) = @_; + my $output = ''. + ' '; + my $carole = &Apache::lonnet::plaintext('ca'); + my $inputlink=''; + my $gobutton=''; + $output.= ''. + &mt('[_1]: [_2] in domain [_3] [_4]',$carole,$inputlink,$dcdom,$gobutton). '
'."\n"; return $output; } @@ -1015,9 +1052,9 @@ sub recent_filename { } sub set_privileges { - my ($dcdom,$pickedcourse) = @_; +# role can be cc or ca + my ($dcdom,$pickedcourse,$role) = @_; my $area = '/'.$dcdom.'/'.$pickedcourse; - my $role = 'cc'; my $spec = $role.'.'.$area; my %userroles = &Apache::lonnet::set_arearole($role,$area,'','', $env{'user.domain'},