Diff for /loncom/homework/inputtags.pm between versions 1.260.4.1 and 1.260.4.2

version 1.260.4.1, 2009/12/06 21:00:15 version 1.260.4.2, 2010/09/13 04:26:26
Line 53  package Apache::inputtags; Line 53  package Apache::inputtags;
 use HTML::Entities();  use HTML::Entities();
 use strict;  use strict;
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA;
Line 479  sub file_selector { Line 480  sub file_selector {
     $jspart=~s/\./_/g;      $jspart=~s/\./_/g;
   
     my $result;      my $result;
           my $current_files_display = &current_file_submissions($part,$id);
     $result.='<tr><td>';      my $addfiles;
     if (($uploadedfiletypes ne '*') || ($maxfilesize)) {      if ($current_files_display) {
         if ($uploadedfiletypes ne '*') {          $result .= &Apache::lonhtmlcommon::row_title(&mt('Currently submitted files')).
     $result.=                     $current_files_display.
         &mt('Allowed filetypes: [_1]','<b>'.$uploadedfiletypes.'</b>').'<br />';                     &Apache::lonhtmlcommon::row_closure();
         }          $addfiles = &mt('Submit other file(s)');
         if ($maxfilesize) {      } else {
             $result.=&mt('Combined size of files not to exceed: [_1] MB[_2].',          $addfiles = &mt('Choose file(s) to submit');
                          '<b>'.$maxfilesize.'</b>').'<br />';      }
         }      $result .= &Apache::lonhtmlcommon::row_title($addfiles);
         $result .= '<br />';      my $constraints;
       if ($uploadedfiletypes ne '*') {
    $constraints =
       &mt('Allowed filetypes: [_1]','<b>'.$uploadedfiletypes.'</b>').'<br />';
       }
       if ($maxfilesize) {
           $constraints .= &mt('Combined size of all files not to exceed: [_1] MB[_2].',
                           '<b>'.$maxfilesize.'</b>').'<br />';
       }
       if ($constraints) {
           $result .= $constraints.'<br />';
     }      }
     if ($which eq 'uploadonly' || $which eq 'both') {       if ($which eq 'uploadonly' || $which eq 'both') { 
  $result.=&mt('Submit a file: (only one file can be uploaded)').          $result.=&mt('Submit a file: (only one file per submission)').
     ' <br /><input type="file" size="50" name="HWFILE'.      ' <br /><input type="file" size="50" name="HWFILE'.
     $jspart.'_'.$id.'" /><br />';      $jspart.'_'.$id.'" /><br />';
  $result .= &show_past_file_submission($part,$id);  
     }      }
     if ( $which eq 'both') {       if ( $which eq 'both') { 
  $result.='<br />'.'<strong>'.&mt('OR:').'</strong><br />';   $result.='<br />'.'<strong>'.&mt('OR:').'</strong><br />';
     }      }
     if ($which eq 'portfolioonly' || $which eq 'both') {       if ($which eq 'portfolioonly' || $which eq 'both') { 
  $result.=$extratext.'<a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname='.$env{'form.request.prefix'}.'HWPORT'.$jspart.'_'.$id.'","cat","height=600,width=800,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>'.   $result.=$extratext.'<a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname='.$env{'form.request.prefix'}.'HWPORT'.$jspart.'_'.$id.'","cat","height=600,width=800,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>'.
     &mt('Select Portfolio Files').'</a><br />'.              &mt('Select Portfolio Files: (one or more files per submission)').'</a><br />'.
     '<input type="text" size="50" name="HWPORT'.$jspart.'_'.$id.'" value="" />'.      '<input type="text" size="50" name="HWPORT'.$jspart.'_'.$id.'" value="" />'.
     '<br />';      '<br />';
  $result .= &show_past_portfile_submission($part,$id);  
     }      }
     $result.='</td></tr>';       $result.=&Apache::lonhtmlcommon::row_closure(1);
     return $result;      return $result;
 }  }
   
 sub show_past_file_submission {  sub current_file_submissions {
     my ($part,$id) = @_;  
     my $uploadedfile= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.uploadedfile"},'<>&"');  
   
     return if (!$uploadedfile);  
   
     my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};  
     &Apache::lonxml::extlink($url);  
     &Apache::lonnet::allowuploaded('/adm/essayresponse',$url);  
     my $icon=&Apache::loncommon::icon($url);  
     my $curfile='<a href="'.$url.'"><img src="'.$icon.  
  '" border="0" />'.$uploadedfile.'</a>';  
     return &mt('Currently submitted: [_1]','<tt>'.$curfile.'</tt>');  
   
 }  
   
 sub show_past_portfile_submission {  
     my ($part,$id) = @_;      my ($part,$id) = @_;
     if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}!~/[^\s]/){      my $jspart=$part;
  return;      $jspart=~s/\./_/g;
       my $uploadedfile=$Apache::lonhomework::history{"resource.$part.$id.uploadedfile"};
       my $portfiles=$Apache::lonhomework::history{"resource.$part.$id.portfiles"};
       return if (($uploadedfile eq '') && ($portfiles !~/[^\s]/));
       my $header = &Apache::loncommon::start_data_table().
                    &Apache::loncommon::start_data_table_header_row();
       if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
           $header .= '<th>'.&mt('Delete?').'</th>';
       }
       $header .=   '<th>'.&mt('File').'</th>'.
                    '<th>'.&mt('Size (MB)').'</th>'.
                    '<th>'.&mt('Last Modified').'</th>'.
                    &Apache::loncommon::end_data_table_header_row();
       my (undef,$crsid,$udom,$uname)=&Apache::lonnet::whichuser();
       my ($cdom,$cnum) = ($crsid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/);
       my ($result,$header_shown,%okfiles,%rows,%legacy,@bad_file_list);
       if ($uploadedfile) {
           my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};
           my $link = &HTML::Entities::encode($url,'<>&"');
           my ($path,$name) = ($url =~ m{^(/uploaded/\Q$udom\E/\Q$uname\E/essayresponse.*/)([^/]+)$});
           my ($status,$hashref,$error) =
               &current_file_info($url,$link,$name,$path);
           if ($status eq 'ok') {
               push(@{$okfiles{$name}},$url);
               $rows{$url} = $hashref;
               $legacy{$url} = 1;
               &Apache::lonxml::extlink($url);
               &Apache::lonnet::allowuploaded('/adm/essayresponse',$url);
           } else {
               push(@bad_file_list,$error);
           }
       }
       if ($portfiles =~ /[^\s]/) {
           my $prefix = "/uploaded/$udom/$uname/portfolio";
           foreach my $file (split(/\s*,\s*/,&unescape($portfiles))) {
               my ($path,$name) = ($file =~ m{^(.*/)([^/]+)$});
               my $url = $prefix.$path.$name;
               my $uploadedfile = &HTML::Entities::encode($url,'<>&"');
               my ($status,$hashref,$error) =
                   &current_file_info($url,$uploadedfile,$name,$path);
               if ($status eq 'ok') {
                   push(@{$okfiles{$name}},$url);
                   $rows{$url} = $hashref;
               } else {
                   push(@bad_file_list,$error);
               }
           }
       }
       foreach my $name (sort(keys(%okfiles))) {
           if (ref($okfiles{$name}) eq 'ARRAY') {
               foreach my $url (@{$okfiles{$name}}) {
                   if (ref($rows{$url}) eq 'HASH') {
                       my $link = $rows{$url}{link};
                       my $portfile = $rows{$url}{path}.$rows{$url}{name};
                       $portfile = &HTML::Entities::encode($portfile,'<>&"');
                       if ($link) {
                           my $icon=&Apache::loncommon::icon($url);
                           unless ($header_shown) {
                               $result .= $header;
                               $header_shown = 1;
                           }
                           $result.=
                               &Apache::loncommon::start_data_table_row()."\n";
                           if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
                               $result .=
                                    '<td valign="bottom"><input type="checkbox" name="HWFILE'.$jspart.'_'.$id.'_delete"'.
                                    ' value="'.$portfile.'" /></td>'."\n";
                           }
                           my $showname = $rows{$url}{path}.$name;
                           if ($legacy{$url}) {
                               $showname = $name.' '.&mt('not in portfolio');
                           }
                           if ($env{'request.uri'} eq '/res/gci/gci/internal/submission.problem') {
                               $showname = $name;
                           }
                           $result .=
                               '<td><a href="'.$link.'"><img src="'.$icon.
                               '" border="0" />'.$showname.'</a></td>'."\n".
                               '<td align="right" valign="bottom">'.$rows{$url}{size}.'</td>'."\n".
                               '<td align="right" valign="bottom">'.$rows{$url}{lastmodified}.'</td>'."\n".
                               &Apache::loncommon::end_data_table_row();
                       }
                   }
               }
           }
       }
       if ($header_shown) {
           $result .= &Apache::loncommon::end_data_table();
     }      }
     my (@file_list,@bad_file_list);  
     foreach my $file (split(/\s*,\s*/,&unescape($Apache::lonhomework::history{"resource.$part.$id.portfiles"}))) {  
  my (undef,undef,$domain,$user)=&Apache::lonnet::whichuser();  
  my $url="/uploaded/$domain/$user/portfolio$file";  
  my $icon=&Apache::loncommon::icon($url);  
  push(@file_list,'<a href="'.$url.'"><img src="'.$icon.  
      '" border="0" />'.$file.'</a>');  
  if (! &Apache::lonnet::stat_file($url)) {  
     &Apache::lonnet::logthis("bad file is $url");  
     push(@bad_file_list,'<a href="'.$url.'"><img src="'.$icon.  
  '" border="0" />'.$file.'</a>');  
  }  
     }  
     my $files = '<span class="LC_filename">'.  
  join('</span>, <span class="LC_filename">',@file_list).  
  '</span>';  
     my $result = &mt("Portfolio files previously selected: [_1]",$files);  
     if (@bad_file_list) {      if (@bad_file_list) {
  my $bad_files = '<span class="LC_filename">'.         my $bad_files = '<span class="LC_filename">'.
     join('</span>, <span class="LC_filename">',@bad_file_list).             join('</span>, <span class="LC_filename">',@bad_file_list).
     '</span>';             '</span>';
  $result.='<p><span class="LC_error">'         $result.='<p class="LC_error">'.
                 .&mt("These file(s) don't exist: [_1]",$bad_files)                  &mt("These file(s) don't exist: [_1]",$bad_files).
                 .'</span></p>';                  '</p>';
     }      }
     return $result;      return $result;
   }
   
   sub current_file_info {
       my ($url,$uploadedfile,$name,$path) = @_;
       my ($status,$error,%info);
       my @stat = &Apache::lonnet::stat_file($url);
       if ((@stat) && ($stat[0] ne 'no_such_dir')) {
           my ($lastmod,$size);
           if ($stat[9] =~ /^\d+$/) {
               $lastmod = &Apache::lonlocal::locallocaltime($stat[9]);
           }
           $size = $stat[7]/(1024*1024);
           $size = sprintf("%.3f",$size);
           %info = (
                       link         => $uploadedfile,
                       name         => $name,
                       path         => $path,
                       size         => $size,
                       lastmodified => $lastmod,
                   );
           $status = 'ok';
       } else {
           &Apache::lonnet::logthis("bad file is $url");
           my $icon=&Apache::loncommon::icon($url);
           $error = '<a href="'.$url.'"><img src="'.$icon.
                    '" border="0" />'.$uploadedfile.'</a>';
       }
       return ($status,\%info,$error);
 }  }
   
 sub valid_award {  sub valid_award {
Line 572  sub valid_award { Line 663  sub valid_award {
        'UNIT_NOTNEEDED', 'WANTED_NUMERIC',         'UNIT_NOTNEEDED', 'WANTED_NUMERIC',
        'BAD_FORMULA', 'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT',          'BAD_FORMULA', 'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT', 
        'MISORDERED_RANK', 'INVALID_FILETYPE',         'MISORDERED_RANK', 'INVALID_FILETYPE',
                                'EXCESS_FILESIZE', 'DRAFT',                                 'EXCESS_FILESIZE', 'FILENAME_INUSE', 
        'SUBMITTED', 'ASSIGNED_SCORE',                                 'DRAFT', 'SUBMITTED', 'ASSIGNED_SCORE',
        'APPROX_ANS', 'EXACT_ANS','COMMA_FAIL') {         'APPROX_ANS', 'EXACT_ANS','COMMA_FAIL') {
  if ($award eq $possibleaward) { return 1; }   if ($award eq $possibleaward) { return 1; }
     }      }
Line 587  sub valid_award { Line 678  sub valid_award {
   'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',    'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',
   'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA', 'INTERNAL_ERROR',    'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA', 'INTERNAL_ERROR',
   'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',    'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',
   'INVALID_FILETYPE', 'EXCESS_FILESIZE', 'DRAFT', 'SUBMITTED',    'INVALID_FILETYPE', 'EXCESS_FILESIZE', 'FILENAME_INUSE',
                     'DRAFT', 'SUBMITTED',
                   'ASSIGNED_SCORE', 'APPROX_ANS', 'EXACT_ANS');                    'ASSIGNED_SCORE', 'APPROX_ANS', 'EXACT_ANS');
     my $i=0;      my $i=0;
     my %fwd_awards = map { ($_,$i++) } @awards;      my %fwd_awards = map { ($_,$i++) } @awards;
Line 817  sub decideoutput { Line 909  sub decideoutput {
         $message = &mt('Submission won\'t be graded. The combined size of submitted files exceeded the amount allowed.');          $message = &mt('Submission won\'t be graded. The combined size of submitted files exceeded the amount allowed.');
         $css_class=$possible_class{'not_charged_try'};          $css_class=$possible_class{'not_charged_try'};
         $button=1;          $button=1;
       } elsif ($award eq 'FILENAME_INUSE') {
           $message = &mt('You have already uploaded a file with that filename.');
           if ($target eq 'tex') {
               $message.= "\\\\\n";
           } else {
               $message .= '<br />';
           }
           $message .= &mt('Please use a different file name.');
           $css_class=$possible_class{'not_charged_try'};
           $button=1;
     } elsif ($award eq 'INVALID_FILETYPE') {      } elsif ($award eq 'INVALID_FILETYPE') {
  $message = &mt("Submission won't be graded. The type of file submitted is not allowed.");   $message = &mt("Submission won't be graded. The type of file submitted is not allowed.");
  $css_class=$possible_class{'not_charged_try'};   $css_class=$possible_class{'not_charged_try'};

Removed from v.1.260.4.1  
changed lines
  Added in v.1.260.4.2


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