version 1.595, 2010/02/22 23:08:16
|
version 1.596.2.3, 2010/12/22 17:11:12
|
Line 271 sub reset_caches {
|
Line 271 sub reset_caches {
|
} |
} |
|
|
sub get_analyze { |
sub get_analyze { |
my ($symb,$uname,$udom,$no_increment,$add_to_hash)=@_; |
my ($symb,$uname,$udom,$no_increment,$add_to_hash,$type,$trial,$rndseed)=@_; |
my $key = "$symb\0$uname\0$udom"; |
my $key = "$symb\0$uname\0$udom"; |
|
if ($type eq 'randomizetry') { |
|
if ($trial ne '') { |
|
$key .= "\0".$trial; |
|
} |
|
} |
if (exists($analyze_cache{$key})) { |
if (exists($analyze_cache{$key})) { |
my $getupdate = 0; |
my $getupdate = 0; |
if (ref($add_to_hash) eq 'HASH') { |
if (ref($add_to_hash) eq 'HASH') { |
Line 300 sub reset_caches {
|
Line 305 sub reset_caches {
|
'grade_courseid' => $env{'request.course.id'}, |
'grade_courseid' => $env{'request.course.id'}, |
'grade_username' => $uname, |
'grade_username' => $uname, |
'grade_noincrement' => $no_increment); |
'grade_noincrement' => $no_increment); |
|
if ($type eq 'randomizetry') { |
|
$form{'grade_questiontype'} = $type; |
|
if ($rndseed ne '') { |
|
$form{'grade_rndseed'} = $rndseed; |
|
} |
|
} |
if (ref($add_to_hash)) { |
if (ref($add_to_hash)) { |
%form = (%form,%{$add_to_hash}); |
%form = (%form,%{$add_to_hash}); |
} |
} |
my $subresult=&ssi_with_retries($url, $ssi_retries,%form); |
my $subresult=&ssi_with_retries($url, $ssi_retries,%form); |
(undef,$subresult)=split(/_HASH_REF__/,$subresult,2); |
(undef,$subresult)=split(/_HASH_REF__/,$subresult,2); |
my %analyze=&Apache::lonnet::str2hash($subresult); |
my %analyze=&Apache::lonnet::str2hash($subresult); |
Line 315 sub reset_caches {
|
Line 326 sub reset_caches {
|
} |
} |
|
|
sub get_order { |
sub get_order { |
my ($partid,$respid,$symb,$uname,$udom,$no_increment)=@_; |
my ($partid,$respid,$symb,$uname,$udom,$no_increment,$type,$trial,$rndseed)=@_; |
my $analyze = &get_analyze($symb,$uname,$udom,$no_increment); |
my $analyze = &get_analyze($symb,$uname,$udom,$no_increment,undef,$type,$trial,$rndseed); |
return $analyze->{"$partid.$respid.shown"}; |
return $analyze->{"$partid.$respid.shown"}; |
} |
} |
|
|
sub get_radiobutton_correct_foil { |
sub get_radiobutton_correct_foil { |
my ($partid,$respid,$symb,$uname,$udom)=@_; |
my ($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed)=@_; |
my $analyze = &get_analyze($symb,$uname,$udom); |
my $analyze = &get_analyze($symb,$uname,$udom,undef,undef,$type,$trial,$rndseed); |
my $foils = &get_order($partid,$respid,$symb,$uname,$udom); |
my $foils = &get_order($partid,$respid,$symb,$uname,$udom,undef,$type,$trial,$rndseed); |
if (ref($foils) eq 'ARRAY') { |
if (ref($foils) eq 'ARRAY') { |
foreach my $foil (@{$foils}) { |
foreach my $foil (@{$foils}) { |
if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') { |
if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') { |
Line 365 sub reset_caches {
|
Line 376 sub reset_caches {
|
# response types only. |
# response types only. |
sub cleanRecord { |
sub cleanRecord { |
my ($answer,$response,$symb,$partid,$respid,$record,$order,$version, |
my ($answer,$response,$symb,$partid,$respid,$record,$order,$version, |
$uname,$udom) = @_; |
$uname,$udom,$type,$trial,$rndseed) = @_; |
my $grayFont = '<span class="LC_internal_info">'; |
my $grayFont = '<span class="LC_internal_info">'; |
if ($response =~ /^(option|rank)$/) { |
if ($response =~ /^(option|rank)$/) { |
my %answer=&Apache::lonnet::str2hash($answer); |
my %answer=&Apache::lonnet::str2hash($answer); |
Line 382 sub cleanRecord {
|
Line 393 sub cleanRecord {
|
return '<blockquote><table border="1">'. |
return '<blockquote><table border="1">'. |
'<tr valign="top"><td>'.&mt('Answer').'</td>'.$toprow.'</tr>'. |
'<tr valign="top"><td>'.&mt('Answer').'</td>'.$toprow.'</tr>'. |
'<tr valign="top"><td>'.$grayFont.&mt('Option ID').'</span></td>'. |
'<tr valign="top"><td>'.$grayFont.&mt('Option ID').'</span></td>'. |
$grayFont.$bottomrow.'</tr>'.'</table></blockquote>'; |
$bottomrow.'</tr></table></blockquote>'; |
} elsif ($response eq 'match') { |
} elsif ($response eq 'match') { |
my %answer=&Apache::lonnet::str2hash($answer); |
my %answer=&Apache::lonnet::str2hash($answer); |
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"}); |
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"}); |
Line 409 sub cleanRecord {
|
Line 420 sub cleanRecord {
|
my %answer=&Apache::lonnet::str2hash($answer); |
my %answer=&Apache::lonnet::str2hash($answer); |
my ($toprow,$bottomrow); |
my ($toprow,$bottomrow); |
my $correct = |
my $correct = |
&get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom); |
&get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed); |
foreach my $foil (@$order) { |
foreach my $foil (@$order) { |
if (exists($answer{$foil})) { |
if (exists($answer{$foil})) { |
if ($foil eq $correct) { |
if ($foil eq $correct) { |
Line 2212 KEYWORDS
|
Line 2223 KEYWORDS
|
foreach my $submission (@$string) { |
foreach my $submission (@$string) { |
my ($partid,$respid) = ($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/); |
my ($partid,$respid) = ($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/); |
if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; } |
if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; } |
my ($ressub,$subval) = split(/:/,$submission,2); |
my ($ressub,$hide,$subval) = split(/:/,$submission,3); |
# Similarity check |
# Similarity check |
my $similar=''; |
my $similar=''; |
|
my ($type,$trial,$rndseed); |
|
if ($hide eq 'rand') { |
|
$type = 'randomizetry'; |
|
$trial = $record{"resource.$partid.tries"}; |
|
$rndseed = $record{"resource.$partid.rndseed"}; |
|
} |
if($env{'form.checkPlag'}){ |
if($env{'form.checkPlag'}){ |
my ($oname,$odom,$ocrsid,$oessay,$osim)= |
my ($oname,$odom,$ocrsid,$oessay,$osim)= |
&most_similar($uname,$udom,$subval,\%old_essays); |
&most_similar($uname,$udom,$subval,\%old_essays); |
Line 2224 KEYWORDS
|
Line 2241 KEYWORDS
|
&Apache::lonnet::coursedescription($ocrsid, |
&Apache::lonnet::coursedescription($ocrsid, |
{'one_time' => 1}); |
{'one_time' => 1}); |
|
|
$similar="<hr /><h3><span class=\"LC_warning\">". |
if ($hide eq 'anon') { |
&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])', |
$similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'. |
$osim, |
&mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />'; |
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')', |
} else { |
$old_course_desc{'description'}, |
$similar="<hr /><h3><span class=\"LC_warning\">". |
$old_course_desc{'num'}, |
&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])', |
$old_course_desc{'domain'}). |
$osim, |
'</span></h3><blockquote><i>'. |
&Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')', |
&keywords_highlight($oessay). |
$old_course_desc{'description'}, |
'</i></blockquote><hr />'; |
$old_course_desc{'num'}, |
|
$old_course_desc{'domain'}). |
|
'</span></h3><blockquote><i>'. |
|
&keywords_highlight($oessay). |
|
'</i></blockquote><hr />'; |
|
} |
} |
} |
} |
} |
my $order=&get_order($partid,$respid,$symb,$uname,$udom); |
my $order=&get_order($partid,$respid,$symb,$uname,$udom, |
|
undef,$type,$trial,$rndseed); |
if ($env{'form.lastSub'} eq 'lastonly' || |
if ($env{'form.lastSub'} eq 'lastonly' || |
($env{'form.lastSub'} eq 'hdgrade' && |
($env{'form.lastSub'} eq 'hdgrade' && |
$$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { |
$$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { |
Line 2248 KEYWORDS
|
Line 2271 KEYWORDS
|
'</b></span> '; |
'</b></span> '; |
my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); |
my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); |
if (@$files) { |
if (@$files) { |
$lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />'; |
if ($hide eq 'anon') { |
my $file_counter = 0; |
$lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); |
foreach my $file (@$files) { |
} else { |
$file_counter++; |
$lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />'; |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
foreach my $file (@$files) { |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" /> '.$file.'</a>'; |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
} |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" /> '.$file.'</a>'; |
|
} |
|
} |
$lastsubonly.='<br />'; |
$lastsubonly.='<br />'; |
} |
} |
$lastsubonly.='<b>'.&mt('Submitted Answer:').' </b>'. |
if ($hide eq 'anon') { |
&cleanRecord($subval,$responsetype,$symb,$partid, |
$lastsubonly.='<b>'.&mt('Anonymous Survey').'</b>'; |
$respid,\%record,$order,undef,$uname,$udom); |
} else { |
|
$lastsubonly.='<b>'.&mt('Submitted Answer:').' </b>'. |
|
&cleanRecord($subval,$responsetype,$symb,$partid, |
|
$respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed); |
|
} |
if ($similar) {$lastsubonly.="<br /><br />$similar\n";} |
if ($similar) {$lastsubonly.="<br /><br />$similar\n";} |
$lastsubonly.='</div>'; |
$lastsubonly.='</div>'; |
} |
} |
Line 2454 sub check_collaborators {
|
Line 2483 sub check_collaborators {
|
#--- Retrieve the last submission for all the parts |
#--- Retrieve the last submission for all the parts |
sub get_last_submission { |
sub get_last_submission { |
my ($returnhash)=@_; |
my ($returnhash)=@_; |
my (@string,$timestamp); |
my (@string,$timestamp,%lasthidden); |
if ($$returnhash{'version'}) { |
if ($$returnhash{'version'}) { |
my %lasthash=(); |
my %lasthash=(); |
my ($version); |
my ($version); |
Line 2466 sub get_last_submission {
|
Line 2495 sub get_last_submission {
|
&Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); |
&Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); |
} |
} |
} |
} |
|
my (%typeparts,%randombytry); |
|
my $showsurv = |
|
&Apache::lonnet::allowed('vas',$env{'request.course.id'}); |
|
foreach my $key (sort(keys(%lasthash))) { |
|
if ($key =~ /\.type$/) { |
|
if (($lasthash{$key} eq 'anonsurvey') || |
|
($lasthash{$key} eq 'anonsurveycred') || |
|
($lasthash{$key} eq 'randomizetry')) { |
|
my ($ign,@parts) = split(/\./,$key); |
|
pop(@parts); |
|
my $id = join('.',@parts); |
|
if ($lasthash{$key} eq 'randomizetry') { |
|
$randombytry{$ign.'.'.$id} = $lasthash{$key}; |
|
} else { |
|
unless ($showsurv) { |
|
$typeparts{$ign.'.'.$id} = $lasthash{$key}; |
|
} |
|
} |
|
delete($lasthash{$key}); |
|
} |
|
} |
|
} |
|
my @hidden = keys(%typeparts); |
|
my @randomize = keys(%randombytry); |
foreach my $key (keys(%lasthash)) { |
foreach my $key (keys(%lasthash)) { |
next if ($key !~ /\.submission$/); |
next if ($key !~ /\.submission$/); |
|
my $hide; |
|
if (@hidden) { |
|
foreach my $id (@hidden) { |
|
if ($key =~ /^\Q$id\E/) { |
|
$hide = 'anon'; |
|
last; |
|
} |
|
} |
|
} |
|
unless ($hide) { |
|
if (@randomize) { |
|
foreach my $id (@hidden) { |
|
if ($key =~ /^\Q$id\E/) { |
|
$hide = 'rand'; |
|
last; |
|
} |
|
} |
|
} |
|
} |
my ($partid,$foo) = split(/submission$/,$key); |
my ($partid,$foo) = split(/submission$/,$key); |
my $draft = $lasthash{$partid.'awarddetail'} eq 'DRAFT' ? |
my $draft = $lasthash{$partid.'awarddetail'} eq 'DRAFT' ? |
'<span class="LC_warning">Draft Copy</span> ' : ''; |
'<span class="LC_warning">Draft Copy</span> ' : ''; |
push(@string, join(':', $key, $draft.$lasthash{$key})); |
push(@string, join(':', $key, $hide, $draft.$lasthash{$key})); |
} |
} |
} |
} |
if (!@string) { |
if (!@string) { |
Line 3561 sub editgrades {
|
Line 3632 sub editgrades {
|
'incorrect'=>'incorrect_by_override', |
'incorrect'=>'incorrect_by_override', |
'excused' =>'excused', |
'excused' =>'excused', |
'ungraded' =>'ungraded_attempted', |
'ungraded' =>'ungraded_attempted', |
|
'credited' =>'credit_attempted', |
'nothing' => '', |
'nothing' => '', |
); |
); |
my ($classlist,undef,$fullname) = &getclasslist($env{'form.section'},'0'); |
my ($classlist,undef,$fullname) = &getclasslist($env{'form.section'},'0'); |
Line 4477 sub displayPage {
|
Line 4549 sub displayPage {
|
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td align="center" valign="top" >'.$prob. |
'<td align="center" valign="top" >'.$prob. |
(scalar(@{$parts}) == 1 ? '' |
(scalar(@{$parts}) == 1 ? '' |
: '<br />('.&mt('[_1] parts)', |
: '<br />('.&mt('[_1]parts)', |
scalar(@{$parts})) |
scalar(@{$parts}).' ') |
). |
). |
'</td>'; |
'</td>'; |
$studentTable.='<td valign="top">'; |
$studentTable.='<td valign="top">'; |
Line 4573 sub displaySubByDates {
|
Line 4645 sub displaySubByDates {
|
|
|
my $interaction; |
my $interaction; |
my $no_increment = 1; |
my $no_increment = 1; |
|
my %lastrndseed; |
for ($version=1;$version<=$$record{'version'};$version++) { |
for ($version=1;$version<=$$record{'version'};$version++) { |
my $timestamp = |
my $timestamp = |
&Apache::lonlocal::locallocaltime($$record{$version.':timestamp'}); |
&Apache::lonlocal::locallocaltime($$record{$version.':timestamp'}); |
Line 4590 sub displaySubByDates {
|
Line 4663 sub displaySubByDates {
|
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @displaySub = (); |
my @displaySub = (); |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
|
my ($hidden,$type); |
|
$type = $$record{$version.':resource.'.$partid.'.type'}; |
|
if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) { |
|
$hidden = 1; |
|
} |
my @matchKey = ($isTask ? sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys) |
my @matchKey = ($isTask ? sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys) |
: sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys)); |
: 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 '') { |
|
|
my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/) |
my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/) |
: ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/)); |
: ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/)); |
$displaySub[0].='<span class="LC_nobreak"'; |
$displaySub[0].='<span class="LC_nobreak"'; |
Line 4608 sub displaySubByDates {
|
Line 4685 sub displaySubByDates {
|
.'('.&mt('Part ID: [_1]',$responseId).')' |
.'('.&mt('Part ID: [_1]',$responseId).')' |
.'</span>' |
.'</span>' |
.' <b>'; |
.' <b>'; |
if ($$record{"$where.$partid.tries"} eq '') { |
if ($hidden) { |
$displaySub[0].=&mt('Trial not counted'); |
$displaySub[0].= &mt('Anonymous Survey').'</b>'; |
} else { |
} else { |
$displaySub[0].=&mt('Trial: [_1]', |
my ($trial,$rndseed,$newvariation); |
|
if ($type eq 'randomizetry') { |
|
$trial = $$record{"$where.$partid.tries"}; |
|
$rndseed = $$record{"$where.$partid.rndseed"}; |
|
} |
|
if ($$record{"$where.$partid.tries"} eq '') { |
|
$displaySub[0].=&mt('Trial not counted'); |
|
} else { |
|
$displaySub[0].=&mt('Trial: [_1]', |
$$record{"$where.$partid.tries"}); |
$$record{"$where.$partid.tries"}); |
} |
if ($rndseed || $lastrndseed{$partid}) { |
my $responseType=($isTask ? 'Task' |
if ($rndseed ne $lastrndseed{$partid}) { |
|
$newvariation = ' ('.&mt('New variation this try').')'; |
|
} |
|
} |
|
} |
|
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})) { |
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); |
$no_increment,$type,$trial,$rndseed); |
} |
} |
$displaySub[0].='</b></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).'<br />'; |
&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom,$type,$trial,$rndseed).'<br />'; |
|
} |
} |
} |
} |
} |
if (exists($$record{"$where.$partid.checkedin"})) { |
if (exists($$record{"$where.$partid.checkedin"})) { |
Line 4725 sub updateGradeByPage {
|
Line 4816 sub updateGradeByPage {
|
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td align="center" valign="top" >'.$prob. |
'<td align="center" valign="top" >'.$prob. |
(scalar(@{$parts}) == 1 ? '' |
(scalar(@{$parts}) == 1 ? '' |
: '<br />('.&mt('[quant,_1, part]',scalar(@{$parts})) |
: '<br />('.&mt('[quant,_1,part]',scalar(@{$parts})) |
.')').'</td>'; |
.')').'</td>'; |
$studentTable.='<td valign="top"> <b>'.$title.'</b> </td>'; |
$studentTable.='<td valign="top"> <b>'.$title.'</b> </td>'; |
|
|
Line 8902 sub process_clicker {
|
Line 8993 sub process_clicker {
|
my $pcorrect=&mt("Percentage points for correct solution"); |
my $pcorrect=&mt("Percentage points for correct solution"); |
my $pincorrect=&mt("Percentage points for incorrect solution"); |
my $pincorrect=&mt("Percentage points for incorrect solution"); |
my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype', |
my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype', |
('iclicker' => 'i>clicker', |
{'iclicker' => 'i>clicker', |
'interwrite' => 'interwrite PRS')); |
'interwrite' => 'interwrite PRS'}); |
$symb = &Apache::lonenc::check_encrypt($symb); |
$symb = &Apache::lonenc::check_encrypt($symb); |
$result.=<<ENDUPFORM; |
$result.=<<ENDUPFORM; |
<script type="text/javascript"> |
<script type="text/javascript"> |