--- loncom/interface/Attic/londropadd.pm 2002/04/22 15:26:46 1.28
+++ loncom/interface/Attic/londropadd.pm 2002/05/09 15:56:02 1.42
@@ -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.42 2002/05/09 15:56:02 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -62,20 +62,20 @@ sub header {
return(<
-
Drop/Add Students
-
+LON-CAPA domain: $domform
-
+
Note: for large courses, this operation might be time consuming.
ENDPICK
}
@@ -472,8 +516,25 @@ 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.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 +548,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'); @@ -508,6 +575,7 @@ sub enroll_single_student { # ======================================================= Menu Phase Two Enroll sub menu_phase_two_enroll { my $r=shift; + $r->print("Domain:
+Domain: $domform
Note: login settings below will not take effect if the user already exists
$krbform @@ -623,6 +693,7 @@ sub get_current_classlist { } return (undef,%currentlist); } else { + $tmp =~ s/^error://; return ($tmp,undef); } } @@ -630,13 +701,17 @@ sub get_current_classlist { # ========================================================= Menu Phase Two Drop sub menu_phase_two_drop { my $r=shift; + $r->print("
ERROR:$error'); - } - if (!defined(%currentlist)) { + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("
ERROR:$error"); + } + } elsif (!defined(%currentlist)) { $r->print("There are no students currently enrolled.\n"); } else { # Print out the available choices @@ -644,11 +719,126 @@ sub menu_phase_two_drop { } } +# ============================================== view classlist +sub menu_phase_two_view { + my $r=shift; + $r->print("
ERROR:$error"); + } + } elsif (!defined(%currentlist)) { + $r->print("There are no students currently enrolled.\n"); + } else { + # Print out the available choices + &show_class_list($r,'view',%currentlist); + } +} + +# ============================================== view classlist +sub menu_phase_two_viewcsv { + my $r=shift; + my $cid=$ENV{'request.course.id'}; + my ($error,%currentlist)=&get_current_classlist + ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); + if (defined($error)) { + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("
ERROR:$error"); + } + } elsif (!defined(%currentlist)) { + $r->print("There are no students currently enrolled.\n"); + } else { + &show_class_list($r,'csv',%currentlist); + } +} + +# =================================================== Show student list to drop +sub show_class_list { + my ($r,$mode,%currentlist)=@_; + my $cid=$ENV{'request.course.id'}; + # Print out header + if ($mode eq 'view') { + $r->print(<
username | domain | ID | +student name | generation | section |
---|---|---|---|---|---|
' :''). + 'Internal error: unable to get environment '. + 'for '.$sname.' in domain '.$sdom. + ( $mode eq 'view' ?' | |||||
$sname | +$sdom | +$reply{$sname} | +$info{'lastname'}, $info{'firstname'} $info{'middlename'} | +$info{'generation'} | +$ssec | +
username | domain | @@ -683,7 +873,12 @@ END } } $r->print('
---|
+ + +
+END } # ================================================= Drop/Add from uploaded file @@ -708,8 +903,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 +998,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 +1059,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).'); @@ -865,7 +1083,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; @@ -875,9 +1092,9 @@ sub handler { if (($ENV{'request.course.fn'}) && (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'}))) { # Start page - $r->content_type('text/html'); + $r->content_type('text/html') if (! exists($ENV{'form.viewcsv'})); $r->send_http_header; - $r->print(&header()); + $r->print(&header()) if (! exists($ENV{'form.viewcsv'})); # Phase one, initial screen unless ($ENV{'form.phase'}) { &menu_phase_one($r); @@ -898,6 +1115,10 @@ sub handler { &menu_phase_two_enroll($r); } elsif ($ENV{'form.drop'}) { &menu_phase_two_drop($r); + } elsif ($ENV{'form.view'}) { + &menu_phase_two_view($r); + } elsif ($ENV{'form.viewcsv'}) { + &menu_phase_two_viewcsv($r); } } # Phase three @@ -915,7 +1136,7 @@ sub handler { &enroll_single_student($r); } # End - $r->print('