--- loncom/homework/inputtags.pm 2001/11/12 20:27:28 1.46
+++ loncom/homework/inputtags.pm 2002/03/08 19:55:00 1.54
@@ -1,12 +1,37 @@
# The LearningOnline Network with CAPA
# input definitons
+#
+# $Id: inputtags.pm,v 1.54 2002/03/08 19:55:00 albertel Exp $
+#
+# Copyright Michigan State University Board of Trustees
+#
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
# 2/19 Guy
package Apache::inputtags;
use strict;
-sub BEGIN {
- &Apache::lonxml::register('Apache::inputtags',('textarea','textline','datasubmission'));
+BEGIN {
+ &Apache::lonxml::register('Apache::inputtags',('textfield','textline','datasubmission'));
}
@@ -46,7 +71,7 @@ sub end_input {
return '';
}
-sub start_textarea {
+sub start_textfield {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result = "";
my $id = &start_input($parstack,$safeeval);
@@ -64,13 +89,20 @@ sub start_textarea {
}
if ($oldresponse ne '') {
#get rid of any startup text if the user has already responded
- &Apache::lonxml::get_all_text("/textarea",$$parser[$#$parser]);
+ &Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
+ }
+ }
+ if ($target eq 'grade') {
+ my $seedtext=&Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
+ if ($seedtext eq $ENV{'form.HWVAL'.$Apache::inputtags::response[-1]}) {
+ # if the seed text is still there it wasn't a real submission
+ $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']}='';
}
}
return $result;
}
-sub end_textarea {
+sub end_textfield {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
if ($target eq 'web') {
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
@@ -98,8 +130,7 @@ sub start_textline {
$result=''.$oldresponse.'';
}
} elsif ($target eq 'edit') {
- $result=&Apache::edit::tag_start($target,$token,
- &Apache::lonxml::description($token));
+ $result=&Apache::edit::tag_start($target,$token);
$result.=&Apache::edit::text_arg('Size:','size',$token,'5')."";
$result.=&Apache::edit::end_table;
} elsif ($target eq 'modified') {
@@ -154,7 +185,14 @@ sub finalizeawards {
my $award;
if ($#_ == '-1') { $result = "NO_RESPONSE"; }
if ($result eq '' ) {
- foreach $award (@_) { if ($award eq '') {$result='MISSING_ANSWER'; last;}}
+ my $blankcount;
+ foreach $award (@_) {
+ if ($award eq '') {
+ $result='MISSING_ANSWER';
+ $blankcount++;
+ }
+ }
+ if ($blankcount == ($#_ + 1)) { $result = 'NO_RESPONSE'; }
}
if ($result eq '' ) {
foreach $award (@_) { if ($award eq 'ERROR') {$result='ERROR'; last;}}
@@ -261,9 +299,15 @@ sub decideoutput {
sub setgradedata {
my ($award,$id,$previously_used) = @_;
# if the student already has it correct, don't modify the status
- if ( $Apache::lonhomework::history{"resource.$id.solved"} !~
+ if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER') {
+ $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;
+ return '';
+ } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~
/^correct/ ) {
#handle assignment of tries and solved status
+ if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
+ $Apache::lonhomework::results{"resource.$id.afterduedate"}='';
+ }
if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {
$Apache::lonhomework::results{"resource.$id.tries"} =
$Apache::lonhomework::history{"resource.$id.tries"} + 1;
@@ -318,12 +362,8 @@ sub grade {
foreach $response (@Apache::inputtags::responselist) {
&Apache::lonxml::debug("looking for response.$id.$response.awarddetail");
my $value=$Apache::lonhomework::results{"resource.$id.$response.awarddetail"};
- if ( $value ne '' ) {
- &Apache::lonxml::debug("keeping $value from $response for $id");
- push (@awards,$value);
- } else {
- &Apache::lonxml::debug("skipping $value from $response for $id");
- }
+ &Apache::lonxml::debug("keeping $value from $response for $id");
+ push (@awards,$value);
}
my $finalaward = &finalizeawards(@awards);
my $previously_used;
@@ -346,6 +386,7 @@ sub gradestatus {
my ($id) = @_;
my $showbutton = 1;
my $message = '';
+ my $latemessage = '';
my $trystr='';
my $button='';
my $previousmsg='';
@@ -377,14 +418,18 @@ sub gradestatus {
}
if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}
if ( $showbutton ) {
- $button = '
';
+ $button = '
';
+ }
+ if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
+ #last submissions was after due date
+ $latemessage="