'.
''.
@@ -697,21 +672,21 @@ sub sub_page_js {
pWin.document.write(" ");
pWin.document.write("Subject | ");
pWin.document.write(" | ");
- pWin.document.write(" | ");
+ pWin.document.write(" | ");
}
function displaySavedMsg(ctr,msg,shwsel) {
pWin.document.write("");
pWin.document.write(""+ctr+" | ");
pWin.document.write(" | ");
- pWin.document.write(" | ");
+ pWin.document.write(" | ");
}
function newMsg(newmsg,shwsel) {
pWin.document.write("");
pWin.document.write("New | ");
pWin.document.write(" | ");
- pWin.document.write(" | ");
+ pWin.document.write(" | ");
}
function msgTail() {
@@ -821,6 +796,32 @@ SUBJAVASCRIPT
}
+sub show_problem {
+ my ($request,$symb,$uname,$udom,$removeform) = @_;
+ my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,
+ $ENV{'request.course.id'});
+ if ($removeform) {
+ $rendered=~s|||g;
+ $rendered=~s|name="submit"|name="would_have_been_submit"|g;
+ }
+ my $companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom,
+ $ENV{'request.course.id'});
+ if ($removeform) {
+ $companswer=~s|||g;
+ $rendered=~s|name="submit"|name="would_have_been_submit"|g;
+ }
+ my $result.='';
+ $result.='';
+ $result.=' View of the problem - '.$ENV{'form.fullname'}.
+ ' | '.$rendered.' ';
+ $result.='Correct answer: '.$companswer;
+ $result.=' | ';
+ $result.=' |
';
+ $request->print($result);
+}
+
# --------------------------- show submissions of a student, option to grade
sub submission {
my ($request,$counter,$total) = @_;
@@ -835,8 +836,7 @@ sub submission {
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url)));
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : '');
- $ENV{'form.vProb'} = $ENV{'form.vProb'} ne '' ? $ENV{'form.vProb'} : 'yes';
- my ($classlist,$seclist,$ids,$stusec,$fullname);
+# $ENV{'form.vProb'} = $ENV{'form.vProb'} ne '' ? $ENV{'form.vProb'} : 'yes';
# header info
if ($counter == 0) {
@@ -847,18 +847,7 @@ sub submission {
# option to display problem, only once else it cause problems
# with the form later since the problem has a form.
if ($ENV{'form.vProb'} eq 'yes') {
- my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,
- $ENV{'request.course.id'});
- my $companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom,
- $ENV{'request.course.id'});
- my $result.='';
- $result.='';
- $result.=' View of the problem - '.$ENV{'form.fullname'}.
- ' | '.$rendered.' ';
- $result.='Correct answer: '.$companswer;
- $result.=' | ';
- $result.=' |
';
- $request->print($result);
+ &show_problem($request,$symb,$uname,$udom,0);
}
# kwclr is the only variable that is guaranteed to be non blank
@@ -921,6 +910,11 @@ KEYWORDS
}
}
+ if ($ENV{'form.vProb'} eq 'all') {
+ $request->print('
');
+ &show_problem($request,$symb,$uname,$udom,1);
+ }
+
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname);
my ($partlist,$handgrade) = &response_type($url);
@@ -937,49 +931,61 @@ KEYWORDS
# If this is handgraded, then check for collaborators
my @col_fullnames;
+ my ($classlist,$fullname);
if ($ENV{'form.handgrade'} eq 'yes') {
my @col_list;
- ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist('all','0');
+ ($classlist,undef,$fullname) = &getclasslist('all','0');
for (keys (%$handgrade)) {
my $ncol = &Apache::lonnet::EXT('resource.'.$_.
- '.maxcollaborators',$symb,$udom,$uname);
- if ($ncol > 0) {
- s/\_/\./g;
- if ($record{'resource.'.$_.'.collaborators'} ne '') {
- my (@collaborators) = split(/,?\s+/,
- $record{'resource.'.$_.'.collaborators'});
- my (@badcollaborators);
- if (scalar(@collaborators) != 0) {
- $result.='Collaborators: ';
- foreach my $collaborator (@collaborators) {
- $collaborator = $collaborator =~ /\@|:/ ?
- (split(/@|:/,$collaborator))[0] : $collaborator;
- next if ($collaborator eq $uname);
- if (!grep /^$collaborator:/i,keys %$classlist) {
- push @badcollaborators,$collaborator;
- next;
- }
- push @col_list, $collaborator;
- my ($lastname,$givenn) = split(/,/,$$fullname{$collaborator.':'.$udom});
- push @col_fullnames, $givenn.' '.$lastname;
- $result.=$$fullname{$collaborator.':'.$udom}.' ';
- }
- $result.=' '."\n";
- $result.=''.
- 'This student has submitted '.
- (scalar (@badcollaborators) > 1 ? '' : 'an').
- ' invalid collaborator'.(scalar (@badcollaborators) > 1 ? 's. ' : '. ').
- (join ', ',@badcollaborators).' | '
- if (scalar(@badcollaborators) > 0);
-
- $result.=''.
- 'This student has submitted too many collaborators. Maximum is '.
- $ncol.'. | ' if (scalar(@collaborators) > $ncol);
- $result.=''."\n";
- }
- }
- }
+ '.maxcollaborators',
+ $symb,$udom,$uname);
+ next if ($ncol <= 0);
+ s/\_/\./g;
+ next if ($record{'resource.'.$_.'.collaborators'} eq '');
+ my (@collaborators) = split(/,?\s+/,
+ $record{'resource.'.$_.'.collaborators'});
+ my (@badcollaborators);
+ if (scalar(@collaborators) != 0) {
+ $result.='Collaborators: ';
+ foreach my $collaborator (@collaborators) {
+ my ($co_name,$co_dom) = split /\@|:/,$collaborator;
+ $co_dom = $udom if (! defined($co_dom));
+ next if ($co_name eq $uname && $co_dom eq $udom);
+ # Doing this grep allows 'fuzzy' specification
+ my @Matches = grep /^$co_name:$co_dom/i,
+ keys %$classlist;
+ if (! scalar(@Matches)) {
+ push @badcollaborators,$collaborator;
+ next;
+ }
+ push @col_list, @Matches;
+ foreach (@Matches) {
+ my ($lastname,$givenn) = split(/,/,$$fullname{$_});
+ push @col_fullnames, $givenn.' '.$lastname;
+ $result.=$$fullname{$_}.' ';
+ }
+ }
+ $result.=' '."\n";
+ if (scalar(@badcollaborators) > 0) {
+ $result.='';
+ $result.='This student has submitted ';
+ if (scalar(@badcollaborators) == 1) {
+ $result .= 'an invalid collaborator';
+ } else {
+ $result .= 'invalid collaborators';
+ }
+ $result .= ': '.join(', ',@badcollaborators);
+
+ }
+ if (scalar(@collaborators > $ncol)) {
+ $result .= '';
+ $result .= 'This student has sumbitted too many '.
+ 'collaborators. Maximum is '.$ncol;
+ $result .= ' | ';
+ }
+ $result.=''."\n";
+ }
}
}
$request->print($result."\n");
@@ -1103,9 +1109,15 @@ KEYWORDS
'onChange="javascript:clearRadBox(this.form.RADVAL'.$counter.'_'.$partid.
',this.form.GD_BOX'.$counter.'_'.$partid.
',this.form.GD_SEL'.$counter.'_'.$partid.
- ',this.form.stores'.$counter.'_'.$partid.')" />'."\n".
- ''.
- ''."  \n";
+ ',this.form.stores'.$counter.'_'.$partid.')" >'."\n";
+ if ($record{'resource.'.$partid.'.solved'} eq 'excused') {
+ $result.=''.
+ '';
+ } else {
+ $result.=''.
+ '';
+ }
+ $result.="  \n";
$result.='';
$result.=' | '."\n";
$request->print($result);
@@ -1161,9 +1173,9 @@ sub get_last_submission {
for ($version=1;$version<=$returnhash{'version'};$version++) {
foreach (sort(split(/\:/,$returnhash{$version.':keys'}))) {
$lasthash{$_}=$returnhash{$version.':'.$_};
- if ($returnhash{$version.':'.$_} =~ /(SUBMITTED|DRAFT)$/) {
+# if ($returnhash{$version.':'.$_} =~ /(SUBMITTED|DRAFT)$/) {
$timestamp = scalar(localtime($returnhash{$version.':timestamp'}));
- }
+# }
}
}
foreach ((keys %lasthash)) {
@@ -1187,8 +1199,13 @@ sub keywords_highlight {
(my $styleoff = $styleon) =~ s/\\<\//;
my @keylist = split(/[,\s+]/,$ENV{'form.keywords'});
foreach (@keylist) {
- $string =~ s/\b$_(\b|\.)/\$styleon$_$styleoff\<\/font\>/gi;
+ $string =~ s/\b\Q$_\E(\b|\.)/\$styleon$_$styleoff\<\/font\>/gi;
}
+ # This is not really the right place to do this, but I cannot find a
+ # better one at this time. So here we go - the m in the s:::mg causes
+ # ^ to match the beginning of a new line. So we replace(???) the beginning
+ # of the line with to make things formatted a little better.
+ $string =~ s:^: :mg;
return $string;
}
@@ -1209,7 +1226,7 @@ sub processHandGrade {
my $includemsg = $ENV{'form.includemsg'.$ctr};
my ($subject,$message,$msgstatus) = ('','','');
- if ($includemsg =~ /savemsg|new$ctr/) {
+ if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) {
$subject = $ENV{'form.msgsub'} if ($includemsg =~ /^msgsub/);
my (@msgnum) = split(/,/,$includemsg);
foreach (@msgnum) {
@@ -1297,7 +1314,7 @@ sub processHandGrade {
$laststu = $firststu if ($ctr > $ngrade);
}
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my (@parsedlist,@nextlist);
my ($nextflg) = 0;
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
@@ -1359,8 +1376,12 @@ sub saveHandGrade {
my %newrecord;
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {
if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') {
- $newrecord{'resource.'.$_.'.solved'} = 'excused'
- if ($record{'resource.'.$_.'.solved'} ne 'excused');
+ if ($record{'resource.'.$_.'.solved'} ne 'excused') {
+ $newrecord{'resource.'.$_.'.solved'} = 'excused';
+ if (exists($record{'resource.'.$_.'.awarded'})) {
+ $newrecord{'resource.'.$_.'.awarded'} = '';
+ }
+ }
} else {
my $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ?
$ENV{'form.GD_BOX'.$newflg.'_'.$_} :
@@ -1636,7 +1657,7 @@ sub viewgrades {
$weight{$partid}.' (problem weight)'."\n";
$result.= ' '.
+ $weight{$partid}.')"> '.
''.
' | '."\n";
$ctsparts++;
@@ -1678,7 +1699,7 @@ sub viewgrades {
#get info for each student
#list all the students - with points and grade status
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my $ctr = 0;
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
my ($uname,$udom) = split(/:/);
@@ -1704,8 +1725,8 @@ sub viewstudentgrade {
''.$fullname.''.
''.$uname.' | '.$udom.' | '."\n";
- foreach my $part (@$parts) {
- my ($part,$type) = &split_part_type($part);
+ foreach my $apart (@$parts) {
+ my ($part,$type) = &split_part_type($apart);
my $score=$record{"resource.$part.$type"};
if ($type eq 'awarded') {
my $pts = $score eq '' ? '' : $score*$$weight{$part};
@@ -1763,7 +1784,7 @@ sub editgrades {
'ungraded' =>'ungraded_attempted',
'nothing' => '',
);
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my ($classlist,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my (@partid);
my %weight = ();
@@ -2181,7 +2202,7 @@ sub gradingmenu {
#--- Menu for grading a section or the whole class ---
sub view_edit_entire_class_form {
my ($symb,$url)=@_;
- my ($classlist,$sections) = &getclasslist('all','0');
+ my ($classlist,$sections,undef) = &getclasslist('all','0');
my $result.=''."\n";
$result.=''."\n";
$result.=' Grade Entire Section or Class | '."\n";
|
|