[LON-CAPA-cvs] cvs: loncom /auth lonroles.pm

www lon-capa-cvs-allow@mail.lon-capa.org
Sat, 26 Jan 2008 21:12:37 -0000


www		Sat Jan 26 16:12:37 2008 EDT

  Modified files:              
    /loncom/auth	lonroles.pm 
  Log:
  Bug #3765: Ad-hoc co-author
  
  
Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.181 loncom/auth/lonroles.pm:1.182
--- loncom/auth/lonroles.pm:1.181	Fri Nov  9 15:56:34 2007
+++ loncom/auth/lonroles.pm	Sat Jan 26 16:12:32 2008
@@ -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 @@
                                 "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 @@
 		$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 @@
 		$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 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 @@
     my $ccrole = &Apache::lonnet::plaintext('cc');
     $output.= '<span class="LC_rolesinfo">'.
             &mt('[_1]: [_2] from domain [_3]',$ccrole,$selectlink,$dcdom).
+            '</span><br /></tr>'."\n";
+    return $output;
+}
+
+sub allcoauthors_row {
+    my ($dcdom,$rowtype) = @_;
+    my $output = '<tr bgcolor="#77FF77">'.
+                 ' <td colspan="5">';
+    my $carole = &Apache::lonnet::plaintext('ca');
+    my $inputlink='<input type="text" size="10" name="adhoccauname'.$rowtype.'.'.$dcdom.'" />';
+    my $gobutton='<input type="submit" name="adhocca./'.$dcdom.'" value="'.&mt('Go').'" />';
+    $output.= '<span class="LC_rolesinfo">'.
+            &mt('[_1]: [_2] in domain [_3] [_4]',$carole,$inputlink,$dcdom,$gobutton).
             '</span><br /></tr><tr><td colspan="5" height="3"></td></tr>'."\n";
     return $output;
 }
@@ -1015,9 +1052,9 @@
 }
 
 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'},