--- loncom/interface/Attic/londropadd.pm 2002/04/25 19:21:34 1.30 +++ loncom/interface/Attic/londropadd.pm 2002/04/26 18:59:00 1.31 @@ -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 @@ sub modifystudent { } } +# ============ 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 @@ 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(< @@ -474,9 +502,24 @@ sub menu_phase_two_upload { sub enroll_single_student { my $r=shift; $r->print('

Enrolling Student

'); - $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('Error:'. + '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 @@ sub enroll_single_student { 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 @@ 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(< @@ -535,7 +579,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!='') && @@ -713,8 +757,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('Error:'. + 'Invalid home server specified'); + return; + } + } # Determine authentication mechanism my $amode = ''; my $genpwd = ''; @@ -797,11 +852,11 @@ sub upfile_drop_add { } } 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('

'. 'Error enrolling '.$username.': '.