symb();
@@ -435,14 +301,7 @@ sub reset_caches {
if ($check_for_randomlist) {
$add_to_form = { 'check_parts_withrandomlist' => 1,};
}
- if ($scancode) {
- if (ref($add_to_form) eq 'HASH') {
- $add_to_form->{'code_for_randomlist'} = $scancode;
- } else {
- $add_to_form = { 'code_for_randomlist' => $scancode,};
- }
- }
- my $analyze =
+ my $analyze =
&get_analyze($symb,$uname,$udom,undef,$add_to_form,
undef,undef,undef,$bubbles_per_row);
if (ref($analyze) eq 'HASH') {
@@ -471,8 +330,6 @@ sub cleanRecord {
my $grayFont = '';
if ($response =~ /^(option|rank)$/) {
my %answer=&Apache::lonnet::str2hash($answer);
- my @answer = %answer;
- %answer = map {&HTML::Entities::encode($_, '"<>&')} @answer;
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"});
my ($toprow,$bottomrow);
foreach my $foil (@$order) {
@@ -489,8 +346,6 @@ sub cleanRecord {
$bottomrow.'';
} elsif ($response eq 'match') {
my %answer=&Apache::lonnet::str2hash($answer);
- my @answer = %answer;
- %answer = map {&HTML::Entities::encode($_, '"<>&')} @answer;
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"});
my @items=&Apache::lonnet::str2array($record->{$version."resource.$partid.$respid.submissionitems"});
my ($toprow,$middlerow,$bottomrow);
@@ -513,8 +368,6 @@ sub cleanRecord {
$bottomrow.'';
} elsif ($response eq 'radiobutton') {
my %answer=&Apache::lonnet::str2hash($answer);
- my @answer = %answer;
- %answer = map {&HTML::Entities::encode($_, '"<>&')} @answer;
my ($toprow,$bottomrow);
my $correct =
&get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed);
@@ -547,11 +400,10 @@ sub cleanRecord {
$env{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : '';
$env{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob.
}
- $answer = &Apache::lontexconvert::msgtexconverted($answer);
+ $answer =~ s-\n-
-g;
return '
'.&keywords_highlight($answer).'
';
} elsif ( $response eq 'organic') {
- my $result=&mt('Smile representation: [_1]',
- '"'.&HTML::Entities::encode($answer, '"<>&').'"');
+ my $result='Smile representation: "'.$answer.'"';
my $jme=$record->{$version."resource.$partid.$respid.molecule"};
$result.=&Apache::chemresponse::jme_img($jme,$answer,400);
return $result;
@@ -586,13 +438,12 @@ sub cleanRecord {
return $result;
}
} elsif ( $response =~ m/(?:numerical|formula|custom)/) {
- # Respect multiple input fields, see Bug #5409
+ # Respect multiple input fields, see Bug #5409
$answer =
&Apache::loncommon::format_previous_attempt_value('submission',
$answer);
- return $answer;
}
- return &HTML::Entities::encode($answer, '"<>&');
+ return $answer;
}
#-- A couple of common js functions
@@ -632,7 +483,7 @@ COMMONJSFUNCTIONS
#--- Dumps the class list with usernames,list of sections,
#--- section, ids and fullnames for each user.
sub getclasslist {
- my ($getsec,$filterbyaccstatus,$getgroup,$symb,$submitonly,$filterbysubmstatus) = @_;
+ my ($getsec,$filterlist,$getgroup) = @_;
my @getsec;
my @getgroup;
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
@@ -660,13 +511,6 @@ sub getclasslist {
#
my %sections;
my %fullnames;
- my ($cdom,$cnum,$partlist);
- if (($filterbysubmstatus) && ($submitonly ne 'all') && ($symb ne '')) {
- $cdom = $env{"course.$env{'request.course.id'}.domain"};
- $cnum = $env{"course.$env{'request.course.id'}.num"};
- my $res_error;
- ($partlist) = &response_type($symb,\$res_error);
- }
foreach my $student (keys(%$classlist)) {
my $end =
$classlist->{$student}->[&Apache::loncoursedata::CL_END()];
@@ -683,7 +527,7 @@ sub getclasslist {
my $group =
$classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()];
# filter students according to status selected
- if ($filterbyaccstatus && (!($stu_status =~ /Any/))) {
+ if ($filterlist && (!($stu_status =~ /Any/))) {
if (!($stu_status =~ $status)) {
delete($classlist->{$student});
next;
@@ -700,58 +544,13 @@ sub getclasslist {
}
}
if (($grp eq 'none') && !$group) {
- $exclude = 0;
+ $exclude = 0;
}
}
if ($exclude) {
delete($classlist->{$student});
- next;
}
}
- if (($filterbysubmstatus) && ($submitonly ne 'all') && ($symb ne '')) {
- my $udom =
- $classlist->{$student}->[&Apache::loncoursedata::CL_SDOM()];
- my $uname =
- $classlist->{$student}->[&Apache::loncoursedata::CL_SNAME()];
- if (($symb ne '') && ($udom ne '') && ($uname ne '')) {
- if ($submitonly eq 'queued') {
- my %queue_status =
- &Apache::bridgetask::get_student_status($symb,$cdom,$cnum,
- $udom,$uname);
- if (!defined($queue_status{'gradingqueue'})) {
- delete($classlist->{$student});
- next;
- }
- } else {
- my (%status) =&student_gradeStatus($symb,$udom,$uname,$partlist);
- my $submitted = 0;
- my $graded = 0;
- my $incorrect = 0;
- foreach (keys(%status)) {
- $submitted = 1 if ($status{$_} ne 'nothing');
- $graded = 1 if ($status{$_} =~ /^ungraded/);
- $incorrect = 1 if ($status{$_} =~ /^incorrect/);
-
- my ($foo,$partid,$foo1) = split(/\./,$_);
- if ($status{'resource.'.$partid.'.submitted_by'} ne '') {
- $submitted = 0;
- }
- }
- if (!$submitted && ($submitonly eq 'yes' ||
- $submitonly eq 'incorrect' ||
- $submitonly eq 'graded')) {
- delete($classlist->{$student});
- next;
- } elsif (!$graded && ($submitonly eq 'graded')) {
- delete($classlist->{$student});
- next;
- } elsif (!$incorrect && $submitonly eq 'incorrect') {
- delete($classlist->{$student});
- next;
- }
- }
- }
- }
$section = ($section ne '' ? $section : 'none');
if (&canview($section)) {
if (!@getsec || grep(/^\Q$section\E$/,@getsec)) {
@@ -766,6 +565,7 @@ sub getclasslist {
delete($classlist->{$student});
}
}
+ my %seen = ();
my @sections = sort(keys(%sections));
return ($classlist,\@sections,\%fullnames);
}
@@ -781,7 +581,7 @@ sub canmodify {
#can modify the requested section
return 1;
} else {
- # can't modify the requested section
+ # can't modify the request section
return 0;
}
}
@@ -794,19 +594,19 @@ sub canview {
my ($sec)=@_;
if ($perm{'vgr'}) {
if (!defined($perm{'vgr_section'})) {
- # can view whole class
+ # can modify whole class
return 1;
} else {
if ($sec eq $perm{'vgr_section'}) {
- #can view the requested section
+ #can modify the requested section
return 1;
} else {
- # can't view the requested section
+ # can't modify the request section
return 0;
}
}
}
- #can't view
+ #can't modify
return 0;
}
@@ -947,14 +747,14 @@ sub initialverifyreceipt {
#--- Check whether a receipt number is valid.---
sub verifyreceipt {
- my ($request,$symb) = @_;
+ my ($request,$symb) = @_;
my $courseid = $env{'request.course.id'};
my $receipt = &Apache::lonnet::recprefix($courseid).'-'.
$env{'form.receipt'};
$receipt =~ s/[^\-\d]//g;
- my $title =
+ my $title.=
''.
&mt('Verifying Receipt Number [_1]',$receipt).
'
'."\n";
@@ -1035,36 +835,24 @@ sub verifyreceipt {
#--- Also called directly when one clicks on the subm button
# on the problem page.
sub listStudents {
- my ($request,$symb,$submitonly,$divforres) = @_;
+ my ($request,$symb,$submitonly) = @_;
my $cdom = $env{"course.$env{'request.course.id'}.domain"};
my $cnum = $env{"course.$env{'request.course.id'}.num"};
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'};
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'};
unless ($submitonly) {
- $submitonly = $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'};
+ $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'};
}
my $result='';
my $res_error;
- my ($partlist,$handgrade,$responseType,$numresp,$numessay) = &response_type($symb,\$res_error);
-
- my $table;
- if (ref($partlist) eq 'ARRAY') {
- if (scalar(@$partlist) > 1 ) {
- $table = &showResourceInfo($symb,$partlist,$responseType,'gradesub',1);
- } elsif ($divforres) {
- $table = '';
- } else {
- $table = '
';
- }
- }
+ my ($partlist,$handgrade,$responseType) = &response_type($symb,\$res_error);
- my %js_lt = &Apache::lonlocal::texthash (
+ my %lt = &Apache::lonlocal::texthash (
'multiple' => 'Please select a student or group of students before clicking on the Next button.',
'single' => 'Please select the student before clicking on the Next button.',
);
- &js_escape(\%js_lt);
$request->print(&Apache::lonhtmlcommon::scripttag(<print($result);
my $gradeTable=''."\n".
''.
''."\n".
+ &mt('last submission with details').' '."\n".
''.
''."\n".
+ &mt('all submissions').''."\n".
''.
'';
- my ($compmsg,$nocompmsg);
- $nocompmsg = ' checked="checked"';
- if ($numessay) {
- $compmsg = $nocompmsg;
- $nocompmsg = '';
- }
- $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Submissions'))
- .$submission_options;
-# Check if any gradable
- my $showmore;
- if ($perm{'mgr'}) {
- my @sections;
- if ($env{'request.course.sec'} ne '') {
- @sections = ($env{'request.course.sec'});
- } else {
- @sections = &Apache::loncommon::get_env_multiple('form.section');
- }
- if (grep(/^all$/,@sections)) {
- $showmore = 1;
- } else {
- foreach my $sec (@sections) {
- if (&canmodify($sec)) {
- $showmore = 1;
- last;
- }
- }
- }
- }
-
- if ($showmore) {
- $gradeTable .=
- &Apache::lonhtmlcommon::row_closure()
- .&Apache::lonhtmlcommon::row_title(&mt('Send Messages'))
- .''
- .''
- .''
+ &mt('all submissions with details').'';
+ $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('View Submissions'))
+ .$submission_options
.&Apache::lonhtmlcommon::row_closure();
- $gradeTable .=
- &Apache::lonhtmlcommon::row_title(&mt('Grading Increments'))
+ $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Grading Increments'))
.'';
- }
+ .''
+ .&Apache::lonhtmlcommon::row_closure();
+
$gradeTable .=
&build_section_inputs().
''."\n".
''."\n".
''."\n";
+
if (exists($env{'form.Status'})) {
$gradeTable .= ''."\n";
} else {
- $gradeTable .= &Apache::lonhtmlcommon::row_closure()
- .&Apache::lonhtmlcommon::row_title(&mt('Student Status'))
+ $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Student Status'))
.&Apache::lonhtmlcommon::StatusOptions(
- $saveStatus,undef,1,'javascript:reLoadList(this.form);');
+ $saveStatus,undef,1,'javascript:reLoadList(this.form);')
+ .&Apache::lonhtmlcommon::row_closure();
}
- if ($numessay) {
- $gradeTable .= &Apache::lonhtmlcommon::row_closure()
- .&Apache::lonhtmlcommon::row_title(&mt('Check For Plagiarism'))
- .'';
- }
- $gradeTable .= &Apache::lonhtmlcommon::row_closure(1)
+
+ $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Check For Plagiarism'))
+ .''
+ .&Apache::lonhtmlcommon::row_closure(1)
.&Apache::lonhtmlcommon::end_pick_box();
$gradeTable .= ''
@@ -1353,8 +1099,8 @@ LISTJAVASCRIPT
#---- Called from the listStudents routine
sub check_script {
- my ($form,$type) = @_;
- my $chkallscript = &Apache::lonhtmlcommon::scripttag('
+ my ($form, $type)=@_;
+ my $chkallscript= &Apache::lonhtmlcommon::scripttag('
function checkall() {
for (i=0; i
INNERJS
- my $start_page_msg_central =
+ my $inner_js_highlight_central= (<
+ function updateChoice(flag) {
+ opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);
+ opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);
+ opener.document.SCORE.kwstyle.value = opener.radioSelection(document.hlCenter.kwdstyle);
+ opener.document.SCORE.refresh.value = "on";
+ if (opener.document.SCORE.keywords.value!=""){
+ opener.document.SCORE.submit();
+ }
+ self.close()
+ }
+
+INNERJS
+
+ my $start_page_msg_central =
&Apache::loncommon::start_page('Message Central',$inner_js_msg_central,
{'js_ready' => 1,
'only_body' => 1,
'bgcolor' =>'#FFFFFF',});
- my $end_page_msg_central =
+ my $end_page_msg_central =
&Apache::loncommon::end_page({'js_ready' => 1});
+ my $start_page_highlight_central =
+ &Apache::loncommon::start_page('Highlight Central',
+ $inner_js_highlight_central,
+ {'js_ready' => 1,
+ 'only_body' => 1,
+ 'bgcolor' =>'#FFFFFF',});
+ my $end_page_highlight_central =
+ &Apache::loncommon::end_page({'js_ready' => 1});
+
my $docopen=&Apache::lonhtmlcommon::javascript_docopen();
$docopen=~s/^document\.//;
-
- my %html_js_lt = &Apache::lonlocal::texthash(
+ my %lt = &Apache::lonlocal::texthash(
+ keyw => 'Keywords list, separated by a space. Add/delete to list if desired.',
+ plse => 'Please select a word or group of words from document and then click this link.',
+ adds => 'Add selection to keyword list? Edit if desired.',
comp => 'Compose Message for: ',
incl => 'Include',
type => 'Type',
@@ -1655,11 +1428,35 @@ INNERJS
new => 'New',
save => 'Save',
canc => 'Cancel',
+ kehi => 'Keyword Highlight Options',
+ txtc => 'Text Color',
+ font => 'Font Size',
+ fnst => 'Font Style',
+ col1 => 'red',
+ col2 => 'green',
+ col3 => 'blue',
+ siz1 => 'normal',
+ siz2 => '+1',
+ siz3 => '+2',
+ sty1 => 'normal',
+ sty2 => 'italic',
+ sty3 => 'bold',
);
- &html_escape(\%html_js_lt);
- &js_escape(\%html_js_lt);
$request->print(&Apache::lonhtmlcommon::scripttag(<");
pDoc.write("");
- pDoc.write(" $html_js_lt{'comp'}\"+fullname+\"<\\/h1>");
+ pDoc.write(" $lt{'comp'}\"+fullname+\"<\\/h1>");
pDoc.write('
');
- pDoc.write("$html_js_lt{'incl'}<\\/b><\\/td> | $html_js_lt{'type'}<\\/b><\\/td> | $html_js_lt{'mesa'}<\\/td><\\/tr>");
+ pDoc.write(" | $lt{'incl'}<\\/b><\\/td> | $lt{'type'}<\\/b><\\/td> | $lt{'mesa'}<\\/td><\\/tr>");
}
function displaySubject(msg,shwsel) {
pDoc = pWin.document;
pDoc.write("");
pDoc.write("<\\/td>");
- pDoc.write(" | $html_js_lt{'subj'}<\\/td>");
+ pDoc.write(" | $lt{'subj'}<\\/td>");
pDoc.write(" | <\\/td><\\/tr>");
}
@@ -1764,121 +1581,21 @@ INNERJS
pDoc = pWin.document;
pDoc.write(" | ");
pDoc.write("<\\/td>");
- pDoc.write(" | $html_js_lt{'new'}<\\/td>");
+ pDoc.write(" | $lt{'new'}<\\/td>");
pDoc.write(" | | '."\n".
''."\n".
-''.&mt('Submissions').' | '.$showrecord.' | '."\n";
+' | Submissions | '.$showrecord.' |
'."\n";
$passed ++;
} else {
my $css_class = ($failed % 2)?'LC_odd_row':'LC_even_row';
$badstudents .= ''.&mt('Bubblesheet').' | '.$scandata{$pid}.' | '.$last.' | '.$pid.' | '."\n".
'
'."\n".
''."\n".
-''.&mt('Submissions').' | '.$record{$pid}.' | '."\n".
+'Submissions | '.$record{$pid}.' | '."\n".
'
'."\n";
$failed ++;
}
@@ -9718,19 +9087,21 @@ sub checkscantron_results {
}
}
}
- $r->print(''.
- &mt('Comparison of bubblesheet data (including corrections) with corresponding submission records (most recent submission) for [_1][quant,_2,student][_3] ([quant,_4,bubblesheet line] per student).',
- '',
- $numstudents,
- '',
- $env{'form.scantron_maxbubble'}).
- '
'
+ $r->print(
+ ''
+ .&mt('Comparison of bubblesheet data (including corrections) with corresponding submission records (most recent submission) for [_1][quant,_2,student][_3] ([quant,_4,bubblesheet line] per student).',
+ '',
+ $numstudents,
+ '',
+ $env{'form.scantron_maxbubble'})
+ .'
'
);
$r->print(''
.&mt('Exact matches for [_1][quant,_2,student][_3].','',$passed,'')
.'
'
.&mt('Discrepancies detected for [_1][quant,_2,student][_3].','',$failed,'')
- .'
');
+ .''
+ );
if ($passed) {
$r->print(&mt('Students with exact correspondence between bubblesheet data and submissions are as follows:').'
');
$r->print(&Apache::loncommon::start_data_table()."\n".
@@ -9876,6 +9247,23 @@ sub verify_scantron_grading {
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 -------
#
#-------------------------------------------------------------------
@@ -9895,7 +9283,7 @@ sub grading_menu {
my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
'command'=>'individual');
-
+
my $url1a = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
$fields{'command'}='ungraded';
@@ -9909,7 +9297,7 @@ sub grading_menu {
$fields{'command'}='downloadfilesselect';
my $url1e=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
-
+
$fields{'command'} = 'csvform';
my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
@@ -9921,74 +9309,64 @@ sub grading_menu {
$fields{'command'} = 'initialverifyreceipt';
my $url5 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-
- my %permissions;
- if ($perm{'mgr'}) {
- $permissions{'either'} = 'F';
- $permissions{'mgr'} = 'F';
- }
- if ($perm{'vgr'}) {
- $permissions{'either'} = 'F';
- $permissions{'vgr'} = 'F';
- }
-
+
my @menu = ({ categorytitle=>'Hand Grading',
items =>[
- { linktext => 'Select individual students to grade',
- url => $url1a,
- permission => $permissions{'either'},
- icon => 'grade_students.png',
- linktitle => 'Grade current resource for a selection of students.'
- },
- { linktext => 'Grade ungraded submissions',
+ { linktext => 'Select individual students to grade',
+ url => $url1a,
+ permission => 'F',
+ icon => 'grade_students.png',
+ linktitle => 'Grade current resource for a selection of students.'
+ },
+ { linktext => 'Grade ungraded submissions.',
url => $url1b,
- permission => $permissions{'either'},
+ permission => 'F',
icon => 'ungrade_sub.png',
linktitle => 'Grade all submissions that have not been graded yet.'
},
{ linktext => 'Grading table',
url => $url1c,
- permission => $permissions{'either'},
+ permission => 'F',
icon => 'grading_table.png',
linktitle => 'Grade current resource for all students.'
},
{ linktext => 'Grade page/folder for one student',
url => $url1d,
- permission => $permissions{'either'},
+ permission => 'F',
icon => 'grade_PageFolder.png',
linktitle => 'Grade all resources in current page/sequence/folder for one student.'
},
- { linktext => 'Download submitted files',
+ { linktext => 'Download submissions',
url => $url1e,
- permission => $permissions{'either'},
+ permission => 'F',
icon => 'download_sub.png',
- linktitle => 'Download all files submitted by students.'
+ linktitle => 'Download all students submissions.'
}]},
{ categorytitle=>'Automated Grading',
items =>[
{ linktext => 'Upload Scores',
url => $url2,
- permission => $permissions{'mgr'},
+ permission => 'F',
icon => 'uploadscores.png',
linktitle => 'Specify a file containing the class scores for current resource.'
},
{ linktext => 'Process Clicker',
url => $url3,
- permission => $permissions{'mgr'},
+ permission => 'F',
icon => 'addClickerInfoFile.png',
linktitle => 'Specify a file containing the clicker information for this resource.'
},
{ linktext => 'Grade/Manage/Review Bubblesheets',
url => $url4,
- permission => $permissions{'mgr'},
+ permission => 'F',
icon => 'bubblesheet.png',
linktitle => 'Grade bubblesheet exams, upload/download bubblesheet data files, and review previously graded bubblesheet exams.'
},
{ linktext => 'Verify Receipt Number',
url => $url5,
- permission => $permissions{'either'},
+ permission => 'F',
icon => 'receipt_number.png',
linktitle => 'Verify a system-generated receipt number for correct problem solution.'
}
@@ -10006,6 +9384,7 @@ sub grading_menu {
return $Str;
}
+
sub ungraded {
my ($request)=@_;
&submit_options($request);
@@ -10038,7 +9417,7 @@ sub submit_options_table {
$result.='
@@ -10100,35 +9460,42 @@ sub submit_options {
$result.='';
return $result;
}
sub selectfield {
my ($full)=@_;
- my %options =
- (&substatus_options,
- 'select_form_order' => ['yes','queued','graded','incorrect','all']);
+ my %options =
+ (&Apache::lonlocal::texthash(
+ 'yes' => 'with submissions',
+ 'queued' => 'in grading queue',
+ 'graded' => 'with ungraded submissions',
+ 'incorrect' => 'with incorrect submissions',
+ 'all' => 'with any status'),
+ 'select_form_order' => ['yes','queued','graded','incorrect','all']);
my $result='
-
+
-
+
-
+
';
if ($full) {
- $result.='
+ $result.='