--- loncom/homework/grades.pm 2010/12/22 17:11:12 1.596.2.3 +++ loncom/homework/grades.pm 2010/03/19 22:00:06 1.600 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.596.2.3 2010/12/22 17:11:12 raeburn Exp $ +# $Id: grades.pm,v 1.600 2010/03/19 22:00:06 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -96,6 +96,9 @@ sub ssi_print_error { # # --- Retrieve the parts from the metadata file.--- +# Returns an array of everything that the resources stores away +# + sub getpartlist { my ($symb,$errorref) = @_; @@ -121,13 +124,17 @@ sub getpartlist { } # --- Get the symbolic name of a problem and the url +# Generate an error message if symb could not be found unless silent flag is set +# Takes $env{'form.symb'} by default; if not present, takes $env{'form.url'} and tries to get symb from that +# + sub get_symb { my ($request,$silent) = @_; (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url))); if ($symb eq '') { if (!$silent) { - $request->print("Unable to handle ambiguous references:$url:."); + $request->print(&mt("Unable to handle ambiguous references: [_1].",$url)); return (); } } @@ -209,52 +216,52 @@ sub get_display_part { #--- Show resource title #--- and parts and response type -sub showResourceInfo { - my ($symb,$probTitle,$checkboxes,$res_error) = @_; - my $result = '

'.&mt('Current Resource').': '.$probTitle.'

'."\n"; - my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error); - if (ref($res_error)) { - if ($$res_error) { - return; - } - } - $result.=&Apache::loncommon::start_data_table() - .&Apache::loncommon::start_data_table_header_row(); - if ($checkboxes) { - $result.=' '; - } - $result.=''.&mt('Problem Part').'' - .''.&mt('Res. ID').'' - .''.&mt('Type').'' - .&Apache::loncommon::end_data_table_header_row(); - my %resptype = (); - my $hdgrade='no'; - my %partsseen; - foreach my $partID (sort(keys(%$responseType))) { - foreach my $resID (sort(keys(%{ $responseType->{$partID} }))) { - my $handgrade=$$handgrade{$partID.'_'.$resID}; - my $responsetype = $responseType->{$partID}->{$resID}; - $hdgrade = $handgrade if ($handgrade eq 'yes'); - $result.=&Apache::loncommon::start_data_table_row(); - if ($checkboxes) { - if (exists($partsseen{$partID})) { - $result.=" "; - } else { - $result.=""; - } - $partsseen{$partID}=1; - } - my $display_part=&get_display_part($partID,$symb); - $result.=''.$display_part.'' - .''.''.$resID.'' - .''.&mt($responsetype).'' +#sub showResourceInfo { +# my ($symb,$probTitle,$checkboxes,$res_error) = @_; +# my $result = '

'.&mt('Current Resource').': '.$probTitle.'

'."\n"; +# my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error); +# if (ref($res_error)) { +# if ($$res_error) { +# return; +# } +# } +# $result.=&Apache::loncommon::start_data_table() +# .&Apache::loncommon::start_data_table_header_row(); +# if ($checkboxes) { +# $result.=' '; +# } +# $result.=''.&mt('Problem Part').'' +# .''.&mt('Res. ID').'' +# .''.&mt('Type').'' +# .&Apache::loncommon::end_data_table_header_row(); +# my %resptype = (); +# my $hdgrade='no'; +# my %partsseen; +# foreach my $partID (sort(keys(%$responseType))) { +# foreach my $resID (sort(keys(%{ $responseType->{$partID} }))) { +# my $handgrade=$$handgrade{$partID.'_'.$resID}; +# my $responsetype = $responseType->{$partID}->{$resID}; +# $hdgrade = $handgrade if ($handgrade eq 'yes'); +# $result.=&Apache::loncommon::start_data_table_row(); +# if ($checkboxes) { +# if (exists($partsseen{$partID})) { +# $result.=" "; +# } else { +# $result.=""; +# } +# $partsseen{$partID}=1; +# } +# my $display_part=&get_display_part($partID,$symb); +# $result.=''.$display_part.'' +# .''.''.$resID.'' +# .''.&mt($responsetype).'' # .''.&mt('Handgrade: [_1]',$handgrade).'' - .&Apache::loncommon::end_data_table_row(); - } - } - $result.=&Apache::loncommon::end_data_table(); - return $result,$responseType,$hdgrade,$partlist,$handgrade; -} +# .&Apache::loncommon::end_data_table_row(); +# } +# } +# $result.=&Apache::loncommon::end_data_table(); +# return $result,$responseType,$hdgrade,$partlist,$handgrade; +#} sub reset_caches { &reset_analyze_cache(); @@ -271,13 +278,8 @@ sub reset_caches { } sub get_analyze { - my ($symb,$uname,$udom,$no_increment,$add_to_hash,$type,$trial,$rndseed)=@_; + my ($symb,$uname,$udom,$no_increment,$add_to_hash)=@_; my $key = "$symb\0$uname\0$udom"; - if ($type eq 'randomizetry') { - if ($trial ne '') { - $key .= "\0".$trial; - } - } if (exists($analyze_cache{$key})) { my $getupdate = 0; if (ref($add_to_hash) eq 'HASH') { @@ -305,15 +307,9 @@ sub reset_caches { 'grade_courseid' => $env{'request.course.id'}, 'grade_username' => $uname, 'grade_noincrement' => $no_increment); - if ($type eq 'randomizetry') { - $form{'grade_questiontype'} = $type; - if ($rndseed ne '') { - $form{'grade_rndseed'} = $rndseed; - } - } if (ref($add_to_hash)) { %form = (%form,%{$add_to_hash}); - } + } my $subresult=&ssi_with_retries($url, $ssi_retries,%form); (undef,$subresult)=split(/_HASH_REF__/,$subresult,2); my %analyze=&Apache::lonnet::str2hash($subresult); @@ -326,15 +322,15 @@ sub reset_caches { } sub get_order { - my ($partid,$respid,$symb,$uname,$udom,$no_increment,$type,$trial,$rndseed)=@_; - my $analyze = &get_analyze($symb,$uname,$udom,$no_increment,undef,$type,$trial,$rndseed); + my ($partid,$respid,$symb,$uname,$udom,$no_increment)=@_; + my $analyze = &get_analyze($symb,$uname,$udom,$no_increment); return $analyze->{"$partid.$respid.shown"}; } sub get_radiobutton_correct_foil { - my ($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed)=@_; - my $analyze = &get_analyze($symb,$uname,$udom,undef,undef,$type,$trial,$rndseed); - my $foils = &get_order($partid,$respid,$symb,$uname,$udom,undef,$type,$trial,$rndseed); + my ($partid,$respid,$symb,$uname,$udom)=@_; + my $analyze = &get_analyze($symb,$uname,$udom); + my $foils = &get_order($partid,$respid,$symb,$uname,$udom); if (ref($foils) eq 'ARRAY') { foreach my $foil (@{$foils}) { if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') { @@ -376,7 +372,7 @@ sub reset_caches { # response types only. sub cleanRecord { my ($answer,$response,$symb,$partid,$respid,$record,$order,$version, - $uname,$udom,$type,$trial,$rndseed) = @_; + $uname,$udom) = @_; my $grayFont = ''; if ($response =~ /^(option|rank)$/) { my %answer=&Apache::lonnet::str2hash($answer); @@ -393,7 +389,7 @@ sub cleanRecord { return '
'. ''.$toprow.''. ''. - $bottomrow.'
'.&mt('Answer').'
'.$grayFont.&mt('Option ID').'
'; + $grayFont.$bottomrow.''.''; } elsif ($response eq 'match') { my %answer=&Apache::lonnet::str2hash($answer); my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"}); @@ -420,7 +416,7 @@ sub cleanRecord { my %answer=&Apache::lonnet::str2hash($answer); my ($toprow,$bottomrow); my $correct = - &get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed); + &get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom); foreach my $foil (@$order) { if (exists($answer{$foil})) { if ($foil eq $correct) { @@ -436,7 +432,7 @@ sub cleanRecord { return '
'. ''.$toprow.''. ''. - $grayFont.$bottomrow.''.'
'.&mt('Answer').'
'.$grayFont.&mt('Option ID').'
'; + $bottomrow.''.''; } elsif ($response eq 'essay') { if (! exists ($env{'form.'.$symb})) { my (%keyhash) = &Apache::lonnet::dump('nohist_handgrade', @@ -498,8 +494,7 @@ sub cleanRecord { #-- A couple of common js functions sub commonJSfunctions { my $request = shift; - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< 1) { @@ -527,7 +522,6 @@ sub commonJSfunctions { return selectOne.value; } } - COMMONJSFUNCTIONS } @@ -682,13 +676,13 @@ sub student_gradeStatus { sub jscriptNform { my ($symb) = @_; my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); - my $jscript=''."\n"; + "\n"); $jscript.= '
'."\n". ''."\n". ''."\n". @@ -745,7 +739,7 @@ sub most_similar { # ignore empty submissions (occuring when only files are sent) - unless ($uessay=~/\w+/) { return ''; } + unless ($uessay=~/\w+/s) { return ''; } # these will be returned. Do not care if not at least 50 percent similar my $limit=0.6; @@ -891,14 +885,16 @@ sub listStudents { .&mt("$viewgrade Submissions for a Student or a Group of Students") .''; - my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($symb,$env{'form.probTitle'},($env{'form.showgrading'} eq 'yes')); +# my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($symb,$env{'form.probTitle'},($env{'form.showgrading'} eq 'yes')); + my ($partlist,$handgrade,$responseType) = &response_type($symb +#,$res_error + ); my %lt = &Apache::lonlocal::texthash ( 'multiple' => 'Please select a student or group of students before clicking on the Next button.', 'single' => 'Please select the student before clicking on the Next button.', ); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< LISTJAVASCRIPT &commonJSfunctions($request); @@ -936,7 +931,7 @@ LISTJAVASCRIPT my $checkhdgrade = ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked="checked"' : ''; my $checklastsub = $checkhdgrade eq '' ? 'checked="checked"' : ''; my $gradeTable=''. - "\n".$table; + "\n"; $gradeTable .= &Apache::lonhtmlcommon::start_pick_box(); $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('View Problem Text')) @@ -1163,7 +1158,7 @@ LISTJAVASCRIPT sub check_script { my ($form, $type)=@_; - my $chkallscript=''."\n"; +'."\n"); return $chkallscript; } @@ -1233,8 +1228,7 @@ sub processGroup { sub sub_page_js { my $request = shift; my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = '); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< SUBJAVASCRIPT } @@ -1412,8 +1405,7 @@ sub sub_page_kw_js { my $iconpath = $request->dir_config('lonIconsURL'); &commonJSfunctions($request); - my $inner_js_msg_central=< + my $inner_js_msg_central= &Apache::lonhtmlcommon::scripttag(< INNERJS - my $inner_js_highlight_central=< + my $inner_js_highlight_central= &Apache::lonhtmlcommon::scripttag(< INNERJS my $start_page_msg_central = @@ -1489,8 +1478,7 @@ INNERJS my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); $docopen=~s/^document\.//; my $alertmsg = &mt('Please select a word or group of words from document and then click this link.'); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< SUBJAVASCRIPT } @@ -2215,7 +2202,7 @@ KEYWORDS $lastsubonly.="\n".'
'. ''.&mt('Part: [_1]',$display_part).''. ' '. - '('.&mt('Part ID: [_1]',$respid).')'. + '('.&mt('Part ID: [_1]',$respid).')'. '   '. ''.&mt('Nothing submitted - no attempts.').'

'; next; @@ -2226,12 +2213,6 @@ KEYWORDS my ($ressub,$hide,$subval) = split(/:/,$submission,3); # Similarity check 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'}){ my ($oname,$odom,$ocrsid,$oessay,$osim)= &most_similar($uname,$udom,$subval,\%old_essays); @@ -2241,7 +2222,7 @@ KEYWORDS &Apache::lonnet::coursedescription($ocrsid, {'one_time' => 1}); - if ($hide eq 'anon') { + if ($hide) { $similar='
'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'
'. &mt('As the current submission is for an anonymous survey, no other details are available.').'

'; } else { @@ -2258,8 +2239,7 @@ KEYWORDS } } } - my $order=&get_order($partid,$respid,$symb,$uname,$udom, - undef,$type,$trial,$rndseed); + my $order=&get_order($partid,$respid,$symb,$uname,$udom); if ($env{'form.lastSub'} eq 'lastonly' || ($env{'form.lastSub'} eq 'hdgrade' && $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { @@ -2268,10 +2248,10 @@ KEYWORDS ''.&mt('Part: [_1]',$display_part).''. ' '. '('.&mt('Part ID: [_1]',$respid).')'. - '   '; + '   '; my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); if (@$files) { - if ($hide eq 'anon') { + if ($hide) { $lastsubonly.='
'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); } else { $lastsubonly.='
'.&mt('Like all files provided by users, this file may contain viruses').'
'; @@ -2282,12 +2262,12 @@ KEYWORDS } $lastsubonly.='
'; } - if ($hide eq 'anon') { + if ($hide) { $lastsubonly.=''.&mt('Anonymous Survey').''; } else { $lastsubonly.=''.&mt('Submitted Answer:').' '. &cleanRecord($subval,$responsetype,$symb,$partid, - $respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed); + $respid,\%record,$order,undef,$uname,$udom); } if ($similar) {$lastsubonly.="

$similar\n";} $lastsubonly.=''; @@ -2298,7 +2278,9 @@ KEYWORDS } $request->print($lastsubonly); } elsif ($env{'form.lastSub'} eq 'datesub') { - my (undef,$responseType,undef,$parts) = &showResourceInfo($symb); +# my (undef,$responseType,undef,$parts) = &showResourceInfo($symb); + my ($parts,$handgrade,$responseType) = &response_type($symb); + $request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); } elsif ($env{'form.lastSub'} =~ /^(last|all)$/) { $request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, @@ -2495,51 +2477,35 @@ sub get_last_submission { &Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); } } - my (%typeparts,%randombytry); + my %typeparts; 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')) { + ($lasthash{$key} eq 'anonsurveycred')) { 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}; - } + unless ($showsurv) { + my $id = join(',',@parts); + $typeparts{$ign.'.'.$id} = $lasthash{$key}; } delete($lasthash{$key}); } } } my @hidden = keys(%typeparts); - my @randomize = keys(%randombytry); foreach my $key (keys(%lasthash)) { next if ($key !~ /\.submission$/); my $hide; if (@hidden) { foreach my $id (@hidden) { if ($key =~ /^\Q$id\E/) { - $hide = 'anon'; + $hide = 1; last; } } } - unless ($hide) { - if (@randomize) { - foreach my $id (@hidden) { - if ($key =~ /^\Q$id\E/) { - $hide = 'rand'; - last; - } - } - } - } my ($partid,$foo) = split(/submission$/,$key); my $draft = $lasthash{$partid.'awarddetail'} eq 'DRAFT' ? 'Draft Copy ' : ''; @@ -2710,7 +2676,7 @@ sub processHandGrade { # Go directly to grade student - from submission or link from chart page if ($button eq 'Grade Student') { - (undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb); +# (undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb); my $processUser = $env{'form.unamedom'.$env{'form.studentNo'}}; ($env{'form.student'},$env{'form.userdom'}) = split(/:/,$processUser); $env{'form.fullname'} = $$fullname{$processUser}; @@ -3204,8 +3170,7 @@ sub viewgrades_js { my ($request) = shift; my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = '); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< VIEWJAVASCRIPT } @@ -3942,7 +3906,8 @@ sub csvuploadmap_header { $javascript=&csvupload_javascript_forward_associate(); } - my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); +# my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); + my $result=''; my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); my $ignore=&mt('Ignore First Line'); $symb = &Apache::lonenc::check_encrypt($symb); @@ -3969,10 +3934,8 @@ to this page if the data selected is ins
- ENDPICK + $request->print(&Apache::lonhtmlcommon::scripttag($javascript)); return ''; } @@ -4017,8 +3980,7 @@ ENDPICK sub checkforfile_js { my $alertmsg = &mt('Please use the browse button to select a file from your local directory.'); - my $result =< + my $result = &Apache::lonhtmlcommon::scripttag(< CSVFORMJS return $result; } @@ -4037,8 +3998,8 @@ sub upcsvScores_form { if (!$symb) {return '';} my $result=&checkforfile_js(); $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb); - my ($table) = &showResourceInfo($symb,$env{'form.probTitle'}); - $result.=$table; +# my ($table) = &showResourceInfo($symb,$env{'form.probTitle'}); +# $result.=$table; $result.='
'."\n"; $result.=''; $studentTable.=''; $studentTable.=''; @@ -5363,17 +5311,15 @@ sub scantron_selectphase { my $default_form_data=&defaultFormData(&get_symb($r,1)); my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'}; - $r->print(' - - + }')); + $r->print(' '.$default_form_data.' @@ -7060,8 +7006,7 @@ sub scantron_get_correction { $r->print("\n
"); } - $r->print(< + $r->print(&Apache::lonhtmlcommon::scripttag(< ENDSCRIPT my $href="/adm/pickcode?". "form=".&escape("scantronupload"). @@ -7141,8 +7085,7 @@ sub verify_bubbles_checked { my (@ansnums) = @_; my $ansnumstr = join('","',@ansnums); my $warning = &mt("A bubble or 'No bubble' selection has not been made for one or more lines."); - my $output = (< + my $output = &Apache::lonhtmlcommon::scripttag((< ENDSCRIPT return $output; } @@ -8024,8 +7966,7 @@ sub scantron_upload_scantron_data { my $default_form_data=&defaultFormData(&get_symb($r,1)); my $nofile_alert = &mt('Please use the browse button to select a file from your local directory.'); my $nocourseid_alert = &mt("Please use the 'Select Course' link to open a separate window where you can search for a course to which a file can be uploaded."); - $r->print(' - - +')); + $r->print('

'.&mt('Send scanned bubblesheet data to a course').'

@@ -8591,19 +8532,26 @@ sub grading_menu { my ($symb)=&get_symb($request); if (!$symb) {return '';} my $probTitle = &Apache::lonnet::gettitle($symb); - my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle); - $request->print($table); +# $request->print($table); my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb), - 'handgrade'=>$hdgrade, 'probTitle'=>$probTitle, - 'command'=>'submit_options', + 'command'=>'individual', 'saveState'=>"", 'gradingMenu'=>1, 'showgrading'=>"yes"); - my $url1 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - + my $url1a = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + + $fields{'command'}='ungraded'; + my $url1b=&Apache::lonhtmlcommon::build_url('grades/',\%fields); + + $fields{'command'}='table'; + my $url1c=&Apache::lonhtmlcommon::build_url('grades/',\%fields); + + $fields{'command'}='all_for_one'; + my $url1d=&Apache::lonhtmlcommon::build_url('grades/',\%fields); + $fields{'command'} = 'csvform'; my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); @@ -8613,14 +8561,36 @@ sub grading_menu { $fields{'command'} = 'scantron_selectphase'; my $url4 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - my @menu = ({ categorytitle=>'Course Grading', + my @menu = ({ categorytitle=>'Hand Grading', items =>[ - { linktext => 'Manual Grading/View Submissions', - url => $url1, + { linktext => 'Select individual students to grade', + url => $url1a, permission => 'F', icon => 'edit-find-replace.png', - linktitle => 'Start the process of hand grading submissions.' + linktitle => 'Grade current resource for a selection of students.' + }, + { linktext => 'Grade ungraded submissions.', + url => $url1b, + permission => 'F', + icon => 'edit-find-replace.png', + linktitle => 'Grade all submissions that have not been graded yet.' + }, + + { linktext => 'Grading table', + url => $url1c, + permission => 'F', + icon => 'edit-find-replace.png', + linktitle => 'Grade current resource for all students.' }, + { linktext => 'Grade complete page/sequence/folder for one student', + url => $url1d, + permission => 'F', + icon => 'edit-find-replace.png', + linktitle => 'Grade all resources in current page/sequence/folder for one student.' + }]}, + { categorytitle=>'Automated Grading', + items =>[ + { linktext => 'Upload Scores', url => $url2, permission => 'F', @@ -8651,7 +8621,7 @@ sub grading_menu { $Str .= ''; $Str .= ''. ''."\n". - ''."\n". +# ''."\n". ''."\n". ''."\n". ''."\n". @@ -8667,8 +8637,7 @@ sub grading_menu { $Str .="\n"; my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box."); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< GRADINGMENUJS &commonJSfunctions($request); return $Str; } -#--- Displays the submissions first page ------- -sub submit_options { +sub ungraded { + my ($request)=@_; + &submit_options($request); +} + +sub submit_options_sequence { my ($request) = @_; my ($symb)=&get_symb($request); if (!$symb) {return '';} - my $probTitle = &Apache::lonnet::gettitle($symb); + &commonJSfunctions($request); + my $result; + my (undef,$sections) = &getclasslist('all','0'); + my $savedState = &savedState(); + my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'}); + my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'}); + my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'}); + my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); - my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box."); - $request->print(< - function checkChoice(formname,val,cmdx) { - if (val <= 2) { - var cmd = radioSelection(formname.radioChoice); - var cmdsave = cmd; - } else { - cmd = cmdx; - cmdsave = 'submission'; - } - formname.command.value = cmd; - formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+ - ":saveSub="+pullDownSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status); - if (val < 5) formname.submit(); - if (val == 5) { - if (!checkReceiptNo(formname,'notOK')) { return false;} - formname.submit(); - } - if (val < 7) formname.submit(); + # Preselect sections + my $selsec=""; + if (ref($sections)) { + foreach my $section (sort(@$sections)) { + $selsec.=''."\n"; + } } - function checkReceiptNo(formname,nospace) { - var receiptNo = formname.receipt.value; - var checkOpt = false; - if (nospace == "OK" && isNaN(receiptNo)) {checkOpt = true;} - if (nospace == "notOK" && (isNaN(receiptNo) || receiptNo == "")) {checkOpt = true;} - if (checkOpt) { - alert("$receiptalert"); - formname.receipt.value = ""; - formname.receipt.focus(); - return false; - } - return true; + $result.='
'."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n"; + + $result.=' +

+ '.&mt('Grade complete page/sequence/folder for one student').' +

+ +
+ +
+ + '.&mt('Sections').' + +   '; + $result.=' +
+ +
+ + '.&mt('Groups').' + + '.&Apache::lonstatistics::GroupSelect('group','multiple',5).' +
+ +
+ + '.&mt('Access Status').' + + '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').' +
+ +
+ +
+ + +
+ +
+ + '; + $result .= &show_grading_menu_form($symb); + return $result; +} + +sub submit_options_table { + my ($request) = @_; + my ($symb)=&get_symb($request); + if (!$symb) {return '';} + &commonJSfunctions($request); + my $result; + my (undef,$sections) = &getclasslist('all','0'); + my $savedState = &savedState(); + my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'}); + my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'}); + my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'}); + my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); + + # Preselect sections + my $selsec=""; + if (ref($sections)) { + foreach my $section (sort(@$sections)) { + $selsec.=''."\n"; + } } - -GRADINGMENUJS + + $result.='
'."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n"; + + $result.=' +

+ '.&mt('Grading table').' +

+ +
+ +
+ + '.&mt('Sections').' + +   '; + $result.=' +
+ +
+ + '.&mt('Groups').' + + '.&Apache::lonstatistics::GroupSelect('group','multiple',5).' +
+ +
+ + '.&mt('Access Status').' + + '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').' +
+ +
+ +
+ + +
+ +
+ + '; + $result .= &show_grading_menu_form($symb); + return $result; +} + + + +#--- Displays the submissions first page ------- +sub submit_options { + my ($request) = @_; + my ($symb)=&get_symb($request); + if (!$symb) {return '';} + my $probTitle = &Apache::lonnet::gettitle($symb); + &commonJSfunctions($request); - my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle); my $result; my (undef,$sections) = &getclasslist('all','0'); my $savedState = &savedState(); @@ -8773,20 +8856,15 @@ GRADINGMENUJS $result.='
'."\n". ''."\n". - ''."\n". ''."\n". - ''."\n". ''."\n". ''."\n". ''."\n"; $result.='

- '.&mt('Grade Current Resource').' + '.&mt('Select individual students to grade').'

-
- '.$table.' -
@@ -8830,42 +8908,12 @@ GRADINGMENUJS

-
-
- -
-
- -
-
- + +
-

- '.&mt('Grade Complete Folder for One Student').' -

-
-
- -
-
- -
-
'; $result .= &show_grading_menu_form($symb); return $result; @@ -8960,8 +9008,8 @@ sub process_clicker { if (!$symb) {return '';} my $result=&checkforfile_js(); $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb); - my ($table) = &showResourceInfo($symb,$env{'form.probTitle'}); - $result.=$table; +# my ($table) = &showResourceInfo($symb,$env{'form.probTitle'}); +# $result.=$table; $result.='
'."\n"; $result.=' '.&mt('Specify a file containing the class scores for current resource.'). @@ -4300,8 +4261,7 @@ sub pickStudentPage { my ($request) = shift; my $alertmsg = &mt('Please select the student you wish to grade.'); - $request->print(< + $request->print(&Apache::lonhtmlcommon::scripttag(< LISTJAVASCRIPT &commonJSfunctions($request); my ($symb) = &get_symb($request); @@ -4549,8 +4508,8 @@ sub displayPage { &Apache::loncommon::start_data_table_row(). ''.$prob. (scalar(@{$parts}) == 1 ? '' - : '
('.&mt('[_1]parts)', - scalar(@{$parts}).' ') + : '
('.&mt('[_1] parts)', + scalar(@{$parts})) ). '
'; @@ -4645,7 +4604,6 @@ sub displaySubByDates { my $interaction; my $no_increment = 1; - my %lastrndseed; for ($version=1;$version<=$$record{'version'};$version++) { my $timestamp = &Apache::lonlocal::locallocaltime($$record{$version.':timestamp'}); @@ -4663,9 +4621,9 @@ sub displaySubByDates { my @versionKeys = split(/\:/,$$record{$version.':keys'}); my @displaySub = (); foreach my $partid (@{$parts}) { - my ($hidden,$type); - $type = $$record{$version.':resource.'.$partid.'.type'}; - if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) { + my $hidden; + if (($$record{$version.':resource.'.$partid.'.type'} eq 'anonsurvey') || + ($$record{$version.':resource.'.$partid.'.type'} eq 'anonsurveycred')) { $hidden = 1; } my @matchKey = ($isTask ? sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys) @@ -4688,33 +4646,23 @@ sub displaySubByDates { if ($hidden) { $displaySub[0].= &mt('Anonymous Survey').''; } else { - 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"}); - if ($rndseed || $lastrndseed{$partid}) { - if ($rndseed ne $lastrndseed{$partid}) { - $newvariation = ' ('.&mt('New variation this try').')'; - } - } } my $responseType=($isTask ? 'Task' : $responseType->{$partid}->{$responseId}); if (!exists($orders{$partid})) { $orders{$partid}={}; } - if ((!exists($orders{$partid}->{$responseId})) || ($trial)) { + if (!exists($orders{$partid}->{$responseId})) { $orders{$partid}->{$responseId}= &get_order($partid,$responseId,$symb,$uname,$udom, - $no_increment,$type,$trial,$rndseed); + $no_increment); } - $displaySub[0].=''.$newvariation.''; # /nobreak + $displaySub[0].=''; # /nobreak $displaySub[0].='  '. - &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom,$type,$trial,$rndseed).'
'; + &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'
'; } } } @@ -4816,7 +4764,7 @@ sub updateGradeByPage { &Apache::loncommon::start_data_table_row(). '
'.$prob. (scalar(@{$parts}) == 1 ? '' - : '
('.&mt('[quant,_1,part]',scalar(@{$parts})) + : '
('.&mt('[quant,_1, part]',scalar(@{$parts})) .')').'
 '.$title.' 
'."\n"; $result.='
'."\n"; $result.=' '.&mt('Specify a file containing the clicker information for this resource.'). @@ -8993,11 +9041,10 @@ sub process_clicker { my $pcorrect=&mt("Percentage points for correct solution"); my $pincorrect=&mt("Percentage points for incorrect solution"); my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype', - {'iclicker' => 'i>clicker', - 'interwrite' => 'interwrite PRS'}); + ('iclicker' => 'i>clicker', + 'interwrite' => 'interwrite PRS')); $symb = &Apache::lonenc::check_encrypt($symb); - $result.=< + $result.= &Apache::lonhtmlcommon::scripttag(< +ENDUPFORM + $result.= < @@ -9054,7 +9102,7 @@ function sanitycheck() {


- +' ENDUPFORM $result.='
'."\n". '


'."\n"; @@ -9070,8 +9118,8 @@ sub process_clicker_file { my %Saveable_Parameters=&clicker_grading_parameters(); &Apache::loncommon::store_course_settings('grades_clicker', \%Saveable_Parameters); - - my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); + my $result=''; +# my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) { $result.=''.&mt('You need to specify a clicker ID for the correct answer').''; return $result.&show_grading_menu_form($symb); @@ -9310,7 +9358,8 @@ sub assign_clicker_grades { # FIXME: This should probably look for the first handgradeable part my $part=$$partlist[0]; # Start screen output - my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); + my $result=''; +# my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); my $heading=&mt('Assigning grades based on clicker file'); $result.=(<print(&grading_menu($request)); - } elsif ($command eq 'submit_options' && $perm{'vgr'}) { + } elsif ($command eq 'individual' && $perm{'vgr'}) { $request->print(&submit_options($request)); + } elsif ($command eq 'ungraded' && $perm{'vgr'}) { + $request->print(&submit_options($request)); + } elsif ($command eq 'table' && $perm{'vgr'}) { + $request->print(&submit_options_table($request)); + } elsif ($command eq 'all_for_one' && $perm{'vgr'}) { + $request->print(&submit_options_sequence($request)); } elsif ($command eq 'viewgrades' && $perm{'vgr'}) { $request->print(&viewgrades($request)); } elsif ($command eq 'handgrade' && $perm{'mgr'}) {