version 1.136, 2006/02/08 23:47:23
|
version 1.148, 2006/11/22 22:53:41
|
Line 39 use Apache::Constants qw(:common :http R
|
Line 39 use Apache::Constants qw(:common :http R
|
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
use Apache::lonstathelpers(); |
use Apache::lonstathelpers(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::longroup; |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub header { |
sub header { |
my $html=&Apache::lonxml::xmlbegin(); |
my $start_page=&Apache::loncommon::start_page('Enrollment Manager'); |
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); |
|
my $title = &mt('LON-CAPA Enrollment Manager'); |
|
return(<<ENDHEAD); |
return(<<ENDHEAD); |
$html |
$start_page |
<head> |
|
<title>$title</title> |
|
</head> |
|
$bodytag |
|
<form method="post" enctype="multipart/form-data" |
<form method="post" enctype="multipart/form-data" |
action="/adm/dropadd" name="studentform"> |
action="/adm/dropadd" name="studentform"> |
ENDHEAD |
ENDHEAD |
Line 83 sub modifystudent {
|
Line 78 sub modifystudent {
|
} elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) { |
} elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) { |
my (undef,$end,$start)=split(/\_/,$roles{$course}); |
my (undef,$end,$start)=split(/\_/,$roles{$course}); |
my $now=time; |
my $now=time; |
# if this is an active role |
# if this is an active role |
if (!($start && ($now<$start)) || !($end && ($now>$end))) { |
if (!($start && ($now<$start)) || !($end && ($now>$end))) { |
my $reply=&Apache::lonnet::modifystudent |
my $reply=&Apache::lonnet::modifystudent |
# dom name id mode pass f m l g |
# dom name id mode pass f m l g |
Line 172 sub print_main_menu {
|
Line 167 sub print_main_menu {
|
permission => &Apache::lonnet::auto_run($cnum,$cdom), |
permission => &Apache::lonnet::auto_run($cnum,$cdom), |
url => '/adm/populate', |
url => '/adm/populate', |
}, |
}, |
# { text => 'Create a new group', |
{ text => 'Create a new group', |
# help => 'Course_Create_Group', |
help => 'Course_Create_Group', |
# permission => $grp_manage_permission, |
permission => $grp_manage_permission, |
# url => '/adm/coursegroups?refpage=enrl&action=create', |
url => '/adm/coursegroups?refpage=enrl&action=create', |
# }, |
}, |
# { text => 'Modify an existing group', |
{ text => 'Modify an existing group', |
# help => 'Course_Modify_Group', |
help => 'Course_Modify_Group', |
# permission => $grp_manage_permission, |
permission => $grp_manage_permission, |
# url => '/adm/coursegroups?refpage=enrl&action=modify', |
url => '/adm/coursegroups?refpage=enrl&action=modify', |
# }, |
}, |
# { text => 'Delete an existing group', |
# { text => 'Delete an existing group', |
# help => 'Course_Delete_Group', |
# help => 'Course_Delete_Group', |
# permission => $grp_manage_permission, |
# permission => $grp_manage_permission, |
# url => '/adm/coursegroups?refpage=enrl&action=delete', |
# url => '/adm/coursegroups?refpage=enrl&action=delete', |
# }, |
# }, |
# { text => 'Enter an existing group', |
{ text => 'Enter an existing group', |
# help => 'Course_Display_Group', |
help => 'Course_Display_Group', |
# permission => $grp_view_permission, |
permission => $grp_view_permission, |
# url => '/adm/coursegroups?refpage=enrl&action=view', |
url => '/adm/coursegroups?refpage=enrl&action=view', |
# }, |
}, |
); |
); |
my $menu_html = ''; |
my $menu_html = ''; |
foreach my $menu_item (@menu) { |
foreach my $menu_item (@menu) { |
Line 255 sub print_upload_manager_header {
|
Line 250 sub print_upload_manager_header {
|
# |
# |
my $javascript_validations=&javascript_validations('auth',$krbdefdom, |
my $javascript_validations=&javascript_validations('auth',$krbdefdom, |
$password_choice); |
$password_choice); |
my $checked=(($env{'form.noFirstLine'})?' checked="1"':''); |
my $checked=(($env{'form.noFirstLine'})?' CHECKED ':''); |
$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 274 sub print_upload_manager_header {
|
Line 269 sub print_upload_manager_header {
|
$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);" />'); |
$r->print('<label><input type="checkbox" name="noFirstLine" $checked />'. |
$r->print('<label><input type="checkbox" name="noFirstLine"'.$checked.'/>'. |
&mt('Ignore First Line').'</label>'); |
&mt('Ignore First Line').'</label>'); |
$r->print("<hr />\n". |
$r->print("<hr />\n". |
'<script type="text/javascript" language="Javascript">'."\n". |
'<script type="text/javascript" language="Javascript">'."\n". |
Line 313 sub javascript_validations {
|
Line 308 sub javascript_validations {
|
ipass => 'You need to specify the initial password.', |
ipass => 'You need to specify the initial password.', |
name => 'The optional name field was not specified.', |
name => 'The optional name field was not specified.', |
snum => 'The optional student number field was not specified.', |
snum => 'The optional student number field was not specified.', |
section => 'The optional section or group field was not specified.', |
section => 'The optional section field was not specified.', |
email => 'The optional email address field was not specified.', |
email => 'The optional email address field was not specified.', |
continue => 'Continue enrollment?', |
continue => 'Continue enrollment?', |
); |
); |
Line 399 END
|
Line 394 END
|
} |
} |
END |
END |
} |
} |
|
my $section_checks; |
my $optional_checks = ''; |
my $optional_checks = ''; |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$optional_checks = (<<END); |
$optional_checks = (<<END); |
Line 406 END
|
Line 402 END
|
} |
} |
END |
END |
} else { |
} else { |
|
$section_checks = §ion_check_js(); |
$optional_checks = (<<END); |
$optional_checks = (<<END); |
var message=''; |
var message=''; |
if (foundname==0) { |
if (foundname==0) { |
Line 446 END
|
Line 443 END
|
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $auth_checks; |
$result .= $auth_checks; |
} |
} |
$result .= $optional_checks; |
$result .= $optional_checks."\n".$section_checks; |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $authheader; |
$result .= $authheader; |
} |
} |
Line 457 END
|
Line 454 END
|
############################################################### |
############################################################### |
sub upload_manager_javascript_forward_associate { |
sub upload_manager_javascript_forward_associate { |
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf) { |
function verify(vf,sec_caller) { |
var founduname=0; |
var founduname=0; |
var foundpwd=0; |
var foundpwd=0; |
var foundname=0; |
var foundname=0; |
Line 550 ENDPICK
|
Line 547 ENDPICK
|
############################################################### |
############################################################### |
sub upload_manager_javascript_reverse_associate { |
sub upload_manager_javascript_reverse_associate { |
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf) { |
function verify(vf,sec_caller) { |
var founduname=0; |
var founduname=0; |
var foundpwd=0; |
var foundpwd=0; |
var foundname=0; |
var foundname=0; |
Line 646 sub print_upload_manager_footer {
|
Line 643 sub print_upload_manager_footer {
|
$Str .= &mt('Disable ID/Student Number Safeguard and Force Change '. |
$Str .= &mt('Disable ID/Student Number Safeguard and Force Change '. |
'of Conflicting IDs (only do if you know what you are doing)'). |
'of Conflicting IDs (only do if you know what you are doing)'). |
"</label>\n</p><p>\n"; |
"</label>\n</p><p>\n"; |
$Str .= '<input type="button" onClick="javascript:verify(this.form)" '. |
$Str .= '<input type="button"'. |
|
'onClick="javascript:verify(this.form,this.form.csec)" '. |
'value="Update Class List" />'."<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'); |
Line 707 sub print_upload_manager_form {
|
Line 705 sub print_upload_manager_form {
|
['lname',&mt('Last Name'), $env{'form.lname_choice'}], |
['lname',&mt('Last Name'), $env{'form.lname_choice'}], |
['gen', &mt('Generation'), $env{'form.gen_choice'}], |
['gen', &mt('Generation'), $env{'form.gen_choice'}], |
['id', &mt('ID/Student Number'),$env{'form.id_choice'}], |
['id', &mt('ID/Student Number'),$env{'form.id_choice'}], |
['sec', &mt('Group/Section'), $env{'form.sec_choice'}], |
['sec', &mt('Section'), $env{'form.sec_choice'}], |
['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], |
['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], |
['email',&mt('EMail Address'), $env{'form.email_choice'}]); |
['email',&mt('EMail Address'), $env{'form.email_choice'}]); |
if ($env{'form.upfile_associate'} eq 'reverse') { |
if ($env{'form.upfile_associate'} eq 'reverse') { |
Line 911 sub make_dates_default {
|
Line 909 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'}, |
|
{'freshen_cache' => 1}); |
} 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 1079 END
|
Line 1078 END
|
# Print it all out |
# Print it all out |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'cd' => "Course Data", |
'cd' => "Course Data", |
'gs' => "Group/Section", |
'gs' => "Section", |
'idsn' => "ID/Student Number", |
'idsn' => "ID/Student Number", |
'disn' => "Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)", |
'disn' => "Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)", |
'eas' => "Enroll as student", |
'eas' => "Enroll as student", |
Line 1090 END
|
Line 1089 END
|
<input type="hidden" name="cuname" value="$username" /> |
<input type="hidden" name="cuname" value="$username" /> |
<input type="hidden" name="lcdomain" value="$domain" /> |
<input type="hidden" name="lcdomain" value="$domain" /> |
<script type="text/javascript" language="Javascript"> |
<script type="text/javascript" language="Javascript"> |
function verify(vf) { |
function verify(vf,sec_caller) { |
var founduname=0; |
var founduname=0; |
var foundpwd=0; |
var foundpwd=0; |
var foundname=0; |
var foundname=0; |
Line 1107 function verify(vf) {
|
Line 1106 function verify(vf) {
|
} |
} |
if ((typeof(vf.csec.value)!="undefined") && (vf.csec.value!='')) { |
if ((typeof(vf.csec.value)!="undefined") && (vf.csec.value!='')) { |
foundsec=1; |
foundsec=1; |
|
if (validate(sec_caller) == "error") { |
|
return; |
|
} |
} |
} |
if ((typeof(vf.cstid.value)!="undefined") && (vf.cstid.value!='')) { |
if ((typeof(vf.cstid.value)!="undefined") && (vf.cstid.value!='')) { |
foundid=1; |
foundid=1; |
Line 1143 $lt{'idsn'}: <input type="text" name="cs
|
Line 1145 $lt{'idsn'}: <input type="text" name="cs
|
$lt{'disn'} |
$lt{'disn'} |
</label> |
</label> |
</p><p> |
</p><p> |
<input type="button" onClick="verify(this.form)" value="$lt{'eas'}"> |
<input type="button" onClick="verify(this.form,this.form.csec)" value="$lt{'eas'}"> |
</p> |
</p> |
END |
END |
return; |
return; |
Line 1170 sub print_html_classlist {
|
Line 1172 sub print_html_classlist {
|
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|Future)$/) { |
$env{'form.Status'} = 'Active'; |
$env{'form.Status'} = 'Active'; |
} |
} |
my $status_select = &Apache::lonhtmlcommon::StatusOptions |
my $status_select = &Apache::lonhtmlcommon::StatusOptions |
Line 1187 sub print_html_classlist {
|
Line 1189 sub print_html_classlist {
|
$env{'form.output'} = 'html'; |
$env{'form.output'} = 'html'; |
} |
} |
# |
# |
$r->print('<br /><table border="2">'); |
$r->print('<br />'.&Apache::loncommon::start_data_table()); |
foreach my $role (sort keys %coursepersonnel) { |
foreach my $role (sort keys %coursepersonnel) { |
next if ($role =~ /^\s*$/); |
next if ($role =~ /^\s*$/); |
$r->print('<tr><td>'.$role.'</td><td>'); |
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td>'.$role.'</td><td>'); |
foreach my $user (split(',',$coursepersonnel{$role})) { |
foreach my $user (split(',',$coursepersonnel{$role})) { |
my ($puname,$pudom)=split(':',$user); |
my ($puname,$pudom)=split(':',$user); |
$r->print(' '.&Apache::loncommon::aboutmewrapper( |
$r->print(' '.&Apache::loncommon::aboutmewrapper( |
Line 1198 sub print_html_classlist {
|
Line 1201 sub print_html_classlist {
|
$pudom), |
$pudom), |
$puname,$pudom)); |
$puname,$pudom)); |
} |
} |
$r->print('</td></tr>'); |
$r->print('</td>'.&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print('</table>'); |
$r->print(&Apache::loncommon::end_data_table()); |
# |
# |
# Interface output |
# Interface output |
$r->print('<input type="hidden" name="action" value="'. |
$r->print('<input type="hidden" name="action" value="'. |
Line 1247 sub print_html_classlist {
|
Line 1250 sub print_html_classlist {
|
sub show_class_list { |
sub show_class_list { |
my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_; |
my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_; |
my $cid=$env{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
|
$classlist,$keylist,$cdom,$cnum); |
# |
# |
# Variables for excel output |
# Variables for excel output |
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); |
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); |
Line 1255 sub show_class_list {
|
Line 1262 sub show_class_list {
|
my ($CSVfile,$CSVfilename); |
my ($CSVfile,$CSVfilename); |
# |
# |
my $sortby = $env{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) { |
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end|type)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
if (! exists($env{'form.displayphotos'})) { |
if (! exists($env{'form.displayphotos'})) { |
Line 1275 END
|
Line 1282 END
|
END |
END |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { |
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 user's 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 student's 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", |
|
'grp' => "active groups", |
'start' => "start date", |
'start' => "start date", |
'end' => "end date", |
'end' => "end date", |
'type' => "enroll type/action", |
'type' => "enroll type/action", |
Line 1310 function photowindow(photolink) {
|
Line 1318 function photowindow(photolink) {
|
} |
} |
$r->print(" |
$r->print(" |
<p> |
<p> |
<table border=2> |
".&Apache::loncommon::start_data_table()." |
<tr> |
<tr> |
"); |
"); |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
Line 1337 function photowindow(photolink) {
|
Line 1345 function photowindow(photolink) {
|
<a href="javascript:document.studentform.sortby.value='start';document.studentform.submit();">$lt{'start'}</a> |
<a href="javascript:document.studentform.sortby.value='start';document.studentform.submit();">$lt{'start'}</a> |
</th><th> |
</th><th> |
<a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a> |
<a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a> |
|
</th><th> |
|
<a href="javascript:document.studentform.sortby.value='groups';document.studentform.submit();">$lt{'grp'}</a> |
</th> |
</th> |
END |
END |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
Line 1373 END
|
Line 1383 END
|
if($statusmode eq 'Expired') { |
if($statusmode eq 'Expired') { |
print $CSVfile '"'.&mt('Students with expired roles').'"'."\n"; |
print $CSVfile '"'.&mt('Students with expired roles').'"'."\n"; |
} |
} |
|
if($statusmode eq 'Future') { |
|
print $CSVfile '"'.&mt('Students with future roles').'"'."\n"; |
|
} |
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
print $CSVfile '"'.join('","',map { |
print $CSVfile '"'.join('","',map { |
&Apache::loncommon::csv_translate(&mt($_)) |
&Apache::loncommon::csv_translate(&mt($_)) |
} ("username","domain","ID","student name", |
} ("username","domain","ID","student name", |
"section","start date","end date","status")).'"'."\n"; |
"section","start date","end date","status","active groups")) |
|
.'"'."\n"; |
} else { |
} else { |
print $CSVfile '"'.join('","',map { |
print $CSVfile '"'.join('","',map { |
&Apache::loncommon::csv_translate(&mt($_)) |
&Apache::loncommon::csv_translate(&mt($_)) |
} ("username","domain","ID","student name", |
} ("username","domain","ID","student name", |
"section","start date","end date")).'"'."\n"; |
"section","start date","end date","active groups")).'"'."\n"; |
} |
} |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
# Create the excel spreadsheet |
# Create the excel spreadsheet |
Line 1397 END
|
Line 1411 END
|
# |
# |
$excel_sheet->write($row++,0,["username","domain","ID", |
$excel_sheet->write($row++,0,["username","domain","ID", |
"student name","section", |
"student name","section", |
"start date","end date","status"], |
"start date","end date","status", |
|
"active groups"], |
$format->{'bold'}); |
$format->{'bold'}); |
} |
} |
# |
# |
Line 1407 END
|
Line 1422 END
|
foreach (@$keylist) { |
foreach (@$keylist) { |
$index{$_} = $i++; |
$index{$_} = $i++; |
} |
} |
|
$index{'groups'} = scalar(@{$keylist}); |
my $index = $index{$sortby}; |
my $index = $index{$sortby}; |
my $second = $index{'username'}; |
my $second = $index{'username'}; |
my $third = $index{'domain'}; |
my $third = $index{'domain'}; |
Line 1424 END
|
Line 1440 END
|
my $lockcount = 0; |
my $lockcount = 0; |
foreach my $student (@Sorted_Students) { |
foreach my $student (@Sorted_Students) { |
my $sdata = $classlist->{$student}; |
my $sdata = $classlist->{$student}; |
|
my $groups = $classgroups->{$student}; |
my $username = $sdata->[$index{'username'}]; |
my $username = $sdata->[$index{'username'}]; |
my $domain = $sdata->[$index{'domain'}]; |
my $domain = $sdata->[$index{'domain'}]; |
my $section = $sdata->[$index{'section'}]; |
my $section = $sdata->[$index{'section'}]; |
|
my $active_groups; |
|
if (ref($groups->{active}) eq 'HASH') { |
|
$active_groups = join(', ',keys(%{$groups->{'active'}})); |
|
} |
my $name = $sdata->[$index{'fullname'}]; |
my $name = $sdata->[$index{'fullname'}]; |
my $id = $sdata->[$index{'id'}]; |
my $id = $sdata->[$index{'id'}]; |
my $status = $sdata->[$index{'status'}]; |
my $status = $sdata->[$index{'status'}]; |
Line 1445 END
|
Line 1466 END
|
} else { |
} else { |
$end = &Apache::lonlocal::locallocaltime($end); |
$end = &Apache::lonlocal::locallocaltime($end); |
} |
} |
$r->print("<tr>\n "); |
$r->print(&Apache::loncommon::start_data_table_row()); |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
my $lockedtype = $sdata->[$index{'lockedtype'}]; |
my $lockedtype = $sdata->[$index{'lockedtype'}]; |
$studentcount++; |
$studentcount++; |
Line 1492 END
|
Line 1513 END
|
<td>$section</td> |
<td>$section</td> |
<td>$start</td> |
<td>$start</td> |
<td>$end</td> |
<td>$end</td> |
|
<td>$active_groups</td> |
END |
END |
if ($env{'course.'.$env{'request.course.id'}. |
if ($env{'course.'.$env{'request.course.id'}. |
'.internal.showphoto'}) { |
'.internal.showphoto'}) { |
Line 1506 END
|
Line 1528 END
|
$r->print(' <td> </td> '); |
$r->print(' <td> </td> '); |
} |
} |
} |
} |
$r->print(' </tr> '); |
$r->print(&Apache::loncommon::end_data_table_row()); |
} elsif ($mode eq 'csv') { |
} elsif ($mode eq 'csv') { |
next if (! defined($CSVfile)); |
next if (! defined($CSVfile)); |
# no need to bother with $linkto |
# no need to bother with $linkto |
Line 1527 END
|
Line 1549 END
|
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
push @line,&Apache::loncommon::csv_translate($status); |
push @line,&Apache::loncommon::csv_translate($status); |
} |
} |
|
push @line,&Apache::loncommon::csv_translate($active_groups); |
print $CSVfile '"'.join('","',@line).'"'."\n"; |
print $CSVfile '"'.join('","',@line).'"'."\n"; |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
$excel_sheet->write($row,0,[$username,$domain,$id, |
$excel_sheet->write($row,0,[$username,$domain,$id, |
Line 1542 END
|
Line 1565 END
|
} |
} |
} |
} |
$excel_sheet->write($row,$col++,$status); |
$excel_sheet->write($row,$col++,$status); |
|
$excel_sheet->write($row,$col++,$active_groups); |
$row++; |
$row++; |
} |
} |
} |
} |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
$r->print('</table><br>'); |
$r->print(&Apache::loncommon::end_data_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.'">'. |
Line 1586 sub print_modify_student_form {
|
Line 1610 sub print_modify_student_form {
|
'<p>'. |
'<p>'. |
&mt('Unable to retrieve environment data for').' '.$sname. |
&mt('Unable to retrieve environment data for').' '.$sname. |
&mt('in domain').' '.$sdom.'</p><p>'. |
&mt('in domain').' '.$sdom.'</p><p>'. |
&mt('Please contact your LON-CAPA administrator regarding this situation.').'</p></body></html>'); |
&mt('Please contact your LON-CAPA administrator regarding this situation.').'</p>'.&Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
# determine the students starting and ending times and section |
# determine the students starting and ending times and section |
Line 1621 sub print_modify_student_form {
|
Line 1645 sub print_modify_student_form {
|
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|Future)$/) { |
$env{'form.Status'} = 'crap'; |
$env{'form.Status'} = 'crap'; |
} |
} |
# Make sure student is enrolled in course |
# Make sure student is enrolled in course |
Line 1638 sub print_modify_student_form {
|
Line 1662 sub print_modify_student_form {
|
'sec' => "Section", |
'sec' => "Section", |
'sm' => "Submit Modifications", |
'sm' => "Submit Modifications", |
); |
); |
$r->print(<<END); |
# Check if section name is valid |
|
my $section_check = §ion_check_js(); |
|
$r->print(<<"END"); |
|
<script type="text/javascript"> |
|
$section_check |
|
function secverify(formname,caller) { |
|
if (validate(caller) == "error") { |
|
return; |
|
} else { |
|
formname.submit(); |
|
} |
|
} |
|
</script> |
<p> |
<p> |
<font size="+1"> |
<font size="+1"> |
$lt{'odcc'} |
$lt{'odcc'} |
Line 1674 $lt{'disn'}
|
Line 1710 $lt{'disn'}
|
</p> |
</p> |
<p>$current_date_description</p> |
<p>$current_date_description</p> |
<p>$date_table</p> |
<p>$date_table</p> |
<input type="submit" value="$lt{'sm'}" /> |
<input type="button" value="$lt{'sm'}" onClick="secverify(this.form,this.form.section)" /> |
</body></html> |
|
END |
END |
|
$r->print(&Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
|
|
Line 1684 END
|
Line 1720 END
|
# modify a single students section |
# modify a single students section |
# |
# |
sub modify_single_student { |
sub modify_single_student { |
my $r = shift; |
my ($r) = @_; |
# |
# |
# 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; |
Line 1826 END
|
Line 1862 END
|
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="Status" value="$status" /> |
<input type="hidden" name="Status" value="$status" /> |
<a href="javascript:document.studentform.submit();">$Masd</a> |
<a href="javascript:document.studentform.submit();">$Masd</a> |
</body></html> |
|
END |
END |
|
$r->print(&Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
|
|
Line 1898 sub show_drop_list {
|
Line 1934 sub show_drop_list {
|
['sortby']); |
['sortby']); |
} |
} |
my $sortby = $env{'form.sortby'}; |
my $sortby = $env{'form.sortby'}; |
if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) { |
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my $cnum = $env{'course.'.$cid,'.num'}; |
|
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
|
$classlist,$keylist,$cdom,$cnum); |
# |
# |
my $action = "drop"; |
my $action = "drop"; |
$r->print(<<END); |
$r->print(<<END); |
Line 1928 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 1968 my %lt=&Apache::lonlocal::texthash('usrn
|
'sec' => "section", |
'sec' => "section", |
'start' => "start date", |
'start' => "start date", |
'end' => "end date", |
'end' => "end date", |
|
'groups' => "active groups", |
); |
); |
if ($nosort) { |
if ($nosort) { |
|
$r->print(&Apache::loncommon::start_data_table()); |
$r->print(<<END); |
$r->print(<<END); |
<table border=2> |
|
<tr> |
<tr> |
<th> </th> |
<th> </th> |
<th>$lt{'usrn'}</th> |
<th>$lt{'usrn'}</th> |
Line 1941 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 1982 my %lt=&Apache::lonlocal::texthash('usrn
|
<th>$lt{'sec'}</th> |
<th>$lt{'sec'}</th> |
<th>$lt{'start'}</th> |
<th>$lt{'start'}</th> |
<th>$lt{'end'}</th> |
<th>$lt{'end'}</th> |
|
<th>$lt{'groups'}</th> |
</tr> |
</tr> |
END |
END |
|
|
} else { |
} else { |
|
$r->print(&Apache::loncommon::start_data_table()); |
$r->print(<<END); |
$r->print(<<END); |
<table border=2> |
|
<tr><th> </th> |
<tr><th> </th> |
<th> |
<th> |
<a href="/adm/dropadd?action=$action&sortby=username">$lt{'usrn'}</a> |
<a href="/adm/dropadd?action=$action&sortby=username">$lt{'usrn'}</a> |
Line 1962 END
|
Line 2004 END
|
<a href="/adm/dropadd?action=$action&sortby=start">$lt{'start'}</a> |
<a href="/adm/dropadd?action=$action&sortby=start">$lt{'start'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=end">$lt{'end'}</a> |
<a href="/adm/dropadd?action=$action&sortby=end">$lt{'end'}</a> |
|
</th><th> |
|
<a href="/adm/dropadd?action=$action&sortby=groups">$lt{'groups'}</a> |
</th> |
</th> |
</tr> |
</tr> |
END |
END |
Line 1973 END
|
Line 2017 END
|
foreach (@$keylist) { |
foreach (@$keylist) { |
$index{$_} = $i++; |
$index{$_} = $i++; |
} |
} |
|
$index{'groups'} = scalar(@$keylist); |
my $index = $index{$sortby}; |
my $index = $index{$sortby}; |
my $second = $index{'username'}; |
my $second = $index{'username'}; |
my $third = $index{'domain'}; |
my $third = $index{'domain'}; |
Line 1993 END
|
Line 2038 END
|
my $id = $sdata->[$index{'id'}]; |
my $id = $sdata->[$index{'id'}]; |
my $start = $sdata->[$index{'start'}]; |
my $start = $sdata->[$index{'start'}]; |
my $end = $sdata->[$index{'end'}]; |
my $end = $sdata->[$index{'end'}]; |
|
my $groups = $classgroups->{$student}; |
|
my $active_groups; |
|
if (ref($groups->{active}) eq 'HASH') { |
|
$active_groups = join(', ',keys(%{$groups->{'active'}})); |
|
} |
if (! defined($start) || $start == 0) { |
if (! defined($start) || $start == 0) { |
$start = &mt('none'); |
$start = &mt('none'); |
} else { |
} else { |
Line 2006 END
|
Line 2056 END
|
my $status = $sdata->[$index{'status'}]; |
my $status = $sdata->[$index{'status'}]; |
next if ($status ne 'Active'); |
next if ($status ne 'Active'); |
# |
# |
|
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(<<"END"); |
$r->print(<<"END"); |
<tr> |
|
<td><input type="checkbox" name="droplist" value="$student"></td> |
<td><input type="checkbox" name="droplist" value="$student"></td> |
<td>$username</td> |
<td>$username</td> |
<td>$domain</td> |
<td>$domain</td> |
Line 2016 END
|
Line 2066 END
|
<td>$section</td> |
<td>$section</td> |
<td>$start</td> |
<td>$start</td> |
<td>$end</td> |
<td>$end</td> |
</tr> |
<td>$active_groups</td> |
END |
END |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print('</table><br>'); |
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
%lt=&Apache::lonlocal::texthash( |
%lt=&Apache::lonlocal::texthash( |
'dp' => "Drop Students", |
'dp' => "Drop Students", |
'ca' => "check all", |
'ca' => "check all", |
Line 2056 sub print_first_courselist_upload_form {
|
Line 2107 sub print_first_courselist_upload_form {
|
$str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
$str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
&mt("How do I create a CSV file from a spreadsheet")). |
&mt("How do I create a CSV file from a spreadsheet")). |
"<br />\n"; |
"<br />\n"; |
$str .= "</body>\n</html>\n"; |
$str .= &Apache::loncommon::end_page(); |
$r->print($str); |
$r->print($str); |
return; |
return; |
} |
} |
Line 2112 sub upfile_drop_add {
|
Line 2163 sub upfile_drop_add {
|
if (! exists($home_servers{$desiredhost})) { |
if (! exists($home_servers{$desiredhost})) { |
$r->print('<font color="#ff0000">'.&mt('Error').'</font>'. |
$r->print('<font color="#ff0000">'.&mt('Error').'</font>'. |
&mt('Invalid home server specified')); |
&mt('Invalid home server specified')); |
$r->print("</body>\n</html>\n"); |
$r->print(&Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
} |
} |
Line 2150 sub upfile_drop_add {
|
Line 2201 sub upfile_drop_add {
|
my $count=0; |
my $count=0; |
my $flushc=0; |
my $flushc=0; |
my %student=(); |
my %student=(); |
|
# Get information about course groups |
|
my %curr_groups = &Apache::longroup::coursegroups(); |
# Get new classlist |
# Get new classlist |
foreach (@studentdata) { |
foreach (@studentdata) { |
my %entries=&Apache::loncommon::record_sep($_); |
my %entries=&Apache::loncommon::record_sep($_); |
Line 2190 sub upfile_drop_add {
|
Line 2243 sub upfile_drop_add {
|
} |
} |
# remove non alphanumeric values from section |
# remove non alphanumeric values from section |
$sec =~ s/\W//g; |
$sec =~ s/\W//g; |
|
if ($sec eq "none" || $sec eq 'all') { |
|
$r->print('<br />'. |
|
&mt('<b>[_1]</b>: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a reserved word.', |
|
$username,$sec,$fname,$mname,$lname,$gen)); |
|
next; |
|
} elsif (($sec ne '') && (exists($curr_groups{$sec}))) { |
|
$r->print('<br />'. |
|
&mt('<b>[_1]</b>: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a course group. Section names and group names must be distinct.', |
|
$username,$sec,$fname,$mname,$lname,$gen)); |
|
next; |
|
} |
# determine student id number |
# determine student id number |
my $id=''; |
my $id=''; |
if (defined($fields{'id'})) { |
if (defined($fields{'id'})) { |
Line 2305 sub drop_student_list {
|
Line 2369 sub drop_student_list {
|
$r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count); |
$r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count); |
} |
} |
|
|
|
sub section_check_js { |
|
my $groupslist; |
|
my %curr_groups = &Apache::longroup::coursegroups(); |
|
if (%curr_groups) { |
|
$groupslist = join('","',sort(keys(%curr_groups))); |
|
} |
|
return <<"END"; |
|
function validate(caller) { |
|
var groups = new Array("$groupslist"); |
|
var secname = caller.value; |
|
if ((secname == 'all') || (secname == 'none')) { |
|
alert("'"+secname+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name."); |
|
return 'error'; |
|
} |
|
if (secname != '') { |
|
for (var k=0; k<groups.length; k++) { |
|
if (secname == groups[k]) { |
|
alert("'"+secname+"' may not be used as the name for a section, as it is the name of a course group.\\nSection names and group names must be distinct. Please choose a different section name."); |
|
return 'error'; |
|
} |
|
} |
|
} |
|
return 'ok'; |
|
} |
|
END |
|
} |
|
|
################################################################### |
################################################################### |
################################################################### |
################################################################### |
|
|
Line 2392 sub handler {
|
Line 2483 sub handler {
|
# |
# |
# 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'})) { |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager')); |
(undef,'Enrollment Manager')); |
|
&print_main_menu($r,$enrl_permission,$view_permission,$grp_manage_permission, |
&print_main_menu($r,$enrl_permission,$view_permission,$grp_manage_permission, |
$grp_view_permission); |
$grp_view_permission); |
} elsif ($env{'form.action'} eq 'upload' && $enrl_permission) { |
} elsif ($env{'form.action'} eq 'upload' && $enrl_permission) { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/dropadd?action=upload&state=', |
({href=>'/adm/dropadd?action=upload&state=', |
text=>"Upload Classlist"}); |
text=>"Upload Classlist"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Upload Classlist', |
(undef,'Upload Classlist','Course_Create_Class_List')); |
'Course_Create_Class_List')); |
if (! exists($env{'form.state'})) { |
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') { |
Line 2419 sub handler {
|
Line 2509 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/dropadd?action=drop', |
({href=>'/adm/dropadd?action=drop', |
text=>"Drop Students"}); |
text=>"Drop Students"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Drop Students', |
(undef,'Drop Students','Course_Drop_Student')); |
'Course_Drop_Student')); |
if (! exists($env{'form.state'})) { |
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') { |
Line 2432 sub handler {
|
Line 2522 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/dropadd?action=enrollstudent', |
({href=>'/adm/dropadd?action=enrollstudent', |
text=>"Enroll Student"}); |
text=>"Enroll Student"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student', |
(undef,'Enroll Student','Course_Add_Student')); |
'Course_Add_Student')); |
if (! exists($env{'form.state'})) { |
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') { |
Line 2447 sub handler {
|
Line 2537 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/dropadd?action=classlist', |
({href=>'/adm/dropadd?action=classlist', |
text=>"View Classlist"}); |
text=>"View Classlist"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('View Classlist', |
(undef,'View Classlist','Course_View_Class_List')); |
'Course_View_Class_List')); |
if (! exists($env{'form.state'})) { |
if (! exists($env{'form.state'})) { |
&print_html_classlist($r,undef); |
&print_html_classlist($r,undef); |
} elsif ($env{'form.state'} eq 'csv') { |
} elsif ($env{'form.state'} eq 'csv') { |
Line 2462 sub handler {
|
Line 2552 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/dropadd?action=modifystudent', |
({href=>'/adm/dropadd?action=modifystudent', |
text=>"Modify Student Data"}); |
text=>"Modify Student Data"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Modify Student Data', |
(undef,'Modify Student Data','Course_Modify_Student_Data')); |
'Course_Modify_Student_Data')); |
if (! exists($env{'form.state'})) { |
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') { |
Line 2478 sub handler {
|
Line 2568 sub handler {
|
&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."); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager')); |
(undef,'Enrollment Manager')); |
|
&print_main_menu($r,$enrl_permission,$view_permission); |
&print_main_menu($r,$enrl_permission,$view_permission); |
} |
} |
# |
# |
# Finish up |
# Finish up |
$r->print('</form></body></html>'); |
$r->print('</form>'.&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} |
} |
|
|