Diff for /loncom/interface/spreadsheet/lonspreadsheet.pm between versions 1.7 and 1.20

version 1.7, 2003/05/28 15:19:34 version 1.20, 2003/08/17 18:50:12
Line 93  sub file_dialogs { Line 93  sub file_dialogs {
     my $bgcolor = "#FFFFFF";      my $bgcolor = "#FFFFFF";
     my $sheettype = $spreadsheet->{'type'};      my $sheettype = $spreadsheet->{'type'};
     my $result = '';      my $result = '';
       my $message = '';
     ##      ##
     ## Deal with saving the spreadsheet      ## Deal with saving the spreadsheet
     if (exists($ENV{'form.save'}) &&       if ((exists($ENV{'form.save'}) || exists($ENV{'form.makedefault'})) && 
         exists($ENV{'form.savefilename'})) {          exists($ENV{'form.savefilename'})) {
         $spreadsheet->filename($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') {
             $result .= "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;              return $result;
         } else {          } else {
             $result .= "Spreadsheet saved as ".$ENV{'form.savefilename'};              $message .= "Spreadsheet saved as ".$ENV{'form.savefilename'};
         }          }
     } elsif (exists($ENV{'form.newformula'}) &&       } elsif (exists($ENV{'form.newformula'}) && 
              exists($ENV{'form.cell'})       &&                exists($ENV{'form.cell'})       && 
Line 116  sub file_dialogs { Line 117  sub file_dialogs {
         $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);
         $result .='<pre>'.$ENV{'form.cell'}.' = '.          if ($ENV{'form.newformula'} !~ /^\s*$/) {
                   $ENV{'form.newformula'}."</pre>\n";              $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      ## Editing code
Line 126  sub file_dialogs { Line 132  sub file_dialogs {
     ##      ##
     ## Create the save and load dialogs      ## Create the save and load dialogs
     my $filename = $spreadsheet->filename();      my $filename = $spreadsheet->filename();
     $filename = 'Default' if ($filename =~ /^default\.$sheettype/i);      my $truefilename = $filename;
     $filename =~ s/_$sheettype$//;      if ($spreadsheet->is_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="Save as" /> '.
         '<input type="text" name="savefilename" size="30" value="'.          '<input type="text" name="savefilename" size="30" value="'.
         $filename.'" />'.          $truefilename.'" />'.
         '</nobr>';          '</nobr>';
     my $makedefault_dialog = '<input type="submit" name="makedefault" '.      my $makedefault_dialog = '<input type="submit" name="makedefault" '.
         'value="Make This Sheet the Default"/>';          'value="Save as & Make This Sheet the Default"/>';
     #      #
     my $link = '<a href="javascript:openbrowser'.      my $link = '<a href="javascript:openbrowser'.
         "('sheet','loadfilename','spreadsheet')\">Browse</a>";          "('sheet','loadfilename','spreadsheet')\">Select Spreadsheet File</a>";
     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="25" value="$filename" />          <input type="text" name="loadfilename" size="20" value="$filename" />
         $link</nobr>          $link</nobr>
     </td></tr>      </td></tr>
 <tr><td>&nbsp;</td><td>  <tr><td>&nbsp;</td><td>
Line 150  sub file_dialogs { Line 158  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()) {
         $sheetfilename =~ s/_$sheettype$//;  
         $load_dialog .= '    <option name="'.$sheetfilename.'"';          $load_dialog .= '    <option name="'.$sheetfilename.'"';
         if ($filename eq $sheetfilename) {          if ($filename eq $sheetfilename) {
             $load_dialog .= ' selected';              $load_dialog .= ' selected';
Line 158  END Line 165  END
         }          }
         $load_dialog .= '>'.$sheetfilename."</option>\n";          $load_dialog .= '>'.$sheetfilename."</option>\n";
     }      }
     if ($default_filename_set) {  
         $load_dialog .= '<option name="Default">Default</option>'."\n";  
     } else {  
         $load_dialog .= '<option name="Default" selected >Default</option>'.  
             "\n";  
     }  
     $load_dialog .= "</td><td>&nbsp;</td></tr>\n</table>\n";      $load_dialog .= "</td><td>&nbsp;</td></tr>\n</table>\n";
         #          #
     $result .=<<END;      $result .=<<END;
Line 180  END Line 181  END
 </tr>  </tr>
 </table>  </table>
 END  END
     return $result;      return ($result,$message);
 }  }
   
 sub handler {  sub handler {
Line 213  sub handler { Line 214  sub handler {
             $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 grading is in effect.
       if ($ENV{'request.role'} =~ /^st\./) {
           if ($ENV{'course.'.$courseid.'.grading'} eq 'standard') {
               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']);
     #      #
     # Deal with restricted student permissions       # Deal with restricted student permissions 
     #      #
Line 237  sub handler { Line 246  sub handler {
         $name   = $ENV{'form.sname'};          $name   = $ENV{'form.sname'};
         $domain = $ENV{'form.sdomain'};          $domain = $ENV{'form.sdomain'};
     }      }
     #  
     # Open page, try to prevent browser cache.  
     #  
     $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::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.
       #
       $r->content_type('text/html');
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
   
     #      #
     # Header....      # Header....
     #      #
Line 288  sub handler { Line 318  sub handler {
         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>Cell '+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="Accept"';
Line 309  sub handler { Line 339  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,resizeable=yes,alwaysRaised=yes,dependent=yes',true);
         editwin.document.write(edit_text);          editwin.document.write(edit_text);
     }      }
 </script>  </script>
Line 333  ENDSCRIPT Line 363  ENDSCRIPT
         }          }
     }      }
     ##      ##
       ## Take care of "backdoor" spreadsheet expiration / recalc stuff
       if ($allowed_to_edit && exists($ENV{'form.recalc'})) {
           if ($ENV{'form.recalc'} eq 'ilovewastingtime') {
               &Apache::lonnet::logthis('ilovewastingtime');
               # expire ALL spreadsheets
               &Apache::lonnet::expirespread('','','studentcalc');
               &Apache::lonnet::expirespread('','','assesscalc');
           } elsif ($ENV{'form.recalc'} =~ /^symb:/) {
               # expire for all students on this symb
               my ($symb) = ($ENV{'form.recalc'} =~ /^symb:(.*)$/);
               &Apache::lonnet::logthis('symb = '.$symb);
               &Apache::lonnet::expirespread('','','assesscalc',$symb);
               &Apache::lonnet::expirespread('','','studentcalc');
           } elsif ($ENV{'form.recalc'} =~ /^student:/) {
               # expire all assessment spreadsheets for this user
               my ($sname,$sdom) = ($ENV{'form.recalc'}=~/^student:(.*):(.*)$/);
               &Apache::lonnet::logthis('student = '.$sname.':'.$sdom);
               if (defined($sname) && defined($sdom)) {
                   &Apache::lonnet::expirespread($sname,$sdom,'assesscalc');
                   &Apache::lonnet::expirespread($sname,$sdom,'studentcalc');
               }
           }
       }
       ##
     ## Make the spreadsheet      ## Make the spreadsheet
     &Apache::Spreadsheet::initialize_spreadsheet_package();      &Apache::Spreadsheet::initialize_spreadsheet_package();
     my $spreadsheet = undef;      my $spreadsheet = undef;
Line 351  ENDSCRIPT Line 405  ENDSCRIPT
         # error error - run in circles, scream and shout          # error error - run in circles, scream and shout
         return;          return;
     }      }
       $spreadsheet->initialize();
     #      #
     # Output selector      # Output selector
     $r->print('<input type="submit" value="Update Display" /><br />');  
     ##      ##
     ## Editing/loading/saving      ## Editing/loading/saving
     if ($allowed_to_edit) {      if ($allowed_to_edit) {
           my ($html,$action_message) = &file_dialogs($spreadsheet);
           if ($ENV{'form.makedefault'}) {
               $spreadsheet->make_default();
               if ($action_message) {
                   $action_message .= '<br />';
               }
               $action_message .= 'Made this spreadsheet the default';
               if ($sheettype eq 'classcalc') {
                   $action_message .= ' for the course';
               } elsif ($sheettype eq 'studentcalc') {
                   $action_message .= ' for all students';
               } elsif ($sheettype eq 'assesscalc') {
                   $action_message .= ' for all assessments';
               }
               $action_message .= '.';
           }
         $r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'.          $r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'.
                   '<td valign="bottom">'.                    '<td valign="bottom">'.$html."</td></tr></table>\n");
                   &file_dialogs($spreadsheet)."</td></tr></table>\n");          if ($action_message ne '') {
               $r->print(<<END);
   <table>
   <tr><td valign="top"><b>Last Action:</b></td>
       <td>&nbsp;</td>
       <td>$action_message</td>
   </tr>
   </table>
   END
           }
         $r->rflush();          $r->rflush();
     } else {      } else {
         $r->print('<table><tr><td>'.$spreadsheet->html_header().          $r->print('<table><tr><td>'.$spreadsheet->html_header().
                   "</td></tr></table>\n");                    "</td></tr></table>\n");
     }      }
       $r->rflush();
       #
       $r->print("<table><tr>");
       if ($sheettype eq 'classcalc') {
           $r->print('<td><input type="submit" value="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 377  ENDSCRIPT Line 476  ENDSCRIPT
         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);
     } else {  
         $r->print("<h2>Make your selections and bonk the 'update display' button</h2>");  
     }      }
     $r->print('</form></body></html>');      $r->print('</form></body></html>');
     return OK;      return OK;

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


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