'.' ';
+ &mt('Collaborators:').' '.
+ &mt('(Enter a maximum of [quant,_1,collaborator] using username or username:domain, e.g. smithje or smithje:[_2].)',$ncol,$env{'user.domain'});
+ if ($ncol > 1) {
+ $result .= ' '.&mt('If entering more than one, use spaces to separate the collaborators.');
+ }
+ $result .= ' ';
$result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);
$result .='
';
}
- $result.=&Apache::inputtags::file_selector($part,$id,
- $uploadedfiletypes,'both');
+ my $filesfrom = 'both';
+ my $stuname = &Apache::lonnet::EXT('user.name');
+ my $studom = &Apache::lonnet::EXT('user.domain');
+ if (!&Apache::lonnet::usertools_access($stuname,$studom,'portfolio')) {
+ $filesfrom = 'uploadonly';
+ }
+ $result.=&Apache::inputtags::file_selector($part,$id,$uploadedfiletypes,
+ $filesfrom,undef,$maxfilesize);
$result.='
';
} elsif ($target eq 'web' &&
$Apache::inputtags::status[-1] ne 'CAN_ANSWER') {
@@ -128,7 +144,8 @@ sub end_essayresponse {
$increment=&Apache::response::scored_response($part,$id);
} elsif ( &Apache::response::submitted() ) {
my $response = $env{'form.HWVAL_'.$id};
- my $filename= $env{'form.HWFILE'.$part.'_'.$id.'.filename'};
+ my $filename = $env{'form.HWFILE'.$part.'_'.$id.'.filename'} ||
+ $env{'form.HWFILETOOBIG'.$part.'_'.$id};
my $portfiles = $env{'form.HWPORT'.$part.'_'.$id};
if (( $response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/)) {
my $award='DRAFT';
@@ -136,8 +153,9 @@ sub end_essayresponse {
$award='SUBMITTED';
}
my $uploadedflag=0;
- &file_submission($part,$id,'filename',\$award,\$uploadedflag);
- &file_submission($part,$id,'portfiles',\$award,\$uploadedflag);
+ my $totalsize=0;
+ &file_submission($part,$id,'filename',\$award,\$uploadedflag,\$totalsize);
+ &file_submission($part,$id,'portfiles',\$award,\$uploadedflag,\$totalsize);
$Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$award;
my %previous=&Apache::response::check_for_previous($response,$part,$id);
@@ -149,11 +167,12 @@ sub end_essayresponse {
my ($symb,$crsid,$domain,$name)=
&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,74 +189,202 @@ 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::analyze{"$part.$id.type"} = 'essayresponse';
+ push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");
+ &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.='