version 1.745, 2017/12/18 23:51:24
|
version 1.753, 2018/11/20 19:14:14
|
Line 46 use Apache::lonenc;
|
Line 46 use Apache::lonenc;
|
use Apache::lonstathelpers; |
use Apache::lonstathelpers; |
use Apache::lonquickgrades; |
use Apache::lonquickgrades; |
use Apache::bridgetask(); |
use Apache::bridgetask(); |
|
use Apache::lontexconvert(); |
use String::Similarity; |
use String::Similarity; |
use LONCAPA; |
use LONCAPA; |
|
|
Line 417 sub cleanRecord {
|
Line 418 sub cleanRecord {
|
$env{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$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. |
$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); |
return '<br /><br /><blockquote><tt>'.&keywords_highlight($answer).'</tt></blockquote>'; |
return '<br /><br /><blockquote><tt>'.&keywords_highlight($answer).'</tt></blockquote>'; |
|
|
} elsif ( $response eq 'organic') { |
} elsif ( $response eq 'organic') { |
Line 502 COMMONJSFUNCTIONS
|
Line 504 COMMONJSFUNCTIONS
|
#--- Dumps the class list with usernames,list of sections, |
#--- Dumps the class list with usernames,list of sections, |
#--- section, ids and fullnames for each user. |
#--- section, ids and fullnames for each user. |
sub getclasslist { |
sub getclasslist { |
my ($getsec,$filterlist,$getgroup) = @_; |
my ($getsec,$filterbyaccstatus,$getgroup,$symb,$submitonly,$filterbysubmstatus) = @_; |
my @getsec; |
my @getsec; |
my @getgroup; |
my @getgroup; |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
Line 530 sub getclasslist {
|
Line 532 sub getclasslist {
|
# |
# |
my %sections; |
my %sections; |
my %fullnames; |
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,my $handgrade,my $responseType) = &response_type($symb,\$res_error); |
|
} |
foreach my $student (keys(%$classlist)) { |
foreach my $student (keys(%$classlist)) { |
my $end = |
my $end = |
$classlist->{$student}->[&Apache::loncoursedata::CL_END()]; |
$classlist->{$student}->[&Apache::loncoursedata::CL_END()]; |
Line 546 sub getclasslist {
|
Line 555 sub getclasslist {
|
my $group = |
my $group = |
$classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()]; |
$classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()]; |
# filter students according to status selected |
# filter students according to status selected |
if ($filterlist && (!($stu_status =~ /Any/))) { |
if ($filterbyaccstatus && (!($stu_status =~ /Any/))) { |
if (!($stu_status =~ $status)) { |
if (!($stu_status =~ $status)) { |
delete($classlist->{$student}); |
delete($classlist->{$student}); |
next; |
next; |
Line 563 sub getclasslist {
|
Line 572 sub getclasslist {
|
} |
} |
} |
} |
if (($grp eq 'none') && !$group) { |
if (($grp eq 'none') && !$group) { |
$exclude = 0; |
$exclude = 0; |
} |
} |
} |
} |
if ($exclude) { |
if ($exclude) { |
delete($classlist->{$student}); |
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'); |
$section = ($section ne '' ? $section : 'none'); |
if (&canview($section)) { |
if (&canview($section)) { |
if (!@getsec || grep(/^\Q$section\E$/,@getsec)) { |
if (!@getsec || grep(/^\Q$section\E$/,@getsec)) { |
Line 584 sub getclasslist {
|
Line 638 sub getclasslist {
|
delete($classlist->{$student}); |
delete($classlist->{$student}); |
} |
} |
} |
} |
my %seen = (); |
|
my @sections = sort(keys(%sections)); |
my @sections = sort(keys(%sections)); |
return ($classlist,\@sections,\%fullnames); |
return ($classlist,\@sections,\%fullnames); |
} |
} |
Line 856 sub verifyreceipt {
|
Line 909 sub verifyreceipt {
|
sub listStudents { |
sub listStudents { |
my ($request,$symb,$submitonly) = @_; |
my ($request,$symb,$submitonly) = @_; |
|
|
my ($is_tool) = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
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 $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
Line 1952 sub show_problem {
|
Line 2005 sub show_problem {
|
sub files_exist { |
sub files_exist { |
my ($r, $symb) = @_; |
my ($r, $symb) = @_; |
my @students = &Apache::loncommon::get_env_multiple('form.stuinfo'); |
my @students = &Apache::loncommon::get_env_multiple('form.stuinfo'); |
|
|
foreach my $student (@students) { |
foreach my $student (@students) { |
my ($uname,$udom,$fullname) = split(/:/,$student); |
my ($uname,$udom,$fullname) = split(/:/,$student); |
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'}, |
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'}, |
Line 1975 sub download_all_link {
|
Line 2027 sub download_all_link {
|
$r->print(&mt('There are currently no submitted documents.')); |
$r->print(&mt('There are currently no submitted documents.')); |
return; |
return; |
} |
} |
|
|
my $all_students = |
my $all_students = |
join("\n", &Apache::loncommon::get_env_multiple('form.stuinfo')); |
join("\n", &Apache::loncommon::get_env_multiple('form.stuinfo')); |
|
|
Line 1995 sub submit_download_link {
|
Line 2046 sub submit_download_link {
|
my ($request,$symb) = @_; |
my ($request,$symb) = @_; |
if (!$symb) { return ''; } |
if (!$symb) { return ''; } |
#FIXME: Figure out which type of problem this is and provide appropriate download |
#FIXME: Figure out which type of problem this is and provide appropriate download |
&download_all_link($request,$symb); |
my $res_error; |
|
my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error); |
|
if (ref($res_error)) { |
|
if ($$res_error) { |
|
$request->print(&mt('An error occurred retrieving response types')); |
|
return; |
|
} |
|
} |
|
my ($numupload,$numessay) = (0,0); |
|
if (ref($responseType) eq 'HASH') { |
|
foreach my $part (sort(keys(%$responseType))) { |
|
foreach my $id (sort(keys(%{ $responseType->{$part} }))) { |
|
my $responsetype = $responseType->{$part}->{$id}; |
|
if ($responsetype eq 'essay') { |
|
my $uploadedfiletypes = |
|
&Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes",$symb); |
|
if ($uploadedfiletypes) { |
|
$numupload++; |
|
} else { |
|
$numessay++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (($numupload) || ($numessay)) { |
|
my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'}; |
|
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
|
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'}; |
|
(undef,undef,my $fullname) = &getclasslist($getsec,1,$getgroup,$symb,$submitonly,1); |
|
if (ref($fullname) eq 'HASH') { |
|
my @students = map { $_.':'.$fullname->{$_} } (keys(%{$fullname})); |
|
if (@students) { |
|
@{$env{'form.stuinfo'}} = @students; |
|
if ($numupload) { |
|
&download_all_link($request,$symb); |
|
} |
|
# FIXME Need to provide a mechanism to download essays, i.e., if $numessay > 0 |
|
# Needs to omit user's identity if resource instance is for an anonymous survey. |
|
} else { |
|
$request->print(&mt('No students match the criteria you selected')); |
|
} |
|
} else { |
|
$request->print(&mt('Could not retrieve student information')); |
|
} |
|
} else { |
|
$request->print(&mt('No essayresponse items found')); |
|
} |
|
return; |
} |
} |
|
|
sub build_section_inputs { |
sub build_section_inputs { |
Line 2021 sub submission {
|
Line 2120 sub submission {
|
|
|
my $probtitle=&Apache::lonnet::gettitle($symb); |
my $probtitle=&Apache::lonnet::gettitle($symb); |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:."); return ''; } |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:."); return ''; } |
my ($is_tool) = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
|
my ($essayurl,%coursedesc_by_cid); |
|
|
if (!&canview($usec)) { |
if (!&canview($usec)) { |
$request->print( |
$request->print( |
Line 2152 sub submission {
|
Line 2252 sub submission {
|
# |
# |
# Load the other essays for similarity check |
# Load the other essays for similarity check |
# |
# |
my (undef,undef,$essayurl) = &Apache::lonnet::decode_symb($symb); |
(undef,undef,$essayurl) = &Apache::lonnet::decode_symb($symb); |
my ($adom,$aname,$apath)=($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/); |
if ($essayurl eq 'lib/templates/simpleproblem.problem') { |
$apath=&escape($apath); |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$apath=~s/\W/\_/gs; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
&init_old_essays($symb,$apath,$adom,$aname); |
if ($cdom ne '' && $cnum ne '') { |
|
my ($map,$id,$res) = &Apache::lonnet::decode_symb($symb); |
|
if ($map =~ m{^\Quploaded/$cdom/$cnum/\E(default(?:|_\d+)\.(?:sequence|page))$}) { |
|
my $apath = $1.'_'.$id; |
|
$apath=~s/\W/\_/gs; |
|
&init_old_essays($symb,$apath,$cdom,$cnum); |
|
} |
|
} |
|
} else { |
|
my ($adom,$aname,$apath)=($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/); |
|
$apath=&escape($apath); |
|
$apath=~s/\W/\_/gs; |
|
&init_old_essays($symb,$apath,$adom,$aname); |
|
} |
} |
} |
} |
} |
|
|
Line 2307 sub submission {
|
Line 2420 sub submission {
|
&most_similar($uname,$udom,$symb,$subval); |
&most_similar($uname,$udom,$symb,$subval); |
if ($osim) { |
if ($osim) { |
$osim=int($osim*100.0); |
$osim=int($osim*100.0); |
my %old_course_desc = |
|
&Apache::lonnet::coursedescription($ocrsid, |
|
{'one_time' => 1}); |
|
|
|
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
$similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'. |
$similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'. |
&mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />'; |
&mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />'; |
} else { |
} else { |
$similar="<hr /><h3><span class=\"LC_warning\">". |
$similar='<hr />'; |
&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])', |
if ($essayurl eq 'lib/templates/simpleproblem.problem') { |
$osim, |
$similar .= '<h3><span class="LC_warning">'. |
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')', |
&mt('Essay is [_1]% similar to an essay by [_2]', |
$old_course_desc{'description'}, |
$osim, |
$old_course_desc{'num'}, |
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')'). |
$old_course_desc{'domain'}). |
'</span></h3>'; |
'</span></h3><blockquote><i>'. |
} else { |
&keywords_highlight($oessay). |
my %old_course_desc; |
'</i></blockquote><hr />'; |
if ($ocrsid ne '') { |
|
if (ref($coursedesc_by_cid{$ocrsid}) eq 'HASH') { |
|
%old_course_desc = %{$coursedesc_by_cid{$ocrsid}}; |
|
} else { |
|
my $args; |
|
if ($ocrsid ne $env{'request.course.id'}) { |
|
$args = {'one_time' => 1}; |
|
} |
|
%old_course_desc = |
|
&Apache::lonnet::coursedescription($ocrsid,$args); |
|
$coursedesc_by_cid{$ocrsid} = \%old_course_desc; |
|
} |
|
$similar .= |
|
'<h3><span class="LC_warning">'. |
|
&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])', |
|
$osim, |
|
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')', |
|
$old_course_desc{'description'}, |
|
$old_course_desc{'num'}, |
|
$old_course_desc{'domain'}). |
|
'</span></h3>'; |
|
} else { |
|
$similar .= |
|
'<h3><span class="LC_warning">'. |
|
&mt('Essay is [_1]% similar to an essay by [_2] in an unknown course', |
|
$osim, |
|
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')'). |
|
'</span></h3>'; |
|
} |
|
} |
|
$similar .= '<blockquote><i>'. |
|
&keywords_highlight($oessay). |
|
'</i></blockquote><hr />'; |
} |
} |
} |
} |
} |
} |
Line 2635 sub get_last_submission {
|
Line 2776 sub get_last_submission {
|
if (!@string) { |
if (!@string) { |
my $msg; |
my $msg; |
if ($is_tool) { |
if ($is_tool) { |
$msg = &mt('Nothing passed back - no attempts.'); |
$msg = &mt('No grade passed back.'); |
} else { |
} else { |
$msg = &mt('Nothing submitted - no attempts.'); |
$msg = &mt('Nothing submitted - no attempts.'); |
} |
} |
Line 4090 sub editgrades {
|
Line 4231 sub editgrades {
|
$ctr++; |
$ctr++; |
} |
} |
my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb); |
my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb); |
|
my $totcolspan = 0; |
foreach my $partid (@partid) { |
foreach my $partid (@partid) { |
$header .= '<th align="center">'.&mt('Old Score').'</th>'. |
$header .= '<th align="center">'.&mt('Old Score').'</th>'. |
'<th align="center">'.&mt('New Score').'</th>'; |
'<th align="center">'.&mt('New Score').'</th>'; |
Line 4106 sub editgrades {
|
Line 4248 sub editgrades {
|
'<th align="center">'.&mt('New').' '.$display.'</th>'; |
'<th align="center">'.&mt('New').' '.$display.'</th>'; |
$columns{$partid}+=2; |
$columns{$partid}+=2; |
} |
} |
|
$totcolspan += $columns{$partid}; |
} |
} |
foreach my $partid (@partid) { |
foreach my $partid (@partid) { |
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
Line 4121 sub editgrades {
|
Line 4264 sub editgrades {
|
my @noupdate; |
my @noupdate; |
my ($updateCtr,$noupdateCtr) = (1,1); |
my ($updateCtr,$noupdateCtr) = (1,1); |
for ($i=0; $i<$env{'form.total'}; $i++) { |
for ($i=0; $i<$env{'form.total'}; $i++) { |
my $line; |
|
my $user = $env{'form.ctr'.$i}; |
my $user = $env{'form.ctr'.$i}; |
my ($uname,$udom)=split(/:/,$user); |
my ($uname,$udom)=split(/:/,$user); |
my %newrecord; |
my %newrecord; |
my $updateflag = 0; |
my $updateflag = 0; |
$line .= '<td>'.&nameUserString(undef,$$fullname{$user},$uname,$udom).'</td>'; |
|
my $usec=$classlist->{"$uname:$udom"}[5]; |
my $usec=$classlist->{"$uname:$udom"}[5]; |
if (!&canmodify($usec)) { |
my $canmodify = &canmodify($usec); |
my $numcols=scalar(@partid)*4+2; |
my $line = '<td'.($canmodify?'':' colspan="2"').'>'. |
|
&nameUserString(undef,$$fullname{$user},$uname,$udom).'</td>'; |
|
if (!$canmodify) { |
push(@noupdate, |
push(@noupdate, |
$line."<td colspan=\"$numcols\"><span class=\"LC_warning\">". |
$line."<td colspan=\"$totcolspan\"><span class=\"LC_warning\">". |
&mt('Not allowed to modify student')."</span></td></tr>"); |
&mt('Not allowed to modify student')."</span></td>"); |
next; |
next; |
} |
} |
my %aggregate = (); |
my %aggregate = (); |
Line 4249 sub editgrades {
|
Line 4392 sub editgrades {
|
} |
} |
} |
} |
if (@noupdate) { |
if (@noupdate) { |
# my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
my $numcols=$totcolspan+2; |
my $numcols=scalar(@partid)*4+2; |
|
$result .= &Apache::loncommon::start_data_table_row('LC_empty_row'). |
$result .= &Apache::loncommon::start_data_table_row('LC_empty_row'). |
'<td align="center" colspan="'.$numcols.'">'. |
'<td align="center" colspan="'.$numcols.'">'. |
&mt('No Changes Occurred For the Students Below'). |
&mt('No Changes Occurred For the Students Below'). |
Line 5021 sub displayPage {
|
Line 5163 sub displayPage {
|
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
my ($is_tool) = ($symbx =~ /ext\.tool$/); |
my $is_tool = ($symbx =~ /ext\.tool$/); |
$studentTable.= |
$studentTable.= |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td align="center" valign="top" >'.$prob. |
'<td align="center" valign="top" >'.$prob. |
Line 5032 sub displayPage {
|
Line 5174 sub displayPage {
|
'</td>'; |
'</td>'; |
$studentTable.='<td valign="top">'; |
$studentTable.='<td valign="top">'; |
my %form = ('CODE' => $env{'form.CODE'},); |
my %form = ('CODE' => $env{'form.CODE'},); |
unless ($is_tool) { |
if ($is_tool) { |
|
$studentTable.=' <b>'.$title.'</b><br />'; |
|
} else { |
if ($env{'form.vProb'} eq 'yes' ) { |
if ($env{'form.vProb'} eq 'yes' ) { |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1, |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1, |
undef,'both',\%form); |
undef,'both',\%form); |
Line 5110 sub displaySubByDates {
|
Line 5254 sub displaySubByDates {
|
my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_; |
my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_; |
my $isCODE=0; |
my $isCODE=0; |
my $isTask = ($symb =~/\.task$/); |
my $isTask = ($symb =~/\.task$/); |
|
my $is_tool = ($symb =~/\.tool$/); |
if (exists($record->{'resource.CODE'})) { $isCODE=1; } |
if (exists($record->{'resource.CODE'})) { $isCODE=1; } |
my $studentTable=&Apache::loncommon::start_data_table(). |
my $studentTable=&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
'<th>'.&mt('Date/Time').'</th>'. |
'<th>'.&mt('Date/Time').'</th>'. |
($isCODE?'<th>'.&mt('CODE').'</th>':''). |
($isCODE?'<th>'.&mt('CODE').'</th>':''). |
($isTask?'<th>'.&mt('Version').'</th>':''). |
($isTask?'<th>'.&mt('Version').'</th>':''). |
'<th>'.&mt('Submission').'</th>'. |
'<th>'.($is_tool?&mt('Grade'):&mt('Submission')).'</th>'. |
'<th>'.&mt('Status').'</th>'. |
'<th>'.&mt('Status').'</th>'. |
&Apache::loncommon::end_data_table_header_row(); |
&Apache::loncommon::end_data_table_header_row(); |
my ($version); |
my ($version); |
Line 5124 sub displaySubByDates {
|
Line 5269 sub displaySubByDates {
|
my %orders; |
my %orders; |
$mark{'correct_by_student'} = $checkIcon; |
$mark{'correct_by_student'} = $checkIcon; |
if (!exists($$record{'1:timestamp'})) { |
if (!exists($$record{'1:timestamp'})) { |
return '<br /> <span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br />'; |
if ($is_tool) { |
|
return '<br /> <span class="LC_warning">'.&mt('No grade passed back.').'</span><br />'; |
|
} else { |
|
return '<br /> <span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br />'; |
|
} |
} |
} |
|
|
my $interaction; |
my $interaction; |
Line 5157 sub displaySubByDates {
|
Line 5306 sub displaySubByDates {
|
if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) { |
if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) { |
$hidden = 1; |
$hidden = 1; |
} |
} |
my @matchKey = ($isTask ? sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys) |
my @matchKey; |
: sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys)); |
if ($isTask) { |
|
@matchKey = sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys); |
|
} elsif ($is_tool) { |
|
@matchKey = sort(grep /^resource\.\Q$partid\E\.awarded$/,@versionKeys); |
|
} else { |
|
@matchKey = sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys); |
|
} |
# next if ($$record{"$version:resource.$partid.solved"} eq ''); |
# next if ($$record{"$version:resource.$partid.solved"} eq ''); |
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
foreach my $matchKey (@matchKey) { |
foreach my $matchKey (@matchKey) { |
if (exists($$record{$version.':'.$matchKey}) && |
if (exists($$record{$version.':'.$matchKey}) && |
$$record{$version.':'.$matchKey} ne '') { |
$$record{$version.':'.$matchKey} ne '') { |
|
if ($is_tool) { |
my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/) |
$displaySub[0].=$$record{"$version:resource.$partid.awarded"}; |
: ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/)); |
|
$displaySub[0].='<span class="LC_nobreak">'; |
|
$displaySub[0].='<b>'.&mt('Part: [_1]',$display_part).'</b>' |
|
.' <span class="LC_internal_info">' |
|
.'('.&mt('Response ID: [_1]',$responseId).')' |
|
.'</span>' |
|
.' <b>'; |
|
if ($hidden) { |
|
$displaySub[0].= &mt('Anonymous Survey').'</b>'; |
|
} else { |
} else { |
my ($trial,$rndseed,$newvariation); |
my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/) |
if ($type eq 'randomizetry') { |
: ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/)); |
$trial = $$record{"$where.$partid.tries"}; |
$displaySub[0].='<span class="LC_nobreak">'; |
$rndseed = $$record{"$where.$partid.rndseed"}; |
$displaySub[0].='<b>'.&mt('Part: [_1]',$display_part).'</b>' |
} |
.' <span class="LC_internal_info">' |
if ($$record{"$where.$partid.tries"} eq '') { |
.'('.&mt('Response ID: [_1]',$responseId).')' |
$displaySub[0].=&mt('Trial not counted'); |
.'</span>' |
} else { |
.' <b>'; |
$displaySub[0].=&mt('Trial: [_1]', |
if ($hidden) { |
$$record{"$where.$partid.tries"}); |
$displaySub[0].= &mt('Anonymous Survey').'</b>'; |
if (($rndseed ne '') && ($lastrndseed{$partid} ne '')) { |
} else { |
if (($rndseed ne $lastrndseed{$partid}) && |
my ($trial,$rndseed,$newvariation); |
(($type eq 'randomizetry') || ($lasttype{$partid} eq 'randomizetry'))) { |
if ($type eq 'randomizetry') { |
$newvariation = ' ('.&mt('New variation this try').')'; |
$trial = $$record{"$where.$partid.tries"}; |
} |
$rndseed = $$record{"$where.$partid.rndseed"}; |
} |
} |
$lastrndseed{$partid} = $rndseed; |
if ($$record{"$where.$partid.tries"} eq '') { |
$lasttype{$partid} = $type; |
$displaySub[0].=&mt('Trial not counted'); |
} |
} else { |
my $responseType=($isTask ? 'Task' |
$displaySub[0].=&mt('Trial: [_1]', |
|
$$record{"$where.$partid.tries"}); |
|
if (($rndseed ne '') && ($lastrndseed{$partid} ne '')) { |
|
if (($rndseed ne $lastrndseed{$partid}) && |
|
(($type eq 'randomizetry') || ($lasttype{$partid} eq 'randomizetry'))) { |
|
$newvariation = ' ('.&mt('New variation this try').')'; |
|
} |
|
} |
|
$lastrndseed{$partid} = $rndseed; |
|
$lasttype{$partid} = $type; |
|
} |
|
my $responseType=($isTask ? 'Task' |
: $responseType->{$partid}->{$responseId}); |
: $responseType->{$partid}->{$responseId}); |
if (!exists($orders{$partid})) { $orders{$partid}={}; } |
if (!exists($orders{$partid})) { $orders{$partid}={}; } |
if ((!exists($orders{$partid}->{$responseId})) || ($trial)) { |
if ((!exists($orders{$partid}->{$responseId})) || ($trial)) { |
$orders{$partid}->{$responseId}= |
$orders{$partid}->{$responseId}= |
&get_order($partid,$responseId,$symb,$uname,$udom, |
&get_order($partid,$responseId,$symb,$uname,$udom, |
$no_increment,$type,$trial,$rndseed); |
$no_increment,$type,$trial,$rndseed); |
} |
} |
$displaySub[0].='</b>'.$newvariation.'</span>'; # /nobreak |
$displaySub[0].='</b>'.$newvariation.'</span>'; # /nobreak |
$displaySub[0].=' '. |
$displaySub[0].=' '. |
&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom,$type,$trial,$rndseed).'<br />'; |
&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom,$type,$trial,$rndseed).'<br />'; |
|
} |
} |
} |
} |
} |
} |
} |
Line 5221 sub displaySubByDates {
|
Line 5378 sub displaySubByDates {
|
lc($$record{"$where.$partid.award"}).' '. |
lc($$record{"$where.$partid.award"}).' '. |
$mark{$$record{"$where.$partid.solved"}}. |
$mark{$$record{"$where.$partid.solved"}}. |
'<br />'; |
'<br />'; |
|
} elsif (($is_tool) && (exists($$record{"$version:resource.$partid.solved"}))) { |
|
if ($$record{"$version:resource.$partid.solved"} =~ /^(in|)correct_by_passback$/) { |
|
$displaySub[1].=&mt('Grade passed back by external tool'); |
|
} |
} |
} |
if (exists $$record{"$where.$partid.regrader"}) { |
if (exists $$record{"$where.$partid.regrader"}) { |
$displaySub[2].=$$record{"$where.$partid.regrader"}. |
$displaySub[2].=$$record{"$where.$partid.regrader"}; |
' (<b>'.&mt('Part').':</b> '.$display_part.')'; |
unless ($is_tool) { |
|
$displaySub[2].=' (<b>'.&mt('Part').':</b> '.$display_part.')'; |
|
} |
} elsif ($$record{"$version:resource.$partid.regrader"} =~ /\S/) { |
} elsif ($$record{"$version:resource.$partid.regrader"} =~ /\S/) { |
$displaySub[2].= |
$displaySub[2].= |
$$record{"$version:resource.$partid.regrader"}. |
$$record{"$version:resource.$partid.regrader"}; |
' (<b>'.&mt('Part').':</b> '.$display_part.')'; |
unless ($is_tool) { |
|
$displaySub[2].=' (<b>'.&mt('Part').':</b> '.$display_part.')'; |
|
} |
} |
} |
} |
} |
# needed because old essay regrader has not parts info |
# needed because old essay regrader has not parts info |
Line 9760 sub submit_options_table {
|
Line 9925 sub submit_options_table {
|
my ($request,$symb) = @_; |
my ($request,$symb) = @_; |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
my ($is_tool) = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
my $result; |
my $result; |
|
|
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
Line 9780 sub submit_options_download {
|
Line 9945 sub submit_options_download {
|
my ($request,$symb) = @_; |
my ($request,$symb) = @_; |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
|
|
my ($is_tool) = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
|
|
my $result='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
my $result='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n"; |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n"; |
$result.=' |
$result.=' |
<h2> |
<h2> |
'.&mt('Select Students for Which to Download Submissions').' |
'.&mt('Select Students for whom to Download Submissions').' |
</h2>'.&selectfield(1,$is_tool).' |
</h2>'.&selectfield(1,$is_tool).' |
<input type="hidden" name="command" value="downloadfileslink" /> |
<input type="hidden" name="command" value="downloadfileslink" /> |
<input type="submit" value="'.&mt('Next').' →" /> |
<input type="submit" value="'.&mt('Next').' →" /> |
Line 9804 sub submit_options {
|
Line 9969 sub submit_options {
|
my ($request,$symb) = @_; |
my ($request,$symb) = @_; |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
|
|
my ($is_tool) = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
my $result; |
my $result; |
|
|
Line 10727 sub handler {
|
Line 10892 sub handler {
|
} elsif ($command eq 'downloadfileslink' && $perm{'vgr'}) { |
} elsif ($command eq 'downloadfileslink' && $perm{'vgr'}) { |
&startpage($request,$symb, |
&startpage($request,$symb, |
[{href=>&href_symb_cmd($symb,'downloadfilesselect'), text=>'Select which submissions to download'}, |
[{href=>&href_symb_cmd($symb,'downloadfilesselect'), text=>'Select which submissions to download'}, |
{href=>'', text=>'Download submissions'}]); |
{href=>'', text=>'Download submitted files'}]); |
&submit_download_link($request,$symb); |
&submit_download_link($request,$symb); |
} elsif ($command) { |
} elsif ($command) { |
&startpage($request,$symb,[{href=>'', text=>'Access denied'}]); |
&startpage($request,$symb,[{href=>'', text=>'Access denied'}]); |