version 1.753, 2018/11/20 19:14:14
|
version 1.754, 2019/01/27 14:39:55
|
Line 5805 sub scantron_uploads {
|
Line 5805 sub scantron_uploads {
|
sub scantron_scantab { |
sub scantron_scantab { |
my $result='<select name="scantron_format">'."\n"; |
my $result='<select name="scantron_format">'."\n"; |
$result.='<option></option>'."\n"; |
$result.='<option></option>'."\n"; |
my @lines = &get_scantronformat_file(); |
my @lines = &Apache::lonnet::get_scantronformat_file(); |
if (@lines > 0) { |
if (@lines > 0) { |
foreach my $line (@lines) { |
foreach my $line (@lines) { |
next if (($line =~ /^\#/) || ($line eq '')); |
next if (($line =~ /^\#/) || ($line eq '')); |
Line 5817 sub scantron_scantab {
|
Line 5817 sub scantron_scantab {
|
return $result; |
return $result; |
} |
} |
|
|
=pod |
|
|
|
=item get_scantronformat_file |
|
|
|
Returns an array containing lines from the scantron format file for |
|
the domain of the course. |
|
|
|
If a url for a custom.tab file is listed in domain's configuration.db, |
|
lines are from this file. |
|
|
|
Otherwise, if a default.tab has been published in RES space by the |
|
domainconfig user, lines are from this file. |
|
|
|
Otherwise, fall back to getting lines from the legacy file on the |
|
local server: /home/httpd/lonTabs/default_scantronformat.tab |
|
|
|
=cut |
|
|
|
sub get_scantronformat_file { |
|
my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my %domconfig = &Apache::lonnet::get_dom('configuration',['scantron'],$cdom); |
|
my $gottab = 0; |
|
my @lines; |
|
if (ref($domconfig{'scantron'}) eq 'HASH') { |
|
if ($domconfig{'scantron'}{'scantronformat'} ne '') { |
|
my $formatfile = &Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.$domconfig{'scantron'}{'scantronformat'}); |
|
if ($formatfile ne '-1') { |
|
@lines = split("\n",$formatfile,-1); |
|
$gottab = 1; |
|
} |
|
} |
|
} |
|
if (!$gottab) { |
|
my $confname = $cdom.'-domainconfig'; |
|
my $default = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$cdom.'/'.$confname.'/default.tab'; |
|
my $formatfile = &Apache::lonnet::getfile($default); |
|
if ($formatfile ne '-1') { |
|
@lines = split("\n",$formatfile,-1); |
|
$gottab = 1; |
|
} |
|
} |
|
if (!$gottab) { |
|
my @domains = &Apache::lonnet::current_machine_domains(); |
|
if (grep(/^\Q$cdom\E$/,@domains)) { |
|
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
|
@lines = <$fh>; |
|
close($fh); |
|
} else { |
|
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/default_scantronformat.tab'); |
|
@lines = <$fh>; |
|
close($fh); |
|
} |
|
} |
|
return @lines; |
|
} |
|
|
|
=pod |
=pod |
|
|
=item scantron_CODElist |
=item scantron_CODElist |
Line 5957 sub scantron_selectphase {
|
Line 5901 sub scantron_selectphase {
|
# Chunk of form to prompt for a scantron file upload. |
# Chunk of form to prompt for a scantron file upload. |
|
|
$r->print(' |
$r->print(' |
<br /> |
<br />'); |
'.&Apache::loncommon::start_data_table('LC_scantron_action').' |
|
'.&Apache::loncommon::start_data_table_header_row().' |
|
<th> |
|
'.&mt('Specify a bubblesheet data file to upload.').' |
|
</th> |
|
'.&Apache::loncommon::end_data_table_header_row().' |
|
'.&Apache::loncommon::start_data_table_row().' |
|
<td> |
|
'); |
|
my $default_form_data=&defaultFormData($symb); |
my $default_form_data=&defaultFormData($symb); |
my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $alertmsg = &mt('Please use the browse button to select a file from your local directory.'); |
my $alertmsg = &mt('Please use the browse button to select a file from your local directory.'); |
&js_escape(\$alertmsg); |
&js_escape(\$alertmsg); |
|
my ($formatoptions,$formattitle,$formatjs) = &scantron_upload_dataformat($cdom); |
$r->print(&Apache::lonhtmlcommon::scripttag(' |
$r->print(&Apache::lonhtmlcommon::scripttag(' |
function checkUpload(formname) { |
function checkUpload(formname) { |
if (formname.upfile.value == "") { |
if (formname.upfile.value == "") { |
Line 5979 sub scantron_selectphase {
|
Line 5915 sub scantron_selectphase {
|
return false; |
return false; |
} |
} |
formname.submit(); |
formname.submit(); |
}')); |
}'.$formatjs)); |
$r->print(' |
$r->print(' |
<form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post"> |
<form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post"> |
'.$default_form_data.' |
'.$default_form_data.' |
<input name="courseid" type="hidden" value="'.$cnum.'" /> |
<input name="courseid" type="hidden" value="'.$cnum.'" /> |
<input name="domainid" type="hidden" value="'.$cdom.'" /> |
<input name="domainid" type="hidden" value="'.$cdom.'" /> |
<input name="command" value="scantronupload_save" type="hidden" /> |
<input name="command" value="scantronupload_save" type="hidden" /> |
'.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').' |
'.&Apache::loncommon::start_data_table('LC_scantron_action').' |
<br /> |
'.&Apache::loncommon::start_data_table_header_row().' |
<input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" /> |
<th> |
</form> |
'.&mt('Specify a bubblesheet data file to upload.').' |
'); |
</th> |
|
'.&Apache::loncommon::end_data_table_header_row().' |
|
'.&Apache::loncommon::start_data_table_row().' |
|
<td> |
|
'.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'<br />'."\n"); |
|
if ($formatoptions) { |
|
$r->print('</td> |
|
'.&Apache::loncommon::end_data_table_row().' |
|
'.&Apache::loncommon::start_data_table_row().' |
|
<td>'.$formattitle.(' 'x2).$formatoptions.' |
|
</td> |
|
'.&Apache::loncommon::end_data_table_row().' |
|
'.&Apache::loncommon::start_data_table_row().' |
|
<td>' |
|
); |
|
} else { |
|
$r->print(' <br />'); |
|
} |
|
$r->print('<input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" /> |
|
</td> |
|
'.&Apache::loncommon::end_data_table_row().' |
|
'.&Apache::loncommon::end_data_table().' |
|
</form>' |
|
); |
|
|
$r->print(' |
|
</td> |
|
'.&Apache::loncommon::end_data_table_row().' |
|
'.&Apache::loncommon::end_data_table().' |
|
'); |
|
} |
} |
|
|
# Chunk of form to prompt for a file to grade and how: |
# Chunk of form to prompt for a file to grade and how: |
Line 6109 sub scantron_selectphase {
|
Line 6063 sub scantron_selectphase {
|
return; |
return; |
} |
} |
|
|
=pod |
|
|
|
=item get_scantron_config |
|
|
|
Parse and return the bubblesheet configuration line selected as a |
|
hash of configuration file fields. |
|
|
|
Arguments: |
|
which - the name of the configuration to parse from the file. |
|
|
|
|
|
Returns: |
|
If the named configuration is not in the file, an empty |
|
hash is returned. |
|
a hash with the fields |
|
name - internal name for the this configuration setup |
|
description - text to display to operator that describes this config |
|
CODElocation - if 0 or the string 'none' |
|
- no CODE exists for this config |
|
if -1 || the string 'letter' |
|
- a CODE exists for this config and is |
|
a string of letters |
|
Unsupported value (but planned for future support) |
|
if a positive integer |
|
- The CODE exists as the first n items from |
|
the question section of the form |
|
if the string 'number' |
|
- The CODE exists for this config and is |
|
a string of numbers |
|
CODEstart - (only matter if a CODE exists) column in the line where |
|
the CODE starts |
|
CODElength - length of the CODE |
|
IDstart - column where the student/employee ID starts |
|
IDlength - length of the student/employee ID info |
|
Qstart - column where the information from the bubbled |
|
'questions' start |
|
Qlength - number of columns comprising a single bubble line from |
|
the sheet. (usually either 1 or 10) |
|
Qon - either a single character representing the character used |
|
to signal a bubble was chosen in the positional setup, or |
|
the string 'letter' if the letter of the chosen bubble is |
|
in the final, or 'number' if a number representing the |
|
chosen bubble is in the file (1->A 0->J) |
|
Qoff - the character used to represent that a bubble was |
|
left blank |
|
PaperID - if the scanning process generates a unique number for each |
|
sheet scanned the column that this ID number starts in |
|
PaperIDlength - number of columns that comprise the unique ID number |
|
for the sheet of paper |
|
FirstName - column that the first name starts in |
|
FirstNameLength - number of columns that the first name spans |
|
|
|
LastName - column that the last name starts in |
|
LastNameLength - number of columns that the last name spans |
|
BubblesPerRow - number of bubbles available in each row used to |
|
bubble an answer. (If not specified, 10 assumed). |
|
|
|
=cut |
|
|
|
sub get_scantron_config { |
|
my ($which) = @_; |
|
my @lines = &get_scantronformat_file(); |
|
my %config; |
|
#FIXME probably should move to XML it has already gotten a bit much now |
|
foreach my $line (@lines) { |
|
my ($name,$descrip)=split(/:/,$line); |
|
if ($name ne $which ) { next; } |
|
chomp($line); |
|
my @config=split(/:/,$line); |
|
$config{'name'}=$config[0]; |
|
$config{'description'}=$config[1]; |
|
$config{'CODElocation'}=$config[2]; |
|
$config{'CODEstart'}=$config[3]; |
|
$config{'CODElength'}=$config[4]; |
|
$config{'IDstart'}=$config[5]; |
|
$config{'IDlength'}=$config[6]; |
|
$config{'Qstart'}=$config[7]; |
|
$config{'Qlength'}=$config[8]; |
|
$config{'Qoff'}=$config[9]; |
|
$config{'Qon'}=$config[10]; |
|
$config{'PaperID'}=$config[11]; |
|
$config{'PaperIDlength'}=$config[12]; |
|
$config{'FirstName'}=$config[13]; |
|
$config{'FirstNamelength'}=$config[14]; |
|
$config{'LastName'}=$config[15]; |
|
$config{'LastNamelength'}=$config[16]; |
|
$config{'BubblesPerRow'}=$config[17]; |
|
last; |
|
} |
|
return %config; |
|
} |
|
|
|
=pod |
=pod |
|
|
=item username_to_idmap |
=item username_to_idmap |
Line 6248 sub username_to_idmap {
|
Line 6110 sub username_to_idmap {
|
Process a requested correction to a scanline. |
Process a requested correction to a scanline. |
|
|
Arguments: |
Arguments: |
$scantron_config - hash from &get_scantron_config() |
$scantron_config - hash from &Apache::lonnet::get_scantron_config() |
$scan_data - hash of correction information |
$scan_data - hash of correction information |
(see &scantron_getfile()) |
(see &scantron_getfile()) |
$line - existing scanline |
$line - existing scanline |
Line 6931 sub scantron_filter {
|
Line 6793 sub scantron_filter {
|
|
|
sub scantron_process_corrections { |
sub scantron_process_corrections { |
my ($r) = @_; |
my ($r) = @_; |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $which=$env{'form.scantron_line'}; |
my $which=$env{'form.scantron_line'}; |
Line 7100 sub check_for_error {
|
Line 6962 sub check_for_error {
|
sub scantron_warning_screen { |
sub scantron_warning_screen { |
my ($button_text,$symb)=@_; |
my ($button_text,$symb)=@_; |
my $title=&Apache::lonnet::gettitle($env{'form.selectpage'}); |
my $title=&Apache::lonnet::gettitle($env{'form.selectpage'}); |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my $CODElist; |
my $CODElist; |
if ($scantron_config{'CODElocation'} && |
if ($scantron_config{'CODElocation'} && |
$scantron_config{'CODEstart'} && |
$scantron_config{'CODEstart'} && |
Line 7256 sub scantron_validate_file {
|
Line 7118 sub scantron_validate_file {
|
#get the student pick code ready |
#get the student pick code ready |
$r->print(&Apache::loncommon::studentbrowser_javascript()); |
$r->print(&Apache::loncommon::studentbrowser_javascript()); |
my $nav_error; |
my $nav_error; |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my $max_bubble=&scantron_get_maxbubble(\$nav_error,\%scantron_config); |
my $max_bubble=&scantron_get_maxbubble(\$nav_error,\%scantron_config); |
if ($nav_error) { |
if ($nav_error) { |
$r->print(&navmap_errormsg()); |
$r->print(&navmap_errormsg()); |
Line 7716 sub scantron_validate_ID {
|
Line 7578 sub scantron_validate_ID {
|
my %idmap=&username_to_idmap($classlist); |
my %idmap=&username_to_idmap($classlist); |
|
|
#get scantron line setup |
#get scantron line setup |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
|
|
my $nav_error; |
my $nav_error; |
Line 8186 sub prompt_for_corrections {
|
Line 8048 sub prompt_for_corrections {
|
|
|
Arguments: |
Arguments: |
$r - Apache request object |
$r - Apache request object |
$scan_config - hash from &get_scantron_config() |
$scan_config - hash from &Apache::lonnet::get_scantron_config() |
$line - Number of the line being displayed. |
$line - Number of the line being displayed. |
$questionnum - Question number (may include subquestion) |
$questionnum - Question number (may include subquestion) |
$error - Type of error. |
$error - Type of error. |
Line 8350 sub get_codes {
|
Line 8212 sub get_codes {
|
|
|
sub scantron_validate_CODE { |
sub scantron_validate_CODE { |
my ($r,$currentphase) = @_; |
my ($r,$currentphase) = @_; |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
if ($scantron_config{'CODElocation'} && |
if ($scantron_config{'CODElocation'} && |
$scantron_config{'CODEstart'} && |
$scantron_config{'CODEstart'} && |
$scantron_config{'CODElength'}) { |
$scantron_config{'CODElength'}) { |
Line 8424 sub scantron_validate_doublebubble {
|
Line 8286 sub scantron_validate_doublebubble {
|
&Apache::lonnet::decode_symb($env{'form.selectpage'}); |
&Apache::lonnet::decode_symb($env{'form.selectpage'}); |
|
|
#get scantron line setup |
#get scantron line setup |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
|
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
Line 8606 sub scantron_validate_missingbubbles {
|
Line 8468 sub scantron_validate_missingbubbles {
|
&Apache::lonnet::decode_symb($env{'form.selectpage'}); |
&Apache::lonnet::decode_symb($env{'form.selectpage'}); |
|
|
#get scantron line setup |
#get scantron line setup |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
|
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
Line 8735 sub hand_bubble_option {
|
Line 8597 sub hand_bubble_option {
|
} |
} |
} |
} |
if ($needs_hand_bubbles) { |
if ($needs_hand_bubbles) { |
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
return &mt('The sequence to be graded contains response types which are handgraded.').'<p>'. |
return &mt('The sequence to be graded contains response types which are handgraded.').'<p>'. |
&mt('If you have already graded these by bubbling sheets to indicate points awarded, [_1]what point value is assigned to a filled last bubble in each row?','<br />'). |
&mt('If you have already graded these by bubbling sheets to indicate points awarded, [_1]what point value is assigned to a filled last bubble in each row?','<br />'). |
Line 8754 sub scantron_process_students {
|
Line 8616 sub scantron_process_students {
|
} |
} |
my $default_form_data=&defaultFormData($symb); |
my $default_form_data=&defaultFormData($symb); |
|
|
my %scantron_config=&get_scantron_config($env{'form.scantron_format'}); |
my %scantron_config=&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
Line 9149 sub grade_student_bubbles {
|
Line 9011 sub grade_student_bubbles {
|
sub scantron_upload_scantron_data { |
sub scantron_upload_scantron_data { |
my ($r,$symb)=@_; |
my ($r,$symb)=@_; |
my $dom = $env{'request.role.domain'}; |
my $dom = $env{'request.role.domain'}; |
|
my ($formatoptions,$formattitle,$formatjs) = &scantron_upload_dataformat($dom); |
my $domdesc = &Apache::lonnet::domain($dom,'description'); |
my $domdesc = &Apache::lonnet::domain($dom,'description'); |
$r->print(&Apache::loncommon::coursebrowser_javascript($dom)); |
$r->print(&Apache::loncommon::coursebrowser_javascript($dom)); |
my $select_link=&Apache::loncommon::selectcourse_link('rules','courseid', |
my $select_link=&Apache::loncommon::selectcourse_link('rules','courseid', |
Line 9188 sub scantron_upload_scantron_data {
|
Line 9051 sub scantron_upload_scantron_data {
|
return; |
return; |
} |
} |
|
|
|
'.$formatjs.' |
')); |
')); |
$r->print(' |
$r->print(' |
<h3>'.&mt('Send bubblesheet data to a course').'</h3> |
<h3>'.&mt('Send bubblesheet data to a course').'</h3> |
Line 9203 sub scantron_upload_scantron_data {
|
Line 9067 sub scantron_upload_scantron_data {
|
&Apache::lonhtmlcommon::row_closure(). |
&Apache::lonhtmlcommon::row_closure(). |
&Apache::lonhtmlcommon::row_title(&mt('Domain')). |
&Apache::lonhtmlcommon::row_title(&mt('Domain')). |
'<input name="domainid" type="hidden" />'.$domdesc. |
'<input name="domainid" type="hidden" />'.$domdesc. |
&Apache::lonhtmlcommon::row_closure(). |
&Apache::lonhtmlcommon::row_closure()); |
|
if ($formatoptions) { |
|
$r->print(&Apache::lonhtmlcommon::row_title($formattitle).$formatoptions. |
|
&Apache::lonhtmlcommon::row_closure()); |
|
} |
|
$r->print( |
&Apache::lonhtmlcommon::row_title(&mt('File to upload')). |
&Apache::lonhtmlcommon::row_title(&mt('File to upload')). |
'<input type="file" name="upfile" size="50" />'. |
'<input type="file" name="upfile" size="50" />'. |
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::row_closure(1). |
Line 9216 sub scantron_upload_scantron_data {
|
Line 9085 sub scantron_upload_scantron_data {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub scantron_upload_dataformat { |
|
my ($dom) = @_; |
|
my ($formatoptions,$formattitle,$formatjs); |
|
$formatjs = <<'END'; |
|
function toggleScantab(form) { |
|
return; |
|
} |
|
END |
|
my %domconfig = &Apache::lonnet::get_dom('configuration',['scantron'],$dom); |
|
if (ref($domconfig{'scantron'}) eq 'HASH') { |
|
if (ref($domconfig{'scantron'}{'config'}) eq 'HASH') { |
|
if (keys(%{$domconfig{'scantron'}{'config'}}) > 1) { |
|
if (($domconfig{'scantron'}{'config'}{'dat'}) && |
|
(ref($domconfig{'scantron'}{'config'}{'csv'}) eq 'HASH')) { |
|
if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}})) { |
|
my ($onclick,$formatextra,$singleline); |
|
my @lines = &Apache::lonnet::get_scantronformat_file(); |
|
my $count = 0; |
|
foreach my $line (@lines) { |
|
next if ($line =~ /^#/); |
|
$singleline = $line; |
|
$count ++; |
|
} |
|
if ($count > 1) { |
|
$formatextra = '<div style="display:none" id="bubbletype">'. |
|
&scantron_scantab().'</div>'; |
|
$onclick = ' onclick="toggleScantab(this.form);"'; |
|
$formatjs = <<"END"; |
|
function toggleScantab(form) { |
|
var divid = 'bubbletype'; |
|
if (document.getElementById(divid)) { |
|
var radioname = 'fileformat'; |
|
var num = form.elements[radioname].length; |
|
if (num) { |
|
for (var i=0; i<num; i++) { |
|
if (form.elements[radioname][i].checked) { |
|
var chosen = form.elements[radioname][i].value; |
|
if (chosen == 'dat') { |
|
document.getElementById(divid).style.display = 'none'; |
|
} else if (chosen == 'csv') { |
|
document.getElementById(divid).style.display = 'inline-block'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
END |
|
} elsif ($count == 1) { |
|
my $formatname = (split(/:/,$singleline,2))[0]; |
|
$formatextra = '<input type="hidden" name="scantron_format" value="'.$formatname.'" />'; |
|
} |
|
$formattitle = &mt('File format'); |
|
$formatoptions = '<label><input name="fileformat" type="radio" value="dat" checked="checked"'.$onclick.' />'. |
|
&mt('Plain Text (no delimiters)'). |
|
'</label>'.(' 'x2). |
|
'<label><input name="fileformat" type="radio" value="csv"'.$onclick.' />'. |
|
&mt('Comma separated values').'</label>'.$formatextra; |
|
} |
|
} |
|
} elsif (keys(%{$domconfig{'scantron'}{'config'}}) == 1) { |
|
if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}})) { |
|
$formattitle = &mt('Format of bubblesheet data file:'); |
|
$formatoptions = &scantron_scantab(); |
|
} |
|
} |
|
} |
|
} |
|
return ($formatoptions,$formattitle,$formatjs); |
|
} |
|
|
sub scantron_upload_scantron_data_save { |
sub scantron_upload_scantron_data_save { |
my($r,$symb)=@_; |
my($r,$symb)=@_; |
Line 9242 sub scantron_upload_scantron_data_save {
|
Line 9183 sub scantron_upload_scantron_data_save {
|
&mt('The file: [_1] you attempted to upload contained no information. Please check that you entered the correct filename.', |
&mt('The file: [_1] you attempted to upload contained no information. Please check that you entered the correct filename.', |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'),1)); |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'),1)); |
} else { |
} else { |
my $result = |
my %domconfig = &Apache::lonnet::get_dom('configuration',['scantron'],$env{'form.domainid'}); |
&Apache::lonnet::userfileupload('upfile','','scantron','','','', |
my $parser; |
|
if (ref($domconfig{'scantron'}) eq 'HASH') { |
|
if (ref($domconfig{'scantron'}{'config'}) eq 'HASH') { |
|
my $is_csv; |
|
my @possibles = keys(%{$domconfig{'scantron'}{'config'}}); |
|
if (@possibles > 1) { |
|
if ($env{'form.fileformat'} eq 'csv') { |
|
if (ref($domconfig{'scantron'}{'config'}{'csv'}) eq 'HASH') { |
|
if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}}) > 1) { |
|
$is_csv = 1; |
|
} |
|
} |
|
} |
|
} elsif (@possibles == 1) { |
|
if (ref($domconfig{'scantron'}{'config'}{'csv'}) eq 'HASH') { |
|
if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}}) > 1) { |
|
$is_csv = 1; |
|
} |
|
} |
|
} |
|
if ($is_csv) { |
|
$parser = $domconfig{'scantron'}{'config'}{'csv'}; |
|
} |
|
} |
|
} |
|
my $result = |
|
&Apache::lonnet::userfileupload('upfile','scantron','scantron',$parser,'','', |
$env{'form.courseid'},$env{'form.domainid'}); |
$env{'form.courseid'},$env{'form.domainid'}); |
if ($result =~ m{^/uploaded/}) { |
if ($result =~ m{^/uploaded/}) { |
$r->print( |
$r->print( |
Line 9288 sub validate_uploaded_scantron_file {
|
Line 9255 sub validate_uploaded_scantron_file {
|
$idmap{$lckey} = $idmap{$key}; |
$idmap{$lckey} = $idmap{$key}; |
} |
} |
my %unique_formats; |
my %unique_formats; |
my @formatlines = &get_scantronformat_file(); |
my @formatlines = &Apache::lonnet::get_scantronformat_file(); |
foreach my $line (@formatlines) { |
foreach my $line (@formatlines) { |
chomp($line); |
chomp($line); |
my @config = split(/:/,$line); |
my @config = split(/:/,$line); |
Line 9436 sub checkscantron_results {
|
Line 9403 sub checkscantron_results {
|
my (undef, undef, $sequence) = &Apache::lonnet::decode_symb($env{'form.selectpage'}); |
my (undef, undef, $sequence) = &Apache::lonnet::decode_symb($env{'form.selectpage'}); |
my %record; |
my %record; |
my %scantron_config = |
my %scantron_config = |
&Apache::grades::get_scantron_config($env{'form.scantron_format'}); |
&Apache::lonnet::get_scantron_config($env{'form.scantron_format'}); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
my $bubbles_per_row = &bubblesheet_bubbles_per_row(\%scantron_config); |
my ($scanlines,$scan_data)=&Apache::grades::scantron_getfile(); |
my ($scanlines,$scan_data)=&Apache::grades::scantron_getfile(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
Line 10668 sub navmap_errormsg {
|
Line 10635 sub navmap_errormsg {
|
} |
} |
|
|
sub startpage { |
sub startpage { |
my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$js) = @_; |
my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$js,$onload) = @_; |
|
my %args; |
|
if ($onload) { |
|
my %loaditems = ( |
|
'onload' => $onload, |
|
); |
|
$args{'add_entries'} = \%loaditems; |
|
} |
if ($nomenu) { |
if ($nomenu) { |
$r->print(&Apache::loncommon::start_page("Student's Version",$js,{'only_body' => '1'})); |
$args{'only_body'} = 1; |
|
$r->print(&Apache::loncommon::start_page("Student's Version",$js,\%args); |
} else { |
} else { |
unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"}); |
unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"}); |
$r->print(&Apache::loncommon::start_page('Grading',$js, |
$args{'bread_crumbs'} = $crumbs; |
{'bread_crumbs' => $crumbs})); |
$r->print(&Apache::loncommon::start_page('Grading',$js,\%args)); |
&Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading')); |
&Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading')); |
} |
} |
unless ($nodisplayflag) { |
unless ($nodisplayflag) { |
Line 10858 sub handler {
|
Line 10833 sub handler {
|
&startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1); |
&startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1); |
$request->print(&csvuploadassign($request,$symb)); |
$request->print(&csvuploadassign($request,$symb)); |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1, |
|
undef,undef,undef,undef,'toggleScantab(document.rules);'); |
$request->print(&scantron_selectphase($request,undef,$symb)); |
$request->print(&scantron_selectphase($request,undef,$symb)); |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
Line 10872 sub handler {
|
Line 10848 sub handler {
|
} elsif ($command eq 'scantronupload' && |
} elsif ($command eq 'scantronupload' && |
(&Apache::lonnet::allowed('usc',$env{'request.role.domain'})|| |
(&Apache::lonnet::allowed('usc',$env{'request.role.domain'})|| |
&Apache::lonnet::allowed('usc',$env{'request.course.id'}))) { |
&Apache::lonnet::allowed('usc',$env{'request.course.id'}))) { |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1, |
|
undef,undef,undef,undef,'toggleScantab(document.rules);'); |
$request->print(&scantron_upload_scantron_data($request,$symb)); |
$request->print(&scantron_upload_scantron_data($request,$symb)); |
} elsif ($command eq 'scantronupload_save' && |
} elsif ($command eq 'scantronupload_save' && |
(&Apache::lonnet::allowed('usc',$env{'request.role.domain'})|| |
(&Apache::lonnet::allowed('usc',$env{'request.role.domain'})|| |