version 1.94, 2003/12/12 18:04:38
|
version 1.130, 2005/06/03 16:27:26
|
Line 25
|
Line 25
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# (Handler to set parameters for assessments |
|
# |
|
# (Handler to resolve ambiguous file locations |
|
# |
|
# (TeX Content Handler |
|
# |
# |
############################################################### |
############################################################### |
############################################################## |
############################################################## |
Line 37
|
Line 32
|
package Apache::londropadd; |
package Apache::londropadd; |
|
|
use strict; |
use strict; |
use Apache::lonnet(); |
use Apache::lonnet; |
use Apache::loncommon(); |
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::lonstathelpers(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub header { |
sub header { |
|
my $html=&Apache::lonxml::xmlbegin(); |
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); |
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); |
my $title = &mt('LON-CAPA Enrollment Manager'); |
my $title = &mt('LON-CAPA Enrollment Manager'); |
return(<<ENDHEAD); |
return(<<ENDHEAD); |
<html> |
$html |
<head> |
<head> |
<title>$title</title> |
<title>$title</title> |
</head> |
</head> |
Line 140 sub domain_form {
|
Line 137 sub domain_form {
|
############################################################### |
############################################################### |
# Menu Phase One |
# Menu Phase One |
sub print_main_menu { |
sub print_main_menu { |
my $r=shift; |
my ($r,$enrl_permission,$view_permission)=@_; |
my %Text = &Apache::lonlocal::texthash |
# |
('upload' => 'Upload a class list', |
my ($cdom,$cnum) = split/_/,$env{'request.course.id'}; |
'enrollone' => 'Enroll a single student', |
my @menu = |
'modify' => 'Modify student data', |
( |
'view' => 'View Class List', |
{ text => 'Upload a class list', |
'drop' => 'Drop Students', |
help => 'Course_Create_Class_List', |
'populate' => 'Automated Enrollment Manager'); |
action => 'upload', |
|
permission => $enrl_permission, |
$r->print(<<END); |
}, |
<p> |
{ text => 'Enroll a single student', |
<font size="+1"> |
help => 'Course_Add_Student', |
<a href="/adm/dropadd?action=upload">$Text{'upload'}</a> |
action => 'enrollstudent', |
</font> |
permission => $enrl_permission, |
</p><p> |
}, |
<font size="+1"> |
{ text => 'Modify student data', |
<a href="/adm/dropadd?action=enrollstudent">$Text{'enrollone'}</a> |
help => 'Course_Modify_Student_Data', |
</font> |
action => 'modifystudent', |
</p><p> |
permission => $enrl_permission, |
<font size="+1"> |
}, |
<a href="/adm/dropadd?action=modifystudent">$Text{'modify'}</a> |
{ text => 'View Class List', |
</font> |
help => 'Course_View_Class_List', |
</p><p> |
action => 'classlist', |
<font size="+1"> |
permission => $view_permission, |
<a href="/adm/dropadd?action=classlist">$Text{'view'}</a> |
}, |
</font> |
{ text => 'Drop Students', |
</p><p> |
help => 'Course_Drop_Student', |
<font size="+1"> |
action => 'drop', |
<a href="/adm/dropadd?action=drop">$Text{'drop'}</a> |
permission => $enrl_permission, |
</font> |
}, |
</p><p> |
{ text => 'Automated Enrollment Manager', |
<font size="+1"> |
permission => &Apache::lonnet::auto_run($cnum,$cdom), |
<a href="/adm/populate">$Text{'populate'}</a> |
url => '/adm/populate', |
</font> |
}, |
END |
); |
|
my $menu_html = ''; |
|
foreach my $menu_item (@menu) { |
|
next if (! $menu_item->{'permission'}); |
|
$menu_html.='<p>'; |
|
$menu_html.='<font size="+1">'; |
|
if (exists($menu_item->{'url'})) { |
|
$menu_html.=qq{<a href="$menu_item->{'url'}">}; |
|
} else { |
|
$menu_html.= |
|
qq{<a href="/adm/dropadd?action=$menu_item->{'action'}">}; |
|
} |
|
$menu_html.= &mt($menu_item->{'text'}).'</a></font>'; |
|
if (exists($menu_item->{'help'})) { |
|
$menu_html.= |
|
&Apache::loncommon::help_open_topic($menu_item->{'help'}); |
|
} |
|
$menu_html.='</p>'.$/; |
|
} |
|
$r->print($menu_html); |
|
return; |
} |
} |
|
|
############################################################### |
############################################################### |
Line 187 sub hidden_input {
|
Line 204 sub hidden_input {
|
sub print_upload_manager_header { |
sub print_upload_manager_header { |
my ($r,$datatoken,$distotal,$krbdefdom)=@_; |
my ($r,$datatoken,$distotal,$krbdefdom)=@_; |
my $javascript; |
my $javascript; |
if (! exists($ENV{'form.upfile_associate'})) { |
# |
$ENV{'form.upfile_associate'} = 'forward'; |
if (! exists($env{'form.upfile_associate'})) { |
|
$env{'form.upfile_associate'} = 'forward'; |
} |
} |
if ($ENV{'form.associate'} eq 'Reverse Association') { |
if ($env{'form.associate'} eq 'Reverse Association') { |
if ( $ENV{'form.upfile_associate'} ne 'reverse' ) { |
if ( $env{'form.upfile_associate'} ne 'reverse' ) { |
$ENV{'form.upfile_associate'} = 'reverse'; |
$env{'form.upfile_associate'} = 'reverse'; |
} else { |
} else { |
$ENV{'form.upfile_associate'} = 'forward'; |
$env{'form.upfile_associate'} = 'forward'; |
} |
} |
} |
} |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
if ($env{'form.upfile_associate'} eq 'reverse') { |
$javascript=&upload_manager_javascript_reverse_associate(); |
$javascript=&upload_manager_javascript_reverse_associate(); |
} else { |
} else { |
$javascript=&upload_manager_javascript_forward_associate(); |
$javascript=&upload_manager_javascript_forward_associate(); |
} |
} |
my $javascript_validations=&javascript_validations('auth',$krbdefdom); |
# |
my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); |
# Deal with restored settings |
|
my $password_choice = ''; |
|
if (exists($env{'form.ipwd_choice'}) && |
|
$env{'form.ipwd_choice'} ne '') { |
|
# If a column was specified for password, assume it is for an |
|
# internal password. This is a bug waiting to be filed (could be |
|
# local or krb auth instead of internal) but I do not have the |
|
# time to mess around with this now. |
|
$password_choice = 'int'; |
|
} |
|
# |
|
my $javascript_validations=&javascript_validations('auth',$krbdefdom, |
|
$password_choice); |
|
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". |
'<h3>'.&mt('Identify fields')."</h3>\n"); |
'<h3>'.&mt('Identify fields')."</h3>\n"); |
Line 216 sub print_upload_manager_header {
|
Line 247 sub print_upload_manager_header {
|
&hidden_input('state','got_file'). |
&hidden_input('state','got_file'). |
&hidden_input('associate',''). |
&hidden_input('associate',''). |
&hidden_input('datatoken',$datatoken). |
&hidden_input('datatoken',$datatoken). |
&hidden_input('fileupload',$ENV{'form.fileupload'}). |
&hidden_input('fileupload',$env{'form.fileupload'}). |
&hidden_input('upfiletype',$ENV{'form.upfiletype'}). |
&hidden_input('upfiletype',$env{'form.upfiletype'}). |
&hidden_input('upfile_associate',$ENV{'form.upfile_associate'})); |
&hidden_input('upfile_associate',$env{'form.upfile_associate'})); |
$r->print('<input type="button" value="Reverse Association" '. |
$r->print('<input type="button" value="Reverse Association" '. |
'name="'.&mt('Reverse Association').'" '. |
'name="'.&mt('Reverse Association').'" '. |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
Line 232 sub print_upload_manager_header {
|
Line 263 sub print_upload_manager_header {
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub javascript_validations { |
sub javascript_validations { |
my ($mode,$krbdefdom)=@_; |
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield)=@_; |
my $authheader; |
my $authheader; |
if ($mode eq 'auth') { |
if ($mode eq 'auth') { |
my %param = ( formname => 'studentform', |
my %param = ( formname => 'studentform', |
kerb_def_dom => $krbdefdom ); |
kerb_def_dom => $krbdefdom, |
|
curr_authtype => $curr_authtype); |
$authheader = &Apache::loncommon::authform_header(%param); |
$authheader = &Apache::loncommon::authform_header(%param); |
} elsif ($mode eq 'createcourse') { |
} elsif ($mode eq 'createcourse') { |
my %param = ( formname => 'ccrs', |
my %param = ( formname => 'ccrs', |
kerb_def_dom => $krbdefdom ); |
kerb_def_dom => $krbdefdom, |
|
curr_authtype => $curr_authtype ); |
|
$authheader = &Apache::loncommon::authform_header(%param); |
|
} elsif ($mode eq 'modifycourse') { |
|
my %param = ( formname => 'cmod', |
|
kerb_def_dom => $krbdefdom, |
|
mode => 'modifycourse', |
|
curr_authtype => $curr_authtype, |
|
curr_autharg => $curr_authfield ); |
$authheader = &Apache::loncommon::authform_header(%param); |
$authheader = &Apache::loncommon::authform_header(%param); |
} |
} |
|
|
|
|
my %alert = &Apache::lonlocal::texthash |
my %alert = &Apache::lonlocal::texthash |
(username => 'You need to specify the username field.', |
(username => 'You need to specify the username field.', |
Line 260 sub javascript_validations {
|
Line 301 sub javascript_validations {
|
my $function_name =(<<END); |
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 |
END |
my $auth_checks = (<<END); |
my $auth_checks; |
var foundatype=0; |
if ($mode eq 'createcourse') { |
|
$auth_checks .= (<<END); |
|
if (vf.autoadds[0].checked == true) { |
|
if (current.radiovalue == null || current.radiovalue == 'nochange') { |
|
alert('$alert{'authen'}'); |
|
return; |
|
} |
|
} |
END |
END |
unless ($mode eq 'createcourse') { |
} else { |
$auth_checks .= (<<END); |
$auth_checks .= (<<END); |
|
var foundatype=0; |
if (founduname==0) { |
if (founduname==0) { |
alert('$alert{'username'}'); |
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 == '' || current.radiovalue == 'nochange') { |
// They did not check any of the login radiobuttons. |
// They did not check any of the login radiobuttons. |
alert('$alert{'authen'}'); |
alert('$alert{'authen'}'); |
return; |
return; |
} |
} |
|
END |
|
} |
|
if ($mode eq 'createcourse') { |
|
$auth_checks .= " |
|
if ( (vf.autoadds[0].checked == true) && |
|
(vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '') ) { |
|
"; |
|
} elsif ($mode eq 'modifycourse') { |
|
$auth_checks .= " |
|
if (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '') { |
|
"; |
|
} |
|
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
|
$auth_checks .= (<<END); |
|
var alertmsg = ''; |
|
switch (current.radiovalue) { |
|
case 'krb': |
|
alertmsg = '$alert{'krb'}'; |
|
break; |
|
default: |
|
alertmsg = ''; |
|
} |
|
if (alertmsg != '') { |
|
alert(alertmsg); |
|
return; |
|
} |
|
} |
|
END |
|
} else { |
|
$auth_checks .= (<<END); |
foundatype=1; |
foundatype=1; |
if (current.argfield == null || current.argfield == '') { |
if (current.argfield == null || current.argfield == '') { |
var alertmsg = ''; |
var alertmsg = ''; |
Line 301 END
|
Line 377 END
|
} |
} |
} |
} |
END |
END |
|
} |
my $optional_checks = ''; |
my $optional_checks = ''; |
if ($mode eq 'createcourse') { |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$optional_checks = (<<END); |
$optional_checks = (<<END); |
vf.submit(); |
vf.submit(); |
} |
} |
Line 345 END
|
Line 422 END
|
END |
END |
} |
} |
my $result = $function_name; |
my $result = $function_name; |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') ) { |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $auth_checks; |
$result .= $auth_checks; |
} |
} |
$result .= $optional_checks; |
$result .= $optional_checks; |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') ) { |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $authheader; |
$result .= $authheader; |
} |
} |
return $result; |
return $result; |
Line 514 sub print_upload_manager_footer {
|
Line 591 sub print_upload_manager_footer {
|
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
kerb_def_auth => $krbdef |
kerb_def_auth => $krbdef |
); |
); |
|
if (exists($env{'form.ipwd_choice'}) && |
|
defined($env{'form.ipwd_choice'}) && |
|
$env{'form.ipwd_choice'} ne '') { |
|
$param{'curr_authtype'} = 'int'; |
|
} |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
Line 525 sub print_upload_manager_footer {
|
Line 607 sub print_upload_manager_footer {
|
$Str .= '<h3>'.&mt('Login Type')."</h3>\n"; |
$Str .= '<h3>'.&mt('Login Type')."</h3>\n"; |
$Str .= "<p>\n". |
$Str .= "<p>\n". |
&mt('Note: this will not take effect if the user already exists'). |
&mt('Note: this will not take effect if the user already exists'). |
|
&Apache::loncommon::help_open_topic('Auth_Options'). |
"</p><p>\n"; |
"</p><p>\n"; |
$Str .= $krbform."\n</p><p>\n". |
$Str .= $krbform."\n</p><p>\n". |
$intform."\n</p><p>\n". |
$intform."\n</p><p>\n". |
Line 543 sub print_upload_manager_footer {
|
Line 626 sub print_upload_manager_footer {
|
'of Conflicting IDs (only do if you know what you are doing)'). |
'of Conflicting IDs (only do if you know what you are doing)'). |
"\n</p><p>\n"; |
"\n</p><p>\n"; |
$Str .= '<input type="button" onClick="javascript:verify(this.form)" '. |
$Str .= '<input type="button" onClick="javascript:verify(this.form)" '. |
'value="Update Courselist" />'."<br />\n"; |
'value="Update Class List" />'."<br />\n"; |
$Str .= &mt('Note: for large courses, this operation may be time '. |
$Str .= &mt('Note: for large courses, this operation may be time '. |
'consuming'); |
'consuming'); |
$r->print($Str); |
$r->print($Str); |
Line 554 sub print_upload_manager_footer {
|
Line 637 sub print_upload_manager_footer {
|
############################################################### |
############################################################### |
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'}){ |
if($env{'form.noFirstLine'}){ |
$firstLine=shift(@records); |
$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=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
# |
|
# Restore memorized settings |
|
&Apache::loncommon::restore_course_settings |
|
('enrollment_upload',{ 'username_choice' => 'scalar', # column settings |
|
'names_choice' => 'scalar', |
|
'fname_choice' => 'scalar', |
|
'mname_choice' => 'scalar', |
|
'lname_choice' => 'scalar', |
|
'gen_choice' => 'scalar', |
|
'id_choice' => 'scalar', |
|
'sec_choice' => 'scalar', |
|
'ipwd_choice' => 'scalar', |
|
'email_choice' => 'scalar', |
|
}); |
|
# |
|
# Determine kerberos parameters as appropriate |
|
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); |
my $i; |
my $i; |
my $keyfields; |
my $keyfields; |
if ($total>=0) { |
if ($total>=0) { |
my @field=(['username',&mt('Username')], |
my @field= |
['names',&mt('Last Name, First Names')], |
(['username',&mt('Username'), $env{'form.username_choice'}], |
['fname',&mt('First Name')], |
['names',&mt('Last Name, First Names'),$env{'form.names_choice'}], |
['mname',&mt('Middle Names/Initials')], |
['fname',&mt('First Name'), $env{'form.fname_choice'}], |
['lname',&mt('Last Name')], |
['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}], |
['gen',&mt('Generation')], |
['lname',&mt('Last Name'), $env{'form.lname_choice'}], |
['id',&mt('ID/Student Number')], |
['gen', &mt('Generation'), $env{'form.gen_choice'}], |
['sec',&mt('Group/Section')], |
['id', &mt('ID/Student Number'),$env{'form.id_choice'}], |
['ipwd',&mt('Initial Password')], |
['sec', &mt('Group/Section'), $env{'form.sec_choice'}], |
['email',&mt('EMail Address')]); |
['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
['email',&mt('EMail Address'), $env{'form.email_choice'}]); |
|
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, |
$i=&Apache::loncommon::csv_print_select_table($r,\@records, |
\@field); |
\@field); |
Line 611 sub print_upload_manager_form {
|
Line 713 sub print_upload_manager_form {
|
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 |
$ENV{'form.csec'}=~s/\W//g; |
$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 separate from the action of enrolling the |
# student. Also, a failure in setting the dates as default is not fatal |
# student. Also, a failure in setting the dates as default is not fatal |
# to the process of enrolling / modifying a student. |
# to the process of enrolling / modifying a student. |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
if ($ENV{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
$r->print(&make_dates_default($startdate,$enddate)); |
$r->print(&make_dates_default($startdate,$enddate)); |
} |
} |
|
|
$r->print('<h3>'.&mt('Enrolling Student').'</h3>'); |
$r->print('<h3>'.&mt('Enrolling Student').'</h3>'); |
$r->print('<p>'.&mt('Enrolling').' '.$ENV{'form.cuname'}." \@ ". |
$r->print('<p>'.&mt('Enrolling').' '.$env{'form.cuname'}." \@ ". |
$ENV{'form.lcdomain'}.'</p>'); |
$env{'form.lcdomain'}.'</p>'); |
if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&& |
if (($env{'form.cuname'})&&($env{'form.cuname'}!~/\W/)&& |
($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) { |
($env{'form.lcdomain'})&&($env{'form.lcdomain'}!~/\W/)) { |
# Deal with home server selection |
# Deal with home server selection |
my $domain=$ENV{'form.lcdomain'}; |
my $domain=$env{'form.lcdomain'}; |
my $desiredhost = $ENV{'form.lcserver'}; |
my $desiredhost = $env{'form.lcserver'}; |
if (lc($desiredhost) eq 'default') { |
if (lc($desiredhost) eq 'default') { |
$desiredhost = undef; |
$desiredhost = undef; |
} else { |
} else { |
Line 644 sub enroll_single_student {
|
Line 746 sub enroll_single_student {
|
# End of home server selection logic |
# End of home server selection logic |
my $amode=''; |
my $amode=''; |
my $genpwd=''; |
my $genpwd=''; |
if ($ENV{'form.login'} eq 'krb') { |
if ($env{'form.login'} eq 'krb') { |
$amode='krb'; |
$amode='krb'; |
$amode.=$ENV{'form.krbver'}; |
$amode.=$env{'form.krbver'}; |
$genpwd=$ENV{'form.krbarg'}; |
$genpwd=$env{'form.krbarg'}; |
} elsif ($ENV{'form.login'} eq 'int') { |
} elsif ($env{'form.login'} eq 'int') { |
$amode='internal'; |
$amode='internal'; |
$genpwd=$ENV{'form.intarg'}; |
$genpwd=$env{'form.intarg'}; |
} elsif ($ENV{'form.login'} eq 'loc') { |
} elsif ($env{'form.login'} eq 'loc') { |
$amode='localauth'; |
$amode='localauth'; |
$genpwd=$ENV{'form.locarg'}; |
$genpwd=$env{'form.locarg'}; |
if (!$genpwd) { $genpwd=" "; } |
if (!$genpwd) { $genpwd=" "; } |
} |
} |
my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'}, |
my $home = &Apache::lonnet::homeserver($env{'form.cuname'}, |
$ENV{'form.lcdomain'}); |
$env{'form.lcdomain'}); |
if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { |
if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { |
# Clean out any old roles the student has in this class. |
# Clean out any old roles the student has in this class. |
&modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'}, |
&modifystudent($env{'form.lcdomain'},$env{'form.cuname'}, |
$ENV{'request.course.id'},$ENV{'form.csec'}, |
$env{'request.course.id'},$env{'form.csec'}, |
$desiredhost); |
$desiredhost); |
my $login_result = &Apache::lonnet::modifystudent |
my $login_result = &Apache::lonnet::modifystudent |
($ENV{'form.lcdomain'},$ENV{'form.cuname'}, |
($env{'form.lcdomain'},$env{'form.cuname'}, |
$ENV{'form.cstid'},$amode,$genpwd, |
$env{'form.cstid'},$amode,$genpwd, |
$ENV{'form.cfirst'},$ENV{'form.cmiddle'}, |
$env{'form.cfirst'},$env{'form.cmiddle'}, |
$ENV{'form.clast'},$ENV{'form.cgen'}, |
$env{'form.clast'},$env{'form.cgen'}, |
$ENV{'form.csec'},$enddate, |
$env{'form.csec'},$enddate, |
$startdate,$ENV{'form.forceid'}, |
$startdate,$env{'form.forceid'}, |
$desiredhost); |
$desiredhost,$env{'form.emailaddress'}); |
if ($login_result =~ /^ok/) { |
if ($login_result =~ /^ok/) { |
$r->print($login_result); |
$r->print($login_result); |
$r->print("<p> ".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."</p>"); |
$r->print("<p> ".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."</p>"); |
Line 684 sub enroll_single_student {
|
Line 786 sub enroll_single_student {
|
} else { |
} else { |
$r->print(&mt('Invalid login mode or password.').' '); |
$r->print(&mt('Invalid login mode or password.').' '); |
} |
} |
$r->print('<b>'.&mt('Unable to enroll').' '.$ENV{'form.cuname'}.'.</b></p>'); |
$r->print('<b>'.&mt('Unable to enroll').' '.$env{'form.cuname'}.'.</b></p>'); |
} |
} |
} else { |
} else { |
$r->print(&mt('Invalid username or domain')); |
$r->print(&mt('Invalid username or domain')); |
Line 695 sub setup_date_selectors {
|
Line 797 sub setup_date_selectors {
|
my ($starttime,$endtime,$mode) = @_; |
my ($starttime,$endtime,$mode) = @_; |
if (! defined($starttime)) { |
if (! defined($starttime)) { |
$starttime = time; |
$starttime = time; |
unless ($mode eq 'createcourse') { |
unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
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'}; |
} |
} |
} |
} |
Line 706 sub setup_date_selectors {
|
Line 808 sub setup_date_selectors {
|
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 |
unless ($mode eq 'createcourse') { |
unless ($mode eq 'createcourse') { |
if (exists($ENV{'course.'.$ENV{'request.course.id'}. |
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'}; |
} |
} |
} |
} |
Line 719 sub setup_date_selectors {
|
Line 821 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') { |
if ($mode eq 'create_enrolldates') { |
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
'startdate', |
'startenroll', |
$starttime); |
$starttime); |
$enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
$enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
'enddate', |
'endenroll', |
|
$endtime); |
|
} |
|
if ($mode eq 'create_defaultdates') { |
|
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
|
'startaccess', |
|
$starttime); |
|
$enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', |
|
'endaccess', |
$endtime); |
$endtime); |
} |
} |
return ($startdateform,$enddateform); |
return ($startdateform,$enddateform); |
Line 733 sub setup_date_selectors {
|
Line 843 sub setup_date_selectors {
|
sub get_dates_from_form { |
sub get_dates_from_form { |
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); |
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); |
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); |
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); |
if ($ENV{'form.no_end_date'}) { |
if ($env{'form.no_end_date'}) { |
$enddate = 0; |
$enddate = 0; |
} |
} |
return ($startdate,$enddate); |
return ($startdate,$enddate); |
Line 745 sub date_setting_table {
|
Line 855 sub date_setting_table {
|
my $dateDefault = '<nobr>'. |
my $dateDefault = '<nobr>'. |
'<input type="checkbox" name="makedatesdefault" /> '. |
'<input type="checkbox" name="makedatesdefault" /> '. |
&mt('make these dates the default for future enrollment'); |
&mt('make these dates the default for future enrollment'); |
if ($mode eq 'createcourse') { |
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
$dateDefault = ' '; |
$dateDefault = ' '; |
} |
} |
my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; |
my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; |
Line 753 sub date_setting_table {
|
Line 863 sub date_setting_table {
|
$perpetual .= ' checked'; |
$perpetual .= ' checked'; |
} |
} |
$perpetual.= ' /> '.&mt('no ending date').'</nobr>'; |
$perpetual.= ' /> '.&mt('no ending date').'</nobr>'; |
|
if ($mode eq 'create_enrolldates') { |
|
$perpetual = ' '; |
|
} |
my $result = ''; |
my $result = ''; |
$result .= "<table>\n"; |
$result .= "<table>\n"; |
$result .= '<tr><td align="right">'.&mt('Starting Date').'</td>'. |
$result .= '<tr><td align="right">'.&mt('Starting Date').'</td>'. |
Line 768 sub date_setting_table {
|
Line 881 sub date_setting_table {
|
sub make_dates_default { |
sub make_dates_default { |
my ($startdate,$enddate) = @_; |
my ($startdate,$enddate) = @_; |
my $result = ''; |
my $result = ''; |
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $put_result = &Apache::lonnet::put('environment', |
my $put_result = &Apache::lonnet::put('environment', |
{'default_enrollment_start_date'=>$startdate, |
{'default_enrollment_start_date'=>$startdate, |
'default_enrollment_end_date' =>$enddate},$dom,$crs); |
'default_enrollment_end_date' =>$enddate},$dom,$crs); |
Line 777 sub make_dates_default {
|
Line 890 sub make_dates_default {
|
$result .= "Set default start and end dates for course<br />"; |
$result .= "Set default start and end dates for course<br />"; |
# |
# |
# Refresh the course environment |
# Refresh the course environment |
&Apache::lonnet::coursedescription($ENV{'request.course.id'}); |
&Apache::lonnet::coursedescription($env{'request.course.id'}); |
} else { |
} else { |
$result .= &mt('Unable to set default dates for course').":".$put_result. |
$result .= &mt('Unable to set default dates for course').":".$put_result. |
'<br />'; |
'<br />'; |
Line 791 sub make_dates_default {
|
Line 904 sub make_dates_default {
|
sub get_student_username_domain_form { |
sub get_student_username_domain_form { |
my $r = shift; |
my $r = shift; |
my $domform = &Apache::loncommon::select_dom_form |
my $domform = &Apache::loncommon::select_dom_form |
($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0); |
($env{'course.'.$env{'request.course.id'}.'.domain'},'cudomain',0); |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'eos' => "Enroll One Student", |
'eos' => "Enroll One Student", |
'usr' => "Username", |
'usr' => "Username", |
Line 812 sub get_student_username_domain_form {
|
Line 925 sub get_student_username_domain_form {
|
<input type="submit" name="Begin Enrollment" value="$lt{'been'}" /> |
<input type="submit" name="Begin Enrollment" value="$lt{'been'}" /> |
</td></tr> |
</td></tr> |
</table> |
</table> |
|
<script type="text/javascript"> |
|
// the if prevents the script error if the browser can not handle this |
|
if ( document.studentform.cuname ) { document.studentform.cuname.focus(); } |
|
</script> |
END |
END |
return; |
return; |
} |
} |
Line 820 sub print_enroll_single_student_form {
|
Line 937 sub print_enroll_single_student_form {
|
my $r=shift; |
my $r=shift; |
$r->print("<h3>".&mt('Enroll One Student')."</h3>"); |
$r->print("<h3>".&mt('Enroll One Student')."</h3>"); |
# |
# |
my $username = $ENV{'form.cuname'}; |
my $username = $env{'form.cuname'}; |
my $domain = $ENV{'form.cudomain'}; |
my $domain = $env{'form.cudomain'}; |
|
$username=~s/\W//gs; |
|
$domain=~s/\W//gs; |
my $home = &Apache::lonnet::homeserver($username,$domain); |
my $home = &Apache::lonnet::homeserver($username,$domain); |
# $new_user flags whether we are creating a new user or using an old one |
# $new_user flags whether we are creating a new user or using an old one |
my $new_user = 1; |
my $new_user = 1; |
Line 832 sub print_enroll_single_student_form {
|
Line 951 sub print_enroll_single_student_form {
|
my $user_data_html = ''; |
my $user_data_html = ''; |
my $javascript_validations = ''; |
my $javascript_validations = ''; |
if ($new_user) { |
if ($new_user) { |
my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
# 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); |
Line 866 sub print_enroll_single_student_form {
|
Line 985 sub print_enroll_single_student_form {
|
'hs' => "Home Server", |
'hs' => "Home Server", |
'pswd' => "Password", |
'pswd' => "Password", |
'psam' => "Please select an authentication mechanism", |
'psam' => "Please select an authentication mechanism", |
|
'mail' => "Email Address" |
); |
); |
|
my $authhelp=&Apache::loncommon::help_open_topic('Auth_Options'); |
$user_data_html = <<END; |
$user_data_html = <<END; |
<h3>$lt{'udf'} $username\@$domain</h3> |
<h3>$lt{'udf'} $username\@$domain</h3> |
<table> |
<table> |
Line 880 sub print_enroll_single_student_form {
|
Line 1001 sub print_enroll_single_student_form {
|
<td><input type="text" name="cgen" size="5"> </td></tr> |
<td><input type="text" name="cgen" size="5"> </td></tr> |
<tr><th>$lt{'hs'}:</th> |
<tr><th>$lt{'hs'}:</th> |
<td>$homeserver_form</td></tr> |
<td>$homeserver_form</td></tr> |
|
<tr><th>$lt{'mail'}:</th> |
|
<td><input type="text" name="emailaddress" size="20" /></td></tr> |
</table> |
</table> |
<h3>$lt{'pswd'}</h3> |
<h3>$lt{'pswd'}</h3> |
$lt{'psam'} |
$lt{'psam'}$authhelp |
<table> |
<table> |
<p> |
<p> |
$krbform |
$krbform |
Line 902 END
|
Line 1025 END
|
'mn' => "Middle Name", |
'mn' => "Middle Name", |
'ln' => "Last Name", |
'ln' => "Last Name", |
'gen' => "Generation", |
'gen' => "Generation", |
|
'mail' => "Email Address", |
); |
); |
$user_data_html = <<END; |
$user_data_html = <<END; |
<h3>$lt{'udf'} $username\@$domain</h3> |
<h3>$lt{'udf'} $username\@$domain</h3> |
Line 923 END
|
Line 1047 END
|
<td> |
<td> |
<input type="text" name="cgen" value="$uenv{'generation'}" size="5" /> |
<input type="text" name="cgen" value="$uenv{'generation'}" size="5" /> |
</td></tr> |
</td></tr> |
|
<tr><th>$lt{'mail'}:</th> |
|
<td> |
|
<input type="text" name="emailaddress" value="$uenv{'permanentemail'}" size="20" /> |
|
</td></tr> |
</table> |
</table> |
END |
END |
} |
} |
Line 1002 END
|
Line 1130 END
|
sub print_drop_menu { |
sub print_drop_menu { |
my $r=shift; |
my $r=shift; |
$r->print("<h3>".&mt('Drop Students')."</h3>"); |
$r->print("<h3>".&mt('Drop Students')."</h3>"); |
my $cid=$ENV{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
Line 1015 sub print_drop_menu {
|
Line 1143 sub print_drop_menu {
|
|
|
# ============================================== view classlist |
# ============================================== view classlist |
sub print_html_classlist { |
sub print_html_classlist { |
my $r=shift; |
my ($r,$mode) = @_; |
if (! exists($ENV{'form.sortby'})) { |
if (! exists($env{'form.sortby'})) { |
$ENV{'form.sortby'} = 'username'; |
$env{'form.sortby'} = 'username'; |
} |
} |
if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) { |
if ($env{'form.Status'} !~ /^(Any|Expired|Active)$/) { |
$ENV{'form.Status'} = 'Active'; |
$env{'form.Status'} = 'Active'; |
} |
} |
my $status_select = &Apache::lonhtmlcommon::StatusOptions |
my $status_select = &Apache::lonhtmlcommon::StatusOptions |
($ENV{'form.Status'},'studentform'); |
($env{'form.Status'}); |
my $CCL=&mt('Current Class List'); |
my $cid=$env{'request.course.id'}; |
$r->print(<<END); |
my $cdom=$env{'course.'.$cid.'.domain'}; |
<input type="hidden" name="action" value="$ENV{'form.action'}" /> |
my $cnum=$env{'course.'.$cid.'.num'}; |
<input type="hidden" name="state" value="" /> |
# |
<p> |
# List course personnel |
<font size="+1">$CCL</font> |
my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum); |
|
# |
END |
if (! defined($env{'form.output'}) || |
if ($ENV{'form.action'} ne 'modifystudent') { |
$env{'form.output'} !~ /^(csv|excel|html)$/ ) { |
my %lt=&Apache::lonlocal::texthash( |
$env{'form.output'} = 'html'; |
'ef' => "Excel format", |
} |
'ss' => "Student Status", |
# |
); |
$r->print('<br /><table border="2">'); |
$r->print(<<END); |
foreach my $role (sort keys %coursepersonnel) { |
<font size="+1"> |
next if ($role =~ /^\s*$/); |
<a href="javascript:document.studentform.state.value='csv';document.studentform.submit();">CSV format</a> |
$r->print('<tr><td>'.$role.'</td><td>'); |
|
foreach my $user (split(',',$coursepersonnel{$role})) { |
<a href="javascript:document.studentform.state.value='excel';document.studentform.submit();">$lt{'ef'}</a> |
my ($puname,$pudom)=split(':',$user); |
</font> |
$r->print(' '.&Apache::loncommon::aboutmewrapper( |
|
&Apache::loncommon::plainname($puname, |
$lt{'ss'}: |
$pudom), |
END |
$puname,$pudom)); |
|
} |
|
$r->print('</td></tr>'); |
|
} |
|
$r->print('</table>'); |
|
# |
|
# Interface output |
|
$r->print('<input type="hidden" name="action" value="'. |
|
$env{'form.action'}.'" />'); |
|
$r->print("<p>\n"); |
|
if ($env{'form.action'} ne 'modifystudent') { |
|
my %lt=&Apache::lonlocal::texthash('csv' => "CSV", |
|
'excel' => "Excel", |
|
'html' => 'HTML'); |
|
my $output_selector = '<select size="1" name="output" >'; |
|
foreach my $outputformat ('html','csv','excel') { |
|
my $option = '<option value="'.$outputformat.'" '; |
|
if ($outputformat eq $env{'form.output'}) { |
|
$option .= 'selected '; |
|
} |
|
$option .='>'.$lt{$outputformat}.'</option>'; |
|
$output_selector .= "\n".$option; |
|
} |
|
$output_selector .= '</select>'; |
|
$r->print(&mt('Output Format: [_1]',$output_selector).(' 'x3)); |
} |
} |
$r->print($status_select."</p>\n"); |
$r->print(&mt('Student Status: [_1]',$status_select)."\n"); |
my $cid=$ENV{'request.course.id'}; |
$r->print('<input type="submit" value="'.&mt('Update Display').'" />'. |
|
"\n</p>\n"); |
|
# |
|
# Print the classlist |
|
$r->print('<h2>'.&mt('Current Class List').'</h2>'); |
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
} else { |
} else { |
# Print out the available choices |
# Print out the available choices |
if ($ENV{'form.action'} eq 'modifystudent') { |
if ($env{'form.action'} eq 'modifystudent') { |
&show_class_list($r,'view','modify','modifystudent', |
&show_class_list($r,'view','modify', |
$ENV{'form.Status'},$classlist,$keylist); |
$env{'form.Status'},$classlist,$keylist); |
} else { |
} else { |
&show_class_list($r,'view','aboutme','classlist', |
&show_class_list($r,$env{'form.output'},'aboutme', |
$ENV{'form.Status'},$classlist,$keylist); |
$env{'form.Status'},$classlist,$keylist); |
} |
} |
} |
} |
} |
} |
|
|
# ============================================== view classlist |
|
sub print_formatted_classlist { |
|
my $r=shift; |
|
my $mode = shift; |
|
my $cid=$ENV{'request.course.id'}; |
|
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
|
if (! defined($classlist)) { |
|
$r->print(&mt('There are no students currently enrolled.')."\n"); |
|
} else { |
|
&show_class_list($r,$mode,'nolink','csv', |
|
$ENV{'form.Status'},$classlist,$keylist); |
|
} |
|
} |
|
|
|
# =================================================== Show student list to drop |
# =================================================== Show student list to drop |
sub show_class_list { |
sub show_class_list { |
my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_; |
my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_; |
my $cid=$ENV{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
# |
# |
# Variables for excel output |
# Variables for excel output |
my ($excel_workbook, $excel_sheet, $excel_filename,$row); |
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); |
|
# |
|
# Variables for csv output |
|
my ($CSVfile,$CSVfilename); |
# |
# |
my $sortby = $ENV{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
if ($sortby !~ /^(username|domain|section|fullname|id)$/) { |
if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
# Print out header |
# Print out header |
if ($mode eq 'view') { |
unless ($mode eq 'autoenroll') { |
|
$r->print(<<END); |
|
<input type="hidden" name="state" value="$env{'form.state'}" /> |
|
END |
|
} |
|
$r->print(<<END); |
|
<input type="hidden" name="sortby" value="$sortby" /> |
|
END |
|
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { |
if ($linkto eq 'aboutme') { |
if ($linkto eq 'aboutme') { |
$r->print(&mt('Select a user name to view the users personal page.')); |
$r->print(&mt('Select a user name to view the users personal page.')); |
} elsif ($linkto eq 'modify') { |
} elsif ($linkto eq 'modify') { |
$r->print(&mt('Select a user name to modify the students information')); |
$r->print(&mt('Select a user name to modify the students information')); |
} |
} |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'usrn' => "username", |
'usrn' => "username", |
'dom' => "domain", |
'dom' => "domain", |
'sn' => "student name", |
'sn' => "student name", |
'sec' => "section", |
'sec' => "section", |
|
'start' => "start date", |
|
'end' => "end date", |
|
'type' => "enroll type/action" |
); |
); |
$r->print(<<END); |
unless ($mode eq 'autoenroll') { |
|
$r->print(<<END); |
<input type="hidden" name="sortby" value="$sortby" /> |
|
<input type="hidden" name="sname" value="" /> |
<input type="hidden" name="sname" value="" /> |
<input type="hidden" name="sdom" value="" /> |
<input type="hidden" name="sdom" value="" /> |
|
END |
|
} |
|
$r->print(" |
<p> |
<p> |
<table border=2> |
<table border=2> |
<tr><th> |
<tr> |
|
"); |
|
if ($mode eq 'autoenroll') { |
|
$r->print(" |
|
<th><a href=\"javascript:document.studentform.sortby.value='type';document.studentform.submit();\">$lt{'type'}</a></th> |
|
"); |
|
} else { |
|
$r->print(" |
|
<th>Count</th> |
|
"); |
|
} |
|
$r->print(<<END); |
|
<th> |
<a href="javascript:document.studentform.sortby.value='username';document.studentform.submit();">$lt{'usrn'}</a> |
<a href="javascript:document.studentform.sortby.value='username';document.studentform.submit();">$lt{'usrn'}</a> |
</th><th> |
</th><th> |
<a href="javascript:document.studentform.sortby.value='domain';document.studentform.submit();">$lt{'dom'}</a> |
<a href="javascript:document.studentform.sortby.value='domain';document.studentform.submit();">$lt{'dom'}</a> |
Line 1120 sub show_class_list {
|
Line 1290 sub show_class_list {
|
<a href="javascript:document.studentform.sortby.value='fullname';document.studentform.submit();">$lt{'sn'}</a> |
<a href="javascript:document.studentform.sortby.value='fullname';document.studentform.submit();">$lt{'sn'}</a> |
</th><th> |
</th><th> |
<a href="javascript:document.studentform.sortby.value='section';document.studentform.submit();">$lt{'sec'}</a> |
<a href="javascript:document.studentform.sortby.value='section';document.studentform.submit();">$lt{'sec'}</a> |
|
</th><th> |
|
<a href="javascript:document.studentform.sortby.value='start';document.studentform.submit();">$lt{'start'}</a> |
|
</th><th> |
|
<a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a> |
</th> |
</th> |
</tr> |
</tr> |
END |
END |
} elsif ($mode eq 'csv') { |
} elsif ($mode eq 'csv') { |
|
# |
|
# Open a file |
|
$CSVfilename = '/prtspool/'. |
|
$env{'user.name'}.'_'.$env{'user.domain'}.'_'. |
|
time.'_'.rand(1000000000).'.csv'; |
|
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { |
|
$r->log_error("Couldn't open $CSVfilename for output $!"); |
|
$r->print("Problems occured in writing the csv file. ". |
|
"This error has been logged. ". |
|
"Please alert your LON-CAPA administrator."); |
|
$CSVfile = undef; |
|
} |
|
# |
|
# Write headers and data to file |
if($statusmode eq 'Expired') { |
if($statusmode eq 'Expired') { |
$r->print(&mt('Students with expired roles')); |
print $CSVfile '"'.&mt('Students with expired roles').'"'."\n"; |
} |
} |
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
$r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID", |
print $CSVfile '"'.join('","',map { |
&mt("student name"),&mt("section"),&mt("status"))). |
&Apache::loncommon::csv_translate(&mt($_)) |
'"'."\n"); |
} ("username","domain","ID","student name", |
|
"section","start date","end date","status")).'"'."\n"; |
} else { |
} else { |
$r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID", |
print $CSVfile '"'.join('","',map { |
&mt("student name"),&mt("section"))).'"'."\n"); |
&Apache::loncommon::csv_translate(&mt($_)) |
|
} ("username","domain","ID","student name", |
|
"section","start date","end date")).'"'."\n"; |
} |
} |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
# Create the excel spreadsheet |
# Create the excel spreadsheet |
$excel_filename = '/prtspool/'. |
($excel_workbook,$excel_filename,$format) = |
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. |
&Apache::loncommon::create_workbook($r); |
time.'_'.rand(1000000000).'.xls'; |
return if (! defined($excel_workbook)); |
$excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'. |
|
$excel_filename); |
|
$excel_workbook->set_tempdir('/home/httpd/perl/tmp'); |
|
$excel_sheet = $excel_workbook->addworksheet('classlist'); |
$excel_sheet = $excel_workbook->addworksheet('classlist'); |
# |
# |
my $description = 'Class List 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,$format->{'h1'}); |
# |
# |
$excel_sheet->write($row++,0,["username","domain","ID", |
$excel_sheet->write($row++,0,["username","domain","ID", |
"student name","section","status"]); |
"student name","section", |
|
"start date","end date","status"], |
|
$format->{'bold'}); |
} |
} |
# |
# |
# Sort the students |
# Sort the students |
Line 1169 END
|
Line 1359 END
|
|| |
|| |
lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) |
lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) |
} (keys(%$classlist)); |
} (keys(%$classlist)); |
|
my $studentcount = 0; |
|
my $autocount = 0; |
|
my $manualcount = 0; |
|
my $unlockcount = 0; |
|
my $lockcount = 0; |
foreach my $student (@Sorted_Students) { |
foreach my $student (@Sorted_Students) { |
my $username = $classlist->{$student}->[$index{'username'}]; |
my $sdata = $classlist->{$student}; |
my $domain = $classlist->{$student}->[$index{'domain'}]; |
my $username = $sdata->[$index{'username'}]; |
my $section = $classlist->{$student}->[$index{'section'}]; |
my $domain = $sdata->[$index{'domain'}]; |
my $name = $classlist->{$student}->[$index{'fullname'}]; |
my $section = $sdata->[$index{'section'}]; |
my $id = $classlist->{$student}->[$index{'id'}]; |
my $name = $sdata->[$index{'fullname'}]; |
my $status = $classlist->{$student}->[$index{'status'}]; |
my $id = $sdata->[$index{'id'}]; |
|
my $status = $sdata->[$index{'status'}]; |
|
my $start = $sdata->[$index{'start'}]; |
|
my $end = $sdata->[$index{'end'}]; |
|
my $type = $sdata->[$index{'type'}]; |
next if (($statusmode ne 'Any') && ($status ne $statusmode)); |
next if (($statusmode ne 'Any') && ($status ne $statusmode)); |
if ($mode eq 'view') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
$r->print("<tr>\n <td>\n "); |
if (! defined($start) || $start == 0) { |
|
$start = &mt('none'); |
|
} else { |
|
$start = &Apache::lonlocal::locallocaltime($start); |
|
} |
|
if (! defined($end) || $end == 0) { |
|
$end = &mt('none'); |
|
} else { |
|
$end = &Apache::lonlocal::locallocaltime($end); |
|
} |
|
$r->print("<tr>\n "); |
|
if ($mode eq 'autoenroll') { |
|
my $lockedtype = $sdata->[$index{'lockedtype'}]; |
|
$studentcount++; |
|
my $cellentry; |
|
if ($type eq 'auto') { |
|
$cellentry = '<b>'.&mt('auto').'</b> <input type="checkbox" name="chgauto" value="'.$username.':'.$domain.'" /> Change'; |
|
$autocount ++; |
|
} else { |
|
$cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><input type="checkbox" name="chgmanual" value="'.$username.':'.$domain.'" /> Change</nobr></td></tr><tr><td><nobr>'; |
|
$manualcount ++; |
|
if ($lockedtype) { |
|
$cellentry .= '<input type="checkbox" name="unlockchg" value="'.$username.':'.$domain.'" /> '.&mt('Unlock'); |
|
$unlockcount ++; |
|
} else { |
|
$cellentry .= '<input type="checkbox" name="lockchg" value="'.$username.':'.$domain.'" /> '.&mt('Lock'); |
|
$lockcount ++; |
|
} |
|
$cellentry .= '</nobr></td></tr></table>'; |
|
} |
|
$r->print("<td>$cellentry<td>\n "); |
|
} else { |
|
$r->print("<td>".(++$studentcount)."</td><td>\n "); |
|
} |
if ($linkto eq 'nothing') { |
if ($linkto eq 'nothing') { |
$r->print($username); |
$r->print($username); |
} elsif ($linkto eq 'aboutme') { |
} elsif ($linkto eq 'aboutme') { |
Line 1200 END
|
Line 1432 END
|
<td>$id</td> |
<td>$id</td> |
<td>$name</td> |
<td>$name</td> |
<td>$section</td> |
<td>$section</td> |
</tr> |
<td>$start</td> |
|
<td>$end</td> |
|
</tr> |
END |
END |
} elsif ($mode eq 'csv') { |
} elsif ($mode eq 'csv') { |
|
next if (! defined($CSVfile)); |
# no need to bother with $linkto |
# no need to bother with $linkto |
|
if (! defined($start) || $start == 0) { |
|
$start = &mt('none'); |
|
} else { |
|
$start = &Apache::lonlocal::locallocaltime($start); |
|
} |
|
if (! defined($end) || $end == 0) { |
|
$end = &mt('none'); |
|
} else { |
|
$end = &Apache::lonlocal::locallocaltime($end); |
|
} |
my @line = (); |
my @line = (); |
foreach ($username,$domain,$id,$name,$section) { |
foreach ($username,$domain,$id,$name,$section,$start,$end) { |
push @line,&Apache::loncommon::csv_translate($_); |
push @line,&Apache::loncommon::csv_translate($_); |
} |
} |
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
push @line,&Apache::loncommon::csv_translate($status); |
push @line,&Apache::loncommon::csv_translate($status); |
} |
} |
my $tmp = $"; |
print $CSVfile '"'.join('","',@line).'"'."\n"; |
$" = '","'; |
|
$r->print("\"@line\"\n"); |
|
$" = $tmp; |
|
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
$excel_sheet->write($row++,0,[$username,$domain,$id, |
$excel_sheet->write($row,0,[$username,$domain,$id, |
$name,$section,$status]); |
$name,$section]); |
|
my $col = 5; |
|
foreach my $time ($start,$end) { |
|
if (defined($time) && $time != 0) { |
|
$excel_sheet->write($row,$col++, |
|
&Apache::lonstathelpers::calc_serial($time), |
|
$format->{'date'}); |
|
} else { |
|
$excel_sheet->write($row,$col++,'none'); |
|
} |
|
} |
|
$excel_sheet->write($row,$col++,$status); |
|
$row++; |
} |
} |
} |
} |
if ($mode eq 'view') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
$r->print('</table><br>'); |
$r->print('</table><br>'); |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
$excel_workbook->close(); |
$excel_workbook->close(); |
$r->print('<p><a href="'.$excel_filename.'">'. |
$r->print('<p><a href="'.$excel_filename.'">'. |
&mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n"); |
&mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n"); |
|
} elsif ($mode eq 'csv') { |
|
close($CSVfile); |
|
$r->print('<a href="'.$CSVfilename.'">'. |
|
&mt('Your CSV file').'</a> is ready for download.'. |
|
"\n"); |
|
$r->rflush(); |
|
} |
|
if ($mode eq 'autoenroll') { |
|
return ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount); |
} |
} |
|
return; |
} |
} |
|
|
|
|
Line 1237 sub print_modify_student_form {
|
Line 1501 sub print_modify_student_form {
|
my $r = shift(); |
my $r = shift(); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['sdom','sname']); |
['sdom','sname']); |
my $sname = $ENV{'form.sname'}; |
my $sname = $env{'form.sname'}; |
my $sdom = $ENV{'form.sdom'}; |
my $sdom = $env{'form.sdom'}; |
my $sortby = $ENV{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
# determine the students name information |
# determine the students name information |
my %info=&Apache::lonnet::get('environment', |
my %info=&Apache::lonnet::get('environment', |
['firstname','middlename', |
['firstname','middlename', |
Line 1261 sub print_modify_student_form {
|
Line 1525 sub print_modify_student_form {
|
$r->print('<p>'.$starttime.'</p>'); |
$r->print('<p>'.$starttime.'</p>'); |
return; |
return; |
} |
} |
|
# |
# Deal with date forms |
# Deal with date forms |
|
my $current_date_description = ''; |
|
my $textdate = ''; |
|
|
|
if (! defined($starttime) || $starttime == 0) { |
|
$current_date_description = &mt('Current Starting Date: not set'). |
|
'<br />'; |
|
} else { |
|
$current_date_description = |
|
&mt('Current Starting Date: [_1]', |
|
&Apache::lonlocal::locallocaltime($starttime)).'<br />'; |
|
} |
|
if (! defined($endtime) || $endtime == 0) { |
|
$current_date_description.= &mt('Current Ending Date: not set'). |
|
'<br />'; |
|
} else { |
|
$current_date_description.= |
|
&mt('Current Ending Date: [_1]', |
|
&Apache::lonlocal::locallocaltime($endtime)).'<br />'; |
|
|
|
} |
my $date_table = &date_setting_table($starttime,$endtime); |
my $date_table = &date_setting_table($starttime,$endtime); |
# |
# |
if (! exists($ENV{'form.Status'}) || |
if (! exists($env{'form.Status'}) || |
$ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) { |
$env{'form.Status'} !~ /^(Any|Expired|Active)$/) { |
$ENV{'form.Status'} = 'crap'; |
$env{'form.Status'} = 'crap'; |
} |
} |
# Make sure student is enrolled in course |
# Make sure student is enrolled in course |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
Line 1293 $lt{'odcc'}
|
Line 1578 $lt{'odcc'}
|
<input type="hidden" name="action" value="modifystudent" /> |
<input type="hidden" name="action" value="modifystudent" /> |
<input type="hidden" name="state" value="done" /> |
<input type="hidden" name="state" value="done" /> |
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="Status" value="$ENV{'form.Status'}" /> |
<input type="hidden" name="Status" value="$env{'form.Status'}" /> |
|
|
<h2>$lt{'mef'} $info{'firstname'} $info{'middlename'} |
<h2>$lt{'mef'} $info{'firstname'} $info{'middlename'} |
$info{'lastname'} $info{'generation'}, $sname\@$sdom</h2> |
$info{'lastname'} $info{'generation'}, $sname\@$sdom</h2> |
<p> |
<p> |
Line 1313 $info{'lastname'} $info{'generation'}, $
|
Line 1597 $info{'lastname'} $info{'generation'}, $
|
<input type="checkbox" name="forceid" > |
<input type="checkbox" name="forceid" > |
$lt{'disn'} |
$lt{'disn'} |
</p><p> |
</p><p> |
<b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="4"/> |
<b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="14"/> |
</p> |
</p> |
|
<p>$current_date_description</p> |
<p>$date_table</p> |
<p>$date_table</p> |
<input type="submit" value="$lt{'sm'}" /> |
<input type="submit" value="$lt{'sm'}" /> |
</body></html> |
</body></html> |
Line 1329 sub modify_single_student {
|
Line 1614 sub modify_single_student {
|
my $r = shift; |
my $r = shift; |
# |
# |
# Remove non alphanumeric values from the section |
# Remove non alphanumeric values from the section |
$ENV{'form.section'} =~ s/\W//g; |
$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'}) { |
$r->print(&make_dates_default($starttime,$endtime)); |
$r->print(&make_dates_default($starttime,$endtime)); |
} |
} |
# Get the 'sortby' and 'Status' variables so the user goes back to their |
# Get the 'sortby' and 'Status' variables so the user goes back to their |
# previous screen |
# previous screen |
my $sortby = $ENV{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
my $status = $ENV{'form.Status'}; |
my $status = $env{'form.Status'}; |
# |
# |
# We always need this information |
# We always need this information |
my $slogin = $ENV{'form.slogin'}; |
my $slogin = $env{'form.slogin'}; |
my $sdom = $ENV{'form.sdomain'}; |
my $sdom = $env{'form.sdomain'}; |
# |
# |
# Get the old data |
# Get the old data |
my %old=&Apache::lonnet::get('environment', |
my %old=&Apache::lonnet::get('environment', |
Line 1351 sub modify_single_student {
|
Line 1636 sub modify_single_student {
|
'lastname','generation','id'], |
'lastname','generation','id'], |
$sdom, $slogin); |
$sdom, $slogin); |
$old{'section'} = &Apache::lonnet::getsection($sdom,$slogin, |
$old{'section'} = &Apache::lonnet::getsection($sdom,$slogin, |
$ENV{'request.course.id'}); |
$env{'request.course.id'}); |
my ($tmp) = keys(%old); |
my ($tmp) = keys(%old); |
if ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
if ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
$r->print(&mt('There was an error determining the environment values for')." $slogin \@ $sdom."); |
$r->print(&mt('There was an error determining the environment values for')." $slogin \@ $sdom."); |
Line 1360 sub modify_single_student {
|
Line 1645 sub modify_single_student {
|
undef $tmp; |
undef $tmp; |
# |
# |
# Get the new data |
# Get the new data |
my $firstname = $ENV{'form.firstname'}; |
my $firstname = $env{'form.firstname'}; |
my $middlename = $ENV{'form.middlename'}; |
my $middlename = $env{'form.middlename'}; |
my $lastname = $ENV{'form.lastname'}; |
my $lastname = $env{'form.lastname'}; |
my $generation = $ENV{'form.generation'}; |
my $generation = $env{'form.generation'}; |
my $section = $ENV{'form.section'}; |
my $section = $env{'form.section'}; |
my $courseid = $ENV{'request.course.id'}; |
my $courseid = $env{'request.course.id'}; |
my $sid = $ENV{'form.id'}; |
my $sid = $env{'form.id'}; |
my $displayable_starttime = localtime($starttime); |
my $displayable_starttime = localtime($starttime); |
my $displayable_endtime = localtime($endtime); |
my $displayable_endtime = localtime($endtime); |
# |
# |
# check for forceid override |
# check for forceid override |
if ((defined($old{'id'})) && ($old{'id'} ne '') && |
if ((defined($old{'id'})) && ($old{'id'} ne '') && |
($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) { |
($sid ne $old{'id'}) && (! exists($env{'form.forceid'}))) { |
$r->print("<font color=\"ff0000\">".&mt('You changed the students id but did not disable the ID change safeguard. The students id will not be changed.')."</font>"); |
$r->print("<font color=\"ff0000\">".&mt('You changed the students id but did not disable the ID change safeguard. The students id will not be changed.')."</font>"); |
$sid = $old{'id'}; |
$sid = $old{'id'}; |
} |
} |
Line 1439 END
|
Line 1724 END
|
# Send request(s) to modify data (final undef is for 'desiredhost', |
# Send request(s) to modify data (final undef is for 'desiredhost', |
# which is a moot point because the student already has an account. |
# which is a moot point because the student already has an account. |
my $modify_section_results = &modifystudent($sdom,$slogin, |
my $modify_section_results = &modifystudent($sdom,$slogin, |
$ENV{'request.course.id'}, |
$env{'request.course.id'}, |
$section,undef); |
$section,undef); |
if ($modify_section_results !~ /^ok/) { |
if ($modify_section_results !~ /^ok/) { |
$r->print(&mt('An error occured during the attempt to change the section for this student.')."<br />"); |
$r->print(&mt('An error occured during the attempt to change the section for this student.')."<br />"); |
} |
} |
my $roleresults = &Apache::lonnet::modifystudent |
my $roleresults = &Apache::lonnet::modifystudent |
($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname, |
($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname, |
$generation,$section,$endtime,$starttime,$ENV{'form.forceid'}); |
$generation,$section,$endtime,$starttime,$env{'form.forceid'}); |
if ($roleresults eq 'refused' ) { |
if ($roleresults eq 'refused' ) { |
$r->print(&mt('Your request to change the role information for this student was refused. You do not appear to have sufficient authority to change student information.')); |
$r->print(&mt('Your request to change the role information for this student was refused. You do not appear to have sufficient authority to change student information.')); |
} elsif ($roleresults !~ /ok/) { |
} elsif ($roleresults !~ /ok/) { |
Line 1455 END
|
Line 1740 END
|
$roleresults); |
$roleresults); |
&Apache::lonnet::logthis("londropadd:failed attempt to modify student". |
&Apache::lonnet::logthis("londropadd:failed attempt to modify student". |
" data for ".$slogin." \@ ".$sdom." by ". |
" data for ".$slogin." \@ ".$sdom." by ". |
$ENV{'user.name'}." \@ ".$ENV{'user.domain'}. |
$env{'user.name'}." \@ ".$env{'user.domain'}. |
":".$roleresults); |
":".$roleresults); |
} else { # everything is okay! |
} else { # everything is okay! |
$r->print(&mt('Student information updated successfully.')." <br />". |
$r->print(&mt('Student information updated successfully.')." <br />". |
Line 1475 END
|
Line 1760 END
|
|
|
sub get_enrollment_data { |
sub get_enrollment_data { |
my ($sname,$sdomain) = @_; |
my ($sname,$sdomain) = @_; |
my $courseid = $ENV{'request.course.id'}; |
my $courseid = $env{'request.course.id'}; |
$courseid =~ s:_:/:g; |
$courseid =~ s:_:/:g; |
my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname); |
my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname); |
my ($tmp) = keys(%roles); |
my ($tmp) = keys(%roles); |
Line 1534 which describes the order elements are s
|
Line 1819 which describes the order elements are s
|
################################################# |
################################################# |
sub show_drop_list { |
sub show_drop_list { |
my ($r,$classlist,$keylist,$nosort)=@_; |
my ($r,$classlist,$keylist,$nosort)=@_; |
my $cid=$ENV{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
if (! exists($ENV{'form.sortby'})) { |
if (! exists($env{'form.sortby'})) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['sortby']); |
['sortby']); |
} |
} |
my $sortby = $ENV{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
if ($sortby !~ /^(username|domain|section|fullname|id)$/) { |
if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
# |
# |
Line 1564 function uncheckAll(field) {
|
Line 1849 function uncheckAll(field) {
|
<input type="hidden" name="phase" value="four"> |
<input type="hidden" name="phase" value="four"> |
END |
END |
|
|
|
my %lt=&Apache::lonlocal::texthash('usrn' => "username", |
|
'dom' => "domain", |
|
'sn' => "student name", |
|
'sec' => "section", |
|
'start' => "start date", |
|
'end' => "end date", |
|
); |
if ($nosort) { |
if ($nosort) { |
my %lt=&Apache::lonlocal::texthash( |
|
'usrn' => "username", |
|
'dom' => "domain", |
|
'sn' => "student name", |
|
'sec' => "section", |
|
); |
|
$r->print(<<END); |
$r->print(<<END); |
<table border=2> |
<table border=2> |
<tr> |
<tr> |
Line 1580 END
|
Line 1866 END
|
<th>ID</th> |
<th>ID</th> |
<th>$lt{'sn'}</th> |
<th>$lt{'sn'}</th> |
<th>$lt{'sec'}</th> |
<th>$lt{'sec'}</th> |
|
<th>$lt{'start'}</th> |
|
<th>$lt{'end'}</th> |
</tr> |
</tr> |
END |
END |
|
|
} else { |
} else { |
my %lt=&Apache::lonlocal::texthash( |
|
'usrn' => "username", |
|
'dom' => "domain", |
|
'sn' => "student name", |
|
'sec' => "section", |
|
); |
|
$r->print(<<END); |
$r->print(<<END); |
<table border=2> |
<table border=2> |
<tr><th> </th> |
<tr><th> </th> |
Line 1603 END
|
Line 1885 END
|
<a href="/adm/dropadd?action=$action&sortby=fullname">$lt{'sn'}</a> |
<a href="/adm/dropadd?action=$action&sortby=fullname">$lt{'sn'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=section">$lt{'sec'}</a> |
<a href="/adm/dropadd?action=$action&sortby=section">$lt{'sec'}</a> |
|
</th><th> |
|
<a href="/adm/dropadd?action=$action&sortby=start">$lt{'start'}</a> |
|
</th><th> |
|
<a href="/adm/dropadd?action=$action&sortby=end">$lt{'end'}</a> |
</th> |
</th> |
</tr> |
</tr> |
END |
END |
Line 1626 END
|
Line 1912 END
|
} (keys(%$classlist)); |
} (keys(%$classlist)); |
foreach my $student (@Sorted_Students) { |
foreach my $student (@Sorted_Students) { |
my $error; |
my $error; |
my $username = $classlist->{$student}->[$index{'username'}]; |
my $sdata = $classlist->{$student}; |
my $domain = $classlist->{$student}->[$index{'domain'}]; |
my $username = $sdata->[$index{'username'}]; |
my $section = $classlist->{$student}->[$index{'section'}]; |
my $domain = $sdata->[$index{'domain'}]; |
my $name = $classlist->{$student}->[$index{'fullname'}]; |
my $section = $sdata->[$index{'section'}]; |
my $id = $classlist->{$student}->[$index{'id'}]; |
my $name = $sdata->[$index{'fullname'}]; |
my $status = $classlist->{$student}->[$index{'status'}]; |
my $id = $sdata->[$index{'id'}]; |
|
my $start = $sdata->[$index{'start'}]; |
|
my $end = $sdata->[$index{'end'}]; |
|
if (! defined($start) || $start == 0) { |
|
$start = &mt('none'); |
|
} else { |
|
$start = &Apache::lonlocal::locallocaltime($start); |
|
} |
|
if (! defined($end) || $end == 0) { |
|
$end = &mt('none'); |
|
} else { |
|
$end = &Apache::lonlocal::locallocaltime($end); |
|
} |
|
my $status = $sdata->[$index{'status'}]; |
next if ($status ne 'Active'); |
next if ($status ne 'Active'); |
# |
# |
$r->print(<<"END"); |
$r->print(<<"END"); |
Line 1642 END
|
Line 1941 END
|
<td>$id</td> |
<td>$id</td> |
<td>$name</td> |
<td>$name</td> |
<td>$section</td> |
<td>$section</td> |
|
<td>$start</td> |
|
<td>$end</td> |
</tr> |
</tr> |
END |
END |
} |
} |
$r->print('</table><br>'); |
$r->print('</table><br>'); |
my %lt=&Apache::lonlocal::texthash( |
%lt=&Apache::lonlocal::texthash( |
'dp' => "Drop Students", |
'dp' => "Drop Students", |
'ca' => "check all", |
'ca' => "check all", |
'ua' => "uncheck all", |
'ua' => "uncheck all", |
Line 1692 sub upfile_drop_add {
|
Line 1993 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);} |
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=(); |
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.upfile_associate'} eq 'reverse') { |
if ($ENV{'form.f'.$i} ne 'none') { |
if ($env{'form.f'.$i} ne 'none') { |
$fields{$keyfields[$i]}=$ENV{'form.f'.$i}; |
$fields{$keyfields[$i]}=$env{'form.f'.$i}; |
} |
} |
} else { |
} else { |
$fields{$ENV{'form.f'.$i}}=$keyfields[$i]; |
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
} |
} |
} |
} |
# |
# |
|
# Store the field choices away |
|
foreach my $field (qw/username names |
|
fname mname lname gen id sec ipwd email/) { |
|
$env{'form.'.$field.'_choice'}=$fields{$field}; |
|
} |
|
&Apache::loncommon::store_course_settings('enrollment_upload', |
|
{ 'username_choice' => 'scalar', |
|
'names_choice' => 'scalar', |
|
'fname_choice' => 'scalar', |
|
'mname_choice' => 'scalar', |
|
'lname_choice' => 'scalar', |
|
'gen_choice' => 'scalar', |
|
'id_choice' => 'scalar', |
|
'sec_choice' => 'scalar', |
|
'ipwd_choice' => 'scalar', |
|
'email_choice' => 'scalar' }); |
|
|
|
# |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
if ($ENV{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
$r->print(&make_dates_default($startdate,$enddate)); |
$r->print(&make_dates_default($startdate,$enddate)); |
} |
} |
# Determine domain and desired host (home server) |
# Determine domain and desired host (home server) |
my $domain=$ENV{'form.lcdomain'}; |
my $domain=$env{'form.lcdomain'}; |
my $desiredhost = $ENV{'form.lcserver'}; |
my $desiredhost = $env{'form.lcserver'}; |
if (lc($desiredhost) eq 'default') { |
if (lc($desiredhost) eq 'default') { |
$desiredhost = undef; |
$desiredhost = undef; |
} else { |
} else { |
Line 1727 sub upfile_drop_add {
|
Line 2046 sub upfile_drop_add {
|
# Determine authentication mechanism |
# Determine authentication mechanism |
my $amode = ''; |
my $amode = ''; |
my $genpwd = ''; |
my $genpwd = ''; |
if ($ENV{'form.login'} eq 'krb') { |
if ($env{'form.login'} eq 'krb') { |
$amode='krb'; |
$amode='krb'; |
$amode.=$ENV{'form.krbver'}; |
$amode.=$env{'form.krbver'}; |
$genpwd=$ENV{'form.krbarg'}; |
$genpwd=$env{'form.krbarg'}; |
} elsif ($ENV{'form.login'} eq 'int') { |
} elsif ($env{'form.login'} eq 'int') { |
$amode='internal'; |
$amode='internal'; |
if ((defined($ENV{'form.intarg'})) && ($ENV{'form.intarg'})) { |
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { |
$genpwd=$ENV{'form.intarg'}; |
$genpwd=$env{'form.intarg'}; |
} |
} |
} elsif ($ENV{'form.login'} eq 'loc') { |
} elsif ($env{'form.login'} eq 'loc') { |
$amode='localauth'; |
$amode='localauth'; |
if ((defined($ENV{'form.locarg'})) && ($ENV{'form.locarg'})) { |
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { |
$genpwd=$ENV{'form.locarg'}; |
$genpwd=$env{'form.locarg'}; |
} |
} |
} |
} |
if ($amode =~ /^krb/) { |
if ($amode =~ /^krb/) { |
Line 1830 sub upfile_drop_add {
|
Line 2149 sub upfile_drop_add {
|
\$lname,\$gen,\$sec) { |
\$lname,\$gen,\$sec) { |
$$_ =~ s/(\s+$|^\s+)//g; |
$$_ =~ s/(\s+$|^\s+)//g; |
} |
} |
if ($password || $ENV{'form.login'} eq 'loc') { |
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); |
$email); |
if ($reply ne 'ok') { |
if ($reply ne 'ok') { |
$reply =~ s/^error://; |
$reply =~ s/^error://; |
Line 1867 sub upfile_drop_add {
|
Line 2186 sub upfile_drop_add {
|
##################################### |
##################################### |
# Drop students # |
# Drop students # |
##################################### |
##################################### |
if ($ENV{'form.fullup'} eq 'yes') { |
if ($env{'form.fullup'} eq 'yes') { |
$r->print('<h3>'.&mt('Dropping Students')."</h3>\n"); |
$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(); |
Line 1895 sub upfile_drop_add {
|
Line 2214 sub upfile_drop_add {
|
sub drop_student_list { |
sub drop_student_list { |
my $r=shift; |
my $r=shift; |
my $count=0; |
my $count=0; |
my @droplist; |
my @droplist = &Apache::loncommon::get_env_multiple('form.droplist'); |
if (ref($ENV{'form.droplist'})) { |
|
@droplist = @{$ENV{'form.droplist'}}; |
|
} else { |
|
@droplist = ($ENV{'form.droplist'}); |
|
} |
|
foreach (@droplist) { |
foreach (@droplist) { |
my ($uname,$udom)=split(/\:/,$_); |
my ($uname,$udom)=split(/\:/,$_); |
# 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(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>'); |
$r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>'); |
$count++; |
$count++; |
Line 1961 sub handler {
|
Line 2275 sub handler {
|
} |
} |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['action','state']); |
['action','state']); |
|
|
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>"/adm/dropadd", |
|
text=>"Enrollment Manager", |
|
faq=>9,bug=>'Instructor Interface',}); |
# Needs to be in a course |
# Needs to be in a course |
if (! (($ENV{'request.course.fn'}) && |
if (! ($env{'request.course.fn'})) { |
(&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) { |
# Not in a course |
# Not in a course, or not allowed to modify parms |
$env{'user.error.msg'}= |
$ENV{'user.error.msg'}= |
|
"/adm/dropadd:cst:0:0:Cannot drop or add students"; |
"/adm/dropadd:cst:0:0:Cannot drop or add students"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
# |
# |
|
my $view_permission = |
|
&Apache::lonnet::allowed('vcl',$env{'request.course.id'}); |
|
my $enrl_permission = |
|
&Apache::lonnet::allowed('cst',$env{'request.course.id'}); |
|
if (! $view_permission && ! $enrl_permission) { |
|
$env{'user.error.msg'}= |
|
"/adm/dropadd:cst:0:0:Cannot drop or add students"; |
|
return HTTP_NOT_ACCEPTABLE; |
|
} |
|
# |
# Only output the header information if they did not request csv format |
# Only output the header information if they did not request csv format |
# |
# |
if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { |
# Start page |
$r->content_type('text/csv'); |
&Apache::loncommon::content_type($r,'text/html'); |
} else { |
$r->send_http_header; |
# Start page |
$r->print(&header()); |
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
|
$r->print(&header()); |
|
} |
|
# |
# |
# Main switch on form.action and form.state, as appropriate |
# Main switch on form.action and form.state, as appropriate |
if (! exists($ENV{'form.action'})) { |
if (! exists($env{'form.action'})) { |
&print_main_menu($r); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
} elsif ($ENV{'form.action'} eq 'upload') { |
(undef,'Enrollment Manager')); |
if (! exists($ENV{'form.state'})) { |
&print_main_menu($r,$enrl_permission,$view_permission); |
|
} elsif ($env{'form.action'} eq 'upload' && $enrl_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/dropadd?action=upload&state=', |
|
text=>"Upload Classlist"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Upload Classlist','Course_Create_Class_List')); |
|
if (! exists($env{'form.state'})) { |
&print_first_courselist_upload_form($r); |
&print_first_courselist_upload_form($r); |
} elsif ($ENV{'form.state'} eq 'got_file') { |
} elsif ($env{'form.state'} eq 'got_file') { |
&print_upload_manager_form($r); |
&print_upload_manager_form($r); |
} elsif ($ENV{'form.state'} eq 'enrolling') { |
} elsif ($env{'form.state'} eq 'enrolling') { |
if ($ENV{'form.datatoken'}) { |
if ($env{'form.datatoken'}) { |
&upfile_drop_add($r); |
&upfile_drop_add($r); |
} else { |
} else { |
# Hmmm, this is an error |
# Hmmm, this is an error |
Line 1998 sub handler {
|
Line 2330 sub handler {
|
} else { |
} else { |
&print_first_courselist_upload_form($r); |
&print_first_courselist_upload_form($r); |
} |
} |
} elsif ($ENV{'form.action'} eq 'drop') { |
} elsif ($env{'form.action'} eq 'drop' && $enrl_permission) { |
if (! exists($ENV{'form.state'})) { |
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/dropadd?action=drop', |
|
text=>"Drop Students"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Drop Students','Course_Drop_Student')); |
|
if (! exists($env{'form.state'})) { |
&print_drop_menu($r); |
&print_drop_menu($r); |
} elsif ($ENV{'form.state'} eq 'done') { |
} elsif ($env{'form.state'} eq 'done') { |
&drop_student_list($r); |
&drop_student_list($r); |
} else { |
} else { |
&print_drop_menu($r); |
&print_drop_menu($r); |
} |
} |
} elsif ($ENV{'form.action'} eq 'enrollstudent') { |
} elsif ($env{'form.action'} eq 'enrollstudent' && $enrl_permission) { |
if (! exists($ENV{'form.state'})) { |
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/dropadd?action=enrollstudent', |
|
text=>"Enroll Student"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Enroll Student','Course_Add_Student')); |
|
if (! exists($env{'form.state'})) { |
&get_student_username_domain_form($r); |
&get_student_username_domain_form($r); |
} elsif ($ENV{'form.state'} eq 'gotusername') { |
} 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 { |
&get_student_username_domain_form($r); |
&get_student_username_domain_form($r); |
} |
} |
} elsif ($ENV{'form.action'} eq 'classlist') { |
} elsif ($env{'form.action'} eq 'classlist' && $view_permission) { |
if (! exists($ENV{'form.state'})) { |
&Apache::lonhtmlcommon::add_breadcrumb |
&print_html_classlist($r); |
({href=>'/adm/dropadd?action=classlist', |
} elsif ($ENV{'form.state'} eq 'csv') { |
text=>"View Classlist"}); |
&print_formatted_classlist($r,'csv'); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
} elsif ($ENV{'form.state'} eq 'excel') { |
(undef,'View Classlist','Course_View_Class_List')); |
&print_formatted_classlist($r,'excel'); |
if (! exists($env{'form.state'})) { |
|
&print_html_classlist($r,undef); |
|
} elsif ($env{'form.state'} eq 'csv') { |
|
&print_html_classlist($r,'csv'); |
|
} elsif ($env{'form.state'} eq 'excel') { |
|
&print_html_classlist($r,'excel'); |
} else { |
} else { |
&print_html_classlist($r); |
&print_html_classlist($r,undef); |
} |
} |
} elsif ($ENV{'form.action'} eq 'modifystudent') { |
} elsif ($env{'form.action'} eq 'modifystudent' && $enrl_permission) { |
if (! exists($ENV{'form.state'})) { |
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>'/adm/dropadd?action=modifystudent', |
|
text=>"Modify Student Data"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Modify Student Data','Course_Modify_Student_Data')); |
|
if (! exists($env{'form.state'})) { |
&print_html_classlist($r); |
&print_html_classlist($r); |
} elsif ($ENV{'form.state'} eq 'selected') { |
} elsif ($env{'form.state'} eq 'selected') { |
&print_modify_student_form($r); |
&print_modify_student_form($r); |
} elsif ($ENV{'form.state'} eq 'done') { |
} elsif ($env{'form.state'} eq 'done') { |
&modify_single_student($r); |
&modify_single_student($r); |
} else { |
} else { |
&print_html_classlist($r); |
&print_html_classlist($r); |
Line 2039 sub handler {
|
Line 2391 sub handler {
|
} else { |
} else { |
# We should not end up here, but I guess it is possible |
# We should not end up here, but I guess it is possible |
&Apache::lonnet::logthis("Undetermined state in londropadd.pm. ". |
&Apache::lonnet::logthis("Undetermined state in londropadd.pm. ". |
"form.action = ".$ENV{'form.action'}. |
"form.action = ".$env{'form.action'}. |
"Someone should fix this."); |
"Someone should fix this."); |
&print_main_menu($r); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
|
(undef,'Enrollment Manager')); |
|
&print_main_menu($r,$enrl_permission,$view_permission); |
} |
} |
# |
# |
# Finish up |
# Finish up |
if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { |
$r->print('</form></body></html>'); |
$r->print("\n"); |
|
} else { |
|
$r->print('</form></body></html>'); |
|
} |
|
return OK; |
return OK; |
} |
} |
|
|