[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /homework grades.pm
raeburn
raeburn at source.lon-capa.org
Sat Aug 17 13:43:44 EDT 2019
raeburn Sat Aug 17 17:43:44 2019 EDT
Modified files: (Branch: version_2_11_X)
/loncom/homework grades.pm
Log:
- For 2.11
Backport 1.754, 1.755, 1.756, 1.757
-------------- next part --------------
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.596.2.12.2.48 loncom/homework/grades.pm:1.596.2.12.2.49
--- loncom/homework/grades.pm:1.596.2.12.2.48 Sun Jul 7 15:31:52 2019
+++ loncom/homework/grades.pm Sat Aug 17 17:43:43 2019
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.596.2.12.2.48 2019/07/07 15:31:52 raeburn Exp $
+# $Id: grades.pm,v 1.596.2.12.2.49 2019/08/17 17:43:43 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -5760,7 +5760,7 @@
sub scantron_scantab {
my $result='<select name="scantron_format">'."\n";
$result.='<option></option>'."\n";
- my @lines = &get_scantronformat_file();
+ my @lines = &Apache::lonnet::get_scantronformat_file();
if (@lines > 0) {
foreach my $line (@lines) {
next if (($line =~ /^\#/) || ($line eq ''));
@@ -5772,62 +5772,6 @@
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$/, at 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
=item scantron_CODElist
@@ -5914,48 +5858,55 @@
# Chunk of form to prompt for a scantron file upload.
$r->print('
- <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(&get_symb($r,1));
- my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'};
- 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.');
- &js_escape(\$alertmsg);
- $r->print('
- <script type="text/javascript" language="javascript">
+ <br />');
+ my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'};
+ 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.');
+ &js_escape(\$alertmsg);
+ my ($formatoptions,$formattitle,$formatjs) = &scantron_upload_dataformat($cdom);
+ $r->print(&Apache::lonhtmlcommon::scripttag('
function checkUpload(formname) {
if (formname.upfile.value == "") {
alert("'.$alertmsg.'");
return false;
}
formname.submit();
- }
- </script>
-
+ }'."\n".$formatjs));
+ $r->print('
<form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
'.$default_form_data.'
<input name="courseid" type="hidden" value="'.$cnum.'" />
<input name="domainid" type="hidden" value="'.$cdom.'" />
<input name="command" value="scantronupload_save" type="hidden" />
- '.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'
- <br />
- <input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
- </form>
-');
+ '.&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>
+ '.&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:
@@ -6067,98 +6018,6 @@
return;
}
-=pod
-
-=item get_scantron_config
-
- Parse and return the scantron 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
=item username_to_idmap
@@ -6204,7 +6063,7 @@
Process a requested correction to a scanline.
Arguments:
- $scantron_config - hash from &get_scantron_config()
+ $scantron_config - hash from &Apache::lonnet::get_scantron_config()
$scan_data - hash of correction information
(see &scantron_getfile())
$line - existing scanline
@@ -6887,7 +6746,7 @@
sub scantron_process_corrections {
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 $classlist=&Apache::loncoursedata::get_classlist();
my $which=$env{'form.scantron_line'};
@@ -7056,7 +6915,7 @@
sub scantron_warning_screen {
my ($button_text)=@_;
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;
if ($scantron_config{'CODElocation'} &&
$scantron_config{'CODEstart'} &&
@@ -7215,7 +7074,7 @@
#get the student pick code ready
$r->print(&Apache::loncommon::studentbrowser_javascript());
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);
if ($nav_error) {
$r->print(&navmap_errormsg());
@@ -7674,7 +7533,7 @@
my %idmap=&username_to_idmap($classlist);
#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 $nav_error;
@@ -8138,7 +7997,7 @@
Arguments:
$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.
$questionnum - Question number (may include subquestion)
$error - Type of error.
@@ -8302,7 +8161,7 @@
sub scantron_validate_CODE {
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'} &&
$scantron_config{'CODEstart'} &&
$scantron_config{'CODElength'}) {
@@ -8376,7 +8235,7 @@
&Apache::lonnet::decode_symb($env{'form.selectpage'});
#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 $navmap = Apache::lonnavmaps::navmap->new();
@@ -8558,7 +8417,7 @@
&Apache::lonnet::decode_symb($env{'form.selectpage'});
#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 $navmap = Apache::lonnavmaps::navmap->new();
@@ -8687,7 +8546,7 @@
}
}
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);
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 />').
@@ -8707,7 +8566,7 @@
}
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 ($scanlines,$scan_data)=&scantron_getfile();
my $classlist=&Apache::loncoursedata::get_classlist();
@@ -8777,7 +8636,7 @@
return ''; # Dunno why the other returns return '' rather than just returning.
}
- my %lettdig = &letter_to_digits();
+ my %lettdig = &Apache::lonnet::letter_to_digits();
my $numletts = scalar(keys(%lettdig));
my %orderedforcode;
@@ -9108,6 +8967,7 @@
sub scantron_upload_scantron_data {
my ($r)=@_;
my $dom = $env{'request.role.domain'};
+ my ($formatoptions,$formattitle,$formatjs) = &scantron_upload_dataformat($dom);
my $domdesc = &Apache::lonnet::domain($dom,'description');
$r->print(&Apache::loncommon::coursebrowser_javascript($dom));
my $select_link=&Apache::loncommon::selectcourse_link('rules','courseid',
@@ -9121,8 +8981,7 @@
&js_escape(\$nofile_alert);
my $nocourseid_alert = &mt("Please use the 'Select Course' link to open a separate window where you can search for a course to which a file can be uploaded.");
&js_escape(\$nocourseid_alert);
- $r->print('
-<script type="text/javascript" language="javascript">
+ $r->print(&Apache::lonhtmlcommon::scripttag('
function checkUpload(formname) {
if (formname.upfile.value == "") {
alert("'.$nofile_alert.'");
@@ -9149,8 +9008,9 @@
return;
}
-</script>
-
+ '.$formatjs.'
+'));
+ $r->print('
<h3>'.&mt('Send bubblesheet data to a course').'</h3>
<form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
@@ -9164,7 +9024,12 @@
&Apache::lonhtmlcommon::row_closure().
&Apache::lonhtmlcommon::row_title(&mt('Domain')).
'<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')).
'<input type="file" name="upfile" size="50" />'.
&Apache::lonhtmlcommon::row_closure(1).
@@ -9177,6 +9042,84 @@
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 (ref($domconfig{'scantron'}{'config'}{'csv'}{'fields'}) eq 'HASH') {
+ if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}{'fields'}})) {
+ 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">'.
+ '<span class="LC_nobreak">'.
+ &mt('Bubblesheet type:').' '.
+ &scantron_scantab().'</span></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 = '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 (ref($domconfig{'scantron'}{'config'}{'csv'}{'fields'}) eq 'HASH') {
+ if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}{'fields'}})) {
+ $formattitle = &mt('Bubblesheet type');
+ $formatoptions = &scantron_scantab();
+ }
+ }
+ }
+ }
+ }
+ return ($formatoptions,$formattitle,$formatjs);
+}
sub scantron_upload_scantron_data_save {
my($r)=@_;
@@ -9206,8 +9149,38 @@
&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));
} else {
- my $result =
- &Apache::lonnet::userfileupload('upfile','','scantron','','','',
+ my %domconfig = &Apache::lonnet::get_dom('configuration',['scantron'],$env{'form.domainid'});
+ 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 (ref($domconfig{'scantron'}{'config'}{'csv'}{'fields'}) eq 'HASH') {
+ if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}{'fields'}}) > 1) {
+ $is_csv = 1;
+ }
+ }
+ }
+ }
+ } elsif (@possibles == 1) {
+ if (ref($domconfig{'scantron'}{'config'}{'csv'}) eq 'HASH') {
+ if (ref($domconfig{'scantron'}{'config'}{'csv'}{'fields'}) eq 'HASH') {
+ if (keys(%{$domconfig{'scantron'}{'config'}{'csv'}{'fields'}}) > 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'});
if ($result =~ m{^/uploaded/}) {
$r->print(
@@ -9252,7 +9225,7 @@
$idmap{$lckey} = $idmap{$key};
}
my %unique_formats;
- my @formatlines = &get_scantronformat_file();
+ my @formatlines = &Apache::lonnet::get_scantronformat_file();
foreach my $line (@formatlines) {
chomp($line);
my @config = split(/:/,$line);
@@ -9398,14 +9371,14 @@
if (!$symb) {return '';}
my $grading_menu_button=&show_grading_menu_form($symb);
my $cid = $env{'request.course.id'};
- my %lettdig = &letter_to_digits();
+ my %lettdig = &Apache::lonnet::letter_to_digits();
my $numletts = scalar(keys(%lettdig));
my $cnum = $env{'course.'.$cid.'.num'};
my $cdom = $env{'course.'.$cid.'.domain'};
my (undef, undef, $sequence) = &Apache::lonnet::decode_symb($env{'form.selectpage'});
my %record;
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 ($scanlines,$scan_data)=&Apache::grades::scantron_getfile();
my $classlist=&Apache::loncoursedata::get_classlist();
@@ -9729,23 +9702,6 @@
return ($counter,$record);
}
-sub letter_to_digits {
- my %lettdig = (
- A => 1,
- B => 2,
- C => 3,
- D => 4,
- E => 5,
- F => 6,
- G => 7,
- H => 8,
- I => 9,
- J => 0,
- );
- return %lettdig;
-}
-
-
#-------- end of section for handling grading scantron forms -------
#
#-------------------------------------------------------------------
@@ -10754,12 +10710,20 @@
}
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) {
- $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 {
- $r->print(&Apache::loncommon::start_page('Grading',$js,
- {'bread_crumbs' => $crumbs}));
+ $args{'bread_crumbs'} = $crumbs;
+ $r->print(&Apache::loncommon::start_page('Grading',$js,\%args));
}
unless ($nodisplayflag) {
$r->print(&Apache::lonhtmlcommon::resource_info_box($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp));
@@ -10841,8 +10805,16 @@
}
&Apache::loncommon::content_type($request,'text/html');
$request->send_http_header;
- unless ((($command eq 'submission' || $command eq 'versionsub')) && ($perm{'vgr'})) {
- $request->print($start_page);
+ if (($command eq 'scantron_selectphase' && $perm{'mgr'}) ||
+ (($command eq 'scantronupload') &&
+ (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) ||
+ &Apache::lonnet::allowed('usc',$env{'request.course.id'})))) {
+ &startpage($request,$symb,[{href=>'/adm/grades', text=>"Grading"}],1,1,
+ undef,undef,undef,undef,'toggleScantab(document.rules);');
+ } else {
+ unless ((($command eq 'submission' || $command eq 'versionsub')) && ($perm{'vgr'})) {
+ $request->print($start_page);
+ }
}
if ($command eq 'submission' && $perm{'vgr'}) {
my ($stuvcurrent,$stuvdisp,$versionform,$js);
@@ -11021,7 +10993,7 @@
$r - Apache request object
$i - number of the current scanline
$scan_record - hash ref as returned from &scantron_parse_scanline()
- $scan_config - hash ref as returned from &get_scantron_config()
+ $scan_config - hash ref as returned from &Apache::lonnet::get_scantron_config()
$line - full contents of the current scanline
$error - error condition, valid values are
'incorrectCODE', 'duplicateCODE',
More information about the LON-CAPA-cvs
mailing list