Diff for /loncom/homework/externalresponse.pm between versions 1.20 and 1.21

version 1.20, 2013/08/22 07:39:15 version 1.21, 2013/08/22 10:13:34
Line 125  sub start_externalresponse { Line 125  sub start_externalresponse {
                         $result .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');                          $result .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');
             }              }
                     $result .= '</label><br />';                      $result .= '</label><br />';
                     $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);                      $result .= &Apache::essayresponse::check_collaborators($ncol,$coll) if ($coll =~ /\w+/);
                     $result .= &Apache::lonhtmlcommon::row_closure();                      $result .= &Apache::lonhtmlcommon::row_closure();
                 }                  }
                 my $filesfrom = 'both';                  my $filesfrom = 'both';
Line 180  sub end_externalresponse { Line 180  sub end_externalresponse {
         my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};          my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};
         my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');          my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');
         if ($collaborators ne $previous_list) {          if ($collaborators ne $previous_list) {
 #           &Apache::lonnet::logthis("New collaborators [$collaborators] [$previous_list]");  #          &Apache::lonnet::logthis("New collaborators [$collaborators] [$previous_list]");
            $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators;             $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators;
         }          }
  if (  &Apache::response::submitted('scantron') ) {   if (  &Apache::response::submitted('scantron') ) {
     my $increment=&Apache::response::scored_response($part,$id);      my $increment=&Apache::response::scored_response($part,$id);
  } elsif ( &Apache::response::submitted() ) {   } elsif ( &Apache::response::submitted() ) {
     my $response = &Apache::response::getresponse();  
             my $files = $Apache::lonhomework::history{"resource.$part.$id.portfiles"};  
             $files .=   $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};  
 #           &Apache::lonnet::logthis("Submitted Files : ". $files);  
     if (( $response =~ /[^\s]/) || $files) {  
  my $url = &Apache::lonxml::get_param('url',$parstack,$safeeval);  
  my $answer = &Apache::lonxml::get_param('answer',$parstack,$safeeval);  
  my %form = &Apache::lonxml::get_param_var('form',$parstack,$safeeval);  
  $form{'LONCAPA_student_response'}=$response;  
  $form{'LONCAPA_correct_answer'}=$answer;  
  $form{'LONCAPA_language'}=  
     &Apache::lonnet::metadata($ENV{'REQUEST_URI'},'language');  
                 $form{'LONCAPA_student_submitted_files'} = $files;  
  &Apache::lonxml::debug("Asking $url, with:");  
  &Apache::lonhomework::showhash(%form);  
                 my $udom = &Apache::lonnet::EXT('user.domain');  
                 my $uname = &Apache::lonnet::EXT('user.name');  
                 my $symb = $env{'resource.symb'};  
                 my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname);  
  my $ua = LWP::UserAgent->new;  
  my $res = $ua->request(POST $url, \%form);  
  my %previous = &Apache::response::check_for_previous($response,  
      $part,$id);  
  %Apache::loncapagrade::results=();  
  $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;  
  if ($res->is_error()) {  
     $Apache::loncapagrade::results{'awarddetail'}='ERROR';  
  } else {  
     &Apache::lonxml::register('Apache::loncapagrade',  
       ('loncapagrade'));  
     @Apache::scripttag::parser_env = @_;  
     my $result=&Apache::scripttag::xmlparse($res->{_content});  
     &Apache::lonxml::debug("Got a result of :$result:");  
  }  
  foreach my $key (keys(%Apache::loncapagrade::results)) {  
     $Apache::lonhomework::results{"resource.$part.$id.$key"}=  
  $Apache::loncapagrade::results{$key};  
  }  
                 $Apache::externalresponse::message=$Apache::loncapagrade::results{'message'};  
  &Apache::response::handle_previous(\%previous,  
    $Apache::loncapagrade::results{'awarddetail'});  
                 if ($Apache::loncapagrade::results{'awarddetail'} eq 'ASSIGNED_SCORE') {  
                    $Apache::lonhomework::results{"resource.$part.$id.awarded"}=  
                         1.*$Apache::loncapagrade::results{"awarded"};  
                 }  
  &Apache::lonxml::debug("response of");  
  &Apache::lonhomework::showhash(%$res);  
  &Apache::lonxml::debug("capagrade of");  
  &Apache::lonhomework::showhash(%Apache::loncapagrade::results);  
  &Apache::lonxml::debug("results of");  
  &Apache::lonhomework::showhash(%Apache::lonhomework::results);  
     }  
             my $response      = $env{'form.HWVAL_'.$id};              my $response      = $env{'form.HWVAL_'.$id};
             my $jspart=$part;              my $jspart=$part;
             $jspart=~s/\./_/g;              $jspart=~s/\./_/g;
Line 268  sub end_externalresponse { Line 216  sub end_externalresponse {
                 }                  }
                 my $uploadedflag=0;                  my $uploadedflag=0;
                 my $totalsize=0;                  my $totalsize=0;
                 &file_submission($part,$id,\$award,\$uploadedflag,\$totalsize,\@deletions);                  &Apache::essayresponse::file_submission($part,$id,\$award,\$uploadedflag,\$totalsize,\@deletions);
                 $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;                  $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;
                 $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$award;                  $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$award;
                 my %previous=&Apache::response::check_for_previous($response,$part,$id);                  my %previous=&Apache::response::check_for_previous($response,$part,$id);
Line 296  sub end_externalresponse { Line 244  sub end_externalresponse {
                     }                      }
                 }                  }
             }              }
       my $response = &Apache::response::getresponse();
               my $filestest;
               my $fileshistory = $Apache::lonhomework::history{"resource.$part.$id.portfiles"};
               $fileshistory .=   $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};
               my $filesresults = $Apache::lonhomework::results{"resource.$part.$id.portfiles"};
               $filesresults .=   $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"};
       if (( $response =~ /[^\s]/) ||  $filesresults || $fileshistory) {
    my $url = &Apache::lonxml::get_param('url',$parstack,$safeeval);
    my $answer = &Apache::lonxml::get_param('answer',$parstack,$safeeval);
    my %form = &Apache::lonxml::get_param_var('form',$parstack,$safeeval);
    $form{'LONCAPA_student_response'}=$response;
    $form{'LONCAPA_correct_answer'}=$answer;
    $form{'LONCAPA_language'}=
       &Apache::lonnet::metadata($ENV{'REQUEST_URI'},'language');
                   $form{'LONCAPA_student_submitted_files_results'} = $filesresults;
                   $form{'LONCAPA_student_submitted_files_history'} = $fileshistory;
    &Apache::lonxml::debug("Asking $url, with:");
    &Apache::lonhomework::showhash(%form);
                   my $udom = &Apache::lonnet::EXT('user.domain');
                   my $uname = &Apache::lonnet::EXT('user.name');
                   my $symb = $env{'resource.symb'};
                   my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname);
    my $ua = LWP::UserAgent->new;
    my $res = $ua->request(POST $url, \%form);
    my %previous = &Apache::response::check_for_previous($response,
        $part,$id);
    %Apache::loncapagrade::results=();
    $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;
    if ($res->is_error()) {
       $Apache::loncapagrade::results{'awarddetail'}='ERROR';
    } else {
       &Apache::lonxml::register('Apache::loncapagrade',
         ('loncapagrade'));
       @Apache::scripttag::parser_env = @_;
       my $result=&Apache::scripttag::xmlparse($res->{_content});
       &Apache::lonxml::debug("Got a result of :$result:");
    }
    foreach my $key (keys(%Apache::loncapagrade::results)) {
       $Apache::lonhomework::results{"resource.$part.$id.$key"}=
    $Apache::loncapagrade::results{$key};
    }
                   $Apache::externalresponse::message=$Apache::loncapagrade::results{'message'};
    &Apache::response::handle_previous(\%previous,
      $Apache::loncapagrade::results{'awarddetail'});
                   if ($Apache::loncapagrade::results{'awarddetail'} eq 'ASSIGNED_SCORE') {
                      $Apache::lonhomework::results{"resource.$part.$id.awarded"}=
                           1.*$Apache::loncapagrade::results{"awarded"};
                   }
    &Apache::lonxml::debug("response of");
    &Apache::lonhomework::showhash(%$res);
    &Apache::lonxml::debug("capagrade of");
    &Apache::lonhomework::showhash(%Apache::loncapagrade::results);
    &Apache::lonxml::debug("results of");
    &Apache::lonhomework::showhash(%Apache::lonhomework::results);
       }
         }          }
     }      }
     if ($target eq 'web')  {      if ($target eq 'web')  {
  &Apache::response::setup_prior_tries_hash(\&format_prior_response);          &Apache::response::setup_prior_tries_hash(\&Apache::essayresponse::format_prior_response,
                                                     ['portfiles',
                                                      'uploadedurl']);
         if (&Apache::response::show_answer()) {          if (&Apache::response::show_answer()) {
            $result.='<table border="1"><tr><th>'.&mt('Your answer:').'</th></tr><tr><td><pre>'.             $result.='<table border="1"><tr><th>'.&mt('Your answer:').'</th></tr><tr><td><pre>'.
                     $Apache::lonhomework::history{"resource.$part.$id.submission"}.                      $Apache::lonhomework::history{"resource.$part.$id.submission"}.
Line 310  sub end_externalresponse { Line 315  sub end_externalresponse {
            $result.='<br /><table><tr><td bgcolor="#FFFFAA">'.$Apache::externalresponse::message.'</td></tr></table><br />';             $result.='<br /><table><tr><td bgcolor="#FFFFAA">'.$Apache::externalresponse::message.'</td></tr></table><br />';
         }          }
         $Apache::externalresponse::message='';          $Apache::externalresponse::message='';
   
     }      }
   
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||      if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
Line 328  sub end_externalresponse { Line 334  sub end_externalresponse {
              && $Apache::lonhomework::type eq 'exam') {               && $Apache::lonhomework::type eq 'exam') {
         $result .= &Apache::inputtags::exam_score_line($target);          $result .= &Apache::inputtags::exam_score_line($target);
   
     } elsif ($target eq 'answer') {      } 
         $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, "$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();      &Apache::response::end_response();
     return $result;      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,$award,$uploadedflag,$totalsize,$deletions)=@_;  
     my $files;  
     my $jspart=$part;  
     $jspart=~s/\./_/g;  
     my ($symb,$crsid,$udom,$uname) = &Apache::lonnet::whichuser();  
     my %crsinfo = &Apache::lonnet::coursedescription($crsid);  
     my $cdom = $crsinfo{'domain'};  
     my $cnum = $crsinfo{'num'};  
     my (@portfiles,$uploadedurl,@submitted_portfiles,$submitted_upload,  
         @acceptable_portfiles,$acceptable_upload,@accepted_portfiles,  
         $accepted_upload,@savedportfiles,$stored_upload,@tolock,  
         %port_delete,$uploaded_delete);  
     if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"} ||  
         $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"}) {  
         if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}) {  
             @portfiles = split(/,/,$Apache::lonhomework::history{"resource.$part.$id.portfiles"});  
         }  
         $uploadedurl = $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};  
         if (ref($deletions) eq 'ARRAY') {  
             if (@{$deletions} > 0) {  
                 foreach my $file (@{$deletions}) {  
                     $file = &HTML::Entities::decode($file);  
                     if (grep(/^\Q$file\E$/,@portfiles)) {  
                         $port_delete{$file} = 1;  
                     } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/\Q$cdom\E/\Q$cnum\E/}) {  
                         $uploaded_delete = $file;   
                     } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/[^/]+$}) {  
                         $uploaded_delete = $file;  
                     }  
                 }  
             }  
         }  
         foreach my $current (@portfiles) {  
             unless ($port_delete{$current}) {  
                 push(@savedportfiles,$current);  
             }  
         }  
         if ($uploaded_delete) {  
             if ($uploaded_delete eq $uploadedurl) {  
                 $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"} = "";  
                 $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"} = "";  
             } else {  
                 undef($uploaded_delete);  
             }  
         }  
     }  
     if ($env{'form.HWPORT'.$jspart.'_'.$id} ne '') {  
         my $newfiles= $env{'form.HWPORT'.$jspart.'_'.$id};  
         $newfiles =~s/,$//;  
         if ($newfiles =~ /[^\s]/) {  
             foreach my $file (split(/\s*,\s*/,$newfiles)) {  
                 if ($file =~ /[^\s]/) {  
                     push(@submitted_portfiles,$file);  
                 }  
             }  
         }  
     }  
     if ($env{'form.HWFILETOOBIG'.$part.'_'.$id} ne '') {  
         $$award = 'EXCESS_FILESIZE';  
     } elsif ($env{'form.HWFILE'.$jspart.'_'.$id.'.filename'} ne '') {  
         my $newfile = $env{'form.HWFILE'.$jspart.'_'.$id.'.filename'};  
         if ($newfile =~ /[^\s]/) {  
             $submitted_upload = $newfile;  
         }  
     }  
     if (@savedportfiles) {  
         foreach my $file (reverse(@savedportfiles)) {  
             unless(grep(/^\Q$file\E$/,@submitted_portfiles)) {  
                 unshift(@submitted_portfiles,$file);  
             }  
         }  
     }  
     if (@submitted_portfiles || $submitted_upload) {  
         my $uploadedfiletypes=  
             &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");  
         if ($uploadedfiletypes ne '') {  
             $uploadedfiletypes=~s/[^\w\,]//g;  
             $uploadedfiletypes=','.$uploadedfiletypes.',';  
             if (@submitted_portfiles) {  
                 foreach my $file (@submitted_portfiles) {  
                     my ($extension)=($file=~/\.(\w+)$/);  
                     if ($uploadedfiletypes=~/\,\s*\Q$extension\E\s*\,/i) {  
                         push(@acceptable_portfiles,$file);  
                     }  
                 }  
             }  
             if ($submitted_upload) {  
                 my ($upload_ext)=($submitted_upload=~/\.(\w+)$/);  
                 if ($uploadedfiletypes=~/\,\s*\Q$upload_ext\E\s*\,/i) {  
                     $acceptable_upload = $submitted_upload;  
                 } else {  
                     $$award='INVALID_FILETYPE';  
                     &delete_form_items($jspart,$id);  
                 }  
             }  
         } else {  
             @acceptable_portfiles = @submitted_portfiles;  
             $acceptable_upload = $submitted_upload;  
         }  
     }  
     if ((@acceptable_portfiles) || ($acceptable_upload ne '')) {  
         my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize");  
         if (!$maxfilesize) {  
             $maxfilesize = 10.0; #FIXME This should become a domain configuration  
         }  
         my %dirlist;  
         if (@acceptable_portfiles) {  
             foreach my $file (@acceptable_portfiles) {  
                 my ($path,$filename) = ($file =~ m{^(.*/)([^/]+)$});  
                 my $fullpath = '/userfiles/portfolio'.$path;  
                 if (!exists($dirlist{$fullpath})) {  
                     my ($listref,$listerror) =  
                         &Apache::lonnet::dirlist($fullpath,$udom,$uname,1);  
                     if (ref($listref) eq 'ARRAY') {  
                         $dirlist{$fullpath} = $listref;  
                     }  
                 }  
                 if (ref($dirlist{$fullpath}) eq 'ARRAY') {  
                     foreach my $dir_line (@{$dirlist{$fullpath}}) {  
                         my ($fname,$dom,undef,$testdir,undef,undef,undef,undef,  
                             $size,undef,$mtime,undef,undef,undef,$obs,undef) =  
                         split(/\&/,$dir_line,16);  
                         if ($filename eq $fname) {  
                             my $mbsize = $size/(1024.0*1024.0);  
                             if (ref($totalsize)) {  
                                 $$totalsize += $mbsize;  
                             }  
                             last;  
                         }  
                     }  
                 }  
                 if (ref($totalsize)) {  
                     if ($$totalsize > $maxfilesize) {  
                         $$award='EXCESS_FILESIZE';  
                         &delete_form_items($jspart,$id);  
                     } else {  
                         push(@accepted_portfiles,$file);  
                     }  
                 } else {  
                     push(@accepted_portfiles,$file);  
                 }  
             }  
         }  
         if ($acceptable_upload ne '') {  
             if (ref($totalsize)) {  
                 $$totalsize += $env{'form.HWFILESIZE'.$jspart.'_'.$id};  
                 if ($$totalsize > $maxfilesize) {  
                     $$award='EXCESS_FILESIZE';  
                     delete($env{'form.HWFILE'.$jspart.'_'.$id});  
                 } else {  
                     $accepted_upload = $acceptable_upload;  
                 }  
             } else {  
                 $accepted_upload = $acceptable_upload;  
             }  
         }  
     }  
     if ($accepted_upload ne '') {  
         my ($path,$multiresp) =   
             &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom,  
                                                       'submission');  
         if ($path eq '') {  
             $$award = 'INTERNAL_ERROR';  
         } else {  
             if ($multiresp) {  
                 $path .= '/'.$jspart.'_'.$id;  
             }  
             my $prefix = 'portfolio';  
             my $formelement = 'HWFILE'.$jspart.'_'.$id;  
             my $fname = &Apache::lonnet::clean_filename($env{'form.'.$formelement.'.filename'});  
             my $url = '/uploaded/'.$udom.'/'.$uname.'/'.$prefix.$path.'/'.$fname;  
             my @stat = &Apache::lonnet::stat_file($url);  
             my $conflicts = 0;  
             if (@stat && $stat[0] ne 'no_such_dir') {  
                 my $current_permissions =   
                     &Apache::lonnet::get_portfile_permissions($udom,$uname);  
                 if (ref($current_permissions) eq 'HASH') {  
                     if (ref($current_permissions->{$path.'/'.$fname}) eq 'ARRAY') {  
                         foreach my $record (@{$current_permissions->{$path.'/'.$fname}}) {  
                             if (ref($record) eq 'ARRAY') {  
                                 next if (($record->[0] eq $symb) &&   
                                          ($record->[1] eq $crsid));  
                                 $conflicts ++;  
                             }   
                         }  
                     }  
                 }  
                 if ($conflicts) {  
                     $$award = 'FILENAME_INUSE';  
                 }  
             }  
             unless ($conflicts) {   
                 my ($mode,%allfiles,%codebase);  
                 my $result = &Apache::lonnet::userfileupload($formelement,'',  
                              $prefix.$path,$mode,\%allfiles,\%codebase);  
                 if ($result =~ m{^/uploaded/}) {  
                     $stored_upload = $path.'/'.$fname;  
                     unless (grep(/^\Q$stored_upload\E$/,@accepted_portfiles)) {  
                         $Apache::lonhomework::results{"resource.$part.$id.portfiles"} = $stored_upload;  
                         push(@tolock,$stored_upload);  
                     }  
                 } else {  
                     $$award = 'INTERNAL_ERROR';  
                 }  
             }  
         }  
         delete($env{'form.HWFILE'.$jspart.'_'.$id});  
     }  
     if (@accepted_portfiles) {  
         if ($Apache::lonhomework::results{"resource.$part.$id.portfiles"}) {  
             $Apache::lonhomework::results{"resource.$part.$id.portfiles"} .= ',';  
         }  
         $Apache::lonhomework::results{"resource.$part.$id.portfiles"}.=join(',',@accepted_portfiles);  
         push(@tolock,@accepted_portfiles);  
     }  
     if (!defined($Apache::lonhomework::results{"resource.$part.$id.portfiles"})) {  
         if (keys(%port_delete) > 0) {  
             $Apache::lonhomework::results{"resource.$part.$id.portfiles"} = "";  
         }  
     }  
     if (($Apache::lonhomework::history{"resource.$part.$id.portfiles"} ne    
          $Apache::lonhomework::results{"resource.$part.$id.portfiles"}) ||  
         ($uploaded_delete)) {  
         if (ref($uploadedflag)) {  
             $$uploadedflag=1;  
         }  
     }  
     &Apache::lonnet::unmark_as_readonly($udom,$uname,[$symb,$crsid]);  
     &Apache::lonnet::mark_as_readonly($udom,$uname,[@tolock],[$symb,$crsid]);  
     &Apache::lonnet::clear_selected_files($uname);  
     return;  
 }  
   
 sub delete_form_items {  
     my ($jspart,$id) = @_;  
     delete($env{'form.HWFILE'.$jspart.'_'.$id.'.filename'});  
     delete($env{'form.HWFILE'.$jspart.'_'.$id.'.mimetype'});  
     delete($env{'form.HWFILE'.$jspart.'_'.$id});  
 }  
   
 sub check_collaborators {  
     my ($ncol,$coll) = @_;  
     my %classlist=&Apache::lonnet::dump('classlist',  
  $env{'course.'.$env{'request.course.id'}.'.domain'},  
  $env{'course.'.$env{'request.course.id'}.'.num'});  
     my (@badcollaborators,$result);  
     
     my (@collaborators) = split(/[,;\s]+/,$coll);  
     foreach my $entry (@collaborators) {  
         my $collaborator;  
  if ($entry =~ /:/) {  
     $collaborator = $entry;  
  } else {  
     $collaborator = $entry.':'.$env{'user.domain'};  
  }  
         if ($collaborator !~ /^$match_username:$match_domain$/) {  
             if (!grep(/^\Q$entry\E$/,@badcollaborators)) {  
         push(@badcollaborators,$entry);  
             }  
         } elsif (!grep(/^\Q$collaborator\E$/i,keys(%classlist))) {  
             if (!grep(/^\Q$entry\E$/,@badcollaborators)) {  
                 push(@badcollaborators,$entry);  
             }  
         }  
     }  
       
     my $numbad = scalar(@badcollaborators);  
     if ($numbad) {  
  $result = '<table border="0"><tr bgcolor="#ffbbbb"><td>';  
         if ($numbad == 1) {  
             $result .= &mt('The following user is invalid:');  
         } else {  
             $result .= &mt('The following [_1] users are invalid:',$numbad);  
         }  
  $result .= ' '.join(', ',@badcollaborators).'. '.&mt('Please correct.').  
                    '</td></tr></table>';  
     }  
     my $toomany = scalar(@collaborators) - $ncol;  
     if ($toomany > 0) {  
  $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>'.  
            &mt('You have too many collaborators.').' '.  
                    &mt('Please remove [quant,_1,collaborator].',$toomany).  
            '</td></tr></table>';  
     }  
     return $result;  
 }  
   
   
   
 1;  1;
 __END__  __END__
   
Line 703  described at http://www.lon-capa.org. Line 364  described at http://www.lon-capa.org.
   
 =item end_externalresponse()  =item end_externalresponse()
   
 =item format_prior_response()  
   
 =back  =back
   
 =cut  =cut

Removed from v.1.20  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>