Diff for /loncom/interface/lonhelper.pm between versions 1.64 and 1.108

version 1.64, 2004/02/27 19:51:46 version 1.108, 2005/07/07 04:32:59
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 230  my $paramHash; Line 227  my $paramHash;
 # In the debugger, this means that breakpoints are ignored until you step into  # In the debugger, this means that breakpoints are ignored until you step into
 # a function and get out of what must be a "faked up scope" in the Apache->  # a function and get out of what must be a "faked up scope" in the Apache->
 # mod_perl connection. In this code, it was manifesting itself in the existence  # mod_perl connection. In this code, it was manifesting itself in the existence
 # of two seperate file-scoped $helper variables, one set to the value of the  # of two separate file-scoped $helper variables, one set to the value of the
 # helper in the helper constructor, and one referenced by the handler on the  # helper in the helper constructor, and one referenced by the handler on the
 # "$helper->process()" line. Using the debugger, one could actually  # "$helper->process()" line. Using the debugger, one could actually
 # see the two different $helper variables, as hashes at completely  # see the two different $helper variables, as hashes at completely
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 ($r->header_only) {      if ($env{'browser.mathml'}) {
         if ($ENV{'browser.mathml'}) {   &Apache::loncommon::content_type($r,'text/xml');
             $r->content_type('text/xml; charset=UTF-8');  
         } else {  
             $r->content_type('text/html; charset=UTF-8');  
         }  
         $r->send_http_header;  
         return OK;  
     }  
     if ($ENV{'browser.mathml'}) {  
         $r->content_type('text/xml');  
     } else {      } else {
         $r->content_type('text/html');   &Apache::loncommon::content_type($r,'text/html');
     }      }
     $r->send_http_header;      $r->send_http_header;
       return OK if $r->header_only;
     $r->rflush();      $r->rflush();
   
     # Discard result, we just want the objects that get created by the      # Discard result, we just want the objects that get created by the
Line 286  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 371  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 382  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 424  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 462  sub _saveVars { Line 452  sub _saveVars {
     my $self = shift;      my $self = shift;
     my $result = "";      my $result = "";
     $result .= '<input type="hidden" name="CURRENT_STATE" value="' .      $result .= '<input type="hidden" name="CURRENT_STATE" value="' .
         HTML::Entities::encode($self->{STATE}) . "\" />\n";          HTML::Entities::encode($self->{STATE},'<>&"') . "\" />\n";
     $result .= '<input type="hidden" name="TOKEN" value="' .      $result .= '<input type="hidden" name="TOKEN" value="' .
         $self->{TOKEN} . "\" />\n";          $self->{TOKEN} . "\" />\n";
     $result .= '<input type="hidden" name="RETURN_PAGE" value="' .      $result .= '<input type="hidden" name="RETURN_PAGE" value="' .
         HTML::Entities::encode($self->{RETURN_PAGE}) . "\" />\n";          HTML::Entities::encode($self->{RETURN_PAGE},'<>&"') . "\" />\n";
   
     return $result;      return $result;
 }  }
Line 494  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 510  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 532  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 583  sub display { Line 573  sub display {
     }      }
   
     # Phase 4: Display.      # Phase 4: Display.
     my $stateTitle = &mt($state->title());      my $html=&Apache::lonxml::xmlbegin();
       my $stateTitle=&mt($state->title());
     my $helperTitle = &mt($self->{TITLE});      my $helperTitle = &mt($self->{TITLE});
     my $bodytag = &Apache::loncommon::bodytag($helperTitle,'','');      my $bodytag = &Apache::loncommon::bodytag($helperTitle,'','');
     my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');      my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');
Line 592  sub display { Line 583  sub display {
     my $loncapaHelper = &mt("LON-CAPA Helper:");      my $loncapaHelper = &mt("LON-CAPA Helper:");
   
     $result .= <<HEADER;      $result .= <<HEADER;
 <html>  $html
     <head>      <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
         <title>$loncapaHelper: $helperTitle</title>          <title>$loncapaHelper: $helperTitle</title>
     </head>      </head>
     $bodytag      $bodytag
Line 998  sub start_message { Line 988  sub start_message {
         return '';          return '';
     }      }
   
     $paramHash->{MESSAGE_TEXT} = &Apache::lonxml::get_all_text('/message',      $paramHash->{MESSAGE_TEXT} = &mtn(&Apache::lonxml::get_all_text('/message',
                                                                $parser);                                                                 $parser));
   
     if (defined($token->[2]{'nextstate'})) {      if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};          $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
Line 1123  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 1169  sub start_choice { Line 1160  sub start_choice {
     }      }
   
     my $computer = $token->[2]{'computer'};      my $computer = $token->[2]{'computer'};
     my $human = &Apache::lonxml::get_all_text('/choice',      my $human = &mt(&Apache::lonxml::get_all_text('/choice',
                                               $parser);                                                $parser));
     my $nextstate = $token->[2]{'nextstate'};      my $nextstate = $token->[2]{'nextstate'};
     my $evalFlag = $token->[2]{'eval'};      my $evalFlag = $token->[2]{'eval'};
     push @{$paramHash->{CHOICES}}, [$human, $computer, $nextstate,       push @{$paramHash->{CHOICES}}, [&mtn($human), $computer, $nextstate, 
                                     $evalFlag];                                      $evalFlag];
     return '';      return '';
 }  }
Line 1182  sub end_choice { Line 1173  sub end_choice {
     return '';      return '';
 }  }
   
   {
       # used to generate unique id attributes for <input> tags. 
       # internal use only.
       my $id = 0;
       sub new_id { return $id++; }
   }
   
 sub render {  sub render {
     my $self = shift;      my $self = shift;
     my $var = $self->{'variable'};      my $var = $self->{'variable'};
Line 1206  SCRIPT Line 1204  SCRIPT
     # Only print "select all" and "unselect all" if there are five or      # Only print "select all" and "unselect all" if there are five or
     # more choices; fewer then that and it looks silly.      # more choices; fewer then that and it looks silly.
     if ($self->{'multichoice'} && scalar(@{$self->{CHOICES}}) > 4) {      if ($self->{'multichoice'} && scalar(@{$self->{CHOICES}}) > 4) {
           my %lt=&Apache::lonlocal::texthash(
    'sa'  => "Select All",
           'ua'  => "Unselect All");
         $buttons = <<BUTTONS;          $buttons = <<BUTTONS;
 <br />  <br />
 <input type="button" onclick="checkall(true, '$var')" value="Select All" />  <input type="button" onclick="checkall(true, '$var')" value="$lt{'sa'}" />
 <input type="button" onclick="checkall(false, '$var')" value="Unselect All" />  <input type="button" onclick="checkall(false, '$var')" value="$lt{'ua'}" />
 <br />&nbsp;  <br />&nbsp;
 BUTTONS  BUTTONS
     }      }
Line 1261  BUTTONS Line 1262  BUTTONS
     my $type = "radio";      my $type = "radio";
     if ($self->{'multichoice'}) { $type = 'checkbox'; }      if ($self->{'multichoice'}) { $type = 'checkbox'; }
     foreach my $choice (@{$self->{CHOICES}}) {      foreach my $choice (@{$self->{CHOICES}}) {
           my $id = &new_id();
         $result .= "<tr>\n<td width='20'>&nbsp;</td>\n";          $result .= "<tr>\n<td width='20'>&nbsp;</td>\n";
         $result .= "<td valign='top'><input type='$type' name='$var.forminput'"          $result .= "<td valign='top'><input type='$type' name='$var.forminput'"
             . "' value='" .               . "' value='" . 
             HTML::Entities::encode($choice->[1])               HTML::Entities::encode($choice->[1],"<>&\"'") 
             . "'";              . "'";
         if ($checkedChoices{$choice->[1]}) {          if ($checkedChoices{$choice->[1]}) {
             $result .= " checked ";              $result .= " checked ";
         }          }
           $result .= qq{id="$id"};
         my $choiceLabel = $choice->[0];          my $choiceLabel = $choice->[0];
         if ($choice->[4]) {  # if we need to evaluate this choice          if ($choice->[4]) {  # if we need to evaluate this choice
             $choiceLabel = "sub { my $helper = shift; my $state = shift;" .              $choiceLabel = "sub { my $helper = shift; my $state = shift;" .
Line 1276  BUTTONS Line 1279  BUTTONS
             $choiceLabel = eval($choiceLabel);              $choiceLabel = eval($choiceLabel);
             $choiceLabel = &$choiceLabel($helper, $self);              $choiceLabel = &$choiceLabel($helper, $self);
         }          }
         $result .= "/></td><td> " . &mtn($choiceLabel) . "</td></tr>\n";          $result .= "/></td><td> ".qq{<label for="$id">}.
               $choiceLabel. "</label></td></tr>\n";
     }      }
     $result .= "</table>\n\n\n";      $result .= "</table>\n\n\n";
     $result .= $buttons;      $result .= $buttons;
Line 1288  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 1342  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 1419  sub render { Line 1424  sub render {
     $result .= "<select name='${var}.forminput'>\n";      $result .= "<select name='${var}.forminput'>\n";
     foreach my $choice (@{$self->{CHOICES}}) {      foreach my $choice (@{$self->{CHOICES}}) {
         $result .= "<option value='" .           $result .= "<option value='" . 
             HTML::Entities::encode($choice->[1])               HTML::Entities::encode($choice->[1],"<>&\"'") 
             . "'";              . "'";
         if ($checkedChoices{$choice->[1]}) {          if ($checkedChoices{$choice->[1]}) {
             $result .= " selected";              $result .= " selected";
Line 1442  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 1501  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 1645  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 1710  to false. The "suppressEmptySequences" a Line 1715  to false. The "suppressEmptySequences" a
 suppressEmptySequences argument to the render routine, which will cause  suppressEmptySequences argument to the render routine, which will cause
 folders that have all of their contained resources filtered out to also  folders that have all of their contained resources filtered out to also
 be filtered out. The 'addstatus' attribute, if true, will add the icon  be filtered out. The 'addstatus' attribute, if true, will add the icon
 and long status display columns to the display.  and long status display columns to the display. The 'addparts'
   attribute will add in a part selector beside problems that have more
   than 1 part.
   
 =head3 SUB-TAGS  =head3 SUB-TAGS
   
Line 1750  and long status display columns to the d Line 1757  and long status display columns to the d
 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',
                               ('resource', 'filterfunc',                                 ('resource', 'filterfunc', 
                                'choicefunc', 'valuefunc',                                 'choicefunc', 'valuefunc',
                                'mapurl'));                                 'mapurl','option'));
 }  }
   
 sub new {  sub new {
Line 1777  sub start_resource { Line 1785  sub start_resource {
     $paramHash->{'suppressEmptySequences'} = $token->[2]{'suppressEmptySequences'};      $paramHash->{'suppressEmptySequences'} = $token->[2]{'suppressEmptySequences'};
     $paramHash->{'toponly'} = $token->[2]{'toponly'};      $paramHash->{'toponly'} = $token->[2]{'toponly'};
     $paramHash->{'addstatus'} = $token->[2]{'addstatus'};      $paramHash->{'addstatus'} = $token->[2]{'addstatus'};
       $paramHash->{'addparts'} = $token->[2]{'addparts'};
       if ($paramHash->{'addparts'}) {
    $helper->declareVar($paramHash->{'variable'}.'_part');
       }
       $paramHash->{'closeallpages'} = $token->[2]{'closeallpages'};
     return '';      return '';
 }  }
   
Line 1859  sub start_mapurl { Line 1872  sub start_mapurl {
   
 sub end_mapurl { return ''; }  sub end_mapurl { return ''; }
   
   
   sub start_option {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       if (!defined($paramHash->{OPTION_TEXTS})) {
    $paramHash->{OPTION_TEXTS} = [ ];
    $paramHash->{OPTION_VARS}  = [ ];
   
       }
       # OPTION_TEXTS is a list of the text attribute
       #               values used to create column headings.
       # OPTION_VARS is a list of the variable names, used to create the checkbox
       #             inputs.
       #  We're ok with empty elements. as place holders
       # Although the 'variable' element should really exist.
       #
   
       my $option_texts  = $paramHash->{OPTION_TEXTS};
       my $option_vars   = $paramHash->{OPTION_VARS};
       push(@$option_texts,  $token->[2]{'text'});
       push(@$option_vars,   $token->[2]{'variable'});
   
       #  Need to create and declare the option variables as well to make them
       # persistent.
       #
       my $varname = $token->[2]{'variable'};
       $helper->declareVar($varname);
   
   
       return '';
   }
   
   sub end_option {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       return '';
   }
   
 # A note, in case I don't get to this before I leave.  # A note, in case I don't get to this before I leave.
 # If someone complains about the "Back" button returning them  # If someone complains about the "Back" button returning them
 # to the previous folder state, instead of returning them to  # to the previous folder state, instead of returning them to
Line 1892  sub render { Line 1941  sub render {
     }      }
 </script>  </script>
 SCRIPT  SCRIPT
           my %lt=&Apache::lonlocal::texthash(
    'sar'  => "Select All Resources",
           'uar'  => "Unselect All Resources");
   
         $buttons = <<BUTTONS;          $buttons = <<BUTTONS;
 <br /> &nbsp;  <br /> &nbsp;
 <input type="button" onclick="checkall(true, '$var')" value="Select All Resources" />  <input type="button" onclick="checkall(true, '$var')" value="$lt{'sar'}" />
 <input type="button" onclick="checkall(false, '$var')" value="Unselect All Resources" />  <input type="button" onclick="checkall(false, '$var')" value="$lt{'uar'}" />
 <br /> &nbsp;  <br /> &nbsp;
 BUTTONS  BUTTONS
     }      }
Line 1906  BUTTONS Line 1959  BUTTONS
   
     $result .= $buttons;      $result .= $buttons;
   
     my $filterFunc = $self->{FILTER_FUNC};      my $filterFunc     = $self->{FILTER_FUNC};
     my $choiceFunc = $self->{CHOICE_FUNC};      my $choiceFunc     = $self->{CHOICE_FUNC};
     my $valueFunc = $self->{VALUE_FUNC};      my $valueFunc      = $self->{VALUE_FUNC};
     my $multichoice = $self->{'multichoice'};      my $multichoice    = $self->{'multichoice'};
       my $option_vars    = $self->{OPTION_VARS};
       my $option_texts   = $self->{OPTION_TEXTS};
       my $addparts       = $self->{'addparts'};
       my $headings_done  = 0;
   
     # Evaluate the map url as needed      # Evaluate the map url as needed
     my $mapUrl;      my $mapUrl;
Line 1921  BUTTONS Line 1978  BUTTONS
  $mapUrl = $self->{MAP_URL};   $mapUrl = $self->{MAP_URL};
     }      }
   
   
     # Create the composite function that renders the column on the nav map      # Create the composite function that renders the column on the nav map
     # have to admit any language that lets me do this can't be all bad      # have to admit any language that lets me do this can't be all bad
     #  - Jeremy (Pythonista) ;-)      #  - Jeremy (Pythonista) ;-)
     my $checked = 0;      my $checked = 0;
     my $renderColFunc = sub {      my $renderColFunc = sub {
         my ($resource, $part, $params) = @_;          my ($resource, $part, $params) = @_;
    my $result = "";
   
    if(!$headings_done) {
       if ($option_texts) {
    foreach my $text (@$option_texts) {
       $result .= "<th>$text</th>";
    }
       }
       $result .= "<th>Select</th>";
       $result .= "</tr><tr>"; # Close off the extra row and start a new one.
       $headings_done = 1;
    }
   
         my $inputType;          my $inputType;
         if ($multichoice) { $inputType = 'checkbox'; }          if ($multichoice) { $inputType = 'checkbox'; }
         else {$inputType = 'radio'; }          else {$inputType = 'radio'; }
   
         if (!&$choiceFunc($resource)) {          if (!&$choiceFunc($resource)) {
             return '<td>&nbsp;</td>';      $result .= '<td>&nbsp;</td>';
               return $result;
         } else {          } else {
             my $col = "<td><input type='$inputType' name='${var}.forminput' ";      my $col = "";
       my $raw_name = &$valueFunc($resource);
       my $resource_name =   
                      HTML::Entities::encode($raw_name,"<>&\"'");
       if($option_vars) {
    foreach my $option_var (@$option_vars) {
       my $var_value = "\|\|\|" . $helper->{VARS}->{$option_var} . 
    "\|\|\|";
       my $checked ="";
       if($var_value =~ /\Q|||$raw_name|||\E/) {
    $checked = "checked";
       }
       $col .= 
                           "<td align='center'><input type='checkbox' name ='$option_var".
    ".forminput' value='".
    $resource_name . "' $checked /> </td>";
    }
       }
   
               $col .= "<td align='center'><input type='$inputType' name='${var}.forminput' ";
             if (!$checked && !$multichoice) {              if (!$checked && !$multichoice) {
                 $col .= "checked ";                  $col .= "checked ";
                 $checked = 1;                  $checked = 1;
Line 1944  BUTTONS Line 2034  BUTTONS
  $col .= "checked ";   $col .= "checked ";
  $checked = 1;   $checked = 1;
     }      }
             $col .= "value='" .               $col .= "value='" . $resource_name  . "' /></td>";
                 HTML::Entities::encode(&$valueFunc($resource))   
                 . "' /></td>";              return $result.$col;
             return $col;  
         }          }
     };      };
       my $renderPartsFunc = sub {
           my ($resource, $part, $params) = @_;
    my $col= "<td>";
    my $id=$resource->{ID};
    my $resource_name =   
       &HTML::Entities::encode(&$valueFunc($resource),"<>&\"'");
    if ($addparts && (scalar(@{$resource->parts}) > 1)) {
       $col .= "<select onclick=\"javascript:updateRadio(this.form,'${var}.forminput','$resource_name');updateHidden(this.form,'$id','${var}');\" name='part_$id.forminput'>\n";
       $col .= "<option value=\"$part\">All Parts</option>\n";
       foreach my $part (@{$resource->parts}) {
    $col .= "<option value=\"$part\">Part: $part</option>\n";
       }
       $col .= "</select>";
    }
    $col .= "</td>";
       };
       $result.=(<<RADIO);
   <script type="text/javascript">
       function updateRadio(form,name,value) {
    var radiobutton=form[name];
    for (var i=0; i<radiobutton.length; i++) {
       if (radiobutton[i].value == value) {
    radiobutton[i].checked = true;
    break;
       }
    }
       }
       function updateHidden(form,id,name) {
    var select=form['part_'+id+'.forminput'];
    var hidden=form[name+'_part.forminput'];
    var which=select.selectedIndex;
    hidden.value=select.options[which].value;
       }
   </script>
   <input type="hidden" name="${var}_part.forminput" />
   
     $ENV{'form.condition'} = !$self->{'toponly'};  RADIO
     my $cols = [$renderColFunc, Apache::lonnavmaps::resource()];      $env{'form.condition'} = !$self->{'toponly'};
       my $cols = [$renderColFunc];
       if ($self->{'addparts'}) { push(@$cols, $renderPartsFunc); }
       push(@$cols, Apache::lonnavmaps::resource());
     if ($self->{'addstatus'}) {      if ($self->{'addstatus'}) {
  push @$cols, (Apache::lonnavmaps::part_status_summary());   push @$cols, (Apache::lonnavmaps::part_status_summary());
   
Line 1962  BUTTONS Line 2089  BUTTONS
                                        'showParts' => 0,                                         'showParts' => 0,
                                        'filterFunc' => $filterFunc,                                         'filterFunc' => $filterFunc,
                                        'resource_no_folder_link' => 1,                                         'resource_no_folder_link' => 1,
          'closeAllPages' => $self->{'closeallpages'},
                                        'suppressEmptySequences' => $self->{'suppressEmptySequences'},                                         'suppressEmptySequences' => $self->{'suppressEmptySequences'},
                                        'iterator_map' => $mapUrl }                                         'iterator_map' => $mapUrl }
                                        );                                         );
Line 2028  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 2051  sub start_student { Line 2179  sub start_student {
     $helper->declareVar($paramHash->{'variable'});      $helper->declareVar($paramHash->{'variable'});
     $paramHash->{'multichoice'} = $token->[2]{'multichoice'};      $paramHash->{'multichoice'} = $token->[2]{'multichoice'};
     $paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'};      $paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'};
     $paramHash->{'sctiveonly'} = $token->[2]{'activeonly'};      $paramHash->{'activeonly'} = $token->[2]{'activeonly'};
     if (defined($token->[2]{'nextstate'})) {      if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};          $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
     }      }
Line 2088  sub render { Line 2216  sub render {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   for (i=0; i<document.forms.helpform.elements.length; i++) {
     comp = document.forms.helpform.elements.chksec.value;      comp = document.forms.helpform.elements.chksec.value;
             if (document.forms.helpform.elements[i].value.indexOf(':'+comp+':') != -1) {              if (document.forms.helpform.elements[i].value.indexOf(':'+comp+':') != -1) {
                 document.forms.helpform.elements[i].checked=value;   if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {
       document.forms.helpform.elements[i].checked=value;
    }
             }              }
         }          }
     }      }
Line 2096  sub render { Line 2226  sub render {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   for (i=0; i<document.forms.helpform.elements.length; i++) {
             if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {              if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {
                 document.forms.helpform.elements[i].checked=true;                  document.forms.helpform.elements[i].checked=true;
             }              } 
           }
       }
       function uncheckexpired() {
    for (i=0; i<document.forms.helpform.elements.length; i++) {
               if (document.forms.helpform.elements[i].value.indexOf(':Expired') != -1) {
                   document.forms.helpform.elements[i].checked=false;
               } 
         }          }
     }      }
 </script>  </script>
 SCRIPT  SCRIPT
   
         my $selectAllStudents = &mt('Select All Students');           my %lt=&Apache::lonlocal::texthash(
  my $unselectAllStudents = &mt('Unselect All Students');                      'ocs'  => "Select Only Current Students",
                       'ues'  => "Unselect Expired Students",
                       'sas'  => "Select All Students",
                       'uas'  => "Unselect All Students",
                       'sfsg' => "Select Current Students for Section/Group",
       'ufsg' => "Unselect for Section/Group");
    
         $buttons = <<BUTTONS;          $buttons = <<BUTTONS;
 <br />  <br />
 <input type="button" onclick="checkactive()" value="Select Only Current Students" />  <table>
 <input type="button" onclick="checkall(true, '$var')" value="$selectAllStudents" />    <tr>
 <input type="button" onclick="checkall(false, '$var')" value="$unselectAllStudents" />    
 <input type="button" onclick="checksec(true)" value="Select for Section/Group">      <td><input type="button" onclick="checkactive()" value="$lt{'ocs'}" /></td>
 <input type="text" size="5" name="chksec">&nbsp;      <td><input type="button" onclick="uncheckexpired()" value="$lt{'ues'}" /><br /></td>
 <input type="button" onclick="checksec(false)" value="Unselect for Section/Group">    </tr>
     <tr>
        <td><input type="button" onclick="checkall(true, '$var')" value="$lt{'sas'}" /></td>
        <td> <input type="button" onclick="checkall(false, '$var')" value="$lt{'uas'}" /><br /></td>
     </tr>
     <tr>
         <td><input type="button" onclick="checksec(true)" value="$lt{'sfsg'}"></td>
         <td><input type="text" size="5" name="chksec">&nbsp;</td>
     </tr>
     <tr>
         <td><input type="button" onclick="checksec(false)" value="$lt{'ufsg'}"></td>
         <td></td>
     </tr>
   </table>
 <br />  <br />
 BUTTONS  BUTTONS
     }      }
Line 2170  BUTTONS Line 2326  BUTTONS
  }   }
     }      }
   
     my $name = &mt($self->{'coursepersonnel'} ? 'Name' : 'Student Name');      my $name = $self->{'coursepersonnel'} ? &mt('Name') : &mt('Student Name');
     my $type = 'radio';      my $type = 'radio';
     if ($self->{'multichoice'}) { $type = 'checkbox'; }      if ($self->{'multichoice'}) { $type = 'checkbox'; }
     $result .= "<table cellspacing='2' cellpadding='2' border='0'>\n";      $result .= "<table cellspacing='2' cellpadding='2' border='0'>\n";
     $result .= "<tr><td></td><td align='center'><b>$name</b></td>".      $result .= "<tr><td></td><td align='center'><b>$name</b></td>".
         "<td align='center'><b>" . &mt('Section') . "</b></td>" .           "<td align='center'><b>" . &mt('Section') . "</b></td>" . 
  "<td align='center'><b>Status</b></td>" .    "<td align='center'><b>".&mt('Status')."</b></td>" . 
  "<td align='center'><b>" . &mt("Role") . "</b></td></tr>" .   "<td align='center'><b>" . &mt("Role") . "</b></td>" .
  "<td align='center'><b>Username:Domain</b></td></tr>";   "<td align='center'><b>".&mt('Username').":".&mt('Domain')."</b></td></tr>";
   
     my $checked = 0;      my $checked = 0;
     for my $choice (@$choices) {      for my $choice (@$choices) {
Line 2190  BUTTONS Line 2346  BUTTONS
             $checked = 1;              $checked = 1;
         }          }
         $result .=          $result .=
             " value='" . HTML::Entities::encode($choice->[0] . ':' . $choice->[2] . ':' . $choice->[1] . ':' . $choice->[3])              " value='" . HTML::Entities::encode($choice->[0] . ':' 
    .$choice->[2] . ':' 
    .$choice->[1] . ':' 
    .$choice->[3], "<>&\"'")
             . "' /></td><td>"              . "' /></td><td>"
             . HTML::Entities::encode($choice->[1])              . HTML::Entities::encode($choice->[1],'<>&"')
             . "</td><td align='center'>"               . "</td><td align='center'>" 
             . HTML::Entities::encode($choice->[2])              . HTML::Entities::encode($choice->[2],'<>&"')
             . "</td>\n<td>"               . "</td>\n<td>" 
     . HTML::Entities::encode($choice->[3])      . HTML::Entities::encode($choice->[3],'<>&"')
             . "</td>\n<td>"               . "</td>\n<td>" 
     . HTML::Entities::encode($choice->[4])      . HTML::Entities::encode($choice->[4],'<>&"')
             . "</td>\n<td>"               . "</td>\n<td>" 
     . HTML::Entities::encode($choice->[0])      . HTML::Entities::encode($choice->[0],'<>&"')
     . "</td></tr>\n";      . "</td></tr>\n";
     }      }
   
Line 2213  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 2283  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 2358  sub start_filefilter { Line 2517  sub start_filefilter {
   
 sub end_filefilter { return ''; }  sub end_filefilter { return ''; }
   
   { 
       # used to generate unique id attributes for <input> tags. 
       # internal use only.
       my $id=0;
       sub new_id { return $id++;}
   }
   
 sub render {  sub render {
     my $self = shift;      my $self = shift;
     my $result = '';      my $result = '';
Line 2401  sub render { Line 2567  sub render {
     }      }
 </script>  </script>
 SCRIPT  SCRIPT
         my $selectAllFiles = &mt("Select All Files");         my %lt=&Apache::lonlocal::texthash(
  my $unselectAllFiles = &mt("Unselect All Files");   'saf'  => "Select All Files",
         $buttons = <<BUTTONS;          'uaf'  => "Unselect All Files");
          $buttons = <<BUTTONS;
 <br /> &nbsp;  <br /> &nbsp;
 <input type="button" onclick="checkall(true, '$var')" value="$selectAllFiles" />  <input type="button" onclick="checkall(true, '$var')" value="$lt{'saf'}" />
 <input type="button" onclick="checkall(false, '$var')" value="$unselectAllFiles" />  <input type="button" onclick="checkall(false, '$var')" value="$lt{'uaf'}" />
 BUTTONS  BUTTONS
   
         my $selectAllPublished = &mt("Select All Published");         %lt=&Apache::lonlocal::texthash(
  my $unselectAllPublished= &mt("UnselectAllPublished");   'sap'  => "Select All Published",
           'uap'  => "Unselect All Published");
         if ($helper->{VARS}->{'construction'}) {          if ($helper->{VARS}->{'construction'}) {
             $buttons .= <<BUTTONS;         $buttons .= <<BUTTONS;
 <input type="button" onclick="checkallclass(true, 'Published')" value="$selectAllPublished" />  <input type="button" onclick="checkallclass(true, 'Published')" value="$lt{'sap'}" />
 <input type="button" onclick="checkallclass(false, 'Published')" value="$unselectAllPublished" />  <input type="button" onclick="checkallclass(false, 'Published')" value="$lt{'uap'}" />
 <br /> &nbsp;  <br /> &nbsp;
 BUTTONS  BUTTONS
        }         }
Line 2438  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
     @fileList = sort @fileList;      @fileList = sort {lc($a) cmp lc($b)} @fileList;
   
     $result .= $buttons;      $result .= $buttons;
   
Line 2494  BUTTONS Line 2662  BUTTONS
             if ($status eq 'Published' && $helper->{VARS}->{'construction'}) {              if ($status eq 'Published' && $helper->{VARS}->{'construction'}) {
                 $onclick = 'onclick="a=1" ';                  $onclick = 'onclick="a=1" ';
             }              }
               my $id = &new_id();
             $result .= '<tr><td align="right"' . " bgcolor='$color'>" .              $result .= '<tr><td align="right"' . " bgcolor='$color'>" .
                 "<input $onclick type='$type' name='" . $var                  "<input $onclick type='$type' name='" . $var
             . ".forminput' value='" . HTML::Entities::encode($fileName) .              . ".forminput' ".qq{id="$id"}." value='" . HTML::Entities::encode($fileName,"<>&\"'").
                 "'";                  "'";
             if (!$self->{'multichoice'} && $choices == 0) {              if (!$self->{'multichoice'} && $choices == 0) {
                 $result .= ' checked';                  $result .= ' checked';
             }              }
             $result .= "/></td><td bgcolor='$color'>" . $file . "</td>" .              $result .= "/></td><td bgcolor='$color'>".
                   qq{<label for="$id">}. $file . "</label></td>" .
                 "<td bgcolor='$color'>$title</td>" .                  "<td bgcolor='$color'>$title</td>" .
                 "<td bgcolor='$color'>$status</td>" . "</tr>\n";                  "<td bgcolor='$color'>$status</td>" . "</tr>\n";
             $choices++;              $choices++;
Line 2529  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'});
       if ($env{'request.role'}=~/^ca\./) {
    (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;
     $subdirpart =~ s/^\/home\/$ENV{'user.name'}\/public_html//;      $subdirpart =~ s/^\/home\/$uname\/public_html//;
     my $resdir = $docroot . '/res/' . $ENV{'user.domain'} . '/' . $ENV{'user.name'} .      my $resdir = $docroot . '/res/' . $udom . '/' . $uname .
         $subdirpart;          $subdirpart;
   
     my @constructionSpaceFileStat = stat($constructionSpaceDir . '/' . $file);      my @constructionSpaceFileStat = stat($constructionSpaceDir . '/' . $file);
Line 2552  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 2661  string honors the validation function, i Line 2835  string honors the validation function, i
 no strict;  no strict;
 @ISA = ("Apache::lonhelper::element");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
   use Apache::lonlocal;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::string',      &Apache::lonhelper::register('Apache::lonhelper::string',
Line 2704  sub render { Line 2879  sub render {
     my $result = '';      my $result = '';
   
     if (defined $self->{ERROR_MSG}) {      if (defined $self->{ERROR_MSG}) {
         $result .= '<br /><font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';          $result .= '<p><font color="#FF0000">' . $self->{ERROR_MSG} . '</font></p>';
     }      }
   
     $result .= '<input type="string" name="' . $self->{'variable'} . '.forminput"';      $result .= '<input type="string" name="' . $self->{'variable'} . '.forminput"';
Line 2758  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 2779  be able to call methods on it. Line 2954  be able to call methods on it.
   
 =cut  =cut
   
   use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::general',      &Apache::lonhelper::register('Apache::lonhelper::general',
                                  'exec', 'condition', 'clause',                                   'exec', 'condition', 'clause',
Line 2900  will make a "Finish Helper" button that Line 3078  will make a "Finish Helper" button that
 which is useful for the Course Initialization helper so the users never see  which is useful for the Course Initialization helper so the users never see
 the old values taking effect.  the old values taking effect.
   
   If the parameter "restartCourse" is not true a 'Finish' Button will be
   presented that takes the user back to whatever was defined as <exitpage>
   
 =cut  =cut
   
 no strict;  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 2997  sub render { Line 3179  sub render {
  $result .= '</ul>';   $result .= '</ul>';
     }      }
   
       my $actionURL = $self->{EXIT_PAGE};
       my $targetURL = '';
       my $finish=&mt('Finish');
     if ($self->{'restartCourse'}) {      if ($self->{'restartCourse'}) {
  my $targetURL = '/adm/menu';   $actionURL = '/adm/roles';
  if ($ENV{'course.'.$ENV{'request.course.id'}.'.url'}=~/^uploaded/) {   $targetURL = '/adm/menu';
    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 $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');   my $finish=&mt('Finish Course Initialization');
  my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');  
         $result .= "<center>\n" .  
             "<form action='/adm/roles' method='post' target='loncapaclient'>\n" .  
             "<input type='button' onclick='history.go(-1)' value='$previous' />" .  
             "<input type='hidden' name='orgurl' value='$targetURL' />" .  
             "<input type='hidden' name='selectrole' value='1' />\n" .  
             "<input type='hidden' name='" . $ENV{'request.role'} .   
             "' value='1' />\n<input type='submit' value='" .  
     &mt('Finish Course Initialization') . "' />\n" .  
             "</form></center>";  
     }      }
       my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');
       my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');
       $result .= "<center>\n" .
    "<form action='".$actionURL."' method='post' target='loncapaclient'>\n" .
    "<input type='button' onclick='history.go(-1)' value='$previous' />" .
    "<input type='hidden' name='orgurl' value='$targetURL' />" .
    "<input type='hidden' name='selectrole' value='1' />\n" .
    "<input type='hidden' name='" . $env{'request.role'} . 
    "' value='1' />\n<input type='submit' value='" . $finish . "' />\n" .
    "</form></center>";
   
     return $result;      return $result;
 }  }
   
 sub overrideForm {  sub overrideForm {
     my $self = shift;      return 1;
     return $self->{'restartCourse'};  
 }  }
   
 1;  1;
Line 3040  package Apache::lonhelper::parmwizfinal; Line 3225  package Apache::lonhelper::parmwizfinal;
 no strict;  no strict;
 @ISA = ('Apache::lonhelper::element');  @ISA = ('Apache::lonhelper::element');
 use strict;  use strict;
   use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::parmwizfinal',      &Apache::lonhelper::register('Apache::lonhelper::parmwizfinal',
Line 3081  sub render { Line 3268  sub render {
                         'answer_date' => "0_answerdate",                          'answer_date' => "0_answerdate",
  'tries' => '0_maxtries',   'tries' => '0_maxtries',
  'weight' => '0_weight' );   'weight' => '0_weight' );
       my %realParmName = ('open_date' => "opendate",
                           'due_date' => "duedate",
                           'answer_date' => "answerdate",
    'tries' => 'maxtries',
    'weight' => 'weight' );
           
     my $affectedResourceId = "";      my $affectedResourceId = "";
     my $parm_name = $parmTypeHash{$vars->{ACTION_TYPE}};      my $parm_name = $parmTypeHash{$vars->{ACTION_TYPE}};
Line 3088  sub render { Line 3280  sub render {
     my $resourceString;      my $resourceString;
     my $symb;      my $symb;
     my $paramlevel;      my $paramlevel;
       
     # Print the granularity, depending on the action      # Print the granularity, depending on the action
     if ($vars->{GRANULARITY} eq 'whole_course') {      if ($vars->{GRANULARITY} eq 'whole_course') {
         $resourceString .= '<li>for <b>all resources in the course</b></li>';          $resourceString .= '<li>'.&mt('for <b>all resources in the course</b>').'</li>';
         $level = 9; # general course, see lonparmset.pm perldoc   if ($vars->{TARGETS} eq 'course') {
       $level = 11; # general course, see lonparmset.pm perldoc
    } elsif ($vars->{TARGETS} eq 'section') {
       $level = 6;
    } else {
       $level = 3;
    }
         $affectedResourceId = "0.0";          $affectedResourceId = "0.0";
         $symb = 'a';          $symb = 'a';
         $paramlevel = 'general';          $paramlevel = 'general';
Line 3101  sub render { Line 3299  sub render {
         my $res = $navmap->getByMapPc($vars->{RESOURCE_ID});          my $res = $navmap->getByMapPc($vars->{RESOURCE_ID});
         my $title = $res->compTitle();          my $title = $res->compTitle();
         $symb = $res->symb();          $symb = $res->symb();
         $navmap->untieHashes();          $resourceString .= '<li>'.&mt('for the map named [_1]',"<b>$title</b>").'</li>';
         $resourceString .= "<li>for the map named <b>$title</b></li>";   if ($vars->{TARGETS} eq 'course') {
         $level = 8;      $level = 10; # general course, see lonparmset.pm perldoc
    } elsif ($vars->{TARGETS} eq 'section') {
       $level = 5;
    } else {
       $level = 2;
    }
         $affectedResourceId = $vars->{RESOURCE_ID};          $affectedResourceId = $vars->{RESOURCE_ID};
         $paramlevel = 'map';          $paramlevel = 'map';
     } else {      } else {
         my $navmap = Apache::lonnavmaps::navmap->new();          my $navmap = Apache::lonnavmaps::navmap->new();
         my $res = $navmap->getById($vars->{RESOURCE_ID});          my $res = $navmap->getById($vars->{RESOURCE_ID});
           my $part = $vars->{RESOURCE_ID_part};
    if ($part ne 'All Parts' && $part) { $parm_name=~s/^0/$part/; } else { $part=&mt('All Parts'); }
         $symb = $res->symb();          $symb = $res->symb();
         my $title = $res->compTitle();          my $title = $res->compTitle();
         $navmap->untieHashes();          $resourceString .= '<li>'.&mt('for the resource named [_1] part [_2]',"<b>$title</b>","<b>$part</b>").'</li>';
         $resourceString .= "<li>for the resource named <b>$title</b></li>";   if ($vars->{TARGETS} eq 'course') {
         $level = 7;      $level = 7; # general course, see lonparmset.pm perldoc
    } elsif ($vars->{TARGETS} eq 'section') {
       $level = 4;
    } else {
       $level = 1;
    }
         $affectedResourceId = $vars->{RESOURCE_ID};          $affectedResourceId = $vars->{RESOURCE_ID};
         $paramlevel = 'full';          $paramlevel = 'full';
     }      }
   
     my $result = "<form name='helpform' method='get' action='/adm/parmset#$affectedResourceId&$parm_name&$level'>\n";      my $result = "<form name='helpform' method='POST' action='/adm/parmset#$affectedResourceId&$parm_name&$level'>\n";
     $result .= '<p>Confirm that this information is correct, then click &quot;Finish Helper&quot; to complete setting the parameter.<ul>';      $result .= "<input type='hidden' name='action' value='settable' />\n";
       $result .= "<input type='hidden' name='dis' value='helper' />\n";
       $result .= "<input type='hidden' name='pscat' value='".
    $realParmName{$vars->{ACTION_TYPE}}."' />\n";
       if ($vars->{GRANULARITY} eq 'resource') {
    $result .= "<input type='hidden' name='symb' value='".
       HTML::Entities::encode($symb,"'<>&\"") . "' />\n";
       } elsif ($vars->{GRANULARITY} eq 'map') {
    $result .= "<input type='hidden' name='pschp' value='".
       $affectedResourceId."' />\n";
       }
       my $part = $vars->{RESOURCE_ID_part};
       if ($part eq 'All Parts' || !$part) { $part=0; }
       $result .= "<input type='hidden' name='psprt' value='".
    HTML::Entities::encode($part,"'<>&\"") . "' />\n";
   
       $result .= '<p>'.&mt('Confirm that this information is correct, then click &quot;Finish Helper&quot; to complete setting the parameter.').'<ul>';
           
     # Print the type of manipulation:      # Print the type of manipulation:
     $result .= '<li>Setting the <b>' . $dateTypeHash{$vars->{ACTION_TYPE}} . '</b>';      my $extra;
     if ($vars->{ACTION_TYPE} eq 'tries') {      if ($vars->{ACTION_TYPE} eq 'tries') {
  $result .= ' to <b>' . $vars->{TRIES} . '</b>';   $extra =  $vars->{TRIES};
     }      }
     if ($vars->{ACTION_TYPE} eq 'weight') {      if ($vars->{ACTION_TYPE} eq 'weight') {
  $result .= ' to <b>' . $vars->{WEIGHT} . '</b>';   $extra =  $vars->{WEIGHT};
       }
       $result .= "<li>";
       my $what = &mt($dateTypeHash{$vars->{ACTION_TYPE}});
       if ($extra) {
    $result .= &mt('Setting the [_1] to [_2]',"<b>$what</b>",$extra);
       } else {
    $result .= &mt('Setting the [_1]',"<b>$what</b>");
     }      }
     $result .= "</li>\n";      $result .= "</li>\n";
     if ($vars->{ACTION_TYPE} eq 'due_date' ||       if ($vars->{ACTION_TYPE} eq 'due_date' || 
Line 3149  sub render { Line 3382  sub render {
     } elsif ($vars->{ACTION_TYPE} eq 'tries') {      } elsif ($vars->{ACTION_TYPE} eq 'tries') {
  $result .= "<input type='hidden' name='pres_value' " .   $result .= "<input type='hidden' name='pres_value' " .
     "value='" . $vars->{TRIES} . "' />\n";      "value='" . $vars->{TRIES} . "' />\n";
           $result .= "<input type='hidden' name='pres_type' " .
               "value='int_pos' />\n";
     } elsif ($vars->{ACTION_TYPE} eq 'weight') {      } elsif ($vars->{ACTION_TYPE} eq 'weight') {
  $result .= "<input type='hidden' name='pres_value' " .   $result .= "<input type='hidden' name='pres_value' " .
     "value='" . $vars->{WEIGHT} . "' />\n";      "value='" . $vars->{WEIGHT} . "' />\n";
Line 3158  sub render { Line 3393  sub render {
           
     # Print targets      # Print targets
     if ($vars->{TARGETS} eq 'course') {      if ($vars->{TARGETS} eq 'course') {
         $result .= '<li>for <b>all students in course</b></li>';          $result .= '<li>'.&mt('for <b>all students in course</b>').'</li>';
     } elsif ($vars->{TARGETS} eq 'section') {      } elsif ($vars->{TARGETS} eq 'section') {
         my $section = $vars->{SECTION_NAME};          my $section = $vars->{SECTION_NAME};
         $result .= "<li>for section <b>$section</b></li>";          $result .= '<li>'.&mt('for section [_1]',"<b>$section</b>").'</li>';
         $level -= 3;   $result .= "<input type='hidden' name='csec' value='" .
         $result .= "<input type='hidden' name='csec' value='" .              HTML::Entities::encode($section,"'<>&\"") . "' />\n";
             HTML::Entities::encode($section) . "' />\n";  
     } else {      } else {
         # FIXME: This is probably wasteful! Store the name!          # FIXME: This is probably wasteful! Store the name!
         my $classlist = Apache::loncoursedata::get_classlist();          my $classlist = Apache::loncoursedata::get_classlist();
         my $username = $vars->{USER_NAME};          my $username = $vars->{USER_NAME};
         # Chop off everything after the last colon (section)          # Chop off everything after the last colon (section)
         $username = substr($username, 0, rindex($username, ':'));   my ($uname,$udom)=split(':',$username);
         my $name = $classlist->{$username}->[6];          my $name = $classlist->{$uname.':'.$udom}->[6];
         $result .= "<li>for <b>$name</b></li>";          $result .= '<li>'.&mt('for [_1]',"<b>$name</b>").'</li>';
         $level -= 6;   my ($uname, $udom) = split /:/, $vars->{USER_NAME};
         my ($uname, $udom) = split /:/, $vars->{USER_NAME};  
         $result .= "<input type='hidden' name='uname' value='".          $result .= "<input type='hidden' name='uname' value='".
             HTML::Entities::encode($uname) . "' />\n";              HTML::Entities::encode($uname,"'<>&\"") . "' />\n";
         $result .= "<input type='hidden' name='udom' value='".          $result .= "<input type='hidden' name='udom' value='".
             HTML::Entities::encode($udom) . "' />\n";              HTML::Entities::encode($udom,"'<>&\"") . "' />\n";
     }      }
   
     # Print value      # Print value
     if ($vars->{ACTION_TYPE} ne 'tries' && $vars->{ACTION_TYPE} ne 'weight') {      if ($vars->{ACTION_TYPE} ne 'tries' && $vars->{ACTION_TYPE} ne 'weight') {
  $result .= "<li>to <b>" . ctime($vars->{PARM_DATE}) . "</b> (" .   $result .= '<li>'.&mt('to [_1] ([_2])',"<b>".ctime($vars->{PARM_DATE})."</b>",Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}))."</li>\n";
     Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE})   
     . ")</li>\n";  
     }      }
     
     # print pres_marker      # print pres_marker
Line 3194  sub render { Line 3425  sub render {
           
     # Make the table appear      # Make the table appear
     $result .= "\n<input type='hidden' value='true' name='prevvisit' />";      $result .= "\n<input type='hidden' value='true' name='prevvisit' />";
     $result .= "\n<input type='hidden' value='all' name='pschp' />";  
     $result .= "\n<input type='hidden' value='$symb' name='pssymb' />";      $result .= "\n<input type='hidden' value='$symb' name='pssymb' />";
     $result .= "\n<input type='hidden' value='$paramlevel' name='parmlev' />";      $result .= "\n<input type='hidden' value='$paramlevel' name='parmlev' />";
   
     $result .= "<br /><br /><center><input type='submit' value='Finish Helper' /></center></form>\n";      $result .= "<br /><br /><center><input type='submit' value='".&mt('Finish Helper')."' /></center></form>\n";
   
     return $result;      return $result;
 }  }

Removed from v.1.64  
changed lines
  Added in v.1.108


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