--- loncom/interface/Attic/londropadd.pm 2002/04/15 23:37:37 1.24
+++ loncom/interface/Attic/londropadd.pm 2003/11/07 21:04:37 1.90
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.24 2002/04/15 23:37:37 albertel Exp $
+# $Id: londropadd.pm,v 1.90 2003/11/07 21:04:37 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -31,269 +31,314 @@
#
# (TeX Content Handler
#
-# YEAR=2000
-# 05/29/00,05/30,10/11 Gerd Kortemeyer)
-#
-# 10/11,10/12,10/16 Gerd Kortemeyer)
-#
-# 11/20,11/21,11/22,11/23,11/24,11/25,11/27,11/28,
-# 12/08,12/12 Gerd Kortemeyer)
-#
-# 12/26,12/27,12/28,
-# YEAR=2001
-# 01/01/01,01/15,02/10,02/13,02/14,02/22 Gerd Kortemeyer
-# 8/6 Scott Harrison
-# Guy Albertelli
-# 9/25 Gerd Kortemeyer
-# 12/19 Guy Albertelli
-# YEAR=2002
-# 1/4 Gerd Kortemeyer
+###############################################################
+##############################################################
package Apache::londropadd;
use strict;
use Apache::lonnet();
use Apache::loncommon();
+use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
+use Spreadsheet::WriteExcel;
+use Apache::lonlocal;
-# ================================================================ Print header
-
+###############################################################
+###############################################################
sub header {
- my $r=shift;
- $r->print(<
-
Drop/Add Students
-
\n".''; + $Str .= &mt('Disable ID/Student Number Safeguard and Force Change '. + 'of Conflicting IDs (only do if you know what you are doing)'). + "\n
\n";
+ $Str .= ''."
\n";
+ $Str .= &mt('Note: for large courses, this operation may be time '.
+ 'consuming');
+ $r->print($Str);
+ return;
+}
+
+###############################################################
+###############################################################
+sub print_upload_manager_form {
my $r=shift;
-
+ my $firstLine;
my $datatoken;
if (!$ENV{'form.datatoken'}) {
- $datatoken=&Apache::loncommon::upfile_store($r);
+ $datatoken=&Apache::loncommon::upfile_store($r);
} else {
- $datatoken=$ENV{'form.datatoken'};
- &Apache::loncommon::load_tmp_file($r);
+ $datatoken=$ENV{'form.datatoken'};
+ &Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
+ if($ENV{'form.noFirstLine'}){
+ $firstLine=shift(@records);
+ }
my $total=$#records;
my $distotal=$total+1;
-
- $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
- my $krbdefdom=$1;
- $krbdefdom=~tr/a-z/A-Z/;
-
my $today=time;
my $halfyear=$today+15552000;
-
- my $defdom=$r->dir_config('lonDefDomain');
-
- &phase_two_header($r,$datatoken,$distotal,$krbdefdom);
-
+ my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my ($krbdef,$krbdefdom) =
+ &Apache::loncommon::get_kerberos_defaults($defdom);
+ &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
my $i;
my $keyfields;
if ($total>=0) {
- my @d=(['username','Username'],['names','Last Name, First Names'],
- ['fname','First Name'],['mname','Middle Names/Initials'],
- ['lname','Last Name'],['gen','Generation'],
- ['id','ID/Student Number'],['sec','Group/Section'],
- ['ipwd','Initial Password']);
+ my @field=(['username',&mt('Username')],
+ ['names',&mt('Last Name, First Names')],
+ ['fname',&mt('First Name')],
+ ['mname',&mt('Middle Names/Initials')],
+ ['lname',&mt('Last Name')],
+ ['gen',&mt('Generation')],
+ ['id',&mt('ID/Student Number')],
+ ['sec',&mt('Group/Section')],
+ ['ipwd',&mt('Initial Password')],
+ ['email',&mt('EMail Address')]);
if ($ENV{'form.upfile_associate'} eq 'reverse') {
&Apache::loncommon::csv_print_samples($r,\@records);
- $i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d);
- foreach (@d) { $keyfields.=$_->[0].','; }
+ $i=&Apache::loncommon::csv_print_select_table($r,\@records,
+ \@field);
+ foreach (@field) {
+ $keyfields.=$_->[0].',';
+ }
chop($keyfields);
} else {
- unshift(@d,['none','']);
- $i=&Apache::loncommon::csv_samples_select_table($r,\@records,\@d);
+ unshift(@field,['none','']);
+ $i=&Apache::loncommon::csv_samples_select_table($r,\@records,
+ \@field);
my %sone=&Apache::loncommon::record_sep($records[0]);
$keyfields=join(',',sort(keys(%sone)));
}
}
-
-
- &phase_two_end($r,$i,$keyfields,$defdom,$today,$halfyear);
+ &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear);
}
-# ======================================================= Enroll single student
-
+###############################################################
+###############################################################
sub enroll_single_student {
my $r=shift;
+ # Remove non alphanumeric values from section
+ $ENV{'form.csec'}=~s/\W//g;
+ #
+ # We do the dates first because the action of making them the defaul
+ # in the course is entirely seperate from the action of enrolling the
+ # student. Also, a failure in setting the dates as default is not fatal
+ # to the process of enrolling / modifying a student.
+ my ($startdate,$enddate) = &get_dates_from_form();
+ if ($ENV{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($startdate,$enddate));
+ }
+
$r->print('
Enrolling '.$ENV{'form.cuname'}." \@ ". + $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_library_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') { - $amode='krb4'; - $genpwd=$ENV{'form.krbdom'}; + $amode='krb'; + $amode.=$ENV{'form.krbver'}; + $genpwd=$ENV{'form.krbarg'}; } elsif ($ENV{'form.login'} eq 'int') { $amode='internal'; - $genpwd=$ENV{'form.intpwd'}; + $genpwd=$ENV{'form.intarg'}; } elsif ($ENV{'form.login'} eq 'loc') { $amode='localauth'; $genpwd=$ENV{'form.locarg'}; if (!$genpwd) { $genpwd=" "; } } - if (($amode) && ($genpwd)) { - &dropstudent($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.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'})); + my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'}, + $ENV{'form.lcdomain'}); + if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { + # Clean out any old roles the student has in this class. + &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'}, + $ENV{'request.course.id'},$ENV{'form.csec'}, + $desiredhost); + my $login_result = &Apache::lonnet::modifystudent + ($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'},$enddate, + $startdate,$ENV{'form.forceid'}, + $desiredhost); + if ($login_result =~ /^ok/) { + $r->print($login_result); + $r->print("If active, the new role will be available ". + "when the student next logs in to LON-CAPA.
"); + } else { + $r->print("unable to enroll: ".$login_result); + } } else { - $r->print('Invalid login mode or password'); - } + $r->print('ERROR '); + if ($amode =~ /^krb/) { + $r->print('Missing Kerberos domain information. '); + } else { + $r->print('Invalid login mode or password. '); + } + $r->print('Unable to enroll '.$ENV{'form.cuname'}.'.
'); + } } else { $r->print('Invalid username or domain'); } } -# ======================================================= Menu Phase Two Enroll - -sub menu_phase_two_enroll { - my $r=shift; - - $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/; - my $krbdefdom=$1; - $krbdefdom=~tr/a-z/A-Z/; +sub setup_date_selectors { + my ($starttime,$endtime) = @_; + if (! defined($starttime)) { + $starttime = time; + if (exists($ENV{'course.'.$ENV{'request.course.id'}. + '.default_enrollment_start_date'})) { + $starttime = $ENV{'course.'.$ENV{'request.course.id'}. + '.default_enrollment_start_date'}; + } + } + if (! defined($endtime)) { + $endtime = time+(6*30*24*60*60); # 6 months from now, approx + if (exists($ENV{'course.'.$ENV{'request.course.id'}. + '.default_enrollment_end_date'})) { + $endtime = $ENV{'course.'.$ENV{'request.course.id'}. + '.default_enrollment_end_date'}; + } + } + my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform', + 'startdate', + $starttime); + my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', + 'enddate', + $endtime); + return ($startdateform,$enddateform); +} + +sub get_dates_from_form { + my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); + my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); + if ($ENV{'form.no_end_date'}) { + $enddate = 0; + } + return ($startdate,$enddate); +} + +sub date_setting_table { + my ($starttime,$endtime) = @_; + my ($startform,$endform)=&setup_date_selectors($starttime,$endtime); + my $dateDefault = 'Starting Date | '. + ''.$startform.' | '. + ''.$dateDefault.' | '."
Ending Date | '. + ''.$endform.' | '. + ''.$perpetual.' | '."
Username: | +|
---|---|
Domain: | +$domform |
+ | + + |
First Name: | +|
---|---|
Middle Name: | +|
Last Name: | +|
Generation: | +|
Home Server: | +$homeserver_form |
First Name: | ++ + |
---|---|
Middle Name: | ++ + |
Last Name: | ++ + |
Generation: | ++ + |
- -ID/Student Number:
- -Group/Section:
- -
-Domain:
-Note: login settings below will not take effect if the user already exists
- - -Kerberos authenticated with domain -
- -Internally authenticated (with initial password -) + +$user_data_html + +
Group/Section:
- -Local Authentication with argument - +$date_table
-
+ID/Student Number: +
+ Disable ID/Student Number Safeguard and Force Change of Conflicting IDs -(only do if you know what you are doing)
-
-
-ENDSENROLL
+(only do if you know what you are doing)
+
+ +
+END + return; } # ========================================================= Menu Phase Two Drop +sub print_drop_menu { + my $r=shift; + $r->print("
+Current Class List
+
+END
+ if ($ENV{'form.action'} ne 'modifystudent') {
+ $r->print(<
+
+ username + | + domain + | + ID + | + student name + | + section + | +
---|---|---|---|---|
\n "); + if ($linkto eq 'nothing') { + $r->print($username); + } elsif ($linkto eq 'aboutme') { + $r->print(&Apache::loncommon::aboutmewrapper($username, + $username, + $domain)); + } elsif ($linkto eq 'modify') { + $r->print(''. + $username."\n"); + } + $r->print(<<"END"); + | +$domain | +$id | +$name | +$section | +
'. + 'Your Excel spreadsheet is ready for download.
'."\n"); + } +} + + +# +# print out form for modification of a single students data +# +sub print_modify_student_form { + my $r = shift(); + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['sdom','sname']); + my $sname = $ENV{'form.sname'}; + my $sdom = $ENV{'form.sdom'}; + my $sortby = $ENV{'form.sortby'}; + # determine the students name information + my %info=&Apache::lonnet::get('environment', + ['firstname','middlename', + 'lastname','generation','id'], + $sdom, $sname); + my ($tmp) = keys(%info); + if ($tmp =~ /^(con_lost|error|no_such_host)/i) { + $r->print('Error'. + ''. + 'Unable to retrieve environment data for '.$sname. + 'in domain '.$sdom.'
'. + 'Please contact your LON-CAPA administrator '. + 'regarding this situation.