Diff for /loncom/interface/spreadsheet/lonspreadsheet.pm between versions 1.39 and 1.40

version 1.39, 2004/10/12 20:51:54 version 1.40, 2005/04/07 06:56:23
Line 100  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'})) &&       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') {
             $message .= "An error occurred while saving the spreadsheet".              $message .= "An error occurred while saving the spreadsheet".
Line 110  sub file_dialogs { Line 110  sub file_dialogs {
         } else {          } else {
             $message .= "Spreadsheet saved as ".$spreadsheet->filename();              $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>'.&mt('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 .= &mt('Deleted contents of cell').' '.$ENV{'form.cell'}.'.';              $message .= &mt('Deleted contents of cell').' '.$env{'form.cell'}.'.';
         }          }
     }      }
     ##      ##
Line 205  sub handler { Line 205  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
Line 219  sub handler { Line 219  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'};      my $courseid = $env{'request.course.id'};
     #      #
     # Do not allow students to continue if standard or external grading is in      # Do not allow students to continue if standard or external grading is in
     # effect.      # effect.
     #      #
     if ($ENV{'request.role'} =~ /^st\./) {      if ($env{'request.role'} =~ /^st\./) {
         if ($ENV{'course.'.$courseid.'.grading'} eq 'standard' ||          if ($env{'course.'.$courseid.'.grading'} eq 'standard' ||
     $ENV{'course.'.$courseid.'.grading'} eq 'external' ) {      $env{'course.'.$courseid.'.grading'} eq 'external' ) {
             return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE;
         }          }
     }      }
Line 245  sub handler { Line 245  sub handler {
     #      #
     # 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'}) && $ENV{'form.sname'} ne '') {      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;      $env{'form.sname'} = $name;
     $ENV{'form.sdomain'} = $domain;      $env{'form.sdomain'} = $domain;
     ##      ##
     ## 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      # Only those instructors/tas/whatevers with complete access
     # (not section restricted) are able to modify spreadsheets.      # (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) {      if (! $allowed_to_view) {
         $allowed_to_view = &Apache::lonnet::allowed('vgr',          $allowed_to_view = &Apache::lonnet::allowed('vgr',
                     $ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'});                      $env{'request.course.id'}.'/'.$env{'request.course.sec'});
         # Those who are restricted by section are allowed to view.          # Those who are restricted by section are allowed to view.
         # The routines in lonstatistics which decide which students'           # The routines in lonstatistics which decide which students' 
         # will be shown take care of the restriction by section.          # will be shown take care of the restriction by section.
Line 283  sub handler { Line 283  sub handler {
     # if they are not requesting their own.      # if they are not requesting their own.
     if ($sheettype eq 'classcalc') {      if ($sheettype eq 'classcalc') {
         if (! $allowed_to_view) {          if (! $allowed_to_view) {
     $ENV{'user.error.msg'}=      $env{'user.error.msg'}=
  $r->uri.":vgr:0:0:Access Permission Denied";   $r->uri.":vgr:0:0:Access Permission Denied";
     return HTTP_NOT_ACCEPTABLE;       return HTTP_NOT_ACCEPTABLE; 
  }   }
     }      }
     if ((($name   ne $ENV{'user.name'} ) ||      if ((($name   ne $env{'user.name'} ) ||
          ($domain ne $ENV{'user.domain'})) && $sheettype ne 'classcalc') {           ($domain ne $env{'user.domain'})) && $sheettype ne 'classcalc') {
         # Check that the student is in their section?          # Check that the student is in their section?
         if (exists($ENV{'request.course.sec'}) &&           if (exists($env{'request.course.sec'}) && 
             $ENV{'request.course.sec'} ne '' ) {              $env{'request.course.sec'} ne '' ) {
             my $stu_sec = &Apache::lonnet::getsection($domain,$name,              my $stu_sec = &Apache::lonnet::getsection($domain,$name,
     $ENV{'request.course.id'});      $env{'request.course.id'});
             if ($stu_sec ne $ENV{'request.course.sec'}) {              if ($stu_sec ne $env{'request.course.sec'}) {
  $ENV{'user.error.msg'}=   $env{'user.error.msg'}=
     $r->uri.":vgr:0:0:Requested student not in your section.";      $r->uri.":vgr:0:0:Requested student not in your section.";
  return HTTP_NOT_ACCEPTABLE;    return HTTP_NOT_ACCEPTABLE; 
             }              }
Line 378  ENDSCRIPT Line 378  ENDSCRIPT
     $r->print('</head>'.&Apache::loncommon::bodytag('Grades Spreadsheet').      $r->print('</head>'.&Apache::loncommon::bodytag('Grades Spreadsheet').
               &Apache::lonhtmlcommon::breadcrumbs(undef,'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      ## Take care of "backdoor" spreadsheet expiration / recalc stuff
     if ($allowed_to_edit && exists($ENV{'form.recalc'})) {      if ($allowed_to_edit && exists($env{'form.recalc'})) {
         if (exists($ENV{'form.recalc'})) {          if (exists($env{'form.recalc'})) {
             &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'});              &Apache::loncoursedata::delete_caches($env{'requres.course.id'});
         }          }
         if ($ENV{'form.recalc'} eq 'ilovewastingtime') {          if ($env{'form.recalc'} eq 'ilovewastingtime') {
             &Apache::lonnet::logthis('spreadsheet expired: entire course');              &Apache::lonnet::logthis('spreadsheet expired: entire course');
             # expire ALL spreadsheets              # expire ALL spreadsheets
             &Apache::lonnet::expirespread('','','studentcalc');              &Apache::lonnet::expirespread('','','studentcalc');
Line 407  ENDSCRIPT Line 407  ENDSCRIPT
             $r->print('<h3>'.              $r->print('<h3>'.
                       &mt('Expired spreadsheet caches for all students').                        &mt('Expired spreadsheet caches for all students').
                       '</h3>');                        '</h3>');
         } elsif ($ENV{'form.recalc'} =~ /^symb:/) {          } elsif ($env{'form.recalc'} =~ /^symb:/) {
             # expire for all students on this symb              # expire for all students on this symb
             my ($symb) = ($ENV{'form.recalc'} =~ /^symb:(.*)$/);              my ($symb) = ($env{'form.recalc'} =~ /^symb:(.*)$/);
             &Apache::lonnet::logthis('spreadsheet expired: symb = '.$symb);              &Apache::lonnet::logthis('spreadsheet expired: symb = '.$symb);
             &Apache::lonnet::expirespread('','','assesscalc',$symb);              &Apache::lonnet::expirespread('','','assesscalc',$symb);
             &Apache::lonnet::expirespread('','','studentcalc');              &Apache::lonnet::expirespread('','','studentcalc');
Line 417  ENDSCRIPT Line 417  ENDSCRIPT
               &mt('Expired spreadsheet caches for all students for symb  [_1]',                &mt('Expired spreadsheet caches for all students for symb  [_1]',
                   $symb).                    $symb).
                       '</h3>');                        '</h3>');
         } elsif ($ENV{'form.recalc'} =~ /^student:/) {          } elsif ($env{'form.recalc'} =~ /^student:/) {
             # expire all assessment spreadsheets for this user              # expire all assessment spreadsheets for this user
             my ($sname,$sdom) = ($ENV{'form.recalc'}=~/^student:(.*):(.*)$/);              my ($sname,$sdom) = ($env{'form.recalc'}=~/^student:(.*):(.*)$/);
             &Apache::lonnet::logthis('spreadsheet expired: student = '.              &Apache::lonnet::logthis('spreadsheet expired: student = '.
                                      $sname.'@'.$sdom);                                       $sname.'@'.$sdom);
             if (defined($sname) && defined($sdom)) {              if (defined($sname) && defined($sdom)) {
Line 458  ENDSCRIPT Line 458  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 />';
Line 518  END Line 518  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());

Removed from v.1.39  
changed lines
  Added in v.1.40


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