version 1.88, 2003/11/06 20:04:06
|
version 1.91, 2003/12/05 21:27:59
|
Line 146 sub print_main_menu {
|
Line 146 sub print_main_menu {
|
'enrollone' => 'Enroll a single student', |
'enrollone' => 'Enroll a single student', |
'modify' => 'Modify student data', |
'modify' => 'Modify student data', |
'view' => 'View Class List', |
'view' => 'View Class List', |
'drop' => 'Drop Students'); |
'drop' => 'Drop Students', |
|
'populate' => 'Automated Enrollment Manager'); |
|
|
$r->print(<<END); |
$r->print(<<END); |
<p> |
<p> |
Line 169 sub print_main_menu {
|
Line 170 sub print_main_menu {
|
<font size="+1"> |
<font size="+1"> |
<a href="/adm/dropadd?action=drop">$Text{'drop'}</a> |
<a href="/adm/dropadd?action=drop">$Text{'drop'}</a> |
</font> |
</font> |
</p> |
</p><p> |
|
<font size="+1"> |
|
<a href="/adm/populate">$Text{'populate'}</a> |
|
</font> |
END |
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 193 sub print_upload_manager_header {
|
Line 202 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); |
my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); |
my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); |
$r->print('<h3>'.&mt('Uploading Class List')."</h3>\n". |
$r->print('<h3>'.&mt('Uploading Class List')."</h3>\n". |
"<hr>\n". |
"<hr>\n". |
Line 202 sub print_upload_manager_header {
|
Line 211 sub print_upload_manager_header {
|
&mt('Total number of records found in file: [_1].',$distotal). |
&mt('Total number of records found in file: [_1].',$distotal). |
"\n". |
"\n". |
"</p><hr>\n"); |
"</p><hr>\n"); |
$r->print(<<ENDPICK); |
$r->print(&mt('Enter as many fields as you can. '. |
Enter as many fields as you can. The system will inform you and bring you back |
'The system will inform you and bring you back to '. |
to this page if the data selected is insufficient to run your class.<hr /> |
'this page if the data selected is insufficient to '. |
<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" /> |
'enroll students in your class.')."<hr>\n"); |
<input type="hidden" name="action" value="upload" /> |
$r->print(&hidden_input('action','upload'). |
<input type="hidden" name="state" value="got_file" /> |
&hidden_input('state','got_file'). |
<input type="hidden" name="associate" value="" /> |
&hidden_input('associate',''). |
<input type="hidden" name="datatoken" value="$datatoken" /> |
&hidden_input('datatoken',$datatoken). |
<input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" /> |
&hidden_input('fileupload',$ENV{'form.fileupload'}). |
<input type="checkbox" name="noFirstLine" $checked />Ignore First Line |
&hidden_input('upfiletype',$ENV{'form.upfiletype'}). |
<input type="hidden" name="upfiletype" value="$ENV{'form.upfiletype'}" /> |
&hidden_input('upfile_associate',$ENV{'form.upfile_associate'})); |
<input type="hidden" name="upfile_associate" |
$r->print('<input type="button" value="Reverse Association" '. |
value="$ENV{'form.upfile_associate'}" /> |
'name="'.&mt('Reverse Association').'" '. |
<hr /> |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
<script type="text/javascript" language="Javascript"> |
$r->print('<input type="checkbox" name="noFirstLine" $checked />'. |
$javascript |
&mt('Ignore First Line')); |
$javascript_validations |
$r->print("<hr />\n". |
</script> |
'<script type="text/javascript" language="Javascript">'."\n". |
ENDPICK |
$javascript."\n".$javascript_validations.'</script>'); |
} |
} |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub javascript_validations { |
sub javascript_validations { |
my ($krbdefdom)=@_; |
my ($mode,$krbdefdom)=@_; |
my %param = ( formname => 'studentform', |
my $authheader; |
|
if ($mode eq 'auth') { |
|
my %param = ( formname => 'studentform', |
|
kerb_def_dom => $krbdefdom ); |
|
$authheader = &Apache::loncommon::authform_header(%param); |
|
} elsif ($mode eq 'createcourse') { |
|
my %param = ( formname => 'ccrs', |
kerb_def_dom => $krbdefdom ); |
kerb_def_dom => $krbdefdom ); |
my $authheader = &Apache::loncommon::authform_header(%param); |
$authheader = &Apache::loncommon::authform_header(%param); |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
} |
return (<<ENDPICK); |
|
|
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) { |
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
|
END |
|
my $auth_checks = (<<END); |
var foundatype=0; |
var foundatype=0; |
var message=''; |
END |
|
unless ($mode eq 'createcourse') { |
|
$auth_checks .= (<<END); |
if (founduname==0) { |
if (founduname==0) { |
alert('You need to specify the username field'); |
alert('$alert{'username'}'); |
return; |
return; |
} |
} |
|
END |
|
} |
|
$auth_checks .= (<<END); |
// 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 250 function verify_message (vf,founduname,f
|
Line 286 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 267 function verify_message (vf,founduname,f
|
Line 303 function verify_message (vf,founduname,f
|
return; |
return; |
} |
} |
} |
} |
|
END |
if (foundname==0) { message='name fields'; } |
my $optional_checks = ''; |
if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; } |
if ($mode eq 'createcourse') { |
if (foundsec==0) { if (message!='') { message+=', '; } message+='section or group field'; } |
$optional_checks = (<<END); |
if (foundemail==0) { if (message!='') { message+=', '; } message+='email address field'; } |
vf.submit(); |
if (message!='') { |
|
message='Not specified (optional): '+message+'. Continue enrollment?'; |
|
if (confirm(message)) { |
|
vf.state.value='enrolling'; |
|
vf.submit(); |
|
} |
|
} else { |
|
vf.state.value='enrolling'; |
|
vf.submit(); |
|
} |
|
} |
|
|
|
$authheader |
|
ENDPICK |
|
|
|
} |
} |
|
END |
sub javascript_validations_without_auth { |
} else { |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
$optional_checks = (<<END); |
return (<<ENDPICK); |
|
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
|
var foundatype=0; |
|
var message=''; |
var message=''; |
if (founduname==0) { |
if (foundname==0) { |
alert('You need to specify the username field'); |
message='$alert{'name'}'; |
return; |
} |
|
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 (foundname==0) { message='name fields'; } |
|
if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; } |
|
if (foundsec==0) { if (message!='') { message+=', '; } message+='section or group field'; } |
|
if (foundemail==0) { if (message!='') { message+=', '; } message+='email address field'; } |
|
if (message!='') { |
if (message!='') { |
message='Not specified (optional): '+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(); |
} |
} |
} |
} |
|
END |
ENDPICK |
} |
|
my $result = $function_name; |
|
if ( ($mode eq 'auth') || ($mode eq 'createcourse') ) { |
|
$result .= $auth_checks; |
|
} |
|
$result .= $optional_checks; |
|
if ( ($mode eq 'auth') || ($mode eq 'createcourse') ) { |
|
$result .= $authheader; |
|
} |
|
return $result; |
} |
} |
|
|
############################################################### |
############################################################### |
Line 483 sub print_upload_manager_footer {
|
Line 522 sub print_upload_manager_footer {
|
my $locform = &Apache::loncommon::authform_local(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $domform = &domain_form($defdom); |
my $domform = &domain_form($defdom); |
my $date_table = &date_setting_table(); |
my $date_table = &date_setting_table(); |
$r->print(<<ENDPICK); |
my $Str = "</table>\n"; |
</table> |
$Str .= &hidden_input('nfields',$i); |
<input type="hidden" name="nfields" value="$i"> |
$Str .= &hidden_input('keyfields',$keyfields); |
<input type="hidden" name="keyfields" value="$keyfields"> |
$Str .= '<h3>'.&mt('Login Type')."</h3>\n"; |
<h3>Login Type</h3> |
$Str .= "<p>\n". |
<p>Note: this will not take effect if the user already exists</p> |
&mt('Note: this will not take effect if the user already exists'). |
<p> |
"</p><p>\n"; |
$krbform |
$Str .= $krbform."\n</p><p>\n". |
</p> |
$intform."\n</p><p>\n". |
<p> |
$locform."\n</p>\n"; |
$intform |
$Str .= '<h3>'.&mt('LON-CAPA Domain for Students')."</h3>\n"; |
</p> |
$Str .= "<p>\n".&mt('LON-CAPA domain: [_1]',$domform)."\n</p>\n"; |
<p> |
$Str .= "<h3>".&mt('Starting and Ending Dates')."</h3>\n"; |
$locform |
$Str .= "<p>\n".$date_table."</p>\n"; |
</p> |
$Str .= "<h3>".&mt('Full Update')."</h3>\n"; |
<h3>LON-CAPA Domain for Students</h3> |
$Str .= '<input type="checkbox" name="fullup" value="yes">'. |
LON-CAPA domain: $domform <p> |
' '.&mt('Full update (also print list of users not enrolled anymore)'). |
<h3>Starting and Ending Dates</h3> |
"</p>\n"; |
<p> |
$Str .= "<h3>".&mt('Student Number')."</h3>\n"; |
$date_table |
$Str .= "<p>\n".'<input type="checkbox" name="forceid" value="yes">'; |
</p> |
$Str .= &mt('Disable ID/Student Number Safeguard and Force Change '. |
<h3>Full Update</h3> |
'of Conflicting IDs (only do if you know what you are doing)'). |
<input type=checkbox name=fullup value=yes> Full update |
"\n</p><p>\n"; |
(also print list of users not enrolled anymore)<p> |
$Str .= '<input type="button" onClick="javascript:verify(this.form)" '. |
<h3>ID/Student Number</h3> |
'value="Update Courselist" />'."<br />\n"; |
<input type=checkbox name=forceid value=yes> |
$Str .= &mt('Note: for large courses, this operation may be time '. |
Disable ID/Student Number Safeguard and Force Change of Conflicting IDs |
'consuming'); |
(only do if you know what you are doing)<p> |
$r->print($Str); |
<input type="button" onClick="javascript:verify(this.form)" value="Update Courselist" /><br /> |
return; |
Note: for large courses, this operation may be time consuming. |
|
ENDPICK |
|
} |
} |
|
|
# ======================================================= Menu Phase Two Upload |
############################################################### |
|
############################################################### |
sub print_upload_manager_form { |
sub print_upload_manager_form { |
my $r=shift; |
my $r=shift; |
my $firstLine; |
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); |
} else { |
} else { |
$datatoken=$ENV{'form.datatoken'}; |
$datatoken=$ENV{'form.datatoken'}; |
&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);} |
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; |
Line 540 sub print_upload_manager_form {
|
Line 580 sub print_upload_manager_form {
|
my $i; |
my $i; |
my $keyfields; |
my $keyfields; |
if ($total>=0) { |
if ($total>=0) { |
my @d=(['username','Username'], |
my @field=(['username',&mt('Username')], |
['names','Last Name, First Names'], |
['names',&mt('Last Name, First Names')], |
['fname','First Name'], |
['fname',&mt('First Name')], |
['mname','Middle Names/Initials'], |
['mname',&mt('Middle Names/Initials')], |
['lname','Last Name'], |
['lname',&mt('Last Name')], |
['gen','Generation'], |
['gen',&mt('Generation')], |
['id','ID/Student Number'], |
['id',&mt('ID/Student Number')], |
['sec','Group/Section'], |
['sec',&mt('Group/Section')], |
['ipwd','Initial Password'], |
['ipwd',&mt('Initial Password')], |
['email','EMail Address']); |
['email',&mt('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, |
foreach (@d) { $keyfields.=$_->[0].','; } |
\@field); |
|
foreach (@field) { |
|
$keyfields.=$_->[0].','; |
|
} |
chop($keyfields); |
chop($keyfields); |
} else { |
} else { |
unshift(@d,['none','']); |
unshift(@field,['none','']); |
$i=&Apache::loncommon::csv_samples_select_table($r,\@records,\@d); |
$i=&Apache::loncommon::csv_samples_select_table($r,\@records, |
|
\@field); |
my %sone=&Apache::loncommon::record_sep($records[0]); |
my %sone=&Apache::loncommon::record_sep($records[0]); |
$keyfields=join(',',sort(keys(%sone))); |
$keyfields=join(',',sort(keys(%sone))); |
} |
} |
Line 565 sub print_upload_manager_form {
|
Line 609 sub print_upload_manager_form {
|
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear); |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear); |
} |
} |
|
|
# ======================================================= Enroll single student |
############################################################### |
|
############################################################### |
sub enroll_single_student { |
sub enroll_single_student { |
my $r=shift; |
my $r=shift; |
# Remove non alphanumeric values from section |
# Remove non alphanumeric values from section |
Line 651 sub enroll_single_student {
|
Line 696 sub enroll_single_student {
|
} |
} |
|
|
sub setup_date_selectors { |
sub setup_date_selectors { |
my ($starttime,$endtime) = @_; |
my ($starttime,$endtime,$mode) = @_; |
if (! defined($starttime)) { |
if (! defined($starttime)) { |
$starttime = time; |
$starttime = time; |
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
unless ($mode eq 'createcourse') { |
|
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
'.default_enrollment_start_date'})) { |
'.default_enrollment_start_date'})) { |
$starttime = $ENV{'course.'.$ENV{'request.course.id'}. |
$starttime = $ENV{'course.'.$ENV{'request.course.id'}. |
'.default_enrollment_start_date'}; |
'.default_enrollment_start_date'}; |
|
} |
} |
} |
} |
} |
if (! defined($endtime)) { |
if (! defined($endtime)) { |
$endtime = time+(6*30*24*60*60); # 6 months from now, approx |
$endtime = time+(6*30*24*60*60); # 6 months from now, approx |
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
unless ($mode eq 'createcourse') { |
|
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
'.default_enrollment_end_date'})) { |
'.default_enrollment_end_date'})) { |
$endtime = $ENV{'course.'.$ENV{'request.course.id'}. |
$endtime = $ENV{'course.'.$ENV{'request.course.id'}. |
'.default_enrollment_end_date'}; |
'.default_enrollment_end_date'}; |
|
} |
} |
} |
} |
} |
my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform', |
my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform', |
Line 674 sub setup_date_selectors {
|
Line 723 sub setup_date_selectors {
|
my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', |
my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', |
'enddate', |
'enddate', |
$endtime); |
$endtime); |
|
if ($mode eq 'createcourse') { |
|
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
|
'startdate', |
|
$starttime); |
|
$enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
|
'enddate', |
|
$endtime); |
|
} |
return ($startdateform,$enddateform); |
return ($startdateform,$enddateform); |
} |
} |
|
|
Line 687 sub get_dates_from_form {
|
Line 744 sub get_dates_from_form {
|
} |
} |
|
|
sub date_setting_table { |
sub date_setting_table { |
my ($starttime,$endtime) = @_; |
my ($starttime,$endtime,$mode) = @_; |
my ($startform,$endform)=&setup_date_selectors($starttime,$endtime); |
my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode); |
my $dateDefault = '<nobr>'. |
my $dateDefault = '<nobr>'. |
'<input type="checkbox" name="makedatesdefault" />'. |
'<input type="checkbox" name="makedatesdefault" />'. |
' make these dates the default for future enrollment'; |
' make these dates the default for future enrollment'; |
|
if ($mode eq 'createcourse') { |
|
$dateDefault = ' '; |
|
} |
my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; |
my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; |
if (defined($endtime) && $endtime == 0) { |
if (defined($endtime) && $endtime == 0) { |
$perpetual .= ' checked'; |
$perpetual .= ' checked'; |
Line 774 sub print_enroll_single_student_form {
|
Line 834 sub print_enroll_single_student_form {
|
# Set up authentication forms |
# Set up authentication forms |
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($domain); |
&Apache::loncommon::get_kerberos_defaults($domain); |
$javascript_validations=&javascript_validations($krbdefdom); |
$javascript_validations=&javascript_validations('auth',$krbdefdom); |
my %param = ( formname => 'document.studentform', |
my %param = ( formname => 'document.studentform', |
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
kerb_def_auth => $krbdef |
kerb_def_auth => $krbdef |
Line 823 END
|
Line 883 END
|
} else { |
} else { |
# User already exists. Do not worry about authentication |
# User already exists. Do not worry about authentication |
my %uenv = &Apache::lonnet::dump('environment',$domain,$username); |
my %uenv = &Apache::lonnet::dump('environment',$domain,$username); |
$javascript_validations = &javascript_validations_without_auth(); |
$javascript_validations = &javascript_validations('noauth'); |
$user_data_html = <<END; |
$user_data_html = <<END; |
<h3>User Data for $username\@$domain</h3> |
<h3>User Data for $username\@$domain</h3> |
<input type="hidden" name="lcserver" value="default" /> |
<input type="hidden" name="lcserver" value="default" /> |