version 1.69, 2003/06/23 14:38:53
|
version 1.89, 2003/11/06 22:49:59
|
Line 32
|
Line 32
|
# (TeX Content Handler |
# (TeX Content Handler |
# |
# |
############################################################### |
############################################################### |
############################################################### |
############################################################## |
|
|
package Apache::londropadd; |
package Apache::londropadd; |
|
|
Line 42 use Apache::loncommon();
|
Line 42 use Apache::loncommon();
|
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::Constants qw(:common :http REDIRECT); |
use Apache::Constants qw(:common :http REDIRECT); |
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
|
use Apache::lonlocal; |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub header { |
sub header { |
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); |
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); |
|
my $title = &mt('LON-CAPA Enrollment Manager'); |
return(<<ENDHEAD); |
return(<<ENDHEAD); |
<html> |
<html> |
<head> |
<head> |
<title>LON-CAPA Enrollment Manager</title> |
<title>$title</title> |
</head> |
</head> |
$bodytag |
$bodytag |
<form method="post" enctype="multipart/form-data" |
<form method="post" enctype="multipart/form-data" |
Line 79 sub modifystudent {
|
Line 81 sub modifystudent {
|
# We are in this course |
# We are in this course |
my $section=$1; |
my $section=$1; |
$section='' if ($course eq $courseid.'_st'); |
$section='' if ($course eq $courseid.'_st'); |
if ( ((!$section) && (!$csec)) || ($section ne $csec) ) { |
if (defined($csec) && $section eq $csec) { |
|
$result .= 'ok:'; |
|
} elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) { |
my (undef,$end,$start)=split(/\_/,$roles{$course}); |
my (undef,$end,$start)=split(/\_/,$roles{$course}); |
my $now=time; |
my $now=time; |
# if this is an active role |
# if this is an active role |
if (!($start && ($now<$start)) || !($end && ($now>$end))) { |
if (!($start && ($now<$start)) || !($end && ($now>$end))) { |
my $reply=&Apache::lonnet::modifystudent |
my $reply=&Apache::lonnet::modifystudent |
($udom,$unam,'','','','','','','', |
# dom name id mode pass f m l g |
|
($udom,$unam,'', '', '',undef,undef,undef,undef, |
$section,time,undef,undef,$desiredhost); |
$section,time,undef,undef,$desiredhost); |
$result .= $reply.':'; |
$result .= $reply.':'; |
} |
} |
Line 136 sub domain_form {
|
Line 141 sub domain_form {
|
# Menu Phase One |
# Menu Phase One |
sub print_main_menu { |
sub print_main_menu { |
my $r=shift; |
my $r=shift; |
|
my %Text = &Apache::lonlocal::texthash |
|
('upload' => 'Upload a class list', |
|
'enrollone' => 'Enroll a single student', |
|
'modify' => 'Modify student data', |
|
'view' => 'View Class List', |
|
'drop' => 'Drop Students'); |
|
|
$r->print(<<END); |
$r->print(<<END); |
<p> |
<p> |
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=upload">Upload a course list</a> |
<a href="/adm/dropadd?action=upload">$Text{'upload'}</a> |
</font> |
</font> |
</p><p> |
</p><p> |
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=enrollstudent">Enroll a single student</a> |
<a href="/adm/dropadd?action=enrollstudent">$Text{'enrollone'}</a> |
</font> |
</font> |
</p><p> |
</p><p> |
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=modifystudent">Modify student data</a> |
<a href="/adm/dropadd?action=modifystudent">$Text{'modify'}</a> |
</font> |
</font> |
</p><p> |
</p><p> |
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=classlist">View Classlist</a> |
<a href="/adm/dropadd?action=classlist">$Text{'view'}</a> |
</font> |
</font> |
</p><p> |
</p><p> |
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=drop">Drop Students</a> |
<a href="/adm/dropadd?action=drop">$Text{'drop'}</a> |
</font> |
</font> |
</p> |
</p> |
END |
END |
Line 163 END
|
Line 175 END
|
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
|
sub hidden_input { |
|
my ($name,$value) = @_; |
|
return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n"; |
|
} |
|
|
sub print_upload_manager_header { |
sub print_upload_manager_header { |
my ($r,$datatoken,$distotal,$krbdefdom)=@_; |
my ($r,$datatoken,$distotal,$krbdefdom)=@_; |
my $javascript; |
my $javascript; |
Line 181 sub print_upload_manager_header {
|
Line 198 sub print_upload_manager_header {
|
} else { |
} else { |
$javascript=&upload_manager_javascript_forward_associate(); |
$javascript=&upload_manager_javascript_forward_associate(); |
} |
} |
my $javascript_validations=&javascript_validations($krbdefdom); |
my $javascript_validations=&javascript_validations('auth',$krbdefdom); |
$r->print(<<ENDPICK); |
my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); |
<h3>Uploading Class List</h3> |
$r->print('<h3>'.&mt('Uploading Class List')."</h3>\n". |
<hr> |
"<hr>\n". |
<h3>Identify fields</h3> |
'<h3>'.&mt('Identify fields')."</h3>\n"); |
Total number of records found in file: $distotal <hr /> |
$r->print("<p>\n". |
Enter as many fields as you can. The system will inform you and bring you back |
&mt('Total number of records found in file: [_1].',$distotal). |
to this page if the data selected is insufficient to run your class.<hr /> |
"\n". |
<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" /> |
"</p><hr>\n"); |
<input type="hidden" name="action" value="upload" /> |
$r->print(&mt('Enter as many fields as you can. '. |
<input type="hidden" name="state" value="got_file" /> |
'The system will inform you and bring you back to '. |
<input type="hidden" name="associate" value="" /> |
'this page if the data selected is insufficient to '. |
<input type="hidden" name="datatoken" value="$datatoken" /> |
'enroll students in your class.')."<hr>\n"); |
<input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" /> |
$r->print(&hidden_input('action','upload'). |
<input type="hidden" name="upfiletype" value="$ENV{'form.upfiletype'}" /> |
&hidden_input('state','got_file'). |
<input type="hidden" name="upfile_associate" |
&hidden_input('associate',''). |
value="$ENV{'form.upfile_associate'}" /> |
&hidden_input('datatoken',$datatoken). |
<hr /> |
&hidden_input('fileupload',$ENV{'form.fileupload'}). |
<script type="text/javascript" language="Javascript"> |
&hidden_input('upfiletype',$ENV{'form.upfiletype'}). |
$javascript |
&hidden_input('upfile_associate',$ENV{'form.upfile_associate'})); |
$javascript_validations |
$r->print('<input type="button" value="Reverse Association" '. |
</script> |
'name="'.&mt('Reverse Association').'" '. |
ENDPICK |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
|
$r->print('<input type="checkbox" name="noFirstLine" $checked />'. |
|
&mt('Ignore First Line')); |
|
$r->print("<hr />\n". |
|
'<script type="text/javascript" language="Javascript">'."\n". |
|
$javascript."\n".$javascript_validations.'</script>'); |
} |
} |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub javascript_validations { |
sub javascript_validations { |
my ($krbdefdom)=@_; |
my ($mode,$krbdefdom)=@_; |
my %param = ( formname => 'studentform', |
my $authheader; |
kerb_def_dom => $krbdefdom ); |
if ($mode eq 'auth') { |
my $authheader = &Apache::loncommon::authform_header(%param); |
my %param = ( formname => 'studentform', |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
kerb_def_dom => $krbdefdom ); |
return (<<ENDPICK); |
$authheader = &Apache::loncommon::authform_header(%param); |
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec) { |
} |
|
my %alert = &Apache::lonlocal::texthash |
|
(username => 'You need to specify the username field.', |
|
authen => 'You must choose an authentication type.', |
|
krb => 'You need to specify the Kerberos domain.', |
|
ipass => 'You need to specify the initial password.', |
|
name => 'The optional name field was not specified.', |
|
snum => 'The optional student number field was not specified.', |
|
section => 'The optional section or group field was not specified.', |
|
email => 'The optional email address field was not specified.', |
|
continue => 'Continue enrollment?', |
|
); |
|
|
|
# my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
|
my $function_name =(<<END); |
|
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
|
END |
|
my $auth_checks = (<<END); |
var foundatype=0; |
var foundatype=0; |
var message=''; |
|
if (founduname==0) { |
if (founduname==0) { |
alert('You need to specify the username field'); |
alert('$alert{'username'}'); |
return; |
return; |
} |
} |
// alert('current.radiovalue = '+current.radiovalue); |
// alert('current.radiovalue = '+current.radiovalue); |
if (current.radiovalue == null || current.radiovalue == 'nochange') { |
if (current.radiovalue == null || current.radiovalue == 'nochange') { |
// They did not check any of the login radiobuttons. |
// They did not check any of the login radiobuttons. |
alert('You must choose an authentication type'); |
alert('$alert{'authen'}'); |
return; |
return; |
} |
} |
foundatype=1; |
foundatype=1; |
Line 233 function verify_message (vf,founduname,f
|
Line 271 function verify_message (vf,founduname,f
|
var alertmsg = ''; |
var alertmsg = ''; |
switch (current.value) { |
switch (current.value) { |
case 'krb': |
case 'krb': |
alertmsg = 'You need to specify the Kerberos domain'; |
alertmsg = '$alert{'krb'}'; |
break; |
break; |
case 'loc': |
case 'loc': |
case 'fsys': |
case 'fsys': |
alertmsg = 'You need to specify the initial password'; |
alertmsg = '$alert{'ipass'}'; |
break; |
break; |
case 'fsys': |
case 'fsys': |
alertmsg = ''; |
alertmsg = ''; |
Line 250 function verify_message (vf,founduname,f
|
Line 288 function verify_message (vf,founduname,f
|
return; |
return; |
} |
} |
} |
} |
|
END |
if (foundname==0) { message='No name fields specified. '; } |
my $optional_checks = (<<END); |
if (foundid==0) { message+='No ID or student number field specified. '; } |
var message=''; |
if (foundsec==0) { message+='No section or group field specified. '; } |
if (foundname==0) { |
|
message='$alert{'name'}'; |
|
} |
|
if (foundid==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'snum'}'; |
|
} |
|
if (foundsec==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'section'}'; |
|
} |
|
if (foundemail==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'email'}'; |
|
} |
if (message!='') { |
if (message!='') { |
message+='Continue enrollment?'; |
message+= '\\n$alert{'continue'}'; |
if (confirm(message)) { |
if (confirm(message)) { |
vf.state.value='enrolling'; |
vf.state.value='enrolling'; |
vf.submit(); |
vf.submit(); |
} |
} |
} else { |
} else { |
vf.state.value='enrolling'; |
vf.state.value='enrolling'; |
vf.submit(); |
vf.submit(); |
} |
} |
} |
} |
|
|
$authheader |
END |
ENDPICK |
my $result = $function_name; |
|
if ($mode eq 'auth') { |
|
$result .= $auth_checks; |
|
} |
|
$result .= $optional_checks; |
|
if ($mode eq 'auth') { |
|
$result .= $authheader; |
|
} |
|
return $result; |
} |
} |
|
|
############################################################### |
############################################################### |
Line 281 function verify(vf) {
|
Line 346 function verify(vf) {
|
var foundname=0; |
var foundname=0; |
var foundid=0; |
var foundid=0; |
var foundsec=0; |
var foundsec=0; |
|
var foundemail=0; |
var tw; |
var tw; |
for (i=0;i<=vf.nfields.value;i++) { |
for (i=0;i<=vf.nfields.value;i++) { |
tw=eval('vf.f'+i+'.selectedIndex'); |
tw=eval('vf.f'+i+'.selectedIndex'); |
Line 289 function verify(vf) {
|
Line 355 function verify(vf) {
|
if (tw==7) { foundid=1; } |
if (tw==7) { foundid=1; } |
if (tw==8) { foundsec=1; } |
if (tw==8) { foundsec=1; } |
if (tw==9) { foundpwd=1; } |
if (tw==9) { foundpwd=1; } |
|
if (tw==10) { foundemail=1; } |
} |
} |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec); |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail); |
} |
} |
|
|
// |
// |
Line 309 function verify(vf) {
|
Line 376 function verify(vf) {
|
// 7 = id |
// 7 = id |
// 8 = section |
// 8 = section |
// 9 = ipwd (password) |
// 9 = ipwd (password) |
// |
// 10 = email address |
|
|
function flip(vf,tf) { |
function flip(vf,tf) { |
var nw=eval('vf.f'+tf+'.selectedIndex'); |
var nw=eval('vf.f'+tf+'.selectedIndex'); |
var i; |
var i; |
Line 434 sub print_upload_manager_footer {
|
Line 502 sub print_upload_manager_footer {
|
my $date_table = &date_setting_table(); |
my $date_table = &date_setting_table(); |
$r->print(<<ENDPICK); |
$r->print(<<ENDPICK); |
</table> |
</table> |
<input type=hidden name=nfields value=$i> |
<input type="hidden" name="nfields" value="$i"> |
<input type=hidden name=keyfields value="$keyfields"> |
<input type="hidden" name="keyfields" value="$keyfields"> |
<h3>Login Type</h3> |
<h3>Login Type</h3> |
<p>Note: this will not take effect if the user already exists</p> |
<p>Note: this will not take effect if the user already exists</p> |
<p> |
<p> |
Line 468 ENDPICK
|
Line 536 ENDPICK
|
# ======================================================= Menu Phase Two Upload |
# ======================================================= Menu Phase Two Upload |
sub print_upload_manager_form { |
sub print_upload_manager_form { |
my $r=shift; |
my $r=shift; |
|
my $firstLine; |
my $datatoken; |
my $datatoken; |
if (!$ENV{'form.datatoken'}) { |
if (!$ENV{'form.datatoken'}) { |
$datatoken=&Apache::loncommon::upfile_store($r); |
$datatoken=&Apache::loncommon::upfile_store($r); |
Line 477 sub print_upload_manager_form {
|
Line 545 sub print_upload_manager_form {
|
&Apache::loncommon::load_tmp_file($r); |
&Apache::loncommon::load_tmp_file($r); |
} |
} |
my @records=&Apache::loncommon::upfile_record_sep(); |
my @records=&Apache::loncommon::upfile_record_sep(); |
|
if($ENV{'form.noFirstLine'}){$firstLine=shift(@records);} |
my $total=$#records; |
my $total=$#records; |
my $distotal=$total+1; |
my $distotal=$total+1; |
my $today=time; |
my $today=time; |
my $halfyear=$today+15552000; |
my $halfyear=$today+15552000; |
my $defdom=$r->dir_config('lonDefDomain'); |
my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom); |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom); |
Line 496 sub print_upload_manager_form {
|
Line 565 sub print_upload_manager_form {
|
['gen','Generation'], |
['gen','Generation'], |
['id','ID/Student Number'], |
['id','ID/Student Number'], |
['sec','Group/Section'], |
['sec','Group/Section'], |
['ipwd','Initial Password']); |
['ipwd','Initial Password'], |
|
['email','EMail Address']); |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
&Apache::loncommon::csv_print_samples($r,\@records); |
&Apache::loncommon::csv_print_samples($r,\@records); |
$i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d); |
$i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d); |
Line 515 sub print_upload_manager_form {
|
Line 585 sub print_upload_manager_form {
|
# ======================================================= Enroll single student |
# ======================================================= Enroll single student |
sub enroll_single_student { |
sub enroll_single_student { |
my $r=shift; |
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 |
# 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 |
# in the course is entirely seperate from the action of enrolling the |
Line 582 sub enroll_single_student {
|
Line 654 sub enroll_single_student {
|
$r->print("unable to enroll: ".$login_result); |
$r->print("unable to enroll: ".$login_result); |
} |
} |
} else { |
} else { |
$r->print('<p><font color="#ff0000">ERROR</font> '. |
$r->print('<p><font color="#ff0000">ERROR</font> '); |
'Invalid login mode or password. '. |
if ($amode =~ /^krb/) { |
'Unable to enroll '.$ENV{'form.cuname'}.'.</p>'); |
$r->print('Missing Kerberos domain information. '); |
} |
} else { |
|
$r->print('Invalid login mode or password. '); |
|
} |
|
$r->print('<b>Unable to enroll '.$ENV{'form.cuname'}.'.</b></p>'); |
|
} |
} else { |
} else { |
$r->print('Invalid username or domain'); |
$r->print('Invalid username or domain'); |
} |
} |
Line 670 sub make_dates_default {
|
Line 746 sub make_dates_default {
|
return $result; |
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(<<END); |
|
<input type="hidden" name="action" value="enrollstudent" /> |
|
<input type="hidden" name="state" value="gotusername" /> |
|
<h3>Enroll One Student</h3> |
|
<table> |
|
<tr><th>Username:</th> |
|
<td><input type="text" name="cuname" size="15" /></td></tr> |
|
<tr><th>Domain:</th> |
|
<td>$domform</td></tr> |
|
<tr><th> </th> |
|
<td> |
|
<input type="submit" name="Begin Enrollment" value="Begin Enrollment" /> |
|
</td></tr> |
|
</table> |
|
END |
|
return; |
|
} |
|
|
sub print_enroll_single_student_form { |
sub print_enroll_single_student_form { |
my $r=shift; |
my $r=shift; |
$r->print("<h3>Enroll One Student</h3>"); |
$r->print("<h3>Enroll One Student</h3>"); |
my $today = time; |
# |
my $halfyear = $today+15552000; |
my $username = $ENV{'form.cuname'}; |
my $defdom=$r->dir_config('lonDefDomain'); |
my $domain = $ENV{'form.cudomain'}; |
# Set up authentication forms |
my $home = &Apache::lonnet::homeserver($username,$domain); |
my ($krbdef,$krbdefdom) = |
# $new_user flags whether we are creating a new user or using an old one |
&Apache::loncommon::get_kerberos_defaults($defdom); |
my $new_user = 1; |
my $javascript_validations=&javascript_validations($krbdefdom); |
if ($home ne 'no_host') { |
my %param = ( formname => 'document.studentform', |
$new_user = 0; |
kerb_def_dom => $krbdefdom, |
} |
kerb_def_auth => $krbdef |
# |
); |
my $user_data_html = ''; |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $javascript_validations = ''; |
my $intform = &Apache::loncommon::authform_internal(%param); |
if ($new_user) { |
my $locform = &Apache::loncommon::authform_local(%param); |
my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
# Set up domain selection form |
# Set up authentication forms |
my $domform = &domain_form($defdom); |
my ($krbdef,$krbdefdom) = |
|
&Apache::loncommon::get_kerberos_defaults($domain); |
|
$javascript_validations=&javascript_validations('auth',$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 = '<select name="lcserver" size="1">'."\n". |
|
'<option value="default" selected>default</option>'."\n"; |
|
while (my ($servername,$serverdescription) = each (%servers)) { |
|
$homeserver_form .= '<option value="'.$servername.'">'. |
|
$serverdescription."</option>\n"; |
|
} |
|
$homeserver_form .= "</select>\n"; |
|
# |
|
# |
|
$user_data_html = <<END; |
|
<h3>User Data for $username\@$domain</h3> |
|
<table> |
|
<tr><th>First Name:</th> |
|
<td><input type="text" name="cfirst" size="15"></td></tr> |
|
<tr><th>Middle Name:</th> |
|
<td><input type="text" name="cmiddle" size="15"></td></tr> |
|
<tr><th>Last Name:</th> |
|
<td><input type="text" name="clast" size="15"></td></tr> |
|
<tr><th>Generation:</th> |
|
<td><input type="text" name="cgen" size="5"> </td></tr> |
|
<tr><th>Home Server:</th> |
|
<td>$homeserver_form</td></tr> |
|
</table> |
|
<h3>Password</h3> |
|
Please select an authentication mechanism |
|
<table> |
|
<p> |
|
$krbform |
|
<br /> |
|
$intform |
|
<br /> |
|
$locform |
|
</p> |
|
END |
|
} else { |
|
# User already exists. Do not worry about authentication |
|
my %uenv = &Apache::lonnet::dump('environment',$domain,$username); |
|
$javascript_validations = &javascript_validations('noauth'); |
|
$user_data_html = <<END; |
|
<h3>User Data for $username\@$domain</h3> |
|
<input type="hidden" name="lcserver" value="default" /> |
|
<table> |
|
<tr><th>First Name:</th> |
|
<td> |
|
<input type="text" name="cfirst" value="$uenv{'firstname'}" size="15" /> |
|
</td></tr> |
|
<tr><th>Middle Name:</th> |
|
<td> |
|
<input type="text" name="cmiddle" value="$uenv{'middlename'}" size="15" /> |
|
</td></tr> |
|
<tr><th>Last Name:</th> |
|
<td> |
|
<input type="text" name="clast"value="$uenv{'lastname'}" size="15" /> |
|
</td></tr> |
|
<tr><th>Generation:</th> |
|
<td> |
|
<input type="text" name="cgen" value="$uenv{'generation'}" size="5" /> |
|
</td></tr> |
|
</table> |
|
END |
|
} |
my $date_table = &date_setting_table(); |
my $date_table = &date_setting_table(); |
# Print it all out |
# Print it all out |
$r->print(<<END); |
$r->print(<<END); |
<input type="hidden" name="action" value="enrollstudent"> |
<input type="hidden" name="action" value="enrollstudent" /> |
<input type="hidden" name="state" value="done"> |
<input type="hidden" name="state" value="done" /> |
|
<input type="hidden" name="cuname" value="$username" /> |
|
<input type="hidden" name="lcdomain" value="$domain" /> |
<script type="text/javascript" language="Javascript"> |
<script type="text/javascript" language="Javascript"> |
function verify(vf) { |
function verify(vf) { |
var founduname=0; |
var founduname=0; |
Line 732 function clearpwd(vf) {
|
Line 907 function clearpwd(vf) {
|
} |
} |
|
|
</script> |
</script> |
<h3>Personal Data</h3> |
|
<table> |
|
<tr><td>First Name:</td><td> <input type="text" name="cfirst" size="15"></td></tr> |
|
<tr><td>Middle Name:</td><td> <input type="text" name="cmiddle" size="15"></td></tr> |
|
<tr><td>Last Name: </td><td><input type="text" name="clast" size="15"></td></tr> |
|
<tr><td>Generation: </td><td><input type="text" name="cgen" size="5"> </td></tr> |
|
</table> |
|
|
|
<h3>Login Data</h3> |
$user_data_html |
<p>Username: <input type="text" name="cuname" size="15"></p> |
|
<p>Domain: $domform</p> |
|
<p>Note: login settings below will not take effect if the user already exists |
|
</p><p> |
|
$krbform |
|
</p><p> |
|
$intform |
|
</p><p> |
|
$locform |
|
</p><p> |
|
|
|
<h3>Course Data</h3> |
<h3>Course Data</h3> |
|
|
Line 802 sub print_html_classlist {
|
Line 960 sub print_html_classlist {
|
<input type="hidden" name="action" value="$ENV{'form.action'}" /> |
<input type="hidden" name="action" value="$ENV{'form.action'}" /> |
<input type="hidden" name="state" value="" /> |
<input type="hidden" name="state" value="" /> |
<p> |
<p> |
<font size="+1">Current Classlist</font> |
<font size="+1">Current Class List</font> |
|
|
END |
END |
if ($ENV{'form.action'} ne 'modifystudent') { |
if ($ENV{'form.action'} ne 'modifystudent') { |
Line 907 END
|
Line 1065 END
|
$excel_workbook->set_tempdir('/home/httpd/perl/tmp'); |
$excel_workbook->set_tempdir('/home/httpd/perl/tmp'); |
$excel_sheet = $excel_workbook->addworksheet('classlist'); |
$excel_sheet = $excel_workbook->addworksheet('classlist'); |
# |
# |
my $description = 'Classlist for '. |
my $description = 'Class List for '. |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
$excel_sheet->write($row++,0,$description); |
$excel_sheet->write($row++,0,$description); |
# |
# |
Line 1019 sub print_modify_student_form {
|
Line 1177 sub print_modify_student_form {
|
} |
} |
# determine the students starting and ending times and section |
# determine the students starting and ending times and section |
my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom); |
my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom); |
|
if ($starttime =~ /^error/) { |
|
$r->print('<h2>Error</h2>'); |
|
$r->print('<p>'.$starttime.'</p>'); |
|
return; |
|
} |
# Deal with date forms |
# Deal with date forms |
my $date_table = &date_setting_table($starttime,$endtime); |
my $date_table = &date_setting_table($starttime,$endtime); |
# |
# |
Line 1074 END
|
Line 1237 END
|
sub modify_single_student { |
sub modify_single_student { |
my $r = shift; |
my $r = shift; |
# |
# |
|
# Remove non alphanumeric values from the section |
|
$ENV{'form.section'} =~ s/\W//g; |
|
# |
# Do the date defaults first |
# Do the date defaults first |
my ($starttime,$endtime) = &get_dates_from_form(); |
my ($starttime,$endtime) = &get_dates_from_form(); |
if ($ENV{'form.makedatesdefault'}) { |
if ($ENV{'form.makedatesdefault'}) { |
Line 1215 sub get_enrollment_data {
|
Line 1381 sub get_enrollment_data {
|
my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname); |
my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname); |
my ($tmp) = keys(%roles); |
my ($tmp) = keys(%roles); |
# Bail out if we were unable to get the students roles |
# Bail out if we were unable to get the students roles |
return "666" if ($tmp =~ /^(con_lost|error|no_such_host)/i); |
return ('error'.$tmp) if ($tmp =~ /^(con_lost|error|no_such_host)/i); |
# Go through the roles looking for enrollment in this course |
# Go through the roles looking for enrollment in this course |
my ($end,$start) = (undef,undef); |
my ($end,$start) = (undef,undef); |
my $section = ''; |
my $section = ''; |
Line 1383 END
|
Line 1549 END
|
# |
# |
sub print_first_courselist_upload_form { |
sub print_first_courselist_upload_form { |
my $r=shift; |
my $r=shift; |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
my $str; |
my $create_classlist_help = |
$str = '<input type="hidden" name="phase" value="two">'; |
&Apache::loncommon::help_open_topic("Course_Create_Class_List", |
$str .= '<input type="hidden" name="action" value="upload" />'; |
"How do I create a class list from a spreadsheet"); |
$str .= '<input type="hidden" name="state" value="got_file" />'; |
my $create_csv_help = |
$str .= "<h3>".&mt('Upload a class list')."</h3>\n"; |
&Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
$str .= &Apache::loncommon::upfile_select_html(); |
"How do I create a CSV file from a spreadsheet"); |
$str .= "<p>\n"; |
$r->print(<<ENDUPFORM); |
$str .= '<input type="submit" name="fileupload" value="'. |
<input type=hidden name=phase value=two> |
&mt('Upload class list').'">'."\n"; |
<h3>Upload a courselist</h3> |
$str .= '<input type="checkbox" name="noFirstLine" /> '. |
$upfile_select |
&mt('Ignore First Line')."</p>\n"; |
<p> |
$str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", |
<input type=submit name="fileupload" value="Upload Courselist"> |
"How do I create a class list from a spreadsheet"). |
<input type="hidden" name="action" value="upload" /> |
"<br />\n"; |
<input type="hidden" name="state" value="got_file" /> |
$str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
</p> |
"How do I create a CSV file from a spreadsheet"). |
$create_classlist_help <br /> |
"<br />\n"; |
$create_csv_help |
$str .= "</body>\n</html>\n"; |
</body></html> |
$r->print($str); |
ENDUPFORM |
|
return; |
return; |
} |
} |
|
|
Line 1411 sub upfile_drop_add {
|
Line 1576 sub upfile_drop_add {
|
my $r=shift; |
my $r=shift; |
&Apache::loncommon::load_tmp_file($r); |
&Apache::loncommon::load_tmp_file($r); |
my @studentdata=&Apache::loncommon::upfile_record_sep(); |
my @studentdata=&Apache::loncommon::upfile_record_sep(); |
|
if($ENV{'form.noFirstLine'}){shift(@studentdata);} |
my @keyfields = split(/\,/,$ENV{'form.keyfields'}); |
my @keyfields = split(/\,/,$ENV{'form.keyfields'}); |
my $cid = $ENV{'request.course.id'}; |
my $cid = $ENV{'request.course.id'}; |
my %fields=(); |
my %fields=(); |
Line 1436 sub upfile_drop_add {
|
Line 1602 sub upfile_drop_add {
|
} else { |
} else { |
my %home_servers = &Apache::loncommon::get_library_servers($domain); |
my %home_servers = &Apache::loncommon::get_library_servers($domain); |
if (! exists($home_servers{$desiredhost})) { |
if (! exists($home_servers{$desiredhost})) { |
$r->print('<font color="#ff0000">Error:</font>'. |
$r->print('<font color="#ff0000">'.&mt('Error').'</font>'. |
'Invalid home server specified'); |
&mt('Invalid home server specified')); |
|
$r->print("</body>\n</html>\n"); |
return; |
return; |
} |
} |
} |
} |
Line 1459 sub upfile_drop_add {
|
Line 1626 sub upfile_drop_add {
|
$genpwd=$ENV{'form.locarg'}; |
$genpwd=$ENV{'form.locarg'}; |
} |
} |
} |
} |
|
if ($amode =~ /^krb/) { |
|
if (! defined($genpwd) || $genpwd eq '') { |
|
$r->print('<font color="red" size="+1">'. |
|
&mt('Unable to enroll students').'</font> '. |
|
&mt('No Kerberos domain was specified.').'</p>'); |
|
$amode = ''; # This causes the loop below to be skipped |
|
} |
|
} |
unless (($domain=~/\W/) || ($amode eq '')) { |
unless (($domain=~/\W/) || ($amode eq '')) { |
####################################### |
####################################### |
## Enroll Students ## |
## Enroll Students ## |
####################################### |
####################################### |
$r->print('<h3>Enrolling Students</h3>'); |
$r->print('<h3>'.&mt('Enrolling Students')."</h3>\n<p>\n"); |
my $count=0; |
my $count=0; |
my $flushc=0; |
my $flushc=0; |
my %student=(); |
my %student=(); |
Line 1492 sub upfile_drop_add {
|
Line 1667 sub upfile_drop_add {
|
} |
} |
} |
} |
if ($entries{$fields{'username'}}=~/\W/) { |
if ($entries{$fields{'username'}}=~/\W/) { |
$r->print('<p><b>Unacceptable username: '. |
$r->print('<br />'. |
$entries{$fields{'username'}}.' for user '. |
&mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]', |
$fname.' '.$mname.' '.$lname.' '.$gen.'</b><p>'); |
$entries{$fields{'username'}},$fname,$mname,$lname,$gen). |
|
'</b>'); |
} else { |
} else { |
# determine section number |
# determine section number |
my $sec=''; |
my $sec=''; |
Line 1504 sub upfile_drop_add {
|
Line 1680 sub upfile_drop_add {
|
$sec=$entries{$fields{'sec'}}; |
$sec=$entries{$fields{'sec'}}; |
} |
} |
} |
} |
|
# remove non alphanumeric values from section |
|
$sec =~ s/\W//g; |
# determine student id number |
# determine student id number |
my $id=''; |
my $id=''; |
if (defined($fields{'id'})) { |
if (defined($fields{'id'})) { |
Line 1512 sub upfile_drop_add {
|
Line 1690 sub upfile_drop_add {
|
} |
} |
$id=~tr/A-Z/a-z/; |
$id=~tr/A-Z/a-z/; |
} |
} |
|
# determine email address |
|
my $email=''; |
|
if (defined($fields{'email'})) { |
|
if (defined($entries{$fields{'email'}})) { |
|
$email=$entries{$fields{'email'}}; |
|
unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; } |
|
} |
|
} |
# determine student password |
# determine student password |
my $password=''; |
my $password=''; |
if ($genpwd) { |
if ($genpwd) { |
Line 1528 sub upfile_drop_add {
|
Line 1714 sub upfile_drop_add {
|
\$lname,\$gen,\$sec) { |
\$lname,\$gen,\$sec) { |
$$_ =~ s/(\s+$|^\s+)//g; |
$$_ =~ s/(\s+$|^\s+)//g; |
} |
} |
if ($password) { |
if ($password || $ENV{'form.login'} eq 'loc') { |
&modifystudent($domain,$username,$cid,$sec, |
&modifystudent($domain,$username,$cid,$sec, |
$desiredhost); |
$desiredhost); |
my $reply=&Apache::lonnet::modifystudent |
my $reply=&Apache::lonnet::modifystudent |
($domain,$username,$id,$amode,$password, |
($domain,$username,$id,$amode,$password, |
$fname,$mname,$lname,$gen,$sec,$enddate, |
$fname,$mname,$lname,$gen,$sec,$enddate, |
$startdate,$ENV{'form.forceid'},$desiredhost); |
$startdate,$ENV{'form.forceid'},$desiredhost, |
|
$email); |
if ($reply ne 'ok') { |
if ($reply ne 'ok') { |
$r->print('<p><b>'. |
$reply =~ s/^error://; |
'Error enrolling '.$username.': '. |
$r->print('<br />'. |
$reply.'</b></p>'); |
&mt('<b>[_1]</b>: Unable to enroll: [_2]',$username,$reply)); |
} else { |
} else { |
$count++; $flushc++; |
$count++; $flushc++; |
$student{$username}=1; |
$student{$username}=1; |
Line 1549 sub upfile_drop_add {
|
Line 1736 sub upfile_drop_add {
|
} |
} |
} |
} |
} else { |
} else { |
$r->print("<p><b>No password for $username</b><p>"); |
$r->print('<br />'. |
|
&mt('<b>[_1]</b>: Unable to enroll. No password specified.',$username) |
|
); |
} |
} |
} |
} |
} |
} |
} # end of foreach (@studentdata) |
} # end of foreach (@studentdata) |
$r->print('<p>Processed Students: '.$count.'</p>'); |
$r->print("</p>\n<p>\n".&mt('Processed [_1] student(s).',$count). |
$r->print("<p>If active, the new role will be available when the ". |
"</p>\n"); |
"students next log in to LON-CAPA.</p>"); |
$r->print("<p>\n". |
|
&mt('If active, the new role will be available when the '. |
|
'students next log in to LON-CAPA.')."</p>\n"); |
##################################### |
##################################### |
# Drop students # |
# Drop students # |
##################################### |
##################################### |
if ($ENV{'form.fullup'} eq 'yes') { |
if ($ENV{'form.fullup'} eq 'yes') { |
$r->print('<h3>Dropping Students</h3>'); |
$r->print('<h3>'.&mt('Dropping Students')."</h3>\n"); |
# Get current classlist |
# Get current classlist |
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print("There are no students currently enrolled.\n"); |
$r->print(&mt('There are no students currently enrolled.'). |
|
"\n"); |
} else { |
} else { |
# Remove the students we just added from the list of students. |
# Remove the students we just added from the list of students. |
foreach (@studentdata) { |
foreach (@studentdata) { |
Line 1598 sub drop_student_list {
|
Line 1790 sub drop_student_list {
|
# drop student |
# drop student |
my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'}); |
my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'}); |
if ($result eq 'ok' || $result eq 'ok:') { |
if ($result eq 'ok' || $result eq 'ok:') { |
$r->print('Dropped '.$uname.' @ '.$udom.'<br>'); |
$r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>'); |
$count++; |
$count++; |
} else { |
} else { |
$r->print('Error dropping '.$uname.' @ '.$udom.': '.$result. |
$r->print( |
|
&mt('Error dropping [_1]:[_2]',$uname.'@'.$udom,$result). |
'<br />'); |
'<br />'); |
} |
} |
} |
} |
$r->print('<p><b>Dropped '.$count.' student(s).</b>'); |
$r->print('<p><b>'.&mt('Dropped [_1] student(s).',$count).'</b></p>'); |
$r->print('<p>Re-enrollment will re-activate data.') if ($count); |
$r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count); |
} |
} |
|
|
################################################################### |
################################################################### |
Line 1630 The response to the request is governed
|
Line 1823 The response to the request is governed
|
upload enrolling enroll students based on upload |
upload enrolling enroll students based on upload |
drop undefined print the classlist ready to drop |
drop undefined print the classlist ready to drop |
drop done drop the selected students |
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 |
enrollstudent enrolling enroll student |
classlist undefined print html classlist |
classlist undefined print html classlist |
classlist csv print csv classlist |
classlist csv print csv classlist |
Line 1645 The response to the request is governed
|
Line 1839 The response to the request is governed
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
if ($r->header_only) { |
if ($r->header_only) { |
$r->content_type('text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK; |
return OK; |
} |
} |
Line 1666 sub handler {
|
Line 1860 sub handler {
|
$r->content_type('text/csv'); |
$r->content_type('text/csv'); |
} else { |
} else { |
# Start page |
# Start page |
$r->content_type('text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
$r->print(&header()); |
$r->print(&header()); |
} |
} |
Line 1698 sub handler {
|
Line 1892 sub handler {
|
} |
} |
} elsif ($ENV{'form.action'} eq 'enrollstudent') { |
} elsif ($ENV{'form.action'} eq 'enrollstudent') { |
if (! exists($ENV{'form.state'})) { |
if (! exists($ENV{'form.state'})) { |
|
&get_student_username_domain_form($r); |
|
} elsif ($ENV{'form.state'} eq 'gotusername') { |
&print_enroll_single_student_form($r); |
&print_enroll_single_student_form($r); |
} elsif ($ENV{'form.state'} eq 'enrolling') { |
} elsif ($ENV{'form.state'} eq 'enrolling') { |
&enroll_single_student($r); |
&enroll_single_student($r); |
} else { |
} else { |
&print_enroll_single_student_form($r); |
&get_student_username_domain_form($r); |
} |
} |
} elsif ($ENV{'form.action'} eq 'classlist') { |
} elsif ($ENV{'form.action'} eq 'classlist') { |
if (! exists($ENV{'form.state'})) { |
if (! exists($ENV{'form.state'})) { |