--- loncom/homework/essayresponse.pm	2006/10/16 09:27:54	1.76
+++ loncom/homework/essayresponse.pm	2007/10/15 09:47:29	1.86
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # essay (ungraded) style responses
 #
-# $Id: essayresponse.pm,v 1.76 2006/10/16 09:27:54 foxr Exp $
+# $Id: essayresponse.pm,v 1.86 2007/10/15 09:47:29 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -31,7 +31,6 @@ use strict;
 use Apache::lonxml();
 use Apache::lonnet;
 use Apache::lonlocal;
-use lib '/home/httpd/lib/perl/';
 use LONCAPA;
  
 
@@ -147,13 +146,14 @@ sub end_essayresponse {
 #
                 if ($award eq 'SUBMITTED') {
 		    my ($symb,$crsid,$domain,$name)=
-			&Apache::lonxml::whichuser();
+			&Apache::lonnet::whichuser();
 		    if ($crsid) {
-			my $akey=$name.'.'.$domain.'.'.$crsid;
+			my $akey=join('.',&escape($name),&escape($domain),
+				      &escape($crsid));
 			my $essayurl=
 			    &Apache::lonnet::declutter($ENV{'REQUEST_URI'});
 			my ($adom,$aname,$apath)=
-			    ($essayurl=~/^(\w+)\/(\w+)\/(.*)$/);
+			    ($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/);
                         $apath=&escape($apath);
 			$apath=~s/\W/\_/gs;
 			&Apache::lonnet::put('nohist_essay_'.$apath,
@@ -170,29 +170,61 @@ sub end_essayresponse {
 	$result .= &Apache::inputtags::exam_score_line($target);
 
     } elsif ($target eq 'answer') {
-	if ($env{'form.answer_output_mode'} eq 'tex') {
-	    $result .= '\begin{tabular}{|l|}';
-	    $result .= '\hline';
-	    $result .= ' Answer for essay will be hand graded \\\\  ';
-	    $result .= '\\hline';
-	    $result .= '\end{tabular}';
-	    $result .= '\vskip 3mm';
-	} else {
-	    $result.=&Apache::response::answer_header($$tagstack[-1]);
-	    $result.=&Apache::response::answer_part($$tagstack[-1],'');
-	    $result.=&Apache::response::answer_footer($$tagstack[-1]);
-	}
+	$result.=&Apache::response::answer_header($$tagstack[-1]);
+	my $answer = &mt('Essay will be hand graded.');
+	$result.=&Apache::response::answer_part($$tagstack[-1],$answer,
+						{'no_verbatim' => 1});
+	$result.=&Apache::response::answer_footer($$tagstack[-1]);
+    }
+    if ($target eq 'web') {
+	&Apache::response::setup_prior_tries_hash(\&format_prior_response,
+						  ['portfiles',
+						   'uploadedurl']);
     }
 
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
 	$target eq 'tex' || $target eq 'analyze') {
-	&Apache::lonxml::increment_counter($increment);
+	&Apache::lonxml::increment_counter($increment, "$part.$id");
+
+	if ($target eq 'analyze') {
+	    &Apache::lonhomework::set_bubble_lines();
+	}
     }
     &Apache::response::end_response;
 
     return $result;
 }
 
+sub format_prior_response {
+    my ($mode,$answer,$other_data) = @_;
+    my $output;
+
+    my (undef,undef,$udom,$uname) = &Apache::lonnet::whichuser();
+    my $port_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio/';
+
+    my $file_list;
+
+    foreach my $file (split(/\s*,\s*/,
+			    $other_data->[0].','.$other_data->[1])) {
+	next if ($file!~/\S/);
+	if ($file !~ m{^/uploaded/}) { $file=$port_url.$file; }
+	$file=~s|/+|/|g;
+	&Apache::lonnet::allowuploaded('/adm/essayresponse',$file);
+	$file_list.='<li><span class="LC_nobreak"><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.
+	    &Apache::loncommon::icon($file).'" alt="file icon" border="0" /> '.$file.
+	    '</a></span></li>'."\n";
+    }
+    if ($file_list) {
+	$output.= &mt('Submitted Files').'<ul>'.$file_list.'</ul>';
+    }
+    if ($answer =~ /\S/) {
+	$output.='<p>'.&mt('Submitted text').
+	    '<blockquote>'.$answer.'</blockquote></p>';
+    }
+
+    return '<div class="LC_prior_essay">'.$output.'</div>';
+}
+
 sub file_submission {
     my ($part,$id,$which,$award,$uploadedflag)=@_;
     my $files;
@@ -218,7 +250,7 @@ sub file_submission {
 	    $uploadedfiletypes=','.$uploadedfiletypes.',';
 	    foreach my $file (@submitted_files) {
 		my ($extension)=($file=~/\.(\w+)$/);
-		unless ($uploadedfiletypes=~/\,$extension\,/i) {
+		unless ($uploadedfiletypes=~/\,\s*\Q$extension\E\s*\,/i) {
 		    $$award='INVALID_FILETYPE';
 		}
 	    }
@@ -227,7 +259,7 @@ sub file_submission {
 	    $$uploadedflag=1;
 	}
 	if ($$award ne 'INVALID_FILETYPE' && $which eq 'portfiles') {
-	    my ($symb,$crsid,$domain,$name)=&Apache::lonxml::whichuser();
+	    my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();
 	    &Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]);
 	    &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,[$symb,$crsid]);
 	    &Apache::lonnet::clear_selected_files($name);
@@ -241,7 +273,7 @@ sub file_submission {
 	}
     } elsif ($which eq 'portfiles' &&
 	     $Apache::lonhomework::history{"resource.$part.$id.$which"}) {
-	my ($symb,$crsid,$domain,$name)=&Apache::lonxml::whichuser();
+	my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();
 	&Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]);
 	$Apache::lonhomework::results{"resource.$part.$id.$which"}="";
     }