--- loncom/interface/Attic/londropadd.pm	2002/04/25 19:21:34	1.30
+++ loncom/interface/Attic/londropadd.pm	2002/04/29 14:36:23	1.33
@@ -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.33 2002/04/29 14:36:23 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -75,7 +75,7 @@ ENDHEAD
 
 # =========== Drop student from all sections of a course, except optional $csec
 sub modifystudent {
-    my ($udom,$unam,$courseid,$csec)=@_;
+    my ($udom,$unam,$courseid,$csec,$desiredhost)=@_;
     # if $csec is undefined, drop the student from all the courses matching
     # this one.  If $csec is defined, drop them from all other sections of 
     # this course and add them to section $csec
@@ -97,13 +97,43 @@ sub modifystudent {
                 my $now=time;
                 if (!($start && ($now<$start)) || !($end && ($now>$end))) {
                     my $reply=&Apache::lonnet::modifystudent
-                        ($udom,$unam,'','','','','','','',$section,time);
+                        ($udom,$unam,'','','','','','','',
+                         $section,time,undef,undef,$desiredhost);
                 }
             }
         }
     }
 }
 
+# ============ 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 +412,7 @@ sub phase_two_end {
     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 +503,24 @@ sub menu_phase_two_upload {
 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 +535,17 @@ sub enroll_single_student {
 	    if (!$genpwd) { $genpwd=" "; }
 	}
         if (($amode) && ($genpwd)) {
-            &modifystudent($ENV{'form.cdomain'},$ENV{'form.cuname'},
-                           $ENV{'request.course.id'},$ENV{'form.csec'});
+            &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
+                           $ENV{'request.course.id'},$ENV{'form.csec'},
+                            $desiredhost);
           $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));
 	} else {
            $r->print('Invalid login mode or password');    
         }          
@@ -523,7 +569,7 @@ sub menu_phase_two_enroll {
     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 +581,7 @@ function verify(vf) {
     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!='') &&
@@ -654,6 +700,20 @@ sub show_drop_list {
     my ($r,%currentlist)=@_;
     my $cid=$ENV{'request.course.id'};
     $r->print(<<'END');
+<script>
+function checkAll(field)
+{
+    for (i = 0; i < field.length; i++)
+        field[i].checked = true ;
+}
+
+function uncheckAll(field)
+{
+    for (i = 0; i < field.length; i++)
+        field[i].checked = false ;
+}
+</script>
+<p>
 <input type="hidden" name="phase" value="four">
 <table border=2>
 <tr><th>&nbsp;</th><th>username</th><th>domain</th>
@@ -688,7 +748,12 @@ END
         }
     }
     $r->print('</table><br>');
-    $r->print('<input type=submit value="Drop Students">');
+    $r->print(<<"END");
+</p><p>
+<input type="button" value="check all" onclick="javascript:checkAll(document.studentform.droplist)"> &nbsp;
+<input type="button" value="uncheck all" onclick="javascript:uncheckAll(document.studentform.droplist)"> 
+<p><input type=submit value="Drop Students"></p>
+END
 }
 
 # ================================================= Drop/Add from uploaded file
@@ -713,8 +778,19 @@ sub upfile_drop_add {
     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 +873,12 @@ sub upfile_drop_add {
                         }
                     }
                     if ($password) {
-                        &modifystudent($domain,$username,$cid,$sec);
+                        &modifystudent($domain,$username,$cid,$sec,
+                                       $desiredhost);
                         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);
                         if ($reply ne 'ok') {
                             $r->print('<p><b>'.
                                       'Error enrolling '.$username.': '.