[LON-CAPA-cvs] cvs: loncom /interface londropadd.pm

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 26 Apr 2002 18:59:00 -0000


matthew		Fri Apr 26 14:59:00 2002 EDT

  Modified files:              
    /loncom/interface	londropadd.pm 
  Log:
  More cleanups - added call to loncommon::linked_select_forms to enable the 
  instructor to specify a machine to create the users on.  This required some
  reworking of the logic involved in adding/dropping users.
  
  
Index: loncom/interface/londropadd.pm
diff -u loncom/interface/londropadd.pm:1.30 loncom/interface/londropadd.pm:1.31
--- loncom/interface/londropadd.pm:1.30	Thu Apr 25 15:21:34 2002
+++ loncom/interface/londropadd.pm	Fri Apr 26 14:59:00 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to drop and add students in courses 
 #
-# $Id: londropadd.pm,v 1.30 2002/04/25 19:21:34 matthew Exp $
+# $Id: londropadd.pm,v 1.31 2002/04/26 18:59:00 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -104,6 +104,35 @@
     }
 }
 
+# ============ build a domain and server selection form
+sub domain_form {
+    my ($defdom) = @_;
+    # Set up domain and server selection forms
+    #
+    # Get the domains
+    my @domains = &Apache::loncommon::get_domains();
+    # build up the menu information to be passed to 
+    # &Apache::loncommon::linked_select_forms
+    my %select_menus;
+    foreach my $dom (@domains) {
+        # set up the text for this domain
+        $select_menus{$dom}->{'text'}= $dom;
+        # we want a choice of 'default' as the default in the second menu
+        $select_menus{$dom}->{'default'}= 'default';
+        $select_menus{$dom}->{'select2'}->{'default'} = 'default';
+        # Now build up the other items in the second menu
+        my %servers = &Apache::loncommon::get_home_servers($dom);
+        foreach my $server (keys(%servers)) {
+            $select_menus{$dom}->{'select2'}->{$server} 
+                                            = "$server $servers{$server}";
+        }
+    }
+    my $result  = &Apache::loncommon::linked_select_forms
+        ('studentform',' with home server ',$defdom,
+         'lcdomain','lcserver',\%select_menus);
+    return $result;
+}
+
 # ============================================================== Menu Phase One
 sub menu_phase_one {
     my $r=shift;
@@ -382,8 +411,7 @@
     my $krbform = &Apache::loncommon::authform_kerberos(%param);
     my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);
-    # Set up domain selection form
-    my $domform = &Apache::loncommon::select_dom_form($defdom,'lcdomain');    
+    my $domform = &domain_form($defdom);
     $r->print(<<ENDPICK);
 </table>
 <input type=hidden name=nfields value=$i>
@@ -474,9 +502,24 @@
 sub enroll_single_student {
     my $r=shift;
     $r->print('<h3>Enrolling Student</h3>');
-    $r->print($ENV{'form.cuname'}." in domain ".$ENV{'form.cdomain'}.": ");
+    $r->print($ENV{'form.cuname'}." in domain ".$ENV{'form.lcdomain'});
     if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
-        ($ENV{'form.cdomain'})&&($ENV{'form.cdomain'}!~/\W/)) {
+        ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {
+        # Deal with home server selection
+        my $domain=$ENV{'form.lcdomain'};
+        my $desiredhost = $ENV{'form.lcserver'};
+        if (lc($desiredhost) eq 'default') {
+            $desiredhost = undef;
+        } else {
+            my %home_servers = &Apache::loncommon::get_home_servers($domain);
+            if (! exists($home_servers{$desiredhost})) {
+                $r->print('<font color="#ff0000">Error:</font>'.
+                          'Invalid home server specified');
+                return;
+            }
+        }
+        $r->print(" with server $desiredhost :");
+        # End of home server selection logic
 	my $amode='';
         my $genpwd='';
         if ($ENV{'form.login'} eq 'krb') {
@@ -491,15 +534,16 @@
 	    if (!$genpwd) { $genpwd=" "; }
 	}
         if (($amode) && ($genpwd)) {
-            &modifystudent($ENV{'form.cdomain'},$ENV{'form.cuname'},
-                           $ENV{'request.course.id'},$ENV{'form.csec'});
           $r->print(&Apache::lonnet::modifystudent(
-                      $ENV{'form.cdomain'},$ENV{'form.cuname'},
+                      $ENV{'form.lcdomain'},$ENV{'form.cuname'},
                       $ENV{'form.cstid'},$amode,$genpwd,
  	              $ENV{'form.cfirst'},$ENV{'form.cmiddle'},
                       $ENV{'form.clast'},$ENV{'form.cgen'},
                       $ENV{'form.csec'},$ENV{'form.enddate'},
-                      $ENV{'form.startdate'},$ENV{'form.forceid'}));
+                      $ENV{'form.startdate'},$ENV{'form.forceid'},
+                    $desiredhost));
+            &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
+                           $ENV{'request.course.id'},$ENV{'form.csec'});
 	} else {
            $r->print('Invalid login mode or password');    
         }          
@@ -523,7 +567,7 @@
     my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);
     # Set up domain selection form
-    my $domform = &Apache::loncommon::select_dom_form($defdom,'cdomain');    
+    my $domform = &domain_form($defdom);
     # Print it all out
     $r->print(<<ENDSENROLL);
 <script type="text/javascript" language="Javascript">
@@ -535,7 +579,7 @@
     var foundsec=0;
     var tw;
     if ((typeof(vf.cuname.value) !="undefined") && (vf.cuname.value!='') && 
-	(typeof(vf.cdomain.value)!="undefined") && (vf.cdomain.value!='')) {
+	(typeof(vf.lcdomain.value)!="undefined") && (vf.lcdomain.value!='')) {
         founduname=1;
     }
     if ((typeof(vf.cfirst.value)!="undefined") && (vf.cfirst.value!='') &&
@@ -713,8 +757,19 @@
     my $enddate   = $ENV{'form.enddate'};
     if ($startdate=~/\D/) { $startdate=''; }
     if ($enddate=~/\D/)   { $enddate=''; }
-    #
+    # Determine domain and desired host (home server)
     my $domain=$ENV{'form.lcdomain'};
+    my $desiredhost = $ENV{'form.lcserver'};
+    if (lc($desiredhost) eq 'default') {
+        $desiredhost = undef;
+    } else {
+        my %home_servers = &Apache::loncommon::get_home_servers($domain);
+        if (! exists($home_servers{$desiredhost})) {
+            $r->print('<font color="#ff0000">Error:</font>'.
+                      'Invalid home server specified');
+            return;
+        }
+    }
     # Determine authentication mechanism
     my $amode  = '';
     my $genpwd = '';
@@ -797,11 +852,11 @@
                         }
                     }
                     if ($password) {
-                        &modifystudent($domain,$username,$cid,$sec);
                         my $reply=&Apache::lonnet::modifystudent
                             ($domain,$username,$id,$amode,$password,
                              $fname,$mname,$lname,$gen,$sec,$enddate,
-                             $startdate,$ENV{'form.forceid'});
+                             $startdate,$ENV{'form.forceid'},$desiredhost);
+                        &modifystudent($domain,$username,$cid,$sec);
                         if ($reply ne 'ok') {
                             $r->print('<p><b>'.
                                       'Error enrolling '.$username.': '.