Diff for /loncom/interface/lonhelper.pm between versions 1.99 and 1.100

version 1.99, 2005/02/22 22:56:08 version 1.100, 2005/04/07 06:56:23
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (Page Handler  
 #  
 # (.helper handler  
 #  
   
 =pod  =pod
   
Line 186  use Apache::Constants qw(:common); Line 182  use Apache::Constants qw(:common);
 use Apache::File;  use Apache::File;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 # Register all the tags with the helper, so the helper can   # Register all the tags with the helper, so the helper can 
 # push and pop them  # push and pop them
Line 255  sub real_handler { Line 252  sub real_handler {
     my $r = shift;      my $r = shift;
     my $uri = shift;      my $uri = shift;
     if (!defined($uri)) { $uri = $r->uri(); }      if (!defined($uri)) { $uri = $r->uri(); }
     $ENV{'request.uri'} = $uri;      $env{'request.uri'} = $uri;
     my $filename = '/home/httpd/html' . $uri;      my $filename = '/home/httpd/html' . $uri;
     my $fh = Apache::File->new($filename);      my $fh = Apache::File->new($filename);
     my $file;      my $file;
Line 263  sub real_handler { Line 260  sub real_handler {
   
   
     # Send header, don't cache this page      # Send header, don't cache this page
     if ($ENV{'browser.mathml'}) {      if ($env{'browser.mathml'}) {
  &Apache::loncommon::content_type($r,'text/xml');   &Apache::loncommon::content_type($r,'text/xml');
     } else {      } else {
  &Apache::loncommon::content_type($r,'text/html');   &Apache::loncommon::content_type($r,'text/html');
Line 278  sub real_handler { Line 275  sub real_handler {
   
     my $allowed = $helper->allowedCheck();      my $allowed = $helper->allowedCheck();
     if (!$allowed) {      if (!$allowed) {
         $ENV{'user.error.msg'} = $ENV{'request.uri'}.':'.$helper->{REQUIRED_PRIV}.          $env{'user.error.msg'} = $env{'request.uri'}.':'.$helper->{REQUIRED_PRIV}.
             ":0:0:Permission denied to access this helper.";              ":0:0:Permission denied to access this helper.";
         return HTTP_NOT_ACCEPTABLE;          return HTTP_NOT_ACCEPTABLE;
     }      }
Line 363  use HTML::Entities(); Line 360  use HTML::Entities();
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::File;  use Apache::File;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 sub new {  sub new {
     my $proto = shift;      my $proto = shift;
Line 374  sub new { Line 372  sub new {
           
     # If there is a state from the previous form, use that. If there is no      # If there is a state from the previous form, use that. If there is no
     # state, use the start state parameter.      # state, use the start state parameter.
     if (defined $ENV{"form.CURRENT_STATE"})      if (defined $env{"form.CURRENT_STATE"})
     {      {
  $self->{STATE} = $ENV{"form.CURRENT_STATE"};   $self->{STATE} = $env{"form.CURRENT_STATE"};
     }      }
     else      else
     {      {
  $self->{STATE} = "START";   $self->{STATE} = "START";
     }      }
   
     $self->{TOKEN} = $ENV{'form.TOKEN'};      $self->{TOKEN} = $env{'form.TOKEN'};
     # If a token was passed, we load that in. Otherwise, we need to create a       # If a token was passed, we load that in. Otherwise, we need to create a 
     # new storage file      # new storage file
     # Tried to use standard Tie'd hashes, but you can't seem to take a       # Tried to use standard Tie'd hashes, but you can't seem to take a 
Line 416  sub new { Line 414  sub new {
             return undef;              return undef;
         }          }
         # Must create the storage          # Must create the storage
         $self->{TOKEN} = md5_hex($ENV{'user.name'} . $ENV{'user.domain'} .          $self->{TOKEN} = md5_hex($env{'user.name'} . $env{'user.domain'} .
                                  time() . rand());                                   time() . rand());
         $self->{FILENAME} = $Apache::lonnet::tmpdir . md5_hex($self->{TOKEN});          $self->{FILENAME} = $Apache::lonnet::tmpdir . md5_hex($self->{TOKEN});
     }      }
   
     # OK, we now have our persistent storage.      # OK, we now have our persistent storage.
   
     if (defined $ENV{"form.RETURN_PAGE"})      if (defined $env{"form.RETURN_PAGE"})
     {      {
  $self->{RETURN_PAGE} = $ENV{"form.RETURN_PAGE"};   $self->{RETURN_PAGE} = $env{"form.RETURN_PAGE"};
     }      }
     else      else
     {      {
Line 486  sub declareVar { Line 484  sub declareVar {
     }      }
   
     my $envname = 'form.' . $var . '.forminput';      my $envname = 'form.' . $var . '.forminput';
     if (defined($ENV{$envname})) {      if (defined($env{$envname})) {
         if (ref($ENV{$envname})) {          if (ref($env{$envname})) {
             $self->{VARS}->{$var} = join('|||', @{$ENV{$envname}});              $self->{VARS}->{$var} = join('|||', @{$env{$envname}});
         } else {          } else {
             $self->{VARS}->{$var} = $ENV{$envname};              $self->{VARS}->{$var} = $env{$envname};
         }          }
     }      }
 }  }
Line 502  sub allowedCheck { Line 500  sub allowedCheck {
         return 1;          return 1;
     }      }
   
     return Apache::lonnet::allowed($self->{REQUIRED_PRIV}, $ENV{'request.course.id'});      return Apache::lonnet::allowed($self->{REQUIRED_PRIV}, $env{'request.course.id'});
 }  }
   
 sub changeState {  sub changeState {
Line 524  sub process { Line 522  sub process {
     # Phase 1: Post processing for state of previous screen (which is actually      # Phase 1: Post processing for state of previous screen (which is actually
     # the "current state" in terms of the helper variables), if it wasn't the       # the "current state" in terms of the helper variables), if it wasn't the 
     # beginning state.      # beginning state.
     if ($self->{STATE} ne "START" || $ENV{"form.SUBMIT"} eq &mt("Next ->")) {      if ($self->{STATE} ne "START" || $env{"form.SUBMIT"} eq &mt("Next ->")) {
  my $prevState = $self->{STATES}{$self->{STATE}};   my $prevState = $self->{STATES}{$self->{STATE}};
         $prevState->postprocess();          $prevState->postprocess();
     }      }
Line 1115  no strict; Line 1113  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::choices',      &Apache::lonhelper::register('Apache::lonhelper::choices',
Line 1293  BUTTONS Line 1292  BUTTONS
 # given, switch to it  # given, switch to it
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $chosenValue = $ENV{'form.' . $self->{'variable'} . '.forminput'};      my $chosenValue = $env{'form.' . $self->{'variable'} . '.forminput'};
   
     if (!defined($chosenValue) && !$self->{'allowempty'}) {      if (!defined($chosenValue) && !$self->{'allowempty'}) {
         $self->{ERROR_MSG} =           $self->{ERROR_MSG} = 
Line 1347  no strict; Line 1346  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::dropdown',      &Apache::lonhelper::register('Apache::lonhelper::dropdown',
Line 1447  sub render { Line 1447  sub render {
 # given, switch to it  # given, switch to it
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $chosenValue = $ENV{'form.' . $self->{'variable'} . '.forminput'};      my $chosenValue = $env{'form.' . $self->{'variable'} . '.forminput'};
   
     if (!defined($chosenValue) && !$self->{'allowempty'}) {      if (!defined($chosenValue) && !$self->{'allowempty'}) {
         $self->{ERROR_MSG} = "You must choose one or more choices to" .          $self->{ERROR_MSG} = "You must choose one or more choices to" .
Line 1506  no strict; Line 1506  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal; # A localization nightmare  use Apache::lonlocal; # A localization nightmare
   use Apache::lonnet;
 use Time::localtime;  use Time::localtime;
   
 BEGIN {  BEGIN {
Line 1650  sub render { Line 1650  sub render {
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $var = $self->{'variable'};      my $var = $self->{'variable'};
     my $month = $ENV{'form.' . $var . 'month'};       my $month = $env{'form.' . $var . 'month'}; 
     my $day = $ENV{'form.' . $var . 'day'};       my $day = $env{'form.' . $var . 'day'}; 
     my $year = $ENV{'form.' . $var . 'year'};       my $year = $env{'form.' . $var . 'year'}; 
     my $min = 0;       my $min = 0; 
     my $hour = 0;      my $hour = 0;
     if ($self->{'hoursminutes'}) {      if ($self->{'hoursminutes'}) {
         $min = $ENV{'form.' . $var . 'minute'};          $min = $env{'form.' . $var . 'minute'};
         $hour = $ENV{'form.' . $var . 'hour'};          $hour = $env{'form.' . $var . 'hour'};
     }      }
   
     my $chosenDate;      my $chosenDate;
Line 1757  than 1 part. Line 1757  than 1 part.
 no strict;  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::resource',      &Apache::lonhelper::register('Apache::lonhelper::resource',
Line 2075  BUTTONS Line 2076  BUTTONS
 <input type="hidden" name="${var}_part.forminput" />;  <input type="hidden" name="${var}_part.forminput" />;
   
 RADIO  RADIO
     $ENV{'form.condition'} = !$self->{'toponly'};      $env{'form.condition'} = !$self->{'toponly'};
     my $cols = [$renderColFunc];      my $cols = [$renderColFunc];
     if ($self->{'addparts'}) { push(@$cols, $renderPartsFunc); }      if ($self->{'addparts'}) { push(@$cols, $renderPartsFunc); }
     push(@$cols, Apache::lonnavmaps::resource());      push(@$cols, Apache::lonnavmaps::resource());
Line 2155  no strict; Line 2156  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::student',      &Apache::lonhelper::register('Apache::lonhelper::student',
Line 2371  BUTTONS Line 2372  BUTTONS
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
   
     my $result = $ENV{'form.' . $self->{'variable'} . '.forminput'};      my $result = $env{'form.' . $self->{'variable'} . '.forminput'};
     if (!$result) {      if (!$result) {
         $self->{ERROR_MSG} =           $self->{ERROR_MSG} = 
     &mt('You must choose at least one student to continue.');      &mt('You must choose at least one student to continue.');
Line 2441  no strict; Line 2442  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
 use Apache::lonpubdir; # for getTitleString  use Apache::lonpubdir; # for getTitleString
   
 BEGIN {  BEGIN {
Line 2605  BUTTONS Line 2606  BUTTONS
         @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, '');          @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, '');
     } else {      } else {
         # local library server resource space          # local library server resource space
         @fileList = &Apache::lonnet::dirlist($subdir, $ENV{'user.domain'}, $ENV{'user.name'}, '');          @fileList = &Apache::lonnet::dirlist($subdir, $env{'user.domain'}, $env{'user.name'}, '');
     }      }
   
     # Sort the fileList into order      # Sort the fileList into order
Line 2698  sub fileState { Line 2699  sub fileState {
     my $constructionSpaceDir = shift;      my $constructionSpaceDir = shift;
     my $file = shift;      my $file = shift;
           
     my ($uname,$udom)=($ENV{'user.name'},$ENV{'user.domain'});      my ($uname,$udom)=($env{'user.name'},$env{'user.domain'});
     if ($ENV{'request.role'}=~/^ca\./) {      if ($env{'request.role'}=~/^ca\./) {
  (undef,$udom,$uname)=split(/\//,$ENV{'request.role'});   (undef,$udom,$uname)=split(/\//,$env{'request.role'});
     }      }
     my $docroot = $Apache::lonnet::perlvar{'lonDocRoot'};      my $docroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     my $subdirpart = $constructionSpaceDir;      my $subdirpart = $constructionSpaceDir;
Line 2725  sub fileState { Line 2726  sub fileState {
   
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $result = $ENV{'form.' . $self->{'variable'} . '.forminput'};      my $result = $env{'form.' . $self->{'variable'} . '.forminput'};
     if (!$result) {      if (!$result) {
         $self->{ERROR_MSG} = 'You must choose at least one file '.          $self->{ERROR_MSG} = 'You must choose at least one file '.
             'to continue.';              'to continue.';
Line 2932  package Apache::lonhelper::general; Line 2933  package Apache::lonhelper::general;
 =head2 General-purpose tag: <exec>X<exec, helper tag>  =head2 General-purpose tag: <exec>X<exec, helper tag>
   
 The contents of the exec tag are executed as Perl code, B<not> inside a   The contents of the exec tag are executed as Perl code, B<not> inside a 
 safe space, so the full range of $ENV and such is available. The code  safe space, so the full range of $env and such is available. The code
 will be executed as a subroutine wrapped with the following code:  will be executed as a subroutine wrapped with the following code:
   
 "sub { my $helper = shift; my $state = shift;" and  "sub { my $helper = shift; my $state = shift;" and
Line 3085  no strict; Line 3086  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::final',      &Apache::lonhelper::register('Apache::lonhelper::final',
                                  ('final', 'exitpage'));                                   ('final', 'exitpage'));
Line 3182  sub render { Line 3184  sub render {
     if ($self->{'restartCourse'}) {      if ($self->{'restartCourse'}) {
  my $actionURL = '/adm/roles';   my $actionURL = '/adm/roles';
  $targetURL = '/adm/menu';   $targetURL = '/adm/menu';
  if ($ENV{'course.'.$ENV{'request.course.id'}.'.url'}=~/^uploaded/) {   if ($env{'course.'.$env{'request.course.id'}.'.url'}=~/^uploaded/) {
     $targetURL = '/adm/coursedocs';      $targetURL = '/adm/coursedocs';
  } else {   } else {
     $targetURL = '/adm/navmaps';      $targetURL = '/adm/navmaps';
  }   }
  if ($ENV{'course.'.$ENV{'request.course.id'}.'.clonedfrom'}) {   if ($env{'course.'.$env{'request.course.id'}.'.clonedfrom'}) {
     $targetURL = '/adm/parmset?overview=1';      $targetURL = '/adm/parmset?overview=1';
  }   }
  my $finish=&mt('Finish Course Initialization');   my $finish=&mt('Finish Course Initialization');
Line 3199  sub render { Line 3201  sub render {
  "<input type='button' onclick='history.go(-1)' value='$previous' />" .   "<input type='button' onclick='history.go(-1)' value='$previous' />" .
  "<input type='hidden' name='orgurl' value='$targetURL' />" .   "<input type='hidden' name='orgurl' value='$targetURL' />" .
  "<input type='hidden' name='selectrole' value='1' />\n" .   "<input type='hidden' name='selectrole' value='1' />\n" .
  "<input type='hidden' name='" . $ENV{'request.role'} .    "<input type='hidden' name='" . $env{'request.role'} . 
  "' value='1' />\n<input type='submit' value='" . $finish . "' />\n" .   "' value='1' />\n<input type='submit' value='" . $finish . "' />\n" .
  "</form></center>";   "</form></center>";
   

Removed from v.1.99  
changed lines
  Added in v.1.100


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