Diff for /loncom/interface/spreadsheet/lonspreadsheet.pm between versions 1.2 and 1.16

version 1.2, 2003/05/19 14:06:18 version 1.16, 2003/07/16 13:52:19
Line 88  sub selectbox { Line 88  sub selectbox {
     return $selout.'</select>';      return $selout.'</select>';
 }  }
   
   sub file_dialogs {
       my ($spreadsheet) = @_;
       my $bgcolor = "#FFFFFF";
       my $sheettype = $spreadsheet->{'type'};
       my $result = '';
       my $message = '';
       ##
       ## Deal with saving the spreadsheet
       if ((exists($ENV{'form.save'}) || exists($ENV{'form.makedefault'})) && 
           exists($ENV{'form.savefilename'})) {
           $spreadsheet->filename($ENV{'form.savefilename'});
           my $save_status = $spreadsheet->save();
           if ($save_status ne 'ok') {
               $message .= "An error occurred while saving the spreadsheet".
                   "There error is:".$save_status;
               return $result;
           } else {
               $message .= "Spreadsheet saved as ".$ENV{'form.savefilename'};
           }
       } elsif (exists($ENV{'form.newformula'}) && 
                exists($ENV{'form.cell'})       && 
                $ENV{'form.cell'} ne '' ) {
           ##
           ## Make any requested modifications to the spreadsheet
           $spreadsheet->modify_cell($ENV{'form.cell'},
                                     $ENV{'form.newformula'});
           $spreadsheet->save_tmp();
           # output that we are dealing with a temporary file
           $result .=&hiddenfield('workcopy',$sheettype);
           if ($ENV{'form.newformula'} !~ /^\s*$/) {
               $message .='<table><tr>'.
                 '<td valign="top"><pre>Cell '.$ENV{'form.cell'}.' = </pre></td>'.
                 '<td><pre>'.$ENV{'form.newformula'}."</pre></td></tr></table>\n";
           } else {
               $message .= 'Deleted contents of cell '.$ENV{'form.cell'}.'.';
           }
       }
       ##
       ## Editing code
       $result .=&hiddenfield('cell','').
                 &hiddenfield('newformula','');
       ##
       ## Create the save and load dialogs
       my $filename = $spreadsheet->filename();
       my $truefilename = $filename;
       if ($spreadsheet->is_default()) {
           $filename = 'Default';
       }
       my $save_dialog = '<nobr>'.
           '<input type="submit" name="save" value="Save as" /> '.
           '<input type="text" name="savefilename" size="30" value="'.
           $truefilename.'" />'.
           '</nobr>';
       my $makedefault_dialog = '<input type="submit" name="makedefault" '.
           'value="Save as & Make This Sheet the Default"/>';
       #
       my $link = '<a href="javascript:openbrowser'.
           "('sheet','loadfilename','spreadsheet')\">Select Spreadsheet File</a>";
       my $load_dialog = <<END;
   <table bgcolor="$bgcolor">
   <tr><td><input type="submit" name="load" value="Load" /></td>
       <td><nobr>
           <input type="text" name="loadfilename" size="20" value="$filename" />
           $link</nobr>
       </td></tr>
   <tr><td>&nbsp;</td><td>
       <select name="fileselect" onchange="document.sheet.loadfilename.value=document.sheet.fileselect.value" >
   END
       my $default_filename_set = 0;
       foreach my $sheetfilename ($spreadsheet->othersheets()) {
           $load_dialog .= '    <option name="'.$sheetfilename.'"';
           if ($filename eq $sheetfilename) {
               $load_dialog .= ' selected';
               $default_filename_set = 1;
           }
           $load_dialog .= '>'.$sheetfilename."</option>\n";
       }
       $load_dialog .= "</td><td>&nbsp;</td></tr>\n</table>\n";
           #
       $result .=<<END;
   <!-- load / save dialogs -->
   <table cellspacing="2">
   <tr>
       <td>$load_dialog</td>
       <td>
           <table bgcolor="$bgcolor">
           <tr><td>$save_dialog</td></tr>
           <tr><td align="center">$makedefault_dialog</td></tr>
           </table>
       </td>
   </tr>
   </table>
   END
       return ($result,$message);
   }
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     #      #
Line 99  sub handler { Line 195  sub handler {
     # 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
     #      #
Line 142  sub handler { Line 238  sub handler {
         $name   = $ENV{'form.sname'};          $name   = $ENV{'form.sname'};
         $domain = $ENV{'form.sdomain'};          $domain = $ENV{'form.sdomain'};
     }      }
       ##
       ## Check permissions
       my $allowed_to_edit = &Apache::lonnet::allowed('mgr',
                                                   $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',
                                                   $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 
       # if they are not requesting their own.
       if ($sheettype eq 'classcalc') {
           if (! $allowed_to_view) {
       $ENV{'user.error.msg'}=
    $r->uri.":vgr:0:0:Access Permission Denied";
       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::usection($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.      # Open page, try to prevent browser cache.
     #      #
     $r->content_type('text/html');      $r->content_type('text/html');
     $r->header_out('Cache-control','no-cache');      &Apache::loncommon::no_cache($r);
     $r->header_out('Pragma','no-cache');  
     $r->send_http_header;      $r->send_http_header;
     #  
     # Check user permissions - only those able to view others grades  
     # will be allowed to continue if they are not requesting their own.  
     if (($sheettype eq 'classcalc') ||   
         ($name   ne $ENV{'user.name'} ) ||  
         ($domain ne $ENV{'user.domain'})) {  
         if (! &Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {  
             $r->print('<h1>Access Permission Denied</h1>'.  
                       '</form></body></html>');  
             return OK;  
         }  
     }  
     #      #
     # Header....      # Header....
     #      #
Line 169  sub handler { Line 293  sub handler {
     ##      ##
     ## Spit out the javascript required for editing      ## Spit out the javascript required for editing
     ##      ##
     if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) {      if ($allowed_to_edit) {
           my $extra_javascript = 
               &Apache::loncommon::browser_and_searcher_javascript();
         $r->print(<<ENDSCRIPT);          $r->print(<<ENDSCRIPT);
 <script language="JavaScript">  <script language="JavaScript">
   
       $extra_javascript
   
     var editwin;      var editwin;
   
     function celledit(cellname,cellformula) {      function celledit(cellname,cellformula) {
Line 216  ENDSCRIPT Line 344  ENDSCRIPT
               &hiddenfield('usymb'  ,$ENV{'form.usymb'}));                &hiddenfield('usymb'  ,$ENV{'form.usymb'}));
     $r->rflush();      $r->rflush();
     ##      ##
     ## Check permissions  
     my $editing_is_allowed = &Apache::lonnet::allowed('mgr',  
                                                 $ENV{'request.course.id'});  
     ##  
     ## Determine the filename to use      ## Determine the filename to use
     my $filename = undef;      my $filename = undef;
     if ($editing_is_allowed) {      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';
         }          }
     }      }
     ##      ##
Line 239  ENDSCRIPT Line 364  ENDSCRIPT
         $spreadsheet = Apache::studentcalc->new($name,$domain,$filename,undef);          $spreadsheet = Apache::studentcalc->new($name,$domain,$filename,undef);
     } elsif ($sheettype eq 'assesscalc' &&       } elsif ($sheettype eq 'assesscalc' && 
              defined($symb) &&                defined($symb) && 
              $editing_is_allowed) {               $allowed_to_edit) {
         $spreadsheet = Apache::assesscalc->new($name,$domain,$filename,$symb);          $spreadsheet = Apache::assesscalc->new($name,$domain,$filename,$symb);
     } else {      } else {
         return HTTP_NOT_ACCEPTABLE;          return HTTP_NOT_ACCEPTABLE;
Line 248  ENDSCRIPT Line 373  ENDSCRIPT
         # error error - run in circles, scream and shout          # error error - run in circles, scream and shout
         return;          return;
     }      }
       $spreadsheet->initialize();
       #
       # Output selector
     ##      ##
     ## Editing/loading/saving      ## Editing/loading/saving
     if ($editing_is_allowed) {      if ($allowed_to_edit) {
         ##          my ($html,$action_message) = &file_dialogs($spreadsheet);
         ## Deal with saving the spreadsheet          if ($ENV{'form.makedefault'}) {
         if (exists($ENV{'form.save'}) &&               $spreadsheet->make_default();
             exists($ENV{'form.savefilename'})) {              if ($action_message) {
             $spreadsheet->filename($ENV{'form.savefilename'});                  $action_message .= '<br />';
             my $save_status = $spreadsheet->save();  
             if ($save_status ne 'ok') {  
                 $r->print("An error occurred while saving the spreadsheet".  
                           "There error is:".$save_status);  
             } else {  
                 $r->print("Spreadsheet saved as ".$ENV{'form.savefilename'});  
             }              }
         } elsif (exists($ENV{'form.newformula'}) &&               $action_message .= 'Made this spreadsheet the default';
                  exists($ENV{'form.cell'})       &&               if ($sheettype eq 'classcalc') {
                  $ENV{'form.cell'} ne '' ) {                  $action_message .= ' for the course';
             ##              } elsif ($sheettype eq 'studentcalc') {
             ## Make any requested modifications to the spreadsheet                  $action_message .= ' for all students';
             $spreadsheet->modify_cell($ENV{'form.cell'},              } elsif ($sheettype eq 'assesscalc') {
                                       $ENV{'form.newformula'});                  $action_message .= ' for all assessments';
             $spreadsheet->save_tmp();  
             # output that we are dealing with a temporary file  
             $r->print(&hiddenfield('workcopy',$sheettype));  
             $r->print('<pre>'.$ENV{'form.cell'}.' = '.  
                       $ENV{'form.newformula'}.'</pre>'."\n");  
         }  
         ##  
         ## Editing code  
         $r->print(&hiddenfield('cell','').  
                   &hiddenfield('newformula',''));  
         ##  
         ## Create the save and load dialogs  
         $filename = $spreadsheet->filename();  
         $filename = '' if ($filename =~ /^default\.$sheettype/i);  
         $filename =~ s/_$sheettype$//;  
         my $save_dialog =   
             '<input type="submit" name="save" value="Save as ..." /> '.  
                 '<input type="text" name="savefilename" size="30" value="'.  
                     $filename.'" />';  
         my $makedefault_dialog =   
             '<input type="submit" name="makedefault" value="Make Default"/>';  
         #  
         my $load_dialog =   
             '<input type="submit" name="load" value="Load ..." />'.  
                 '<select name="loadfilename">'.  
                     '<option name="Default">Default</option>'."\n";  
         foreach my $sheetfilename ($spreadsheet->othersheets()) {  
             $sheetfilename =~ s/_$sheettype$//;  
             $load_dialog .= '<option name="'.$sheetfilename.'"';  
             if ($filename eq $sheetfilename) {  
                 $load_dialog .= ' selected';  
             }              }
             $load_dialog .= '>'.$sheetfilename."</option>\n";              $action_message .= '.';
         }          }
         #          $r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'.
         $r->print(<<END);                    '<td valign="bottom">'.$html."</td></tr></table>\n");
 <!-- load / save dialogs -->          if ($action_message ne '') {
 <table cellspacing="3">              $r->print(<<END);
 <tr>  <table>
 <td>$load_dialog</td>  <tr><td valign="top"><b>Last Action:</b></td>
 <td>$save_dialog</td>      <td>&nbsp;</td>
 <td>$makedefault_dialog</td>      <td>$action_message</td>
 </tr>  </tr>
 </table>  </table>
 END  END
           }
         $r->rflush();          $r->rflush();
       } else {
           $r->print('<table><tr><td>'.$spreadsheet->html_header().
                     "</td></tr></table>\n");
       }
       $r->rflush();
       #
       if ($sheettype eq 'classcalc') {
           $r->print('<input type="submit" value="Generate Spreadsheet" /><br />');
     }      }
     #      #
     # Keep track of the filename      # Keep track of the filename
     $r->print(&hiddenfield('filename',$filename));      $r->print(&hiddenfield('filename',$filename));
     #      #
     $r->print($spreadsheet->get_title());      # Keep track of the number of times we have been called, sort of.
     $r->print($spreadsheet->parent_link());      $r->print(&hiddenfield('not_first_run','whatever'));
     if (defined($spreadsheet)) {      #
       if (exists($ENV{'form.not_first_run'}) || $sheettype ne 'classcalc') {
           $r->print($spreadsheet->get_html_title());
           if ($allowed_to_view || $allowed_to_edit) {
               $r->print($spreadsheet->parent_link());
           }
           $r->rflush();
         $spreadsheet->display($r);          $spreadsheet->display($r);
     }      }
     $r->print('</form></body></html>');      $r->print('</form></body></html>');

Removed from v.1.2  
changed lines
  Added in v.1.16


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