version 1.770, 2020/05/20 22:02:57
|
version 1.784, 2021/01/25 14:21:17
|
Line 147 sub nameUserString {
|
Line 147 sub nameUserString {
|
} |
} |
|
|
#--- Get the partlist and the response type for a given problem. --- |
#--- Get the partlist and the response type for a given problem. --- |
#--- Indicate if a response type is coded handgraded or not. --- |
#--- Count responseIDs, essayresponse items, and dropbox items --- |
#--- Sets response_error pointer to "1" if navmaps object broken --- |
#--- Sets response_error pointer to "1" if navmaps object broken --- |
sub response_type { |
sub response_type { |
my ($symb,$response_error) = @_; |
my ($symb,$response_error) = @_; |
Line 165 sub response_type {
|
Line 165 sub response_type {
|
return; |
return; |
} |
} |
my $partlist = $res->parts(); |
my $partlist = $res->parts(); |
|
my ($numresp,$numessay,$numdropbox) = (0,0,0); |
my %vPart = |
my %vPart = |
map { $_ => 1 } (&Apache::loncommon::get_env_multiple('form.vPart')); |
map { $_ => 1 } (&Apache::loncommon::get_env_multiple('form.vPart')); |
my (%response_types,%handgrade); |
my (%response_types,%handgrade); |
Line 174 sub response_type {
|
Line 175 sub response_type {
|
my @types = $res->responseType($part); |
my @types = $res->responseType($part); |
my @ids = $res->responseIds($part); |
my @ids = $res->responseIds($part); |
for (my $i=0; $i < scalar(@ids); $i++) { |
for (my $i=0; $i < scalar(@ids); $i++) { |
|
$numresp ++; |
$response_types{$part}{$ids[$i]} = $types[$i]; |
$response_types{$part}{$ids[$i]} = $types[$i]; |
|
if ($types[$i] eq 'essay') { |
|
$numessay ++; |
|
if (&Apache::lonnet::EXT("resource.$part".'_'.$ids[$i].".uploadedfiletypes",$symb)) { |
|
$numdropbox ++; |
|
} |
|
} |
$handgrade{$part.'_'.$ids[$i]} = |
$handgrade{$part.'_'.$ids[$i]} = |
&Apache::lonnet::EXT('resource.'.$part.'_'.$ids[$i]. |
&Apache::lonnet::EXT('resource.'.$part.'_'.$ids[$i]. |
'.handgrade',$symb); |
'.handgrade',$symb); |
} |
} |
} |
} |
return ($partlist,\%handgrade,\%response_types); |
return ($partlist,\%handgrade,\%response_types,$numresp,$numessay,$numdropbox); |
} |
} |
|
|
sub flatten_responseType { |
sub flatten_responseType { |
Line 207 sub get_display_part {
|
Line 215 sub get_display_part {
|
return $display; |
return $display; |
} |
} |
|
|
|
#--- Show parts and response type |
|
sub showResourceInfo { |
|
my ($symb,$partlist,$responseType,$formname,$checkboxes,$uploads) = @_; |
|
unless ((ref($partlist) eq 'ARRAY') && (ref($responseType) eq 'HASH')) { |
|
return '<br clear="all">'; |
|
} |
|
my $coltitle = &mt('Problem Part Shown'); |
|
if ($checkboxes) { |
|
$coltitle = &mt('Problem Part'); |
|
} else { |
|
my $checkedparts = 0; |
|
foreach my $partid (&Apache::loncommon::get_env_multiple('form.vPart')) { |
|
if (grep(/^\Q$partid\E$/,@{$partlist})) { |
|
$checkedparts ++; |
|
} |
|
} |
|
if ($checkedparts == scalar(@{$partlist})) { |
|
return '<br clear="all">'; |
|
} |
|
if ($uploads) { |
|
$coltitle = &mt('Problem Part Selected'); |
|
} |
|
} |
|
my $result = '<div class="LC_left_float" style="display:inline-block;">'; |
|
if ($checkboxes) { |
|
my $legend = &mt('Parts to display'); |
|
if ($uploads) { |
|
$legend = &mt('Part(s) with dropbox'); |
|
} |
|
$result .= '<fieldset style="display:inline-block;"><legend>'.$legend.'</legend>'. |
|
'<span class="LC_nobreak">'. |
|
'<label><input type="radio" name="chooseparts" value="0" onclick="toggleParts('."'$formname'".');" checked="checked" />'. |
|
&mt('All parts').'</label>'.(' 'x2). |
|
'<label><input type="radio" name="chooseparts" value="1" onclick="toggleParts('."'$formname'".');" />'. |
|
&mt('Selected parts').'</label></span>'. |
|
'<div id="LC_partselector" style="display:none">'; |
|
} |
|
$result .= &Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row(); |
|
if ($checkboxes) { |
|
$result .= '<th>'.&mt('Display?').'</th>'; |
|
} |
|
$result .= '<th>'.$coltitle.'</th>' |
|
.'<th>'.&mt('Res. ID').'</th>' |
|
.'<th>'.&mt('Type').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row(); |
|
my %partsseen; |
|
foreach my $partID (sort(keys(%$responseType))) { |
|
foreach my $resID (sort(keys(%{ $responseType->{$partID} }))) { |
|
my $responsetype = $responseType->{$partID}->{$resID}; |
|
if ($uploads) { |
|
next unless ($responsetype eq 'essay'); |
|
next unless (&Apache::lonnet::EXT("resource.$partID".'_'."$resID.uploadedfiletypes",$symb)); |
|
} |
|
my $display_part=&get_display_part($partID,$symb); |
|
if (exists($partsseen{$partID})) { |
|
$result.=&Apache::loncommon::continue_data_table_row(); |
|
} else { |
|
$partsseen{$partID}=scalar(keys(%{$responseType->{$partID}})); |
|
$result.=&Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$partsseen{$partID}.'" style="vertical-align:middle">'; |
|
if ($checkboxes) { |
|
$result.='<input type="checkbox" name="vPart" checked="checked" value="'.$partID.'" /></td>'. |
|
'<td rowspan="'.$partsseen{$partID}.'" style="vertical-align:middle">'.$display_part.'</td>'; |
|
} else { |
|
$result.=$display_part.'</td>'; |
|
} |
|
} |
|
$result.='<td>'.'<span class="LC_internal_info">'.$resID.'</span></td>' |
|
.'<td>'.&mt($responsetype).'</td>' |
|
.&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
$result.=&Apache::loncommon::end_data_table(); |
|
if ($checkboxes) { |
|
$result .= '</div></fieldset>'; |
|
} |
|
$result .= '</div><div style="padding:0;clear:both;margin:0;border:0"></div>'; |
|
if (!keys(%partsseen)) { |
|
$result = ''; |
|
if ($uploads) { |
|
return '<div style="padding:0;clear:both;margin:0;border:0"></div>'. |
|
'<p class="LC_info">'. |
|
&mt('No dropbox items or essayresponse items with uploadedfiletypes set.'). |
|
'</p>'; |
|
} else { |
|
return '<br clear="all" />'; |
|
} |
|
} |
|
return $result; |
|
} |
|
|
|
sub part_selector_js { |
|
my $js = <<"END"; |
|
function toggleParts(formname) { |
|
if (document.getElementById('LC_partselector')) { |
|
var index = ''; |
|
if (document.forms.length) { |
|
for (var i=0; i<document.forms.length; i++) { |
|
if (document.forms[i].name == formname) { |
|
index = i; |
|
break; |
|
} |
|
} |
|
} |
|
if ((index != '') && (document.forms[index].elements['chooseparts'].length > 1)) { |
|
for (var i=0; i<document.forms[index].elements['chooseparts'].length; i++) { |
|
if (document.forms[index].elements['chooseparts'][i].checked) { |
|
var val = document.forms[index].elements['chooseparts'][i].value; |
|
if (document.forms[index].elements['chooseparts'][i].value == 1) { |
|
document.getElementById('LC_partselector').style.display = 'block'; |
|
} else { |
|
document.getElementById('LC_partselector').style.display = 'none'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
END |
|
return &Apache::lonhtmlcommon::scripttag($js); |
|
} |
|
|
sub reset_caches { |
sub reset_caches { |
&reset_analyze_cache(); |
&reset_analyze_cache(); |
&reset_perm(); |
&reset_perm(); |
Line 538 sub getclasslist {
|
Line 669 sub getclasslist {
|
$cdom = $env{"course.$env{'request.course.id'}.domain"}; |
$cdom = $env{"course.$env{'request.course.id'}.domain"}; |
$cnum = $env{"course.$env{'request.course.id'}.num"}; |
$cnum = $env{"course.$env{'request.course.id'}.num"}; |
my $res_error; |
my $res_error; |
($partlist,my $handgrade,my $responseType) = &response_type($symb,\$res_error); |
($partlist) = &response_type($symb,\$res_error); |
} |
} |
foreach my $student (keys(%$classlist)) { |
foreach my $student (keys(%$classlist)) { |
my $end = |
my $end = |
Line 908 sub verifyreceipt {
|
Line 1039 sub verifyreceipt {
|
#--- Also called directly when one clicks on the subm button |
#--- Also called directly when one clicks on the subm button |
# on the problem page. |
# on the problem page. |
sub listStudents { |
sub listStudents { |
my ($request,$symb,$submitonly) = @_; |
my ($request,$symb,$submitonly,$divforres) = @_; |
|
|
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"}; |
Line 921 sub listStudents {
|
Line 1052 sub listStudents {
|
|
|
my $result=''; |
my $result=''; |
my $res_error; |
my $res_error; |
my ($partlist,$handgrade,$responseType) = &response_type($symb,\$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 = '<div style="padding:0;clear:both;margin:0;border:0"></div>'; |
|
} else { |
|
$table = '<br clear="all" />'; |
|
} |
|
} |
|
|
my %js_lt = &Apache::lonlocal::texthash ( |
my %js_lt = &Apache::lonlocal::texthash ( |
'multiple' => 'Please select a student or group of students before clicking on the Next button.', |
'multiple' => 'Please select a student or group of students before clicking on the Next button.', |
Line 963 LISTJAVASCRIPT
|
Line 1105 LISTJAVASCRIPT
|
$request->print($result); |
$request->print($result); |
|
|
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'. |
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'. |
"\n"; |
"\n".$table; |
|
|
$gradeTable .= &Apache::lonhtmlcommon::start_pick_box(); |
$gradeTable .= &Apache::lonhtmlcommon::start_pick_box(); |
unless ($is_tool) { |
unless ($is_tool) { |
$gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('View Problem Text')) |
$gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('View Problem Text')) |
Line 979 LISTJAVASCRIPT
|
Line 1121 LISTJAVASCRIPT
|
.&Apache::lonhtmlcommon::row_closure(); |
.&Apache::lonhtmlcommon::row_closure(); |
} |
} |
|
|
my $submission_options; |
|
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status; |
my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status; |
$env{'form.Status'} = $saveStatus; |
$env{'form.Status'} = $saveStatus; |
Line 999 LISTJAVASCRIPT
|
Line 1140 LISTJAVASCRIPT
|
all => 'all submissions with details', |
all => 'all submissions with details', |
); |
); |
} |
} |
$submission_options.= |
my $submission_options = |
'<span class="LC_nobreak">'. |
'<span class="LC_nobreak">'. |
'<label><input type="radio" name="lastSub" value="lastonly" /> '. |
'<label><input type="radio" name="lastSub" value="lastonly" /> '. |
$optiontext{'lastonly'}.' </label></span>'."\n". |
$optiontext{'lastonly'}.' </label></span>'."\n". |
Line 1018 LISTJAVASCRIPT
|
Line 1159 LISTJAVASCRIPT
|
} else { |
} else { |
$viewtitle = &mt('View Submissions'); |
$viewtitle = &mt('View Submissions'); |
} |
} |
|
my ($compmsg,$nocompmsg); |
|
$nocompmsg = ' checked="checked"'; |
|
if ($numessay) { |
|
$compmsg = $nocompmsg; |
|
$nocompmsg = ''; |
|
} |
$gradeTable .= &Apache::lonhtmlcommon::row_title($viewtitle) |
$gradeTable .= &Apache::lonhtmlcommon::row_title($viewtitle) |
.$submission_options |
.$submission_options; |
|
# Check if any gradable |
|
my $showmore; |
|
if ($perm{'mgr'}) { |
|
my @sections; |
|
if ($env{'request.course.sec'} ne '') { |
|
@sections = ($env{'request.course.sec'}); |
|
} elsif ($env{'form.section'} eq '') { |
|
@sections = ('all'); |
|
} 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')) |
|
.'<span class="LC_nobreak">' |
|
.'<label><input type="radio" name="compmsg" value="0"'.$nocompmsg.' />' |
|
.&mt('No').(' 'x2).'</label>' |
|
.'<label><input type="radio" name="compmsg" value="1"'.$compmsg.' />' |
|
.&mt('Yes').(' 'x2).'</label>' |
.&Apache::lonhtmlcommon::row_closure(); |
.&Apache::lonhtmlcommon::row_closure(); |
|
|
my $closure; |
$gradeTable .= |
if (($is_tool) && (exists($env{'form.Status'}))) { |
&Apache::lonhtmlcommon::row_title(&mt('Grading Increments')) |
$closure = 1; |
|
} |
|
$gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Grading Increments')) |
|
.'<select name="increment">' |
.'<select name="increment">' |
.'<option value="1">'.&mt('Whole Points').'</option>' |
.'<option value="1">'.&mt('Whole Points').'</option>' |
.'<option value=".5">'.&mt('Half Points').'</option>' |
.'<option value=".5">'.&mt('Half Points').'</option>' |
.'<option value=".25">'.&mt('Quarter Points').'</option>' |
.'<option value=".25">'.&mt('Quarter Points').'</option>' |
.'<option value=".1">'.&mt('Tenths of a Point').'</option>' |
.'<option value=".1">'.&mt('Tenths of a Point').'</option>' |
.'</select>' |
.'</select>'; |
.&Apache::lonhtmlcommon::row_closure($closure); |
} |
|
|
$gradeTable .= |
$gradeTable .= |
&build_section_inputs(). |
&build_section_inputs(). |
'<input type="hidden" name="submitonly" value="'.$submitonly.'" />'."\n". |
'<input type="hidden" name="submitonly" value="'.$submitonly.'" />'."\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". |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
|
|
if (exists($env{'form.Status'})) { |
if (exists($env{'form.Status'})) { |
$gradeTable .= '<input type="hidden" name="Status" value="'.$stu_status.'" />'."\n"; |
$gradeTable .= '<input type="hidden" name="Status" value="'.$env{'form.Status'}.'" />'."\n"; |
} else { |
} else { |
if ($is_tool) { |
$gradeTable .= &Apache::lonhtmlcommon::row_closure() |
$closure = 1; |
.&Apache::lonhtmlcommon::row_title(&mt('Student Status')) |
} |
|
$gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Student Status')) |
|
.&Apache::lonhtmlcommon::StatusOptions( |
.&Apache::lonhtmlcommon::StatusOptions( |
$saveStatus,undef,1,'javascript:reLoadList(this.form);') |
$saveStatus,undef,1,'javascript:reLoadList(this.form);'); |
.&Apache::lonhtmlcommon::row_closure($closure); |
|
} |
} |
|
if ($numessay) { |
unless ($is_tool) { |
$gradeTable .= &Apache::lonhtmlcommon::row_closure() |
$closure = 1; |
.&Apache::lonhtmlcommon::row_title(&mt('Check For Plagiarism')) |
$gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Check For Plagiarism')) |
.'<input type="checkbox" name="checkPlag" checked="checked" />'; |
.'<input type="checkbox" name="checkPlag" checked="checked" />' |
|
.&Apache::lonhtmlcommon::row_closure($closure); |
|
} |
} |
$gradeTable .= &Apache::lonhtmlcommon::end_pick_box(); |
$gradeTable .= &Apache::lonhtmlcommon::row_closure(1) |
|
.&Apache::lonhtmlcommon::end_pick_box(); |
my $regrademsg; |
my $regrademsg; |
if ($is_tool) { |
if ($is_tool) { |
$regrademsg =&mt("To view/grade/regrade, click on the check box(es) next to the student's name(s). Then click on the Next button."); |
$regrademsg =&mt("To view/grade/regrade, click on the check box(es) next to the student's name(s). Then click on the Next button."); |
Line 1447 sub sub_page_js {
|
Line 1617 sub sub_page_js {
|
SUBJAVASCRIPT |
SUBJAVASCRIPT |
} |
} |
|
|
#--- javascript for essay type problem -- |
#--- javascript for grading message center |
sub sub_page_kw_js { |
sub sub_grademessage_js { |
my $request = shift; |
my $request = shift; |
my $iconpath = $request->dir_config('lonIconsURL'); |
my $iconpath = $request->dir_config('lonIconsURL'); |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
Line 1494 sub sub_page_kw_js {
|
Line 1664 sub sub_page_kw_js {
|
</script> |
</script> |
INNERJS |
INNERJS |
|
|
my $inner_js_highlight_central= (<<INNERJS); |
my $start_page_msg_central = |
<script type="text/javascript"> |
|
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() |
|
} |
|
</script> |
|
INNERJS |
|
|
|
my $start_page_msg_central = |
|
&Apache::loncommon::start_page('Message Central',$inner_js_msg_central, |
&Apache::loncommon::start_page('Message Central',$inner_js_msg_central, |
{'js_ready' => 1, |
{'js_ready' => 1, |
'only_body' => 1, |
'only_body' => 1, |
'bgcolor' =>'#FFFFFF',}); |
'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}); |
&Apache::loncommon::end_page({'js_ready' => 1}); |
|
|
my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); |
my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); |
$docopen=~s/^document\.//; |
$docopen=~s/^document\.//; |
my %js_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.', |
|
col1 => 'red', |
|
col2 => 'green', |
|
col3 => 'blue', |
|
siz1 => 'normal', |
|
siz2 => '+1', |
|
siz3 => '+2', |
|
sty1 => 'normal', |
|
sty2 => 'italic', |
|
sty3 => 'bold', |
|
); |
|
my %html_js_lt = &Apache::lonlocal::texthash( |
my %html_js_lt = &Apache::lonlocal::texthash( |
comp => 'Compose Message for: ', |
comp => 'Compose Message for: ', |
incl => 'Include', |
incl => 'Include', |
Line 1552 INNERJS
|
Line 1684 INNERJS
|
new => 'New', |
new => 'New', |
save => 'Save', |
save => 'Save', |
canc => 'Cancel', |
canc => 'Cancel', |
kehi => 'Keyword Highlight Options', |
|
txtc => 'Text Color', |
|
font => 'Font Size', |
|
fnst => 'Font Style', |
|
); |
); |
&js_escape(\%js_lt); |
|
&html_escape(\%html_js_lt); |
&html_escape(\%html_js_lt); |
&js_escape(\%html_js_lt); |
&js_escape(\%html_js_lt); |
$request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT)); |
$request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT)); |
|
|
//===================== Show list of keywords ==================== |
|
function keywords(formname) { |
|
var nret = prompt("$js_lt{'keyw'}",formname.keywords.value); |
|
if (nret==null) return; |
|
formname.keywords.value = nret; |
|
|
|
if (formname.keywords.value != "") { |
|
formname.refresh.value = "on"; |
|
formname.submit(); |
|
} |
|
return; |
|
} |
|
|
|
//===================== Script to view submitted by ================== |
//===================== Script to view submitted by ================== |
function viewSubmitter(submitter) { |
function viewSubmitter(submitter) { |
document.SCORE.refresh.value = "on"; |
document.SCORE.refresh.value = "on"; |
Line 1584 INNERJS
|
Line 1698 INNERJS
|
return; |
return; |
} |
} |
|
|
//===================== Script to add keyword(s) ================== |
|
function getSel() { |
|
if (document.getSelection) txt = document.getSelection(); |
|
else if (document.selection) txt = document.selection.createRange().text; |
|
else return; |
|
var cleantxt = txt.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," "); |
|
if (cleantxt=="") { |
|
alert("$js_lt{'plse'}"); |
|
return; |
|
} |
|
var nret = prompt("$js_lt{'adds'}",cleantxt); |
|
if (nret==null) return; |
|
document.SCORE.keywords.value = document.SCORE.keywords.value+" "+nret; |
|
if (document.SCORE.keywords.value != "") { |
|
document.SCORE.refresh.value = "on"; |
|
document.SCORE.submit(); |
|
} |
|
return; |
|
} |
|
|
|
//====================== Script for composing message ============== |
//====================== Script for composing message ============== |
// preload images |
// preload images |
img1 = new Image(); |
img1 = new Image(); |
Line 1714 INNERJS
|
Line 1808 INNERJS
|
pDoc.close(); |
pDoc.close(); |
} |
} |
|
|
|
SUBJAVASCRIPT |
|
} |
|
|
|
#--- javascript for essay type problem -- |
|
sub sub_page_kw_js { |
|
my $request = shift; |
|
|
|
unless ($env{'form.compmsg'}) { |
|
&commonJSfunctions($request); |
|
} |
|
|
|
my $inner_js_highlight_central= (<<INNERJS); |
|
<script type="text/javascript"> |
|
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() |
|
} |
|
</script> |
|
INNERJS |
|
|
|
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 %js_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.', |
|
col1 => 'red', |
|
col2 => 'green', |
|
col3 => 'blue', |
|
siz1 => 'normal', |
|
siz2 => '+1', |
|
siz3 => '+2', |
|
sty1 => 'normal', |
|
sty2 => 'italic', |
|
sty3 => 'bold', |
|
); |
|
my %html_js_lt = &Apache::lonlocal::texthash( |
|
save => 'Save', |
|
canc => 'Cancel', |
|
kehi => 'Keyword Highlight Options', |
|
txtc => 'Text Color', |
|
font => 'Font Size', |
|
fnst => 'Font Style', |
|
); |
|
&js_escape(\%js_lt); |
|
&html_escape(\%html_js_lt); |
|
&js_escape(\%html_js_lt); |
|
$request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT)); |
|
|
|
//===================== Show list of keywords ==================== |
|
function keywords(formname) { |
|
var nret = prompt("$js_lt{'keyw'}",formname.keywords.value); |
|
if (nret==null) return; |
|
formname.keywords.value = nret; |
|
|
|
if (formname.keywords.value != "") { |
|
formname.refresh.value = "on"; |
|
formname.submit(); |
|
} |
|
return; |
|
} |
|
|
|
//===================== Script to add keyword(s) ================== |
|
function getSel() { |
|
if (document.getSelection) txt = document.getSelection(); |
|
else if (document.selection) txt = document.selection.createRange().text; |
|
else return; |
|
if (typeof(txt) != 'string') { |
|
txt = String(txt); |
|
} |
|
var cleantxt = txt.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," "); |
|
if (cleantxt=="") { |
|
alert("$js_lt{'plse'}"); |
|
return; |
|
} |
|
var nret = prompt("$js_lt{'adds'}",cleantxt); |
|
if (nret==null) return; |
|
document.SCORE.keywords.value = document.SCORE.keywords.value+" "+nret; |
|
if (document.SCORE.keywords.value != "") { |
|
document.SCORE.refresh.value = "on"; |
|
document.SCORE.submit(); |
|
} |
|
return; |
|
} |
|
|
//====================== Script for keyword highlight options ============== |
//====================== Script for keyword highlight options ============== |
function kwhighlight() { |
function kwhighlight() { |
var kwclr = document.SCORE.kwclr.value; |
var kwclr = document.SCORE.kwclr.value; |
Line 1904 sub gradeBox {
|
Line 2099 sub gradeBox {
|
|
|
sub handback_box { |
sub handback_box { |
my ($symb,$uname,$udom,$counter,$partid,$record,$res_error_pointer) = @_; |
my ($symb,$uname,$udom,$counter,$partid,$record,$res_error_pointer) = @_; |
my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error_pointer); |
my ($partlist,$handgrade,$responseType,$numresp,$numessay) = &response_type($symb,$res_error_pointer); |
|
return unless ($numessay); |
my (@respids); |
my (@respids); |
my @part_response_id = &flatten_responseType($responseType); |
my @part_response_id = &flatten_responseType($responseType); |
foreach my $part_response_id (@part_response_id) { |
foreach my $part_response_id (@part_response_id) { |
Line 2046 sub download_all_link {
|
Line 2242 sub download_all_link {
|
sub submit_download_link { |
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 |
|
my $res_error; |
my $res_error; |
my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error); |
my ($partlist,$handgrade,$responseType,$numresp,$numessay,$numdropbox) = |
if (ref($res_error)) { |
&response_type($symb,\$res_error); |
if ($$res_error) { |
if ($res_error) { |
$request->print(&mt('An error occurred retrieving response types')); |
$request->print(&mt('An error occurred retrieving response types')); |
return; |
return; |
} |
|
} |
} |
my ($numupload,$numessay) = (0,0); |
unless ($numessay) { |
if (ref($responseType) eq 'HASH') { |
$request->print(&mt('No essayresponse items found')); |
foreach my $part (sort(keys(%$responseType))) { |
return; |
foreach my $id (sort(keys(%{ $responseType->{$part} }))) { |
} |
my $responsetype = $responseType->{$part}->{$id}; |
my @chosenparts = &Apache::loncommon::get_env_multiple('form.vPart'); |
if ($responsetype eq 'essay') { |
if (@chosenparts) { |
my $uploadedfiletypes = |
$request->print(&showResourceInfo($symb,$partlist,$responseType, |
&Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes",$symb); |
undef,undef,1)); |
if ($uploadedfiletypes) { |
|
$numupload++; |
|
} else { |
|
$numessay++; |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
if (($numupload) || ($numessay)) { |
if ($numessay) { |
my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'}; |
my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'}; |
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'}; |
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'}; |
Line 2081 sub submit_download_link {
|
Line 2267 sub submit_download_link {
|
my @students = map { $_.':'.$fullname->{$_} } (keys(%{$fullname})); |
my @students = map { $_.':'.$fullname->{$_} } (keys(%{$fullname})); |
if (@students) { |
if (@students) { |
@{$env{'form.stuinfo'}} = @students; |
@{$env{'form.stuinfo'}} = @students; |
if ($numupload) { |
if ($numdropbox) { |
&download_all_link($request,$symb); |
&download_all_link($request,$symb); |
|
} else { |
|
$request->print(&mt('No essayrespose items with dropbox found')); |
} |
} |
# FIXME Need to provide a mechanism to download essays, i.e., if $numessay > 0 |
# FIXME Need a mechanism to download essays, i.e., if $numessay > $numdropbox |
# Needs to omit user's identity if resource instance is for an anonymous survey. |
# Needs to omit user's identity if resource instance is for an anonymous survey. |
} else { |
} else { |
$request->print(&mt('No students match the criteria you selected')); |
$request->print(&mt('No students match the criteria you selected')); |
Line 2113 sub build_section_inputs {
|
Line 2301 sub build_section_inputs {
|
|
|
# --------------------------- show submissions of a student, option to grade |
# --------------------------- show submissions of a student, option to grade |
sub submission { |
sub submission { |
my ($request,$counter,$total,$symb) = @_; |
my ($request,$counter,$total,$symb,$divforres,$calledby) = @_; |
my ($uname,$udom) = ($env{'form.student'},$env{'form.userdom'}); |
my ($uname,$udom) = ($env{'form.student'},$env{'form.userdom'}); |
$udom = ($udom eq '' ? $env{'user.domain'} : $udom); #has form.userdom changed for a student? |
$udom = ($udom eq '' ? $env{'user.domain'} : $udom); #has form.userdom changed for a student? |
my $usec = &Apache::lonnet::getsection($udom,$uname,$env{'request.course.id'}); |
my $usec = &Apache::lonnet::getsection($udom,$uname,$env{'request.course.id'}); |
$env{'form.fullname'} = &Apache::loncommon::plainname($uname,$udom,'lastname') if $env{'form.fullname'} eq ''; |
$env{'form.fullname'} = &Apache::loncommon::plainname($uname,$udom,'lastname') if $env{'form.fullname'} eq ''; |
|
|
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 $probtitle=&Apache::lonnet::gettitle($symb); |
my $is_tool = ($symb =~ /ext\.tool$/); |
my $is_tool = ($symb =~ /ext\.tool$/); |
my ($essayurl,%coursedesc_by_cid); |
my ($essayurl,%coursedesc_by_cid); |
|
|
Line 2134 sub submission {
|
Line 2322 sub submission {
|
return; |
return; |
} |
} |
|
|
|
my $res_error; |
|
my ($partlist,$handgrade,$responseType,$numresp,$numessay) = |
|
&response_type($symb,\$res_error); |
|
if ($res_error) { |
|
$request->print(&navmap_errormsg()); |
|
return; |
|
} |
|
|
if (!$env{'form.lastSub'}) { $env{'form.lastSub'} = 'datesub'; } |
if (!$env{'form.lastSub'}) { $env{'form.lastSub'} = 'datesub'; } |
unless ($is_tool) { |
unless ($is_tool) { |
if (!$env{'form.vProb'}) { $env{'form.vProb'} = 'yes'; } |
if (!$env{'form.vProb'}) { $env{'form.vProb'} = 'yes'; } |
if (!$env{'form.vAns'}) { $env{'form.vAns'} = 'yes'; } |
if (!$env{'form.vAns'}) { $env{'form.vAns'} = 'yes'; } |
} |
} |
|
if (($numessay) && ($calledby eq 'submission') && (!exists($env{'form.compmsg'}))) { |
|
$env{'form.compmsg'} = 1; |
|
} |
my $last = ($env{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($env{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $checkIcon = '<img alt="'.&mt('Check Mark'). |
my $checkIcon = '<img alt="'.&mt('Check Mark'). |
'" src="'.$request->dir_config('lonIconsURL'). |
'" src="'.$request->dir_config('lonIconsURL'). |
Line 2146 sub submission {
|
Line 2345 sub submission {
|
|
|
# header info |
# header info |
if ($counter == 0) { |
if ($counter == 0) { |
|
my @chosenparts = &Apache::loncommon::get_env_multiple('form.vPart'); |
|
if (@chosenparts) { |
|
$request->print(&showResourceInfo($symb,$partlist,$responseType,'gradesub')); |
|
} elsif ($divforres) { |
|
$request->print('<div style="padding:0;clear:both;margin:0;border:0"></div>'); |
|
} else { |
|
$request->print('<br clear="all" />'); |
|
} |
&sub_page_js($request); |
&sub_page_js($request); |
&sub_page_kw_js($request); |
&sub_grademessage_js($request) if ($env{'form.compmsg'}); |
|
&sub_page_kw_js($request) if ($numessay); |
|
|
# option to display problem, only once else it cause problems |
# option to display problem, only once else it cause problems |
# with the form later since the problem has a form. |
# with the form later since the problem has a form. |
Line 2164 sub submission {
|
Line 2372 sub submission {
|
$request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode)); |
$request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode)); |
} |
} |
|
|
# kwclr is the only variable that is guaranteed not to be blank |
|
# if this subroutine has been called once. |
|
my %keyhash = (); |
my %keyhash = (); |
# if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') { |
if (($env{'form.kwclr'} eq '' && $numessay) || ($env{'form.compmsg'})) { |
if (1) { |
|
%keyhash = &Apache::lonnet::dump('nohist_handgrade', |
%keyhash = &Apache::lonnet::dump('nohist_handgrade', |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
|
} |
|
# kwclr is the only variable that is guaranteed not to be blank |
|
# if this subroutine has been called once. |
|
if ($env{'form.kwclr'} eq '' && $numessay) { |
my $loginuser = $env{'user.name'}.':'.$env{'user.domain'}; |
my $loginuser = $env{'user.name'}.':'.$env{'user.domain'}; |
$env{'form.keywords'} = $keyhash{$symb.'_keywords'} ne '' ? $keyhash{$symb.'_keywords'} : ''; |
$env{'form.keywords'} = $keyhash{$symb.'_keywords'} ne '' ? $keyhash{$symb.'_keywords'} : ''; |
$env{'form.kwclr'} = $keyhash{$loginuser.'_kwclr'} ne '' ? $keyhash{$loginuser.'_kwclr'} : 'red'; |
$env{'form.kwclr'} = $keyhash{$loginuser.'_kwclr'} ne '' ? $keyhash{$loginuser.'_kwclr'} : 'red'; |
$env{'form.kwsize'} = $keyhash{$loginuser.'_kwsize'} ne '' ? $keyhash{$loginuser.'_kwsize'} : '0'; |
$env{'form.kwsize'} = $keyhash{$loginuser.'_kwsize'} ne '' ? $keyhash{$loginuser.'_kwsize'} : '0'; |
$env{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$env{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$env{'form.msgsub'} = $keyhash{$symb.'_subject'} ne '' ? |
} |
|
if ($env{'form.compmsg'}) { |
|
$env{'form.msgsub'} = $keyhash{$symb.'_subject'} ne '' ? |
$keyhash{$symb.'_subject'} : $probtitle; |
$keyhash{$symb.'_subject'} : $probtitle; |
$env{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
$env{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
} |
} |
|
|
my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'}; |
my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'}; |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
$request->print('<form action="/adm/grades" method="post" name="SCORE" enctype="multipart/form-data">'."\n". |
$request->print('<form action="/adm/grades" method="post" name="SCORE" enctype="multipart/form-data">'."\n". |
Line 2195 sub submission {
|
Line 2406 sub submission {
|
'<input type="hidden" name="vProb" value="'.$env{'form.vProb'}.'" />'."\n". |
'<input type="hidden" name="vProb" value="'.$env{'form.vProb'}.'" />'."\n". |
'<input type="hidden" name="vAns" value="'.$env{'form.vAns'}.'" />'."\n". |
'<input type="hidden" name="vAns" value="'.$env{'form.vAns'}.'" />'."\n". |
'<input type="hidden" name="lastSub" value="'.$env{'form.lastSub'}.'" />'."\n". |
'<input type="hidden" name="lastSub" value="'.$env{'form.lastSub'}.'" />'."\n". |
|
'<input type="hidden" name="compmsg" value="'.$env{'form.compmsg'}.'" />'."\n". |
&build_section_inputs(). |
&build_section_inputs(). |
'<input type="hidden" name="submitonly" value="'.$env{'form.submitonly'}.'" />'."\n". |
'<input type="hidden" name="submitonly" value="'.$env{'form.submitonly'}.'" />'."\n". |
'<input type="hidden" name="NCT"'. |
'<input type="hidden" name="NCT"'. |
' value="'.($env{'form.NTSTU'} ne '' ? $env{'form.NTSTU'} : $total+1).'" />'."\n"); |
' value="'.($env{'form.NTSTU'} ne '' ? $env{'form.NTSTU'} : $total+1).'" />'."\n"); |
# if ($env{'form.handgrade'} eq 'yes') { |
if ($env{'form.compmsg'}) { |
if (1) { |
$request->print('<input type="hidden" name="msgsub" value="'.$env{'form.msgsub'}.'" />'."\n". |
|
'<input type="hidden" name="shownSub" value="0" />'."\n". |
|
'<input type="hidden" name="savemsgN" value="'.$env{'form.savemsgN'}.'" />'."\n"); |
|
} |
|
if ($numessay) { |
$request->print('<input type="hidden" name="keywords" value="'.$env{'form.keywords'}.'" />'."\n". |
$request->print('<input type="hidden" name="keywords" value="'.$env{'form.keywords'}.'" />'."\n". |
'<input type="hidden" name="kwclr" value="'.$env{'form.kwclr'}.'" />'."\n". |
'<input type="hidden" name="kwclr" value="'.$env{'form.kwclr'}.'" />'."\n". |
'<input type="hidden" name="kwsize" value="'.$env{'form.kwsize'}.'" />'."\n". |
'<input type="hidden" name="kwsize" value="'.$env{'form.kwsize'}.'" />'."\n". |
'<input type="hidden" name="kwstyle" value="'.$env{'form.kwstyle'}.'" />'."\n". |
'<input type="hidden" name="kwstyle" value="'.$env{'form.kwstyle'}.'" />'."\n"); |
'<input type="hidden" name="msgsub" value="'.$env{'form.msgsub'}.'" />'."\n". |
|
'<input type="hidden" name="shownSub" value="0" />'."\n". |
|
'<input type="hidden" name="savemsgN" value="'.$env{'form.savemsgN'}.'" />'."\n"); |
|
foreach my $partid (&Apache::loncommon::get_env_multiple('form.vPart')) { |
|
$request->print('<input type="hidden" name="vPart" value="'.$partid.'" />'."\n"); |
|
} |
|
} |
} |
|
|
my ($cts,$prnmsg) = (1,''); |
my ($cts,$prnmsg) = (1,''); |
while ($cts <= $env{'form.savemsgN'}) { |
while ($cts <= $env{'form.savemsgN'}) { |
$prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'. |
$prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'. |
Line 2225 sub submission {
|
Line 2435 sub submission {
|
} |
} |
$request->print($prnmsg); |
$request->print($prnmsg); |
|
|
# if ($env{'form.handgrade'} eq 'yes') { |
if ($numessay) { |
unless ($is_tool) { |
|
|
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
keyh => 'Keyword Highlighting for Essays', |
keyh => 'Keyword Highlighting for Essays', |
Line 2234 sub submission {
|
Line 2443 sub submission {
|
list => 'List', |
list => 'List', |
past => 'Paste Selection to List', |
past => 'Paste Selection to List', |
high => 'Highlight Attribute', |
high => 'Highlight Attribute', |
); |
); |
# |
# |
# Print out the keyword options line |
# Print out the keyword options line |
# |
# |
Line 2314 sub submission {
|
Line 2523 sub submission {
|
} |
} |
|
|
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname); |
my $res_error; |
|
my ($partlist,$handgrade,$responseType) = &response_type($symb,\$res_error); |
|
if ($res_error) { |
|
$request->print(&navmap_errormsg()); |
|
return; |
|
} |
|
|
|
# Display student info |
# Display student info |
$request->print(($counter == 0 ? '' : '<br />')); |
$request->print(($counter == 0 ? '' : '<br />')); |
Line 2332 sub submission {
|
Line 2535 sub submission {
|
.'<h3 class="LC_hcell">'.$boxtitle.'</h3>'; |
.'<h3 class="LC_hcell">'.$boxtitle.'</h3>'; |
$result.='<input type="hidden" name="name'.$counter. |
$result.='<input type="hidden" name="name'.$counter. |
'" value="'.$env{'form.fullname'}.'" />'."\n"; |
'" value="'.$env{'form.fullname'}.'" />'."\n"; |
# if ($env{'form.handgrade'} eq 'no') { |
if (($numresp > $numessay) && !$is_tool) { |
unless ($is_tool) { |
|
$result.='<p class="LC_info">' |
$result.='<p class="LC_info">' |
.&mt('Part(s) graded correct by the computer is marked with a [_1] symbol.',$checkIcon) |
.&mt('Part(s) graded correct by the computer is marked with a [_1] symbol.',$checkIcon) |
."</p>\n"; |
."</p>\n"; |
} |
} |
|
|
# If any part of the problem is an essay-response (handgraded), then check for collaborators |
# If any part of the problem is an essayresponse, then check for collaborators |
my $fullname; |
my $fullname; |
my $col_fullnames = []; |
my $col_fullnames = []; |
# if ($env{'form.handgrade'} eq 'yes') { |
if ($numessay) { |
unless ($is_tool) { |
|
(my $sub_result,$fullname,$col_fullnames)= |
(my $sub_result,$fullname,$col_fullnames)= |
&check_collaborators($symb,$uname,$udom,\%record,$handgrade, |
&check_collaborators($symb,$uname,$udom,\%record,$handgrade, |
$counter); |
$counter); |
$result.=$sub_result; |
$result.=$sub_result; |
} |
} |
$request->print($result."\n"); |
$request->print($result."\n"); |
|
|
# print student answer/submission |
# print student answer/submission |
# Options are (1) Handgraded submission only |
# Options are (1) Last submission only |
# (2) Last submission, includes submission that is not handgraded |
# (2) Last submission (with detailed information for that submission) |
# (for multi-response type part) |
# (3) All transactions (by date) |
# (3) Last submission plus the parts info |
# (4) The whole record (with detailed information for all transactions) |
# (4) The whole record for this student |
|
|
|
my ($string,$timestamp)= &get_last_submission(\%record,$is_tool); |
my ($string,$timestamp)= &get_last_submission(\%record,$is_tool); |
|
|
my $lastsubonly; |
my $lastsubonly; |
|
|
if ($$timestamp eq '') { |
if ($$timestamp eq '') { |
Line 2376 sub submission {
|
Line 2576 sub submission {
|
my %seenparts; |
my %seenparts; |
my @part_response_id = &flatten_responseType($responseType); |
my @part_response_id = &flatten_responseType($responseType); |
foreach my $part (@part_response_id) { |
foreach my $part (@part_response_id) { |
next if ($env{'form.lastSub'} eq 'hdgrade' |
|
&& $$handgrade{$$part[0].'_'.$$part[1]} ne 'yes'); |
|
|
|
my ($partid,$respid) = @{ $part }; |
my ($partid,$respid) = @{ $part }; |
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
if ($env{"form.$uname:$udom:$partid:submitted_by"}) { |
if ($env{"form.$uname:$udom:$partid:submitted_by"}) { |
Line 2393 sub submission {
|
Line 2590 sub submission {
|
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a>'). |
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a>'). |
'<br />'); |
'<br />'); |
next; |
next; |
} |
} |
my $responsetype = $responseType->{$partid}->{$respid}; |
my $responsetype = $responseType->{$partid}->{$respid}; |
if (!exists($record{"resource.$partid.$respid.submission"})) { |
if (!exists($record{"resource.$partid.$respid.submission"})) { |
$lastsubonly.="\n".'<div class="LC_grade_submission_part">'. |
$lastsubonly.="\n".'<div class="LC_grade_submission_part">'. |
Line 2417 sub submission {
|
Line 2614 sub submission {
|
$rndseed = $record{"resource.$partid.rndseed"}; |
$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,$symb,$subval); |
&most_similar($uname,$udom,$symb,$subval); |
if ($osim) { |
if ($osim) { |
$osim=int($osim*100.0); |
$osim=int($osim*100.0); |
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
Line 2472 sub submission {
|
Line 2669 sub submission {
|
} |
} |
my $order=&get_order($partid,$respid,$symb,$uname,$udom, |
my $order=&get_order($partid,$respid,$symb,$uname,$udom, |
undef,$type,$trial,$rndseed); |
undef,$type,$trial,$rndseed); |
if ($env{'form.lastSub'} eq 'lastonly' || $env{'form.lastSub'} eq 'datesub' || $env{'form.lastSub'} =~ /^(last|all)$/ || ($env{'form.lastSub'} eq 'hdgrade' && |
if (($env{'form.lastSub'} eq 'lastonly') || |
$$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { |
($env{'form.lastSub'} eq 'datesub') || |
|
($env{'form.lastSub'} =~ /^(last|all)$/)) { |
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
$lastsubonly.='<div class="LC_grade_submission_part">'. |
$lastsubonly.='<div class="LC_grade_submission_part">'. |
'<b>'.&mt('Part: [_1]',$display_part).'</b>'. |
'<b>'.&mt('Part: [_1]',$display_part).'</b>'. |
Line 2481 sub submission {
|
Line 2679 sub submission {
|
'('.&mt('Response ID: [_1]',$respid).')'. |
'('.&mt('Response ID: [_1]',$respid).')'. |
'</span> '; |
'</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) { |
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
$lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); |
$lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); |
Line 2493 sub submission {
|
Line 2690 sub submission {
|
} else { |
} else { |
$lastsubonly .= &mt('Like all files provided by users, these files may contain viruses!'); |
$lastsubonly .= &mt('Like all files provided by users, these files may contain viruses!'); |
} |
} |
$lastsubonly .= '</span>'; |
$lastsubonly .= '</span>'; |
foreach my $file (@$files) { |
foreach my $file (@$files) { |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" alt="" /> '.$file.'</a>'; |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" alt="" /> '.$file.'</a>'; |
Line 2504 sub submission {
|
Line 2701 sub submission {
|
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
$lastsubonly.='<br /><b>'.&mt('Anonymous Survey').'</b>'; |
$lastsubonly.='<br /><b>'.&mt('Anonymous Survey').'</b>'; |
} else { |
} else { |
$lastsubonly.='<br /><b>'.&mt('Submitted Answer:').' </b>'; |
$lastsubonly.='<br /><b>'.&mt('Submitted Answer:').' </b>'; |
if ($draft) { |
if ($draft) { |
$lastsubonly.= ' <span class="LC_warning">'.&mt('Draft Copy').'</span>'; |
$lastsubonly.= ' <span class="LC_warning">'.&mt('Draft Copy').'</span>'; |
} |
} |
Line 2516 sub submission {
|
Line 2713 sub submission {
|
} |
} |
$lastsubonly.=$subval."\n"; |
$lastsubonly.=$subval."\n"; |
} |
} |
if ($similar) {$lastsubonly.="<br /><br />$similar\n";} |
if ($similar) {$lastsubonly.="<br /><br />$similar\n";} |
$lastsubonly.='</div>'; |
$lastsubonly.='</div>'; |
} |
} |
} |
} |
Line 2527 sub submission {
|
Line 2724 sub submission {
|
if ($env{'form.lastSub'} eq 'datesub') { |
if ($env{'form.lastSub'} eq 'datesub') { |
my ($parts,$handgrade,$responseType) = &response_type($symb,\$res_error); |
my ($parts,$handgrade,$responseType) = &response_type($symb,\$res_error); |
$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); |
$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); |
|
} |
} |
|
if ($env{'form.lastSub'} =~ /^(last|all)$/) { |
if ($env{'form.lastSub'} =~ /^(last|all)$/) { |
my $identifier = (&canmodify($usec)? $counter : ''); |
my $identifier = (&canmodify($usec)? $counter : ''); |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
Line 2547 sub submission {
|
Line 2743 sub submission {
|
$request->print('</div>'."\n"); |
$request->print('</div>'."\n"); |
} |
} |
|
|
# essay grading message center |
# grading message center |
# if ($env{'form.handgrade'} eq 'yes') { |
|
if (1) { |
if ($env{'form.compmsg'}) { |
my $result='<div class="LC_grade_message_center">'; |
my $result='<div class="LC_Box">'. |
|
'<h3 class="LC_hcell">'.&mt('Send Message').'</h3>'. |
$result.='<div class="LC_grade_message_center_header">'. |
'<div class="LC_grade_message_center_body">'; |
&mt('Send Message').'</div><div class="LC_grade_message_center_body">'; |
my ($lastname,$givenn) = split(/,/,$env{'form.fullname'}); |
my ($lastname,$givenn) = split(/,/,$env{'form.fullname'}); |
my $msgfor = $givenn.' '.$lastname; |
my $msgfor = $givenn.' '.$lastname; |
if (scalar(@$col_fullnames) > 0) { |
if (scalar(@$col_fullnames) > 0) { |
my $lastone = pop(@$col_fullnames); |
my $lastone = pop(@$col_fullnames); |
$msgfor .= ', '.(join ', ',@$col_fullnames).' and '.$lastone.'.'; |
$msgfor .= ', '.(join ', ',@$col_fullnames).' and '.$lastone.'.'; |
} |
} |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$result.='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
$result.='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n". |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\');" target="_self">'. |
',\''.$msgfor.'\');" target="_self">'. |
&mt('Compose message to student'.(scalar(@$col_fullnames) >= 1 ? 's' : '')).'</a><label> ('. |
&mt('Compose message to student'.(scalar(@$col_fullnames) >= 1 ? 's' : '')).'</a><label> ('. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
' <img src="'.$request->dir_config('lonIconsURL'). |
' <img src="'.$request->dir_config('lonIconsURL'). |
'/mailbkgrd.gif" width="14" height="10" alt="" name="mailicon'.$counter.'" />'."\n". |
'/mailbkgrd.gif" width="14" height="10" alt="" name="mailicon'.$counter.'" />'."\n". |
'<br /> ('. |
'<br /> ('. |
&mt('Message will be sent when you click on Save & Next below.').")\n". |
&mt('Message will be sent when you click on Save & Next below.').")\n"; |
'</div></div>'; |
$result.='</div></div>'; |
$request->print($result); |
$request->print($result); |
|
} |
} |
|
|
my %seen = (); |
my %seen = (); |
Line 2594 sub submission {
|
Line 2789 sub submission {
|
my $part_resp = join('_',@{ $part_response_id }); |
my $part_resp = join('_',@{ $part_response_id }); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
next if ($$handgrade{$part_resp} ne 'yes' |
|
&& $env{'form.lastSub'} eq 'hdgrade'); |
|
push(@partlist,$partid); |
push(@partlist,$partid); |
push(@gradePartRespid,$partid.'.'.$respid); |
push(@gradePartRespid,$partid.'.'.$respid); |
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
Line 3074 sub processHandGrade {
|
Line 3267 sub processHandGrade {
|
} |
} |
} |
} |
|
|
# if ($env{'form.handgrade'} eq 'yes') { |
my $res_error; |
if (1) { |
my ($partlist,$handgrade,$responseType,$numresp,$numessay) = &response_type($symb,\$res_error); |
|
if ($res_error) { |
|
$request->print(&navmap_errormsg()); |
|
return; |
|
} |
|
|
|
my %keyhash = (); |
|
if ($numessay) { |
# Keywords sorted in alphabatical order |
# Keywords sorted in alphabatical order |
my $loginuser = $env{'user.name'}.':'.$env{'user.domain'}; |
my $loginuser = $env{'user.name'}.':'.$env{'user.domain'}; |
my %keyhash = (); |
|
$env{'form.keywords'} =~ s/,\s{0,}|\s+/ /g; |
$env{'form.keywords'} =~ s/,\s{0,}|\s+/ /g; |
$env{'form.keywords'} =~ s/^\s+|\s+$//; |
$env{'form.keywords'} =~ s/^\s+|\s+$//g; |
my (@keywords) = sort(split(/\s+/,$env{'form.keywords'})); |
my (@keywords) = sort(split(/\s+/,$env{'form.keywords'})); |
$env{'form.keywords'} = join(' ',@keywords); |
$env{'form.keywords'} = join(' ',@keywords); |
$keyhash{$symb.'_keywords'} = $env{'form.keywords'}; |
$keyhash{$symb.'_keywords'} = $env{'form.keywords'}; |
Line 3088 sub processHandGrade {
|
Line 3287 sub processHandGrade {
|
$keyhash{$loginuser.'_kwclr'} = $env{'form.kwclr'}; |
$keyhash{$loginuser.'_kwclr'} = $env{'form.kwclr'}; |
$keyhash{$loginuser.'_kwsize'} = $env{'form.kwsize'}; |
$keyhash{$loginuser.'_kwsize'} = $env{'form.kwsize'}; |
$keyhash{$loginuser.'_kwstyle'} = $env{'form.kwstyle'}; |
$keyhash{$loginuser.'_kwstyle'} = $env{'form.kwstyle'}; |
|
} |
|
|
|
if ($env{'form.compmsg'}) { |
# message center - Order of message gets changed. Blank line is eliminated. |
# message center - Order of message gets changed. Blank line is eliminated. |
# New messages are saved in env for the next student. |
# New messages are saved in env for the next student. |
# All messages are saved in nohist_handgrade.db |
# All messages are saved in nohist_handgrade.db |
Line 3103 sub processHandGrade {
|
Line 3304 sub processHandGrade {
|
$ctr = 0; |
$ctr = 0; |
while ($ctr < $ngrade) { |
while ($ctr < $ngrade) { |
if ($env{'form.newmsg'.$ctr} ne '') { |
if ($env{'form.newmsg'.$ctr} ne '') { |
$keyhash{$symb.'_savemsg'.$idx} = $env{'form.newmsg'.$ctr}; |
$keyhash{$symb.'_savemsg'.$idx} = $env{'form.newmsg'.$ctr}; |
$env{'form.savemsg'.$idx} = $env{'form.newmsg'.$ctr}; |
$env{'form.savemsg'.$idx} = $env{'form.newmsg'.$ctr}; |
$idx++; |
$idx++; |
} |
} |
$ctr++; |
$ctr++; |
} |
} |
$env{'form.savemsgN'} = --$idx; |
$env{'form.savemsgN'} = --$idx; |
$keyhash{$symb.'_savemsgN'} = $env{'form.savemsgN'}; |
$keyhash{$symb.'_savemsgN'} = $env{'form.savemsgN'}; |
my $putresult = &Apache::lonnet::put |
|
('nohist_handgrade',\%keyhash,$cdom,$cnum); |
|
} |
} |
|
if (($numessay) || ($env{'form.compmsg'})) { |
|
my $putresult = &Apache::lonnet::put |
|
('nohist_handgrade',\%keyhash,$cdom,$cnum); |
|
} |
|
|
# Called by Save & Refresh from Highlight Attribute Window |
# Called by Save & Refresh from Highlight Attribute Window |
my (undef,undef,$fullname) = &getclasslist($env{'form.section'},'1'); |
my (undef,undef,$fullname) = &getclasslist($env{'form.section'},'1'); |
if ($env{'form.refresh'} eq 'on') { |
if ($env{'form.refresh'} eq 'on') { |
Line 3153 sub processHandGrade {
|
Line 3357 sub processHandGrade {
|
} |
} |
return $a cmp $b; |
return $a cmp $b; |
} (keys(%$fullname))) { |
} (keys(%$fullname))) { |
# FIXME: this is fishy, looks like the button label |
|
if ($nextflg == 1 && $button =~ /Next$/) { |
if ($nextflg == 1 && $button =~ /Next$/) { |
push(@parsedlist,$item); |
push(@parsedlist,$item); |
} |
} |
Line 3164 sub processHandGrade {
|
Line 3367 sub processHandGrade {
|
} |
} |
} |
} |
$ctr = 0; |
$ctr = 0; |
# FIXME: this is fishy, looks like the button label |
|
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
my $res_error; |
|
my ($partlist) = &response_type($symb,\$res_error); |
|
if ($res_error) { |
|
$request->print(&navmap_errormsg()); |
|
return; |
|
} |
|
foreach my $student (@parsedlist) { |
foreach my $student (@parsedlist) { |
my $submitonly=$env{'form.submitonly'}; |
my $submitonly=$env{'form.submitonly'}; |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
Line 3424 sub handback_files {
|
Line 3620 sub handback_files {
|
&Apache::lonnet::file_name_version_ext($answer_file); |
&Apache::lonnet::file_name_version_ext($answer_file); |
my ($portfolio_path) = ($directory =~ /^.+$stuname\/portfolio(.*)/); |
my ($portfolio_path) = ($directory =~ /^.+$stuname\/portfolio(.*)/); |
my $getpropath = 1; |
my $getpropath = 1; |
my ($dir_list,$listerror) = |
my ($dir_list,$listerror) = |
&Apache::lonnet::dirlist($portfolio_root.$portfolio_path, |
&Apache::lonnet::dirlist($portfolio_root.$portfolio_path, |
$domain,$stuname,$getpropath); |
$domain,$stuname,$getpropath); |
my $version = &Apache::lonnet::get_next_version($answer_name,$answer_ext,$dir_list); |
my $version = &Apache::lonnet::get_next_version($answer_name,$answer_ext,$dir_list); |
Line 3808 sub viewgrades {
|
Line 4004 sub viewgrades {
|
} |
} |
|
|
my ($common_header,$specific_header,@sections,$section_display); |
my ($common_header,$specific_header,@sections,$section_display); |
@sections = &Apache::loncommon::get_env_multiple('form.section'); |
if ($env{'request.course.sec'} ne '') { |
|
@sections = ($env{'request.course.sec'}); |
|
} else { |
|
@sections = &Apache::loncommon::get_env_multiple('form.section'); |
|
} |
|
|
|
# Check if Save button should be usable |
|
my $disabled = ' disabled="disabled"'; |
|
if ($perm{'mgr'}) { |
|
if (grep(/^all$/,@sections)) { |
|
undef($disabled); |
|
} else { |
|
foreach my $sec (@sections) { |
|
if (&canmodify($sec)) { |
|
undef($disabled); |
|
last; |
|
} |
|
} |
|
} |
|
} |
if (grep(/^all$/,@sections)) { |
if (grep(/^all$/,@sections)) { |
@sections = ('all'); |
@sections = ('all'); |
if ($group_display) { |
if ($group_display) { |
Line 3884 sub viewgrades {
|
Line 4099 sub viewgrades {
|
my $part_resp = join('_',@{ $part_response_id }); |
my $part_resp = join('_',@{ $part_response_id }); |
next if $seen{$partid}; |
next if $seen{$partid}; |
$seen{$partid}++; |
$seen{$partid}++; |
# my $handgrade=$$handgrade{$part_resp}; |
|
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb); |
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb); |
$weight{$partid} = $wgt eq '' ? '1' : $wgt; |
$weight{$partid} = $wgt eq '' ? '1' : $wgt; |
|
|
Line 4001 sub viewgrades {
|
Line 4215 sub viewgrades {
|
} |
} |
$result.=&Apache::loncommon::end_data_table(); |
$result.=&Apache::loncommon::end_data_table(); |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="button" value="'.&mt('Save').'" '. |
$result.='<input type="button" value="'.&mt('Save').'"'.$disabled.' '. |
'onclick="javascript:submit();" target="_self" /></form>'."\n"; |
'onclick="javascript:submit();" target="_self" /></form>'."\n"; |
if ($ctr == 0) { |
if ($ctr == 0) { |
my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status')); |
my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status')); |
Line 5241 sub displayPage {
|
Line 5455 sub displayPage {
|
} |
} |
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
} |
} |
|
my $disabled; |
|
unless (&canmodify($usec)) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
|
$studentTable.= |
$studentTable.= |
'</table>'."\n". |
'</table>'."\n". |
'<input type="button" value="'.&mt('Save').'" '. |
'<input type="button" value="'.&mt('Save').'"'.$disabled.' '. |
'onclick="javascript:checkSubmitPage(this.form,'.$question.');" />'. |
'onclick="javascript:checkSubmitPage(this.form,'.$question.');" />'. |
'</form>'."\n"; |
'</form>'."\n"; |
$request->print($studentTable); |
$request->print($studentTable); |
Line 9304 END
|
Line 9522 END
|
if ($count > 1) { |
if ($count > 1) { |
$formatextra = '<div style="display:none" id="bubbletype">'. |
$formatextra = '<div style="display:none" id="bubbletype">'. |
'<span class="LC_nobreak">'. |
'<span class="LC_nobreak">'. |
&mt('Bubblesheet type:').' '. |
&mt('Bubblesheet type').': '. |
&scantron_scantab().'</span></div>'; |
&scantron_scantab().'</span></div>'; |
$onclick = ' onclick="toggleScantab(this.form);"'; |
$onclick = ' onclick="toggleScantab(this.form);"'; |
$formatjs = <<"END"; |
$formatjs = <<"END"; |
Line 10214 sub grading_menu {
|
Line 10432 sub grading_menu {
|
|
|
$fields{'command'} = 'initialverifyreceipt'; |
$fields{'command'} = 'initialverifyreceipt'; |
my $url5 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); |
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', |
my @menu = ({ categorytitle=>'Hand Grading', |
items =>[ |
items =>[ |
{ linktext => 'Select individual students to grade', |
{ linktext => 'Select individual students to grade', |
url => $url1a, |
url => $url1a, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'grade_students.png', |
icon => 'grade_students.png', |
linktitle => 'Grade current resource for a selection of students.' |
linktitle => 'Grade current resource for a selection of students.' |
}, |
}, |
{ linktext => 'Grade ungraded submissions', |
{ linktext => 'Grade ungraded submissions', |
url => $url1b, |
url => $url1b, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'ungrade_sub.png', |
icon => 'ungrade_sub.png', |
linktitle => 'Grade all submissions that have not been graded yet.' |
linktitle => 'Grade all submissions that have not been graded yet.' |
}, |
}, |
|
|
{ linktext => 'Grading table', |
{ linktext => 'Grading table', |
url => $url1c, |
url => $url1c, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'grading_table.png', |
icon => 'grading_table.png', |
linktitle => 'Grade current resource for all students.' |
linktitle => 'Grade current resource for all students.' |
}, |
}, |
{ linktext => 'Grade page/folder for one student', |
{ linktext => 'Grade page/folder for one student', |
url => $url1d, |
url => $url1d, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'grade_PageFolder.png', |
icon => 'grade_PageFolder.png', |
linktitle => 'Grade all resources in current page/sequence/folder for one student.' |
linktitle => 'Grade all resources in current page/sequence/folder for one student.' |
}, |
}, |
{ linktext => 'Download submissions', |
{ linktext => 'Download submissions', |
url => $url1e, |
url => $url1e, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'download_sub.png', |
icon => 'download_sub.png', |
linktitle => 'Download all students submissions.' |
linktitle => 'Download all students submissions.' |
}]}, |
}]}, |
Line 10253 sub grading_menu {
|
Line 10481 sub grading_menu {
|
|
|
{ linktext => 'Upload Scores', |
{ linktext => 'Upload Scores', |
url => $url2, |
url => $url2, |
permission => 'F', |
permission => $permissions{'mgr'}, |
icon => 'uploadscores.png', |
icon => 'uploadscores.png', |
linktitle => 'Specify a file containing the class scores for current resource.' |
linktitle => 'Specify a file containing the class scores for current resource.' |
}, |
}, |
{ linktext => 'Process Clicker', |
{ linktext => 'Process Clicker', |
url => $url3, |
url => $url3, |
permission => 'F', |
permission => $permissions{'mgr'}, |
icon => 'addClickerInfoFile.png', |
icon => 'addClickerInfoFile.png', |
linktitle => 'Specify a file containing the clicker information for this resource.' |
linktitle => 'Specify a file containing the clicker information for this resource.' |
}, |
}, |
{ linktext => 'Grade/Manage/Review Bubblesheets', |
{ linktext => 'Grade/Manage/Review Bubblesheets', |
url => $url4, |
url => $url4, |
permission => 'F', |
permission => $permissions{'mgr'}, |
icon => 'bubblesheet.png', |
icon => 'bubblesheet.png', |
linktitle => 'Grade bubblesheet exams, upload/download bubblesheet data files, and review previously graded bubblesheet exams.' |
linktitle => 'Grade bubblesheet exams, upload/download bubblesheet data files, and review previously graded bubblesheet exams.' |
}, |
}, |
{ linktext => 'Verify Receipt Number', |
{ linktext => 'Verify Receipt Number', |
url => $url5, |
url => $url5, |
permission => 'F', |
permission => $permissions{'either'}, |
icon => 'receipt_number.png', |
icon => 'receipt_number.png', |
linktitle => 'Verify a system-generated receipt number for correct problem solution.' |
linktitle => 'Verify a system-generated receipt number for correct problem solution.' |
} |
} |
Line 10336 sub submit_options_download {
|
Line 10564 sub submit_options_download {
|
my ($request,$symb) = @_; |
my ($request,$symb) = @_; |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
|
|
|
my $res_error; |
|
my ($partlist,$handgrade,$responseType,$numresp,$numessay,$numdropbox) = |
|
&response_type($symb,\$res_error); |
|
if ($res_error) { |
|
$request->print(&mt('An error occurred retrieving response types')); |
|
return; |
|
} |
|
unless ($numessay) { |
|
$request->print(&mt('No essayresponse items found')); |
|
return; |
|
} |
|
my $table; |
|
if (ref($partlist) eq 'ARRAY') { |
|
if (scalar(@$partlist) > 1 ) { |
|
$table = &showResourceInfo($symb,$partlist,$responseType,'gradingMenu',1,1); |
|
} |
|
} |
|
|
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"; |
$table."\n". |
|
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n"; |
$result.=' |
$result.=' |
<h2> |
<h2> |
'.&mt('Select Students for whom to Download Submissions').' |
'.&mt('Select Students for whom to Download Submissions').' |
Line 10387 sub selectfield {
|
Line 10634 sub selectfield {
|
(&substatus_options, |
(&substatus_options, |
'select_form_order' => ['yes','queued','graded','incorrect','all']); |
'select_form_order' => ['yes','queued','graded','incorrect','all']); |
} |
} |
|
|
|
# |
|
# PrepareClasslist() needs to be called to avoid getting a sections list |
|
# for a different course from the @Sections global in lonstatistics.pm, |
|
# populated by an earlier request. |
|
# |
|
&Apache::lonstatistics::PrepareClasslist(); |
|
|
my $result='<div class="LC_columnSection"> |
my $result='<div class="LC_columnSection"> |
|
|
<fieldset> |
<fieldset> |
Line 11118 sub navmap_errormsg {
|
Line 11373 sub navmap_errormsg {
|
} |
} |
|
|
sub startpage { |
sub startpage { |
my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$js,$onload) = @_; |
my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$head_extra,$onload,$divforres) = @_; |
my %args; |
my %args; |
if ($onload) { |
if ($onload) { |
my %loaditems = ( |
my %loaditems = ( |
Line 11128 sub startpage {
|
Line 11383 sub startpage {
|
} |
} |
if ($nomenu) { |
if ($nomenu) { |
$args{'only_body'} = 1; |
$args{'only_body'} = 1; |
$r->print(&Apache::loncommon::start_page("Student's Version",$js,\%args)); |
$r->print(&Apache::loncommon::start_page("Student's Version",$head_extra,\%args)); |
} else { |
} else { |
unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"}); |
unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"}); |
$args{'bread_crumbs'} = $crumbs; |
$args{'bread_crumbs'} = $crumbs; |
$r->print(&Apache::loncommon::start_page('Grading',$js,\%args)); |
$r->print(&Apache::loncommon::start_page('Grading',$head_extra,\%args)); |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
&Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading')); |
&Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading')); |
} |
} |
} |
} |
unless ($nodisplayflag) { |
unless ($nodisplayflag) { |
$r->print(&Apache::lonhtmlcommon::resource_info_box($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp)); |
$r->print(&Apache::lonhtmlcommon::resource_info_box($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp,$divforres)); |
} |
} |
} |
} |
|
|
sub select_problem { |
sub select_problem { |
my ($r)=@_; |
my ($r)=@_; |
$r->print('<h3>'.&mt('Select the problem or one of the problems you want to grade').'</h3><form action="/adm/grades">'); |
$r->print('<h3>'.&mt('Select the problem or one of the problems you want to grade').'</h3><form action="/adm/grades">'); |
$r->print(&Apache::lonstathelpers::problem_selector('.',undef,1,undef,undef,undef,undef,1)); |
$r->print(&Apache::lonstathelpers::problem_selector('.',undef,1,undef,undef,1,1)); |
$r->print('<input type="hidden" name="command" value="gradingmenu" />'); |
$r->print('<input type="hidden" name="command" value="gradingmenu" />'); |
$r->print('<input type="submit" value="'.&mt('Next').' →" /></form>'); |
$r->print('<input type="submit" value="'.&mt('Next').' →" /></form>'); |
} |
} |
Line 11202 sub handler {
|
Line 11457 sub handler {
|
&select_problem($request); |
&select_problem($request); |
} else { |
} else { |
if ($command eq 'submission' && $perm{'vgr'}) { |
if ($command eq 'submission' && $perm{'vgr'}) { |
my ($stuvcurrent,$stuvdisp,$versionform,$js); |
my ($stuvcurrent,$stuvdisp,$versionform,$js,$onload); |
if (($env{'form.student'} ne '') && ($env{'form.userdom'} ne '')) { |
if (($env{'form.student'} ne '') && ($env{'form.userdom'} ne '')) { |
($stuvcurrent,$stuvdisp,$versionform,$js) = |
($stuvcurrent,$stuvdisp,$versionform,$js) = |
&choose_task_version_form($symb,$env{'form.student'}, |
&choose_task_version_form($symb,$env{'form.student'}, |
$env{'form.userdom'}); |
$env{'form.userdom'}); |
} |
} |
&startpage($request,$symb,[{href=>"", text=>"Student Submissions"}],undef,undef,$stuvcurrent,$stuvdisp,undef,$js); |
my $divforres; |
|
if ($env{'form.student'} eq '') { |
|
$js .= &part_selector_js(); |
|
$onload = "toggleParts('gradesub');"; |
|
} else { |
|
$divforres = 1; |
|
} |
|
my $head_extra = $js; |
|
unless ($env{'form.vProb'} eq 'no') { |
|
my $csslinks = &Apache::loncommon::css_links($symb); |
|
if ($csslinks) { |
|
$head_extra .= "\n$csslinks"; |
|
} |
|
} |
|
&startpage($request,$symb,[{href=>"", text=>"Student Submissions"}],undef,undef, |
|
$stuvcurrent,$stuvdisp,undef,$head_extra,$onload,$divforres); |
if ($versionform) { |
if ($versionform) { |
|
if ($divforres) { |
|
$request->print('<div style="padding:0;clear:both;margin:0;border:0"></div>'); |
|
} |
$request->print($versionform); |
$request->print($versionform); |
} |
} |
$request->print('<br clear="all" />'); |
($env{'form.student'} eq '' ? &listStudents($request,$symb,'',$divforres) : &submission($request,0,0,$symb,$divforres,$command)); |
($env{'form.student'} eq '' ? &listStudents($request,$symb) : &submission($request,0,0,$symb)); |
|
} elsif ($command eq 'versionsub' && $perm{'vgr'}) { |
} elsif ($command eq 'versionsub' && $perm{'vgr'}) { |
my ($stuvcurrent,$stuvdisp,$versionform,$js) = |
my ($stuvcurrent,$stuvdisp,$versionform,$js) = |
&choose_task_version_form($symb,$env{'form.student'}, |
&choose_task_version_form($symb,$env{'form.student'}, |
$env{'form.userdom'}, |
$env{'form.userdom'}, |
$env{'form.inhibitmenu'}); |
$env{'form.inhibitmenu'}); |
&startpage($request,$symb,[{href=>"", text=>"Previous Student Version"}],undef,undef,$stuvcurrent,$stuvdisp,$env{'form.inhibitmenu'},$js); |
my $head_extra = $js; |
|
unless ($env{'form.vProb'} eq 'no') { |
|
my $csslinks = &Apache::loncommon::css_links($symb); |
|
if ($csslinks) { |
|
$head_extra .= "\n$csslinks"; |
|
} |
|
} |
|
&startpage($request,$symb,[{href=>"", text=>"Previous Student Version"}],undef,undef, |
|
$stuvcurrent,$stuvdisp,$env{'form.inhibitmenu'},$head_extra); |
if ($versionform) { |
if ($versionform) { |
$request->print($versionform); |
$request->print($versionform); |
} |
} |
Line 11230 sub handler {
|
Line 11510 sub handler {
|
{href=>'',text=>'Select student'}],1,1); |
{href=>'',text=>'Select student'}],1,1); |
&pickStudentPage($request,$symb); |
&pickStudentPage($request,$symb); |
} elsif ($command eq 'displayPage' && $perm{'vgr'}) { |
} elsif ($command eq 'displayPage' && $perm{'vgr'}) { |
|
my $csslinks; |
|
unless ($env{'form.vProb'} eq 'no') { |
|
$csslinks = &Apache::loncommon::css_links($symb,'map'); |
|
} |
&startpage($request,$symb, |
&startpage($request,$symb, |
[{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'}, |
[{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'}, |
{href=>'',text=>'Select student'}, |
{href=>'',text=>'Select student'}, |
{href=>'',text=>'Grade student'}],1,1); |
{href=>'',text=>'Grade student'}],1,1,undef,undef,undef,$csslinks); |
&displayPage($request,$symb); |
&displayPage($request,$symb); |
} elsif ($command eq 'gradeByPage' && $perm{'mgr'}) { |
} elsif ($command eq 'gradeByPage' && $perm{'mgr'}) { |
&startpage($request,$symb,[{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'}, |
&startpage($request,$symb,[{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'}, |
Line 11242 sub handler {
|
Line 11526 sub handler {
|
{href=>'',text=>'Store grades'}],1,1); |
{href=>'',text=>'Store grades'}],1,1); |
&updateGradeByPage($request,$symb); |
&updateGradeByPage($request,$symb); |
} elsif ($command eq 'processGroup' && $perm{'vgr'}) { |
} elsif ($command eq 'processGroup' && $perm{'vgr'}) { |
|
my $csslinks; |
|
unless ($env{'form.vProb'} eq 'no') { |
|
$csslinks = &Apache::loncommon::css_links($symb); |
|
} |
&startpage($request,$symb,[{href=>'',text=>'...'}, |
&startpage($request,$symb,[{href=>'',text=>'...'}, |
{href=>'',text=>'Modify grades'}]); |
{href=>'',text=>'Modify grades'}],undef,undef,undef,undef,undef,$csslinks,undef,1); |
&processGroup($request,$symb); |
&processGroup($request,$symb); |
} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) { |
} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) { |
&startpage($request,$symb); |
&startpage($request,$symb); |
Line 11252 sub handler {
|
Line 11540 sub handler {
|
&startpage($request,$symb,[{href=>'',text=>'Select individual students to grade'}]); |
&startpage($request,$symb,[{href=>'',text=>'Select individual students to grade'}]); |
$request->print(&submit_options($request,$symb)); |
$request->print(&submit_options($request,$symb)); |
} elsif ($command eq 'ungraded' && $perm{'vgr'}) { |
} elsif ($command eq 'ungraded' && $perm{'vgr'}) { |
&startpage($request,$symb,[{href=>'',text=>'Grade ungraded submissions'}]); |
my $js = &part_selector_js(); |
|
my $onload = "toggleParts('gradesub');"; |
|
&startpage($request,$symb,[{href=>'',text=>'Grade ungraded submissions'}], |
|
undef,undef,undef,undef,undef,$js,$onload); |
$request->print(&listStudents($request,$symb,'graded')); |
$request->print(&listStudents($request,$symb,'graded')); |
} elsif ($command eq 'table' && $perm{'vgr'}) { |
} elsif ($command eq 'table' && $perm{'vgr'}) { |
&startpage($request,$symb,[{href=>"", text=>"Grading table"}]); |
&startpage($request,$symb,[{href=>"", text=>"Grading table"}]); |
Line 11350 sub handler {
|
Line 11641 sub handler {
|
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
&startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1); |
$request->print(&checkscantron_results($request,$symb)); |
$request->print(&checkscantron_results($request,$symb)); |
} elsif ($command eq 'downloadfilesselect' && $perm{'vgr'}) { |
} elsif ($command eq 'downloadfilesselect' && $perm{'vgr'}) { |
&startpage($request,$symb,[{href=>'', text=>'Select which submissions to download'}]); |
my $js = &part_selector_js(); |
|
my $onload = "toggleParts('gradingMenu');"; |
|
&startpage($request,$symb,[{href=>'', text=>'Select which submissions to download'}], |
|
undef,undef,undef,undef,undef,$js,$onload); |
$request->print(&submit_options_download($request,$symb)); |
$request->print(&submit_options_download($request,$symb)); |
} 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 submitted files'}]); |
{href=>'', text=>'Download submitted files'}], |
|
undef,undef,undef,undef,undef,undef,undef,1); |
|
$request->print('<div style="padding:0;clear:both;margin:0;border:0"></div>'); |
&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'}]); |