'."\n";
+ my $result = ''."\n";
+
+ $result.=''."\n";
$result.=''."\n";
@@ -2062,7 +2271,8 @@ sub viewGradeaStu_form {
my ($classlist,$sections) = &getclasslist('all','0');
my $result.=''."\n";
$result.=''."\n";
$result.=' | '."\n";
return $result;
}
+#--- Handgrading problems by page/sequence for each student ---
+sub gradeByPage_form {
+ my ($symb,$url,$response,$handgrade) = @_;
+ my ($classlist,$sections) = &getclasslist('all','0');
+ my $result.=''."\n";
+ $result.=''."\n";
+ $result.=' ';
+ $result.='Handgrade an Individual Student\'s by Page/Sequence | '."\n";
+ $result.=''."\n";
+ $result.=''."\n";
+ $result.=' | '."\n";
+ $result.=' | '."\n";
+ return $result;
+}
+
+
+sub pickStudentPage {
+ my ($request) = shift;
+
+ $request->print(<
+
+function checkPickOne(formname) {
+ var user = radioSelection(formname.pickOne);
+ if (user == null) {
+ alert("Please select the student you wish to grade.");
+ return;
+ }
+ formname.submit();
+}
+
+function radioSelection(radioButton) {
+ var selection=null;
+ for (var i=0; i
+LISTJAVASCRIPT
+
+ my ($symb,$url) = &get_symb_and_url();
+ my $cdom = $ENV{"course.$ENV{'request.course.id'}.domain"};
+ my $cnum = $ENV{"course.$ENV{'request.course.id'}.num"};
+ my $getsec = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
+
+ my $result=' '.
+ 'Manual Grading by Page or Sequence';
+
+ my ($pagepath,$pagename,$type,$mapId) = ($symb =~ /(.*\/)(.*?\.(page|sequence))___(\d+)___/);
+ my $curtitle = &Apache::lonnet::metadata($pagepath.$pagename,'title');
+
+ $result.=''."\n";
+
+ $studentTable.=&show_grading_menu_form($symb,$url);
+ $request->print($studentTable);
+
+ return '';
+}
+
+sub getSymbMap {
+ my $navmap = Apache::lonnavmaps::navmap-> new(
+ $ENV{'request.course.fn'}.'.db',
+ $ENV{'request.course.fn'}.'_parms.db',1, 1);
+
+ my $res = $navmap->firstResource(); # temp resource to access constants
+ $navmap->init();
+
+ # End navmap using boilerplate
+
+ my $iterator = $navmap->getIterator(undef, undef, undef, 1);
+ my $depth = 1;
+ $iterator->next(); # ignore first BEGIN_MAP
+ my $curRes = $iterator->next();
+
+ my %symbx = ();
+ my @titles = ();
+ my $minder=0;
+ while ($depth > 0) {
+ if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}
+ if ($curRes == $iterator->END_MAP()) { $depth--; }
+
+ if (ref($curRes) && $curRes->is_map()) {
+ my $title = $curRes->compTitle();
+ push @titles,$minder.'.'.$title; # minder, just in case two titles are identical
+ $symbx{$minder.'.'.$title} = $curRes->symb();
+ $minder++;
+ }
+ $curRes = $iterator->next();
+ }
+
+ $navmap->untieHashes();
+ return \@titles,\%symbx;
+}
+
+sub displayPage {
+ my ($request) = shift;
+
+ my $cdom = $ENV{"course.$ENV{'request.course.id'}.domain"};
+ my $cnum = $ENV{"course.$ENV{'request.course.id'}.num"};
+ my $getsec = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
+ my $pageTitle = $ENV{'form.page'};
+ my (undef,undef,$fullname) = &getclasslist($getsec,'0');
+ my ($uname,$udom) = split(/:/,$ENV{'form.pickOne'});
+ my ($idx,$showtitle) = ($pageTitle =~ /(\d+)\.(.*)/);
+
+ my $result=' '.$showtitle.'';
+ $result.=' Student: '.$$fullname{$ENV{'form.pickOne'}}.
+ ' ('.$uname.($udom eq $cdom ? '':':'.$udom).')'."\n";
+
+ my ($pg_titles,$pg_symbx) = &getSymbMap();
+
+ my $navmap = Apache::lonnavmaps::navmap-> new(
+ $ENV{'request.course.fn'}.'.db',
+ $ENV{'request.course.fn'}.'_parms.db',1, 1);
+
+ my ($mapUrl, $id, $resUrl) = split(/___/, $$pg_symbx{$ENV{'form.page'}});
+ my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
+
+ my $iterator = $navmap->getIterator($map->map_start(),
+ $map->map_finish());
+
+ my $depth = 1;
+ $iterator->next(); # skip the first BEGIN_MAP
+ my $curRes = $iterator->next(); # for "current resource"
+ my %symbx = ();
+ my @titles = ();
+ my %parts = ();
+ my $ctr=0;
+ my $minder=0;
+ while ($depth > 0 && $ctr < 100) { # ctr, just in case it never gets out of loop
+ if($curRes == $iterator->BEGIN_MAP) { $depth++; }
+ if($curRes == $iterator->END_MAP) { $depth++; }
+
+ if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) {
+ my $parts = $curRes->parts();
+ my $title = $curRes->compTitle();
+ push @titles,$minder.'.'.$title; # minder, just in case two titles are identical
+ if (scalar(@{$parts}) > 1) { shift @{$parts}; }
+ for my $part (@$parts) {
+ $result.='title='.$title.'part='.$part.': ';
+ }
+ $parts{$minder.'.'.$title} = join '::',@$parts;
+
+ $symbx{$minder.'.'.$title} = $curRes->symb();
+ $minder++;
+
+ }
+ $curRes = $iterator->next();
+ $ctr++;
+ }
+
+ $navmap->init();
+ $request->print($result);
+
+ my $studentTable.=
+ ''.
+ ''.
+ ' No | '.
+ ' Title | '.
+ ' Answer | '.
+ ' Grade | ';
+ my $question=1;
+ foreach (@titles) {
+ my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/);
+ $studentTable.=''.$question.' | ';
+ $studentTable.=' '.$showtitle.' | ';
+ $studentTable.=' '.
+ &Apache::loncommon::get_student_answers($symbx{$_},$uname,$udom,$ENV{'request.course.id'}).' | ';
+
+ my (undef,undef,$requesturl)=split(/___/,$symbx{$_});
+ $requesturl=&Apache::lonnet::clutter($requesturl);
+ my $subresult=&Apache::lonnet::ssi($requesturl,
+ ('grade_target' => 'analyze'),
+ ('grade_domain' => $udom),
+ ('grade_user' => $uname),
+ ('grade_symb' => $symbx{$_}),
+ ('grade_courseid' => $ENV{'request.course.id'}));
+ (undef,$subresult)=split(/_HASH_REF__/,$subresult,2);
+ my %analyze=&Apache::lonnet::str2hash($subresult);
+
+ $studentTable.=' ';
+ while (my($key,$value) = each (%analyze)){
+ $studentTable.='key='.$key.'->value='.$value.' ';
+ }
+ $studentTable.=' | ';
+ $question++;
+
+ }
+
+ $studentTable.='
| ';
+# $result.=''."\n";
+
+ $request->print($studentTable);
+
+
+ return '';
+}
+
#--- Form to input a receipt number ---
sub verifyReceipt_form {
my ($symb,$url) = @_;
- my $cdom=$ENV{"course.$ENV{'request.course.id'}.domain"};
- my $cnum=$ENV{"course.$ENV{'request.course.id'}.num"};
+ my $result = ''."\n";
+
my $hostver=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'});
- my $result.=''."\n";
+ $result.=''."\n";
$result.=''."\n";
$result.=' Verify a Submission Receipt Issued by this Server | '."\n";
$result.=''."\n";
- $result.=' |
|
|
|
|