--- loncom/interface/Attic/londropadd.pm 2002/04/16 19:08:49 1.25
+++ loncom/interface/Attic/londropadd.pm 2002/05/06 17:48:57 1.41
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.25 2002/04/16 19:08:49 matthew Exp $
+# $Id: londropadd.pm,v 1.41 2002/05/06 17:48:57 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -59,59 +59,89 @@ use Apache::Constants qw(:common :http R
# ================================================================ Print header
sub header {
- my $r=shift;
- $r->print(<
-
Drop/Add Students
-
- +>Set Starting Date +
+>Set Ending Date +
-
-
+
+
+
ERROR:$error"); } -# ----------------------------------------------------------- Print out choices + } elsif (!defined(%currentlist)) { + $r->print("There are no students currently enrolled.\n"); + } else { + # Print out the available choices &show_drop_list($r,%currentlist); + } +} + +# ============================================== 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 { - $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 | +ID | student name | generation | +section | |
---|---|---|---|---|---|---|
'. - $sname.' | '.$sdom.' | '. - $reply{$sname}.' | '. - &Apache::lonnet::unescape($reply[2]).' '. - &Apache::lonnet::unescape($reply[3]).', '. - &Apache::lonnet::unescape($reply[0]).' '. - &Apache::lonnet::unescape($reply[1]). - ' | '. - $ssec." | ||
'. + 'Internal error: unable to get environment '. + 'for '.$sname.' in domain '.$sdom.' | ||||||
+ | $sname | +$sdom | +$reply{$sname} | +$info{'lastname'}, $info{'firstname'} $info{'middlename'} | +$info{'generation'} | +$ssec | +
+ + +
+END } # ================================================= Drop/Add from uploaded file - sub upfile_drop_add { my $r=shift; &Apache::loncommon::load_tmp_file($r); my @studentdata=&Apache::loncommon::upfile_record_sep(); - my @keyfields=split(/\,/,$ENV{'form.keyfields'}); - my $cid=$ENV{'request.course.id'}; + my @keyfields = split(/\,/,$ENV{'form.keyfields'}); + my $cid = $ENV{'request.course.id'}; my %fields=(); - for (my $i=0;$i<=$ENV{'form.nfields'};$i++) { + for (my $i=0; $i<=$ENV{'form.nfields'}; $i++) { if ($ENV{'form.upfile_associate'} eq 'reverse') { if ($ENV{'form.f'.$i} ne 'none') { $fields{$keyfields[$i]}=$ENV{'form.f'.$i}; @@ -721,20 +895,34 @@ sub upfile_drop_add { $fields{$ENV{'form.f'.$i}}=$keyfields[$i]; } } - my $startdate=$ENV{'form.startdate'}; - my $enddate=$ENV{'form.enddate'}; + # + my $startdate = $ENV{'form.startdate'}; + my $enddate = $ENV{'form.enddate'}; if ($startdate=~/\D/) { $startdate=''; } - if ($enddate=~/\D/) { $enddate=''; } + if ($enddate=~/\D/) { $enddate=''; } + # Determine domain and desired host (home server) my $domain=$ENV{'form.lcdomain'}; - my $amode=''; - my $genpwd=''; + 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 = ''; if ($ENV{'form.login'} eq 'krb') { $amode='krb4'; - $genpwd=$ENV{'form.krbdom'}; + $genpwd=$ENV{'form.krbarg'}; } elsif ($ENV{'form.login'} eq 'int') { $amode='internal'; - if ((defined($ENV{'form.intpwd'})) && ($ENV{'form.intpwd'})) { - $genpwd=$ENV{'form.intpwd'}; + if ((defined($ENV{'form.intarg'})) && ($ENV{'form.intarg'})) { + $genpwd=$ENV{'form.intarg'}; } } elsif ($ENV{'form.login'} eq 'loc') { $amode='localauth'; @@ -743,20 +931,23 @@ sub upfile_drop_add { } } unless (($domain=~/\W/) || ($amode eq '')) { + ####################################### + ## Enroll Students ## + ####################################### $r->print(''); } else { + # determine section number my $sec=''; my $username=$entries{$fields{'username'}}; if (defined($fields{'sec'})) { @@ -783,6 +975,7 @@ sub upfile_drop_add { $sec=$entries{$fields{'sec'}}; } } + # determine student id number my $id=''; if (defined($fields{'id'})) { if (defined($entries{$fields{'id'}})) { @@ -790,6 +983,7 @@ sub upfile_drop_add { } $id=~tr/A-Z/a-z/; } + # determine student password my $password=''; if ($genpwd) { $password=$genpwd; @@ -801,14 +995,16 @@ sub upfile_drop_add { } } if ($password) { - &dropstudent($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'}); - unless ($reply eq 'ok') { - $r->print( - "
Error enrolling $username: $reply
"); + $startdate,$ENV{'form.forceid'},$desiredhost); + if ($reply ne 'ok') { + $r->print('
'. + 'Error enrolling '.$username.': '. + $reply.'
'); } else { $count++; $flushc++; $student{$username}=1; @@ -822,130 +1018,129 @@ sub upfile_drop_add { $r->print("No password for $username
"); } } - } - } + } + } # end of foreach (@studentdata) $r->print('
Processed Students: '.$count); -# --------------------------------------------------------------- Drop students + ##################################### + # Drop students # + ##################################### if ($ENV{'form.fullup'} eq 'yes') { $r->print('
ERROR:$error'); + } + if (defined(%currentlist)) { + # Drop the students foreach (@studentdata) { my %entries=&Apache::loncommon::record_sep($_); unless (($entries{$fields{'username'}} eq '') || (!defined($entries{$fields{'username'}}))) { - delete($currentlist{ - $entries{$fields{'username'}}.':'. - $domain}); + delete($currentlist{$entries{$fields{'username'}}. + ':'.$domain}); } } -# ----------------------------------------------------------- Print out choices + # Print out list of dropped students &show_drop_list($r,%currentlist); } else { - $r->print('
Dropped '.$count.' student(s).'); $r->print('
Re-enrollment will re-activate data.'); } # ================================================================ Main Handler - sub handler { - my $r=shift; - $Apache::lonxml::debug=1; - if ($r->header_only) { - $r->content_type('text/html'); - $r->send_http_header; - return OK; - } -# ----------------------------------------------------- Needs to be in a course - if (($ENV{'request.course.fn'}) && - (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'}))) { -# ------------------------------------------------------------------ Start page - $r->content_type('text/html'); - $r->send_http_header; - &header($r); -# --------------------------------------------------- Phase one, initial screen - unless ($ENV{'form.phase'}) { - &menu_phase_one($r); - } -# ------------------------------------------------------------------- Phase two - if ($ENV{'form.associate'} eq 'Reverse Association') { - $ENV{'form.phase'} = 'two'; - if ( $ENV{'form.upfile_associate'} ne 'reverse' ) { - $ENV{'form.upfile_associate'} = 'reverse'; - } else { - $ENV{'form.upfile_associate'} = 'forward'; - } - } - if ($ENV{'form.phase'} eq 'two') { - if ($ENV{'form.fileupload'}) { - &menu_phase_two_upload($r); - } elsif ($ENV{'form.enroll'}) { - &menu_phase_two_enroll($r); - } elsif ($ENV{'form.drop'}) { - &menu_phase_two_drop($r); - } - } -# ----------------------------------------------------------------- Phase three - if ($ENV{'form.phase'} eq 'three') { - if ($ENV{'form.datatoken'}) { - &upfile_drop_add($r); - } - } -# ------------------------------------------------------------------ Phase four - if ($ENV{'form.phase'} eq 'four') { - &drop_student_list($r); - } -# ------------------------------------------------------------------ Phase five - if ($ENV{'form.phase'} eq 'five') { - &enroll_single_student($r); - } -# ------------------------------------------------------------------------- End - $r->print('