--- loncom/interface/Attic/londropadd.pm 2002/04/26 18:59:00 1.31 +++ loncom/interface/Attic/londropadd.pm 2002/05/03 16:30:48 1.38 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.31 2002/04/26 18:59:00 matthew Exp $ +# $Id: londropadd.pm,v 1.38 2002/05/03 16:30:48 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,32 @@ 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'; + } else { + $result =~ s/(ok:)+/ok/g; + } + return $result; } # ============ build a domain and server selection form @@ -167,7 +175,8 @@ sub phase_two_header { Total number of records found in file: $distotal
Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)
-
+
Note: for large courses, this operation might be time consuming.
ENDPICK
}
@@ -502,7 +511,8 @@ sub menu_phase_two_upload {
sub enroll_single_student {
my $r=shift;
$r->print('
Enrolling '.$ENV{'form.cuname'}." in domain ". + $ENV{'form.lcdomain'}.'
'); if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&& ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) { # Deal with home server selection @@ -518,7 +528,7 @@ sub enroll_single_student { return; } } - $r->print(" with server $desiredhost :"); + $r->print(" with server $desiredhost :") if (defined($desiredhost)); # End of home server selection logic my $amode=''; my $genpwd=''; @@ -533,7 +543,12 @@ sub enroll_single_student { $genpwd=$ENV{'form.locarg'}; if (!$genpwd) { $genpwd=" "; } } - if (($amode) && ($genpwd)) { + 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.lcdomain'},$ENV{'form.cuname'}, $ENV{'form.cstid'},$amode,$genpwd, @@ -542,10 +557,10 @@ sub enroll_single_student { $ENV{'form.csec'},$ENV{'form.enddate'}, $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'); + $r->print('ERROR '. + 'Invalid login mode or password. '. + 'Unable to enroll '.$ENV{'form.cuname'}.'.
'); } } else { $r->print('Invalid username or domain'); @@ -672,6 +687,7 @@ sub get_current_classlist { } return (undef,%currentlist); } else { + $tmp =~ s/^error://; return ($tmp,undef); } } @@ -680,12 +696,11 @@ sub get_current_classlist { sub menu_phase_two_drop { my $r=shift; my $cid=$ENV{'request.course.id'}; - my ($error,%currentlist)=&get_current_classlist($ENV{'course.'.$cid.'.domain'}, - $ENV{'course.'.$cid.'.num'}); + my ($error,%currentlist)=&get_current_classlist + ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); if (defined($error)) { - $r->print('ERROR:$error'); - } - if (!defined(%currentlist)) { + $r->print("
ERROR:$error"); + } elsif (!defined(%currentlist)) { $r->print("There are no students currently enrolled.\n"); } else { # Print out the available choices @@ -698,6 +713,20 @@ sub show_drop_list { my ($r,%currentlist)=@_; my $cid=$ENV{'request.course.id'}; $r->print(<<'END'); + +
username | domain | @@ -732,7 +761,12 @@ END } } $r->print('
---|
+ + +
+END } # ================================================= Drop/Add from uploaded file @@ -852,11 +886,12 @@ sub upfile_drop_add { } } if ($password) { + &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'},$desiredhost); - &modifystudent($domain,$username,$cid,$sec); if ($reply ne 'ok') { $r->print(''.
'Error enrolling '.$username.': '.
@@ -912,10 +947,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' || $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).');