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

raeburn lon-capa-cvs@mail.lon-capa.org
Thu, 11 Nov 2004 23:17:13 -0000


raeburn		Thu Nov 11 18:17:13 2004 EDT

  Modified files:              
    /loncom/auth	lonroles.pm 
  Log:
  CC privs created on the fly as needed for DC.  Works nicely now.
  
  
Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.106 loncom/auth/lonroles.pm:1.107
--- loncom/auth/lonroles.pm:1.106	Thu Nov 11 17:18:23 2004
+++ loncom/auth/lonroles.pm	Thu Nov 11 18:17:13 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # User Roles Screen
 #
-# $Id: lonroles.pm,v 1.106 2004/11/11 22:18:23 raeburn Exp $
+# $Id: lonroles.pm,v 1.107 2004/11/11 23:17:13 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -83,7 +83,8 @@
     my $then=$ENV{'user.login.time'};
     my $envkey;
     my $dcselect='';
-
+    my %dcroles = ();
+    my $numdc = &check_fordc(\%dcroles,$then);
 
 # ================================================================== Roles Init
     if ($ENV{'form.selectrole'}) {
@@ -121,9 +122,20 @@
                                 "request.role.adv"    => $ENV{'user.adv'},
 				"request.role.domain" => $ENV{'user.domain'});
 
-# Check to see if the user is a DC trying to enter a course                            
-# course selection page
-        my $dcflag = 0;
+# Check to see if the user is a DC trying to enter a course and needs privs to be created
+        if ($numdc > 0) {
+            foreach my $envkey (keys %ENV) {
+                if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) {
+                    if ($dcroles{$1}) {
+                        unless ($ENV{'user.role.cc./'.$1.'/'.$2}) {
+                            &set_privileges($1,$2);
+                        }
+                    }
+                    last;
+                }
+            }
+        }
+
         if ($ENV{'form.dccourse'}) {
             my $dcdom = $ENV{'form.dcdomain'};
             my $pickedcourse = $ENV{'form.dccourse'};
@@ -131,17 +143,6 @@
                 unless ($ENV{'user.role.cc./'.$dcdom.'/'.$pickedcourse}) {
                     if ($ENV{'user.role.dc./'.$dcdom.'/'}) {
                         &set_privileges($dcdom,$pickedcourse);
-                        my $msg=&mt('Entering course ...');
-                        my ($furl,$ferr)=&Apache::lonuserstate::readmap($dcdom.'/'.$pickedcourse);
-                        my $formaction = '/adm/roles/';
-                        my $courseid = $dcdom.'_'.$pickedcourse;
-                        &Apache::lonhtmlcommon::store_recent('cc_pickby_dc_'.$dcdom,
-                            $courseid,$formaction);
-                        # Send the user to the course they selected
-                        &redirect_user($r,&mt('Entering Course'),
-                                $furl,$msg,
-                                $ENV{'environment.remotenavmap'});
-                        return OK;
                     }
                 }
             }
@@ -291,7 +292,6 @@
 			    }
                             # Check to see if the user is a DC coming from the
                             # course selection page
-                            my $dcflag = 0;
                             if ($ENV{'form.dccourse'}) {
                                 my $formaction = '/adm/roles/';
                                 my ($dcdom,$pickedcourse) = split/_/,$courseid;
@@ -435,9 +435,6 @@
 	$r->print('><input type=submit value="'.&mt('Display').'">');
     }
 
-    my %dcroles = ();
-    my $numdc = &check_fordc(\%dcroles,$then);
-
     my (%roletext,%sortrole,%roleclass);
     my $countactive=0;
     my $inrole=0;
@@ -1044,7 +1041,8 @@
     my $userroles = &Apache::lonnet::set_arearole($role,$area,'','',$dcdom,$ENV{'user.name'});
     my %ccrole = ();
     &Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area);
-    $userroles .= &Apache::lonnet::set_userprivs(\$userroles,\%ccrole);                        my @newprivs = split/\n/,$userroles;
+    my ($author,$adv)= &Apache::lonnet::set_userprivs(\$userroles,\%ccrole);
+    my @newprivs = split/\n/,$userroles;
     my %newccroles = ();
     foreach (@newprivs) {
         my ($key,$val) = split/=/,$_;
@@ -1055,7 +1053,6 @@
                          $ENV{'user.name'},
                          $ENV{'user.home'},
                         "Role ".$role);
-                                                                                           
     &Apache::lonnet::appenv(
                           'request.role'        => $role,
                           'request.role.domain' => $dcdom,