--- loncom/interface/Attic/londropadd.pm 2002/04/22 15:26:46 1.28
+++ loncom/interface/Attic/londropadd.pm 2002/04/30 15:24:16 1.35
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.28 2002/04/22 15:26:46 matthew Exp $
+# $Id: londropadd.pm,v 1.35 2002/04/30 15:24:16 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
@@ -84,24 +84,61 @@ sub modifystudent {
my %roles = &Apache::lonnet::dump('roles',$udom,$unam);
my ($tmp) = keys(%roles);
# Bail out if we were unable to get the students roles
- return if ($tmp =~ /^(con_lost|error|no_such_host)/i);
+ return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i);
# Go through the roles looking for enrollment in this course
+ my $result = '';
foreach my $course (keys(%roles)) {
- my $value = $roles{$course};
- if ($course=~/^$courseid(?:\/)*(\w+)*\_st$/) {
+ if ($course=~/^$courseid(?:\/)*(?:\s+)*(\w+)*\_st$/) {
# We are in this course
my $section=$1;
$section='' if ($course eq $courseid.'_st');
- if (((!$section) && (!$csec)) || ($section ne $csec)) {
+ if ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
my (undef,$end,$start)=split(/\_/,$roles{$course});
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);
+ $result .= $reply.':';
}
}
}
}
+ if ($result eq '') {
+ $result eq 'Unable to find section for this student';
+ } elsif ($result =~ /^(ok:)+$/) {
+ $result eq 'ok';
+ }
+ return $result;
+}
+
+# ============ 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
@@ -166,15 +203,15 @@ function verify_message (vf,founduname,f
alert('You need to specify the username field');
return;
}
- if (vf.login.value == null) {
+ if (current.radiovalue == null || current.radiovalue == 'nochange') {
// They did not check any of the login radiobuttons.
alert('You must choose an authentication type');
return;
}
foundatype=1;
- if (vf.login.argfield.value == '') {
+ if (current.argfield == null || current.argfield == '') {
var alertmsg = '';
- switch (vf.login.value) {
+ switch (current.value) {
case 'krb':
alertmsg = 'You need to specify the Kerberos domain';
break;
@@ -382,6 +419,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);
+ my $domform = &domain_form($defdom);
$r->print(<
+LON-CAPA domain: $domform
Enrolling '.$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 :") if (defined($desiredhost)); + # End of home server selection logic my $amode=''; my $genpwd=''; if ($ENV{'form.login'} eq 'krb') { @@ -487,18 +542,24 @@ sub enroll_single_student { $genpwd=$ENV{'form.locarg'}; if (!$genpwd) { $genpwd=" "; } } - if (($amode) && ($genpwd)) { - &modifystudent($ENV{'form.cdomain'},$ENV{'form.cuname'}, - $ENV{'request.course.id'},$ENV{'form.csec'}); + my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'}, + $ENV{'form.lcdomain'}); + if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { + &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'); + $r->print('ERROR '. + 'Invalid login mode or password. '. + 'Unable to enroll '.$ENV{'form.cuname'}.'.
'); } } else { $r->print('Invalid username or domain'); @@ -519,6 +580,8 @@ sub menu_phase_two_enroll { 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 = &domain_form($defdom); # Print it all out $r->print(<Domain:
+Domain: $domform
Note: login settings below will not take effect if the user already exists
$krbform @@ -649,6 +712,20 @@ sub show_drop_list { my ($r,%currentlist)=@_; my $cid=$ENV{'request.course.id'}; $r->print(<<'END'); + +
username | domain | @@ -683,7 +760,12 @@ END } } $r->print('
---|
+ + +
+END } # ================================================= Drop/Add from uploaded file @@ -708,8 +790,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 = ''; @@ -792,11 +885,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(''.
'Error enrolling '.$username.': '.
@@ -852,10 +946,21 @@ sub upfile_drop_add {
sub drop_student_list {
my $r=shift;
my $count=0;
- foreach (@{$ENV{'form.droplist'}}) {
+ my @droplist;
+ if (ref($ENV{'form.droplist'})) {
+ @droplist = @{$ENV{'form.droplist'}};
+ } else {
+ @droplist = ($ENV{'form.droplist'});
+ }
+ foreach (@droplist) {
my ($uname,$udom)=split(/\:/,$_);
- &modifystudent($udom,$uname,$ENV{'request.course.id'});
- $r->print('Dropped '.$uname.' at '.$udom.'
');
+ my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
+ if ($result eq 'ok') {
+ $r->print('Dropped '.$uname.' at '.$udom.'
');
+ } else {
+ $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.
+ '
');
+ }
$count++;
}
$r->print('
Dropped '.$count.' student(s).'); @@ -865,7 +970,6 @@ sub drop_student_list { # ================================================================ Main Handler sub handler { my $r=shift; - $Apache::lonxml::debug=1; if ($r->header_only) { $r->content_type('text/html'); $r->send_http_header;