--- loncom/homework/essayresponse.pm	2006/09/25 19:30:56	1.75
+++ loncom/homework/essayresponse.pm	2007/08/10 20:09:30	1.83
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # essay (ungraded) style responses
 #
-# $Id: essayresponse.pm,v 1.75 2006/09/25 19:30:56 albertel Exp $
+# $Id: essayresponse.pm,v 1.83 2007/08/10 20:09:30 albertel 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,
@@ -171,9 +171,16 @@ sub end_essayresponse {
 
     } elsif ($target eq 'answer') {
 	$result.=&Apache::response::answer_header($$tagstack[-1]);
-	$result.=&Apache::response::answer_part($$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') {
@@ -184,6 +191,36 @@ sub end_essayresponse {
     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 +255,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);
@@ -232,7 +269,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"}="";
     }