Diff for /loncom/interface/spreadsheet/lonspreadsheet.pm between versions 1.11 and 1.42

version 1.11, 2003/06/18 19:44:22 version 1.42, 2005/08/29 21:04:52
Line 54  built-in functions. Line 54  built-in functions.
 package Apache::lonspreadsheet;  package Apache::lonspreadsheet;
                           
 use strict;  use strict;
   use warnings FATAL=>'all';
   no warnings 'uninitialized';
 use Apache::classcalc();  use Apache::classcalc();
 use Apache::studentcalc();  use Apache::studentcalc();
 use Apache::assesscalc();  use Apache::assesscalc();
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
   use Apache::lonlocal;
   use Apache::loncoursedata();
 use HTML::Entities();  use HTML::Entities();
   
 ##  ##
Line 68  use HTML::Entities(); Line 72  use HTML::Entities();
   
 sub textfield {  sub textfield {
     my ($title,$name,$value)=@_;      my ($title,$name,$value)=@_;
     return "\n<p><b>$title:</b><br>".      return "\n<p><b>$title:</b><br />".
         '<input type=text name="'.$name.'" size=80 value="'.$value.'">';          '<input type=text name="'.$name.'" size=80 value="'.$value.'" />';
 }  }
   
 sub hiddenfield {  sub hiddenfield {
Line 79  sub hiddenfield { Line 83  sub hiddenfield {
   
 sub selectbox {  sub selectbox {
     my ($title,$name,$value,%options)=@_;      my ($title,$name,$value,%options)=@_;
     my $selout="\n<p><b>$title:</b><br>".'<select name="'.$name.'">';      my $selout="\n<p><b>$title:</b><br />".'<select name="'.$name.'">';
     foreach (sort keys(%options)) {      foreach (sort keys(%options)) {
         $selout.='<option value="'.$_.'"';          $selout.='<option value="'.$_.'"';
         if ($_ eq $value) { $selout.=' selected'; }          if ($_ eq $value) { $selout.=' selected'; }
         $selout.='>'.$options{$_}.'</option>';          $selout.='>'.&mt($options{$_}).'</option>';
     }      }
     return $selout.'</select>';      return $selout.'</select>';
 }  }
Line 96  sub file_dialogs { Line 100  sub file_dialogs {
     my $message = '';      my $message = '';
     ##      ##
     ## Deal with saving the spreadsheet      ## Deal with saving the spreadsheet
     if ((exists($ENV{'form.save'}) || exists($ENV{'form.makedefault'})) &&       $spreadsheet->check_formulas_loaded();
         exists($ENV{'form.savefilename'})) {      if ((exists($env{'form.save'}) || exists($env{'form.makedefault'})) && 
         $spreadsheet->filename($ENV{'form.savefilename'});          exists($env{'form.savefilename'})) {
           $spreadsheet->filename($env{'form.savefilename'});
         my $save_status = $spreadsheet->save();          my $save_status = $spreadsheet->save();
         if ($save_status ne 'ok') {          if ($save_status ne 'ok') {
             $message .= "An error occurred while saving the spreadsheet".              $message .= "An error occurred while saving the spreadsheet".
                 "There error is:".$save_status;                  "There error is:".$save_status;
             return $result;  
         } else {          } else {
             $message .= "Spreadsheet saved as ".$ENV{'form.savefilename'};              $message .= "Spreadsheet saved as ".$spreadsheet->filename();
         }          }
     } elsif (exists($ENV{'form.newformula'}) &&       } elsif (exists($env{'form.newformula'}) && 
              exists($ENV{'form.cell'})       &&                exists($env{'form.cell'})       && 
              $ENV{'form.cell'} ne '' ) {               $env{'form.cell'} ne '' ) {
         ##          ##
         ## Make any requested modifications to the spreadsheet          ## Make any requested modifications to the spreadsheet
         $spreadsheet->modify_cell($ENV{'form.cell'},          $spreadsheet->modify_cell($env{'form.cell'},
                                   $ENV{'form.newformula'});                                    $env{'form.newformula'});
         $spreadsheet->save_tmp();          $spreadsheet->save_tmp();
         # output that we are dealing with a temporary file          # output that we are dealing with a temporary file
         $result .=&hiddenfield('workcopy',$sheettype);          $result .=&hiddenfield('workcopy',$sheettype);
         if ($ENV{'form.newformula'} !~ /^\s*$/) {          if ($env{'form.newformula'} !~ /^\s*$/) {
             $message .='<table><tr>'.              $message .='<table><tr>'.
               '<td valign="top"><pre>Cell '.$ENV{'form.cell'}.' = </pre></td>'.                '<td valign="top"><pre>'.&mt('Cell').' '.$env{'form.cell'}.' = </pre></td>'.
               '<td><pre>'.$ENV{'form.newformula'}."</pre></td></tr></table>\n";                '<td><pre>'.$env{'form.newformula'}."</pre></td></tr></table>\n";
         } else {          } else {
             $message .= 'Deleted contents of cell '.$ENV{'form.cell'}.'.';              $message .= &mt('Deleted contents of cell').' '.$env{'form.cell'}.'.';
         }          }
     }      }
     ##      ##
Line 137  sub file_dialogs { Line 141  sub file_dialogs {
         $filename = 'Default';          $filename = 'Default';
     }      }
     my $save_dialog = '<nobr>'.      my $save_dialog = '<nobr>'.
         '<input type="submit" name="save" value="Save as" /> '.          '<input type="submit" name="save" value="'.&mt('Save as').'" /> '.
         '<input type="text" name="savefilename" size="30" value="'.          '<input type="text" name="savefilename" size="30" value="'.
         $truefilename.'" />'.          $truefilename.'" />'.
         '</nobr>';          '</nobr>';
     my $makedefault_dialog = '<input type="submit" name="makedefault" '.      my $makedefault_dialog = '<input type="submit" name="makedefault" '.
         'value="Save as & Make This Sheet the Default"/>';          'value="'.&mt('Save as & Make This Sheet the Default').'"/>';
     #      #
     my $link = '<a href="javascript:openbrowser'.      my $link = '<a href="javascript:openbrowser'.
         "('sheet','loadfilename','spreadsheet')\">Select Spreadsheet File</a>";          "('sheet','loadfilename','spreadsheet')\">".&mt('Select Spreadsheet File')."</a>";
       my $load=&mt('Load:');
     my $load_dialog = <<END;      my $load_dialog = <<END;
 <table bgcolor="$bgcolor">  <table bgcolor="$bgcolor">
 <tr><td><input type="submit" name="load" value="Load" /></td>  <tr><td><input type="submit" name="load" value="$load" /></td>
     <td><nobr>      <td><nobr>
         <input type="text" name="loadfilename" size="20" value="$filename" />          <input type="text" name="loadfilename" size="20" value="$filename" />
         $link</nobr>          $link</nobr>
Line 158  sub file_dialogs { Line 163  sub file_dialogs {
 END  END
     my $default_filename_set = 0;      my $default_filename_set = 0;
     foreach my $sheetfilename ($spreadsheet->othersheets()) {      foreach my $sheetfilename ($spreadsheet->othersheets()) {
         $load_dialog .= '    <option name="'.$sheetfilename.'"';          $load_dialog .= '    <option value="'.$sheetfilename.'"';
         if ($filename eq $sheetfilename) {          if ($filename eq $sheetfilename) {
             $load_dialog .= ' selected';              $load_dialog .= ' selected';
             $default_filename_set = 1;              $default_filename_set = 1;
         }          }
         $load_dialog .= '>'.$sheetfilename."</option>\n";          $load_dialog .= '>'.$sheetfilename."</option>\n";
     }      }
     $load_dialog .= "</td><td>&nbsp;</td></tr>\n</table>\n";      $load_dialog .= "</select>\n</td><td>&nbsp;</td></tr>\n</table>\n";
         #          #
     $result .=<<END;      $result .=<<END;
   <!-- 
       <fieldset title="File Dialogs" >
       <legend>File Dialogs</legend>
     -->
 <!-- load / save dialogs -->  <!-- load / save dialogs -->
 <table cellspacing="2">  <table cellspacing="2">
 <tr>  <tr>
Line 180  END Line 189  END
     </td>      </td>
 </tr>  </tr>
 </table>  </table>
   <!--
       </fieldset>
     -->
 END  END
     return ($result,$message);      return ($result,$message);
 }  }
Line 194  sub handler { Line 206  sub handler {
     if ($loaderror) { return $loaderror; }      if ($loaderror) { return $loaderror; }
     # Check the course homeserver      # Check the course homeserver
     $loaderror= &Apache::lonnet::overloaderror($r,      $loaderror= &Apache::lonnet::overloaderror($r,
                       $ENV{'course.'.$ENV{'request.course.id'}.'.home'});                        $env{'course.'.$env{'request.course.id'}.'.home'});
 #    if ($loaderror) { return $loaderror; }   #    if ($loaderror) { return $loaderror; } 
     #      #
     # HTML Header      # HTML Header
     #      #
     if ($r->header_only) {      if ($r->header_only) {
         $r->content_type('text/html');          &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
Line 208  sub handler { Line 220  sub handler {
     # Roles Checking      # Roles Checking
     #      #
     # Needs to be in a course      # Needs to be in a course
     if (! $ENV{'request.course.fn'}) {       if (! $env{'request.course.fn'}) { 
         # Not in a course, or not allowed to modify parms          # Not in a course, or not allowed to modify parms
         $ENV{'user.error.msg'}=          $env{'user.error.msg'}=
             $r->uri.":opa:0:0:Cannot modify spreadsheet";              $r->uri.":opa:0:0:Cannot modify spreadsheet";
         return HTTP_NOT_ACCEPTABLE;           return HTTP_NOT_ACCEPTABLE; 
     }      }
       my $courseid = $env{'request.course.id'};
       #
       # Do not allow students to continue if standard or external grading is in
       # effect.
       #
       if ($env{'request.role'} =~ /^st\./) {
           if ($env{'course.'.$courseid.'.grading'} eq 'standard' ||
       $env{'course.'.$courseid.'.grading'} eq 'external' ) {
               return HTTP_NOT_ACCEPTABLE;
           }
       }
     #      #
     # Get query string for limited number of parameters      # Get query string for limited number of parameters
     #      #
     &Apache::loncommon::get_unprocessed_cgi      &Apache::loncommon::get_unprocessed_cgi
         ($ENV{'QUERY_STRING'},['sname','sdomain','usymb','filename']);          ($ENV{'QUERY_STRING'},['sname','sdomain','usymb','filename','recalc',
                                  'output_format','not_first_run']);
     #      #
     # Deal with restricted student permissions       # Deal with restricted student permissions 
     #      #
     if ($ENV{'request.role'} =~ /^st\./) {      if ($env{'request.role'} =~ /^st\./) {
         delete $ENV{'form.cell'}       if (exists($ENV{'form.cell'}));          delete $env{'form.cell'}       if (exists($env{'form.cell'}));
         delete $ENV{'form.newformula'} if (exists($ENV{'form.newformula'}));          delete $env{'form.newformula'} if (exists($env{'form.newformula'}));
     }      }
     #      #
     # Determine basic information about the spreadsheet      # Determine basic information about the spreadsheet
     my ($sheettype) = ($r->uri=~/\/(\w+)$/);      my ($sheettype) = ($r->uri=~/\/(\w+)$/);
     #      #
     my $symb   = undef;      my $symb   = undef;
     $symb = $ENV{'form.usymb'} if (exists($ENV{'form.usymb'}));      $symb = $env{'form.usymb'} if (exists($env{'form.usymb'}));
     my $name   = $ENV{'user.name'};      my $name   = $env{'user.name'};
     my $domain = $ENV{'user.domain'};      my $domain = $env{'user.domain'};
     if (exists($ENV{'form.sname'})) {      if (exists($env{'form.sname'}) && $env{'form.sname'} ne '') {
         $name   = $ENV{'form.sname'};          $name   = $env{'form.sname'};
         $domain = $ENV{'form.sdomain'};          $domain = $env{'form.sdomain'};
     }      }
     #      $env{'form.sname'} = $name;
     # Open page, try to prevent browser cache.      $env{'form.sdomain'} = $domain;
     #  
     $r->content_type('text/html');  
     $r->header_out('Cache-control','no-cache');  
     $r->header_out('Pragma','no-cache');  
     $r->send_http_header;  
     ##      ##
     ## Check permissions      ## Check permissions
     my $allowed_to_edit = &Apache::lonnet::allowed('mgr',      my $allowed_to_edit = &Apache::lonnet::allowed('mgr',
                                                 $ENV{'request.course.id'});                                                  $env{'request.course.id'});
       # Only those instructors/tas/whatevers with complete access
       # (not section restricted) are able to modify spreadsheets.
     my $allowed_to_view =  &Apache::lonnet::allowed('vgr',      my $allowed_to_view =  &Apache::lonnet::allowed('vgr',
                                                 $ENV{'request.course.id'});                                                  $env{'request.course.id'});
       if (! $allowed_to_view) {
           $allowed_to_view = &Apache::lonnet::allowed('vgr',
                       $env{'request.course.id'}.'/'.$env{'request.course.sec'});
           # Those who are restricted by section are allowed to view.
           # The routines in lonstatistics which decide which students' 
           # will be shown take care of the restriction by section.
       }
     #      #
     # Only those able to view others grades will be allowed to continue       # Only those able to view others grades will be allowed to continue 
     # if they are not requesting their own.      # if they are not requesting their own.
     if (($sheettype eq 'classcalc') ||       if ($sheettype eq 'classcalc') {
         ($name   ne $ENV{'user.name'} ) ||  
         ($domain ne $ENV{'user.domain'})) {  
         if (! $allowed_to_view) {          if (! $allowed_to_view) {
             $r->print('<h1>Access Permission Denied</h1>'.      $env{'user.error.msg'}=
                       '</form></body></html>');   $r->uri.":vgr:0:0:Access Permission Denied";
             return OK;      return HTTP_NOT_ACCEPTABLE; 
    }
       }
       if ((($name   ne $env{'user.name'} ) ||
            ($domain ne $env{'user.domain'})) && $sheettype ne 'classcalc') {
           # Check that the student is in their section?
           if (exists($env{'request.course.sec'}) && 
               $env{'request.course.sec'} ne '' ) {
               my $stu_sec = &Apache::lonnet::getsection($domain,$name,
       $env{'request.course.id'});
               if ($stu_sec ne $env{'request.course.sec'}) {
    $env{'user.error.msg'}=
       $r->uri.":vgr:0:0:Requested student not in your section.";
    return HTTP_NOT_ACCEPTABLE; 
               }
         }          }
     }      }
   
       #
       # Open page, try to prevent browser cache.
       #
       &Apache::loncommon::content_type($r,'text/html');
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
   
     #      #
     # Header....      # Header....
     #      #
Line 273  sub handler { Line 320  sub handler {
     ## Spit out the javascript required for editing      ## Spit out the javascript required for editing
     ##      ##
     if ($allowed_to_edit) {      if ($allowed_to_edit) {
    my %lt=(
    'ce' => 'Cell',
    'ac' => 'Accept',
    'dc' => 'Discard Changes'
    );
         my $extra_javascript =           my $extra_javascript = 
             &Apache::loncommon::browser_and_searcher_javascript();              &Apache::loncommon::browser_and_searcher_javascript();
         $r->print(<<ENDSCRIPT);          $r->print(<<ENDSCRIPT);
 <script language="JavaScript">  <script type="text/javascript">
   //<!--
     $extra_javascript      $extra_javascript
   
     var editwin;      var editwin;
Line 288  sub handler { Line 340  sub handler {
         // we need to escape them?            // we need to escape them?  
         edit_text +='<html><head><title>Cell Edit Window</title></head><body>';          edit_text +='<html><head><title>Cell Edit Window</title></head><body>';
         edit_text += '<form name="editwinform">';          edit_text += '<form name="editwinform">';
         edit_text += '<center><h3>Cell '+cellname+'</h3>';          edit_text += '<center><h3>$lt{'ce'} '+cellname+'</h3>';
         edit_text += '<textarea name="newformula" cols="40" rows="6"';          edit_text += '<textarea name="newformula" cols="60" rows="12"';
         edit_text += ' wrap="off" >'+cellformula+'</textarea>';          edit_text += ' wrap="off" >'+cellformula+'</textarea>';
         edit_text += '</br>';          edit_text += '</br>';
         edit_text += '<input type="button" name="accept" value="Accept"';          edit_text += '<input type="button" name="accept" value="$lt{'ac'}"';
         edit_text += ' onClick=\\\'javascript:';          edit_text += ' onClick=\\\'javascript:';
         edit_text += 'opener.document.sheet.cell.value=';          edit_text += 'opener.document.sheet.cell.value=';
         edit_text +=     '"'+cellname+'";';          edit_text +=     '"'+cellname+'";';
Line 302  sub handler { Line 354  sub handler {
         edit_text += 'self.close()\\\' />';          edit_text += 'self.close()\\\' />';
         edit_text += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';          edit_text += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
         edit_text += '<input type="button" name="abort" ';          edit_text += '<input type="button" name="abort" ';
         edit_text +=     'value="Discard Changes"';          edit_text +=     'value="$lt{'dc'}"';
         edit_text += ' onClick="javascript:self.close()" />';          edit_text += ' onClick="javascript:self.close()" />';
         edit_text += '</center></body></html>';          edit_text += '</center></body></html>';
   
Line 310  sub handler { Line 362  sub handler {
             editwin.close();              editwin.close();
         }          }
   
         editwin = window.open($nothing,'CellEditWin','height=200,width=350,scrollbars=no,resizeable=yes,alwaysRaised=yes,dependent=yes',true);          editwin = window.open($nothing,'CellEditWin','height=280,width=480,scrollbars=no,resizable=yes,alwaysRaised=yes,dependent=yes',true);
         editwin.document.write(edit_text);          editwin.document.write(edit_text);
     }      }
   //-->
 </script>  </script>
 ENDSCRIPT  ENDSCRIPT
     }      }
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb
           ({href  => $r->uri,
             title => 'Spreadsheet',
             text  => 'Spreadsheet',
             faq   => 134,
             bug   => 'Spreadsheet'});
     $r->print('</head>'.&Apache::loncommon::bodytag('Grades Spreadsheet').      $r->print('</head>'.&Apache::loncommon::bodytag('Grades Spreadsheet').
                 &Apache::lonhtmlcommon::breadcrumbs(undef,'Spreadsheet').
               '<form action="'.$r->uri.'" name="sheet" method="post">');                '<form action="'.$r->uri.'" name="sheet" method="post">');
     $r->print(&hiddenfield('sname'  ,$ENV{'form.sname'}).      $r->print(&hiddenfield('sname'  ,$env{'form.sname'}).
               &hiddenfield('sdomain',$ENV{'form.sdomain'}).                &hiddenfield('sdomain',$env{'form.sdomain'}).
               &hiddenfield('usymb'  ,$ENV{'form.usymb'}));                &hiddenfield('usymb'  ,$env{'form.usymb'}));
     $r->rflush();      $r->rflush();
     ##      ##
     ## Determine the filename to use      ## Determine the filename to use
     my $filename = undef;      my $filename = undef;
     if ($allowed_to_edit) {      if ($allowed_to_edit) {
         $filename = $ENV{'form.filename'} if (exists($ENV{'form.filename'}));          $filename = $env{'form.filename'} if (exists($env{'form.filename'}));
         #          #
         if (exists($ENV{'form.load'}) && exists($ENV{'form.loadfilename'})) {          if (exists($env{'form.load'}) && exists($env{'form.loadfilename'})) {
             $filename = $ENV{'form.loadfilename'};              $filename = $env{'form.loadfilename'};
             $ENV{'form.workcopy'} = 'no';              $env{'form.workcopy'} = 'no';
           }
       }
       ##
       ## Take care of "backdoor" spreadsheet expiration / recalc stuff
       if ($allowed_to_edit && exists($env{'form.recalc'})) {
           if (exists($env{'form.recalc'})) {
               &Apache::loncoursedata::delete_caches($env{'requres.course.id'});
           }
           if ($env{'form.recalc'} eq 'ilovewastingtime') {
               &Apache::lonnet::logthis('spreadsheet expired: entire course');
               # expire ALL spreadsheets
               &Apache::lonnet::expirespread('','','studentcalc');
               &Apache::lonnet::expirespread('','','assesscalc');
               $r->print('<h3>'.
                         &mt('Expired spreadsheet caches for all students').
                         '</h3>');
           } elsif ($env{'form.recalc'} =~ /^symb:/) {
               # expire for all students on this symb
               my ($symb) = ($env{'form.recalc'} =~ /^symb:(.*)$/);
               &Apache::lonnet::logthis('spreadsheet expired: symb = '.$symb);
               &Apache::lonnet::expirespread('','','assesscalc',$symb);
               &Apache::lonnet::expirespread('','','studentcalc');
               $r->print('<h3>'.
                 &mt('Expired spreadsheet caches for all students for symb  [_1]',
                     $symb).
                         '</h3>');
           } elsif ($env{'form.recalc'} =~ /^student:/) {
               # expire all assessment spreadsheets for this user
               my ($sname,$sdom) = ($env{'form.recalc'}=~/^student:(.*):(.*)$/);
               &Apache::lonnet::logthis('spreadsheet expired: student = '.
                                        $sname.'@'.$sdom);
               if (defined($sname) && defined($sdom)) {
                   &Apache::lonnet::expirespread($sname,$sdom,'assesscalc');
                   &Apache::lonnet::expirespread($sname,$sdom,'studentcalc');
                   $r->print('<h3>'.
                             &mt('Expired spreadsheet caches for student [_1]',
                                 $sname.'@'.$sdom).
                             '</h3>');
               }
         }          }
     }      }
     ##      ##
Line 359  ENDSCRIPT Line 459  ENDSCRIPT
     ## Editing/loading/saving      ## Editing/loading/saving
     if ($allowed_to_edit) {      if ($allowed_to_edit) {
         my ($html,$action_message) = &file_dialogs($spreadsheet);          my ($html,$action_message) = &file_dialogs($spreadsheet);
         if ($ENV{'form.makedefault'}) {          if ($env{'form.makedefault'}) {
             $spreadsheet->make_default();              $spreadsheet->make_default();
             if ($action_message) {              if ($action_message) {
                 $action_message .= '<br />';                  $action_message .= '<br />';
             }              }
             $action_message .= 'Made this spreadsheet the default';              $action_message .= &mt('Made this spreadsheet the default');
             if ($sheettype eq 'classcalc') {              if ($sheettype eq 'classcalc') {
                 $action_message .= ' for the course';                  $action_message .= ' '.&mt('for the course');
             } elsif ($sheettype eq 'studentcalc') {              } elsif ($sheettype eq 'studentcalc') {
                 $action_message .= ' for all students';                  $action_message .= ' '.&mt('for all students');
             } elsif ($sheettype eq 'assesscalc') {              } elsif ($sheettype eq 'assesscalc') {
                 $action_message .= ' for all assessments';                  $action_message .= ' '.&mt('for all assessments');
             }              }
             $action_message .= '.';              $action_message .= '.';
         }          }
         $r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'.          $r->print('<table><tr><td valign="top">'.
                   '<td valign="bottom">'.$html."</td></tr></table>\n");                    $spreadsheet->html_header().
         $r->print(<<END);                    '</td>'.
                     '<td valign="center">'.$html."</td></tr></table>\n");
           if ($action_message ne '') {
               $r->print(<<END);
 <table>  <table>
 <tr><td valign="top"><b>Last Action:</b></td>  <tr><td valign="top"><b>Last Action:</b></td>
     <td>&nbsp;</td>      <td>&nbsp;</td>
Line 384  ENDSCRIPT Line 487  ENDSCRIPT
 </tr>  </tr>
 </table>  </table>
 END  END
           }
         $r->rflush();          $r->rflush();
     } else {      } else {
         $r->print('<table><tr><td>'.$spreadsheet->html_header().          $r->print('<table><tr><td>'.$spreadsheet->html_header().
Line 391  END Line 495  END
     }      }
     $r->rflush();      $r->rflush();
     #      #
     if (! exists($ENV{'form.not_first_run'}) && $sheettype eq 'classcalc') {      $r->print("<table><tr>");
         $r->print('<input type="submit" value="Generate Spreadsheet" /><br />');      $r->print('<td><input type="submit" value="'.
                 &mt('Generate Spreadsheet').'" />'.
                 '</td>');
       if ($allowed_to_view) {
           $r->print('<td>'.
                     &Apache::loncommon::help_open_topic("Spreadsheet_About",
                                                         'Spreadsheet Help').
                     '</td>');
     }      }
       if ($allowed_to_edit) {
           $r->print('<td>'.
                     &Apache::loncommon::help_open_topic("Spreadsheet_Editing",
                                                         'Editing Help').
                     '</td>');
       }
       $r->print('</tr></table>');
     #      #
     # Keep track of the filename      # Keep track of the filename
     $r->print(&hiddenfield('filename',$filename));      $r->print(&hiddenfield('filename',$filename));
Line 401  END Line 519  END
     # Keep track of the number of times we have been called, sort of.      # Keep track of the number of times we have been called, sort of.
     $r->print(&hiddenfield('not_first_run','whatever'));      $r->print(&hiddenfield('not_first_run','whatever'));
     #      #
     if (exists($ENV{'form.not_first_run'}) || $sheettype ne 'classcalc') {      if (exists($env{'form.not_first_run'}) || $sheettype ne 'classcalc') {
         $r->print($spreadsheet->get_html_title());          $r->print($spreadsheet->get_html_title());
         if ($allowed_to_view || $allowed_to_edit) {          if ($allowed_to_view || $allowed_to_edit) {
             $r->print($spreadsheet->parent_link());              $r->print($spreadsheet->parent_link());
         }          }
           $r->rflush();
         $spreadsheet->display($r);          $spreadsheet->display($r);
     }      }
     $r->print('</form></body></html>');      $r->print('</form></body></html>');
       $spreadsheet->clear_package();
     return OK;      return OK;
 }  }
   

Removed from v.1.11  
changed lines
  Added in v.1.42


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