--- loncom/interface/Attic/londropadd.pm 2003/07/05 10:07:11 1.73 +++ loncom/interface/Attic/londropadd.pm 2003/09/08 14:30:47 1.85 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.73 2003/07/05 10:07:11 www Exp $ +# $Id: londropadd.pm,v 1.85 2003/09/08 14:30:47 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,7 +32,7 @@ # (TeX Content Handler # ############################################################### -############################################################### +############################################################## package Apache::londropadd; @@ -154,7 +154,7 @@ sub print_main_menu {

- View Classlist + View Class List

@@ -185,6 +185,7 @@ sub print_upload_manager_header { $javascript=&upload_manager_javascript_forward_associate(); } my $javascript_validations=&javascript_validations($krbdefdom); + my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); $r->print(<Uploading Class List


@@ -198,6 +199,7 @@ to this page if the data selected is ins +Ignore First Line @@ -275,6 +277,36 @@ ENDPICK } +sub javascript_validations_without_auth { + my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); + return (<dir_config('lonDefDomain'); + 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); @@ -523,6 +556,8 @@ sub print_upload_manager_form { # ======================================================= 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 @@ -590,10 +625,14 @@ sub enroll_single_student { $r->print("unable to enroll: ".$login_result); } } else { - $r->print('

ERROR '. - 'Invalid login mode or password. '. - 'Unable to enroll '.$ENV{'form.cuname'}.'.

'); - } + $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'); } @@ -678,32 +717,132 @@ sub make_dates_default { return $result; } -# ======================================================= Menu Phase Two Enroll +## +## Single student enrollment routines (some of them) +## +sub get_student_username_domain_form { + my $r = shift; + my $domform = &Apache::loncommon::select_dom_form + ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0); + $r->print(< + +

Enroll One Student

+ + + + + + + +
Username:
Domain:$domform
  + +
+END + return; +} + sub print_enroll_single_student_form { my $r=shift; $r->print("

Enroll One Student

"); - my $today = time; - my $halfyear = $today+15552000; - my $defdom=$r->dir_config('lonDefDomain'); - # Set up authentication forms - my ($krbdef,$krbdefdom) = - &Apache::loncommon::get_kerberos_defaults($defdom); - my $javascript_validations=&javascript_validations($krbdefdom); - my %param = ( formname => 'document.studentform', - kerb_def_dom => $krbdefdom, - kerb_def_auth => $krbdef - ); - 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); + # + my $username = $ENV{'form.cuname'}; + my $domain = $ENV{'form.cudomain'}; + my $home = &Apache::lonnet::homeserver($username,$domain); + # $new_user flags whether we are creating a new user or using an old one + my $new_user = 1; + if ($home ne 'no_host') { + $new_user = 0; + } + &Apache::lonnet::logthis('home = '.$home); + # + my $user_data_html = ''; + my $javascript_validations = ''; + if ($new_user) { + my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; + # Set up authentication forms + my ($krbdef,$krbdefdom) = + &Apache::loncommon::get_kerberos_defaults($domain); + $javascript_validations=&javascript_validations($krbdefdom); + my %param = ( formname => 'document.studentform', + kerb_def_dom => $krbdefdom, + kerb_def_auth => $krbdef + ); + 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 $homeserver_form = ''; + my %servers = &Apache::loncommon::get_library_servers($domain); + $homeserver_form = '\n"; + # + # + $user_data_html = <User Data for $username\@$domain + + + + + + + + + + + +
First Name:
Middle Name:
Last Name:
Generation:
Home Server:$homeserver_form
+

Password

+Please select an authentication mechanism + +

+$krbform +
+$intform +
+$locform +

+END + } else { + # User already exists. Do not worry about authentication + my %uenv = &Apache::lonnet::dump('environment',$domain,$username); + $javascript_validations = &javascript_validations_without_auth(); + $user_data_html = <User Data for $username\@$domain + +
+ + + + + + + + +
First Name: + +
Middle Name: + +
Last Name: + +
Generation: + +
+END + } my $date_table = &date_setting_table(); - # Print it all out + # Print it all out $r->print(< - - + + + + -

Personal Data

- - - - - -
First Name:
Middle Name:
Last Name:
Generation:
-

Login Data

-

Username:

-

Domain: $domform

-

Note: login settings below will not take effect if the user already exists -

-$krbform -

-$intform -

-$locform -

+$user_data_html

Course Data

@@ -810,7 +932,7 @@ sub print_html_classlist {

-Current Classlist +Current Class List       END if ($ENV{'form.action'} ne 'modifystudent') { @@ -915,7 +1037,7 @@ END $excel_workbook->set_tempdir('/home/httpd/perl/tmp'); $excel_sheet = $excel_workbook->addworksheet('classlist'); # - my $description = 'Classlist for '. + my $description = 'Class List for '. $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; $excel_sheet->write($row++,0,$description); # @@ -1082,6 +1204,9 @@ END sub modify_single_student { my $r = shift; # + # Remove non alphanumeric values from the section + $ENV{'form.section'} =~ s/\W//g; + # # Do the date defaults first my ($starttime,$endtime) = &get_dates_from_form(); if ($ENV{'form.makedatesdefault'}) { @@ -1406,6 +1531,7 @@ $upfile_select + Ignore First Line

$create_classlist_help
$create_csv_help @@ -1419,6 +1545,7 @@ sub upfile_drop_add { my $r=shift; &Apache::loncommon::load_tmp_file($r); my @studentdata=&Apache::loncommon::upfile_record_sep(); + if($ENV{'form.noFirstLine'}){shift(@studentdata);} my @keyfields = split(/\,/,$ENV{'form.keyfields'}); my $cid = $ENV{'request.course.id'}; my %fields=(); @@ -1467,6 +1594,14 @@ sub upfile_drop_add { $genpwd=$ENV{'form.locarg'}; } } + if ($amode =~ /^krb/) { + if (! defined($genpwd) || $genpwd eq '') { + $r->print(''. + 'Unable to enroll students:'.' '. + 'No Kerberos domain was specified.

'); + $amode = ''; # This causes the loop below to be skipped + } + } unless (($domain=~/\W/) || ($amode eq '')) { ####################################### ## Enroll Students ## @@ -1512,6 +1647,8 @@ sub upfile_drop_add { $sec=$entries{$fields{'sec'}}; } } + # remove non alphanumeric values from section + $sec =~ s/\W//g; # determine student id number my $id=''; if (defined($fields{'id'})) { @@ -1544,7 +1681,7 @@ sub upfile_drop_add { \$lname,\$gen,\$sec) { $$_ =~ s/(\s+$|^\s+)//g; } - if ($password) { + if ($password || $ENV{'form.login'} eq 'loc') { &modifystudent($domain,$username,$cid,$sec, $desiredhost); my $reply=&Apache::lonnet::modifystudent @@ -1648,7 +1785,8 @@ The response to the request is governed upload enrolling enroll students based on upload drop undefined print the classlist ready to drop drop done drop the selected students - enrollstudent undefined print single student enroll menu + enrollstudent undefined print student username domain form + enrollstudent gotusername print single student enroll menu enrollstudent enrolling enroll student classlist undefined print html classlist classlist csv print csv classlist @@ -1716,11 +1854,13 @@ sub handler { } } elsif ($ENV{'form.action'} eq 'enrollstudent') { if (! exists($ENV{'form.state'})) { + &get_student_username_domain_form($r); + } elsif ($ENV{'form.state'} eq 'gotusername') { &print_enroll_single_student_form($r); } elsif ($ENV{'form.state'} eq 'enrolling') { &enroll_single_student($r); } else { - &print_enroll_single_student_form($r); + &get_student_username_domain_form($r); } } elsif ($ENV{'form.action'} eq 'classlist') { if (! exists($ENV{'form.state'})) {