Diff for /loncom/homework/essayresponse.pm between versions 1.120 and 1.126

version 1.120, 2014/12/04 20:43:23 version 1.126, 2019/02/19 14:24:01
Line 47  sub start_essayresponse { Line 47  sub start_essayresponse {
     my $id = &Apache::response::start_response($parstack,$safeeval);      my $id = &Apache::response::start_response($parstack,$safeeval);
     if ($target eq 'meta') {      if ($target eq 'meta') {
  $result=&Apache::response::meta_package_write('essayresponse');   $result=&Apache::response::meta_package_write('essayresponse');
     } elsif ($target eq 'web' &&      } elsif ($target eq 'web') {
      $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {          my $part= $Apache::inputtags::part; 
  my $part= $Apache::inputtags::part;          my $coll;
  my $ncol= &Apache::lonnet::EXT("resource.$part".'_'."$id.maxcollaborators");          if ($Apache::lonhomework::history{"resource.$part.$id.collaborators"} =~ /\S/) {
  my $coll= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');              $coll = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');
  my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");          }
         $uploadedfiletypes=~s/[^\w\,]//g;   if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
         my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize");      my $ncol= &Apache::lonnet::EXT("resource.$part".'_'."$id.maxcollaborators");
         if (!defined($maxfilesize)) {      my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");
             $maxfilesize = 10.0; #FIXME This should become a domain configuration               $uploadedfiletypes=~s/[^\w\,]//g;
         }              my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize");
         my $hiddendraft;              if (!defined($maxfilesize)) {
  if (($Apache::lonhomework::type eq 'survey') ||                  $maxfilesize = 10.0; #FIXME This should become a domain configuration 
             ($Apache::lonhomework::type eq 'surveycred') ||              }
             ($Apache::lonhomework::type eq 'anonsurvey') ||              my $hiddendraft;
             ($Apache::lonhomework::type eq 'anonsurveycred')) {      if (($Apache::lonhomework::type eq 'survey') ||
             $hiddendraft = '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" />';                  ($Apache::lonhomework::type eq 'surveycred') ||
         } else {                  ($Apache::lonhomework::type eq 'anonsurvey') ||
             my $status_text = &mt('Submission type');                  ($Apache::lonhomework::type eq 'anonsurveycred')) {
             if ($Apache::lonhomework::history{"resource.$part.award"} eq 'DRAFT') {                  $hiddendraft = '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" />';
                 $status_text .= '<br />'.&mt('(Currently -- draft)');              } else {
                   $result = &draft_row($part,$id,$ncol,$uploadedfiletypes,'essayresponse');
       }
       if ($ncol > 0) {
                   $result .= &get_collab_row($part,$id,$coll,$ncol);
       }
               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);
               if ($result) {
                   $result =
                         '<div>'.$hiddendraft.
                         &Apache::lonhtmlcommon::start_pick_box().
                         $result.
                         &Apache::lonhtmlcommon::end_pick_box().'</div>';
               } else {
                   $result = $hiddendraft;
             }              }
             $result = &Apache::lonhtmlcommon::row_title($status_text);  
             my $closure;  
             unless ($ncol || $uploadedfiletypes) {  
                 $closure = 1;  
             }  
     $result.=   
  '<label>'.  
  '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" />&nbsp;'.  
  &mt('Submit entries below as answer to receive credit').  
  '</label> <br />'.  
  '<label>'.  
  '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" />&nbsp;'.  
  &mt('Save entries below (not submitted for credit yet)').  
  '</label>'.  
                 &Apache::lonhtmlcommon::row_closure($closure);  
  }  
   
  if ($ncol > 0) {  
     $result.= &Apache::lonhtmlcommon::row_title(&mt('Collaborators')).  
                       '<label>'.  
       &mt('Collaborators:').' <input type="text" size="70" max="80" name="HWCOL'.  
       $part.'_'.$id.'" value="'.$coll.'" /><br />'.  
       &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 .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');  
             }  
             $result .= '</label><br />';  
     $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);  
     $result .= &Apache::lonhtmlcommon::row_closure();  
  }  
         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);  
         if ($result) {  
             $result =  
                   '<div>'.$hiddendraft.  
                   &Apache::lonhtmlcommon::start_pick_box().  
                   $result.  
                   &Apache::lonhtmlcommon::end_pick_box().'</div>';  
         } else {          } else {
             $result = $hiddendraft;              $result = &show_status_table($part,$id,$coll);
         }          }
     } elsif ($target eq 'web' &&      }
      $Apache::inputtags::status[-1] ne 'CAN_ANSWER') {      return $result;
  my $part= $Apache::inputtags::part;  }
  my @msgs;  
  if ($Apache::lonhomework::history{"resource.$part.$id.collaborators"} =~ /\S/) {  
     my $coll= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');  
     $result .= '<td><i>'.&mt('Collaborated with [_1]',$coll).'</i></td>';  
  }  
   
         my $current_files_display = &Apache::inputtags::current_file_submissions($part,$id);  sub draft_row {
         if ($current_files_display) {      my ($part,$id,$ncol,$uploadedfiletypes,$resptype) = @_;
             $result .= '<td><b>'.&mt('Submitted files:').'</b><br />'.      my $status_text = &mt('Submission type');
                        $current_files_display.'</td>';      if ($Apache::lonhomework::history{"resource.$part.award"} eq 'DRAFT') {
         }          $status_text .= '<br />'.&mt('(Currently -- draft)');
       }
       my $closure;
       unless ($ncol || $uploadedfiletypes) {
           $closure = 1;
       }
       my %label = (
           draft => {
                      essayresponse => &mt('Save entries below (not submitted for credit yet)'),
                      externalresponse => &mt('Save entries below (not submitted for grading yet)'),
                    },
           submit => {
                       essayresponse => &mt('Submit entries below as answer to receive credit'),
                       externalresponse => &mt('Submit entries below for grading'),
                     }
       );
       return &Apache::lonhtmlcommon::row_title($status_text).
              '<label>'.
              '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" />'.
              '&nbsp;'.$label{'submit'}{$resptype}.'</label> <br />'.
              '<label>'.
              '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" />&nbsp;'.
              $label{'draft'}{$resptype}.'</label>'.
              &Apache::lonhtmlcommon::row_closure($closure);
   }
   
  if ($result ne '') {  sub get_collab_row {
     $result =       my ($part,$id,$coll,$ncol,$closure) = @_;
  '<table class="LC_pastsubmission"><tr>'.$result.      my $output = &Apache::lonhtmlcommon::row_title(&mt('Collaborators')).
  '</tr></table>';                   '<label>'.
  }                   &mt('Collaborators:').' <input type="text" size="70" max="80" name="HWCOL'.
                    $part.'_'.$id.'" value="'.$coll.'" /><br />'.
                    &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) {
           $output .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');
       }
       $output .= '</label><br />';
       $output .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);
       $output .= &Apache::lonhtmlcommon::row_closure($closure);
       return $output;
   }
   
   sub show_status_table {
       my ($part,$id,$coll) = @_;
       my $output;
       if ($coll) {
           $output = '<td><i>'.&mt('Collaborated with [_1]',$coll).'</i></td>';
     }      }
     return $result;      my $current_files_display = &Apache::inputtags::current_file_submissions($part,$id);
       if ($current_files_display) {
           $output .= '<td><b>'.&mt('Submitted files:').'</b><br />'.
                      $current_files_display.'</td>';
       }
       if ($output ne '') {
           return '<table class="LC_pastsubmission"><tr>'.$output.
                  '</tr></table>';
       }
       return;
 }  }
   
 sub end_essayresponse {  sub end_essayresponse {
Line 147  sub end_essayresponse { Line 169  sub end_essayresponse {
     my $increment     = &Apache::response::repetition();      my $increment     = &Apache::response::repetition();
     my $result;      my $result;
     if ( $target eq 'grade' ) {      if ( $target eq 'grade' ) {
 # Deal with collaborators          &get_collaborators($part,$id);
  my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};  
  my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');  
  if ($collaborators ne $previous_list) {   
 #           &Apache::lonnet::logthis("New collaborators [$collaborators] [$previous_list]");  
            $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators;   
         }  
 # Scantron  # Scantron
  if (  &Apache::response::submitted('scantron') ) {   if (  &Apache::response::submitted('scantron') ) {
     $increment=&Apache::response::scored_response($part,$id);      $increment=&Apache::response::scored_response($part,$id);
Line 210  sub end_essayresponse { Line 226  sub end_essayresponse {
       &escape($crsid));        &escape($crsid));
  my $essayurl=   my $essayurl=
     &Apache::lonnet::declutter($ENV{'REQUEST_URI'});      &Apache::lonnet::declutter($ENV{'REQUEST_URI'});
  my ($adom,$aname,$apath)=                          if ($essayurl eq 'lib/templates/simpleproblem.problem') {
     ($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/);                              my %crsinfo = &Apache::lonnet::coursedescription($crsid);
                         $apath=&escape($apath);                              my $cdom = $crsinfo{'domain'};
  $apath=~s/\W/\_/gs;                              my $cnum = $crsinfo{'num'};
  &Apache::lonnet::put('nohist_essay_'.$apath,                              my ($map,$id,$res) = &Apache::lonnet::decode_symb($symb);
  { $akey => $response },$adom,$aname);                              if ($map =~ m{^\Quploaded/$cdom/$cnum/\E(default(?:|_\d+)\.(?:sequence|page))$}) {
     }                                  my $apath = $1.'_'.$id;
                                   $apath=~s/\W/\_/gs;
                                   my $akey = join('.',&escape($name),&escape($domain));
                                   &Apache::lonnet::put('nohist_essay_'.$apath,
                                                        { $akey => $response },$cdom,$cnum);
                               }
                           } else {
       my ($adom,$aname,$apath)=
           ($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/);
                               $apath=&escape($apath);
       $apath=~s/\W/\_/gs;
       &Apache::lonnet::put('nohist_essay_'.$apath,
                                                    { $akey => $response },$adom,$aname);
                           }
                       }
                 }                  }
             }              }
  }           }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
   
Line 255  sub end_essayresponse { Line 285  sub end_essayresponse {
     return $result;      return $result;
 }  }
   
   sub get_collaborators {
       my ($part,$id) = @_;
       my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};
       my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"'
   );
       if ($collaborators ne $previous_list) {
           $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators;
       }
   }
   
 sub format_prior_response {  sub format_prior_response {
     my ($mode,$answer,$other_data) = @_;      my ($mode,$answer,$other_data) = @_;
     my $output;      my $output;
Line 301  sub file_submission { Line 341  sub file_submission {
     if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"} ||      if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"} ||
         $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"}) {          $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"}) {
         if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}) {          if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}) {
             @portfiles = split(/,/,$Apache::lonhomework::history{"resource.$part.$id.portfiles"});              my @possfiles = split(/,/,$Apache::lonhomework::history{"resource.$part.$id.portfiles"});
               foreach my $file (@possfiles) {
                   my ($path,$name) = ($file =~ m{^(.*/)([^/]+)$});
                   my ($origname,$version,$ext) = &Apache::lonnet::file_name_version_ext($name);
                   unless ($version) {
                       push(@portfiles,$file);
                   }
               }
         }          }
         $uploadedurl = $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};          $uploadedurl = $Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};
         if (ref($deletions) eq 'ARRAY') {          if (ref($deletions) eq 'ARRAY') {
Line 517  sub file_submission { Line 564  sub file_submission {
         my @todelete = map { "/uploaded/$udom/$uname/portfolio".$_;  } keys(%port_delete);          my @todelete = map { "/uploaded/$udom/$uname/portfolio".$_;  } keys(%port_delete);
         if (@tolock || @todelete) {          if (@tolock || @todelete) {
             if (ref($info) eq 'HASH') {              if (ref($info) eq 'HASH') {
                 if ($info->{'ip'}) {                  if (($info->{'ip'}) && ($info->{'is_submit'})) {
                     my @adds;                      my @adds;
                     if (@tolock) {                      if (@tolock) {
                         @adds = map { "/uploaded/$udom/$uname/portfolio".$_;  } @tolock;                          @adds = map { "/uploaded/$udom/$uname/portfolio".$_;  } @tolock;
Line 610  described at http://www.lon-capa.org. Line 657  described at http://www.lon-capa.org.
   
 =item start_essayresponse()  =item start_essayresponse()
   
   =item draft_row()
   
   =item get_collab_row()
    
   =item show_status_table()
   
 =item end_essayresponse()  =item end_essayresponse()
   
   =item get_collaborators()
   
 =item format_prior_response()  =item format_prior_response()
   
 =item file_submission()  =item file_submission()

Removed from v.1.120  
changed lines
  Added in v.1.126


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