Diff for /loncom/interface/lonhelper.pm between versions 1.173 and 1.179

version 1.173, 2009/05/27 16:54:57 version 1.179, 2010/03/10 21:25:50
Line 589  sub display { Line 589  sub display {
  &Apache::loncommon::browser_and_searcher_javascript().   &Apache::loncommon::browser_and_searcher_javascript().
  "\n".'</script>';   "\n".'</script>';
   
       # Breadcrumbs
       my $brcrum = [{'href' => '',
                      'text' => 'Helper'}];
       # FIXME: Dynamically add context sensitive breadcrumbs
       #        depending on the caller,
       #        e.g. printing, parametrization, etc.
       # FIXME: Add breadcrumbs to reflect current helper state
   
     $result .= &Apache::loncommon::start_page($self->{TITLE},      $result .= &Apache::loncommon::start_page($self->{TITLE},
       $browser_searcher_js);                                                $browser_searcher_js,
                                                     {'bread_crumbs' => $brcrum,});
   
     my $previous = HTML::Entities::encode(&mt("Back"), '<>&"');      my $previous = HTML::Entities::encode(&mt("Back"), '<>&"');
     my $next = HTML::Entities::encode(&mt("Next"), '<>&"');      my $next = HTML::Entities::encode(&mt("Next"), '<>&"');
     # FIXME: This should be parameterized, not concatenated - Jeremy      # FIXME: This should be parameterized, not concatenated - Jeremy
Line 599  sub display { Line 608  sub display {
   
     if (!$state->overrideForm()) { $result.='<form name="helpform" method="post">'; }      if (!$state->overrideForm()) { $result.='<form name="helpform" method="post">'; }
     if ($stateHelp) {      if ($stateHelp) {
  $stateHelp = &Apache::loncommon::help_open_topic($stateHelp);          $stateHelp = &Apache::loncommon::help_open_topic($stateHelp);
     }  
     $result .= <<HEADER;  
         <table border="0" width='100%'><tr><td>  
         <h2><i>$stateTitle</i>$stateHelp</h2>  
 HEADER  
   
     $result .= "<table cellpadding='10' width='100%'><tr><td rowspan='2' valign='top'>";  
   
     if (!$state->overrideForm()) {  
         $result .= $self->_saveVars();  
     }      }
     $result .= $state->render();  
   
     $result .= "</td><td valign='top' align='right'>";      # Prepare buttons
       my $buttons;
     # Warning: Copy and pasted from below, because it's too much trouble to   
     # turn this into a subroutine  
     if (!$state->overrideForm()) {      if (!$state->overrideForm()) {
         if ($self->{STATE} ne $self->{START_STATE}) {          if ($self->{STATE} ne $self->{START_STATE}) {
             #$result .= '<input name="SUBMIT" type="submit" value="&lt;- Previous" />&nbsp;&nbsp;';              #$result .= '<input name="SUBMIT" type="submit" value="&lt;- Previous" />&nbsp;&nbsp;';
         }          }
           $buttons = '<p>'; # '<fieldset>';
         if ($self->{DONE}) {          if ($self->{DONE}) {
             my $returnPage = $self->{RETURN_PAGE};              my $returnPage = $self->{RETURN_PAGE};
             $result .= "<a href=\"$returnPage\">" . &mt("End Helper") . "</a>";              $buttons .= '<a href="'.$returnPage.'">'.&mt('End Helper').'</a>';
         }          }
         else {          else {
             $result .= '<span class="LC_nobreak"><input name="back" type="button" ';              $buttons .= '<span class="LC_nobreak">'
             $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';                         .'<input name="back" type="button" '
             $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></span>';                         .'value="'.$previous.'" onclick="history.go(-1)" /> '
                          .'<input name="SUBMIT" type="submit" value="'.$next.'" />'
                          .'</span>';
         }          }
       $buttons .= '</p>'; # '</fieldset>';
     }      }
   
     $result .= "</td></tr><tr><td valign='bottom' align='right'>";  
   
     # Warning: Copy and pasted from above, because it's too much trouble to   
     # turn this into a subroutine      $result .= '<h2>'.$stateTitle.$stateHelp.'</h2>';
   
   #   $result .= '<div>';
   
       # Top buttons
       $result .= $buttons;
   
       # Main content of current helper screen
     if (!$state->overrideForm()) {      if (!$state->overrideForm()) {
         if ($self->{STATE} ne $self->{START_STATE}) {          $result .= $self->_saveVars();
             #$result .= '<input name="SUBMIT" type="submit" value="&lt;- Previous" />&nbsp;&nbsp;';  
         }  
         if ($self->{DONE}) {  
             my $returnPage = $self->{RETURN_PAGE};  
             $result .= "<a href=\"$returnPage\">" . &mt('End Helper') . "</a>";  
         }  
         else {  
             $result .= '<span class="LC_nobreak"><input name="back" type="button" ';  
             $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';  
             $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></span>';  
         }  
     }      }
       $result .= $state->render();
   
       # Bottom buttons
       $result .= $buttons;
   
   
     #foreach my $key (keys %{$self->{VARS}}) {      #foreach my $key (keys %{$self->{VARS}}) {
     #    $result .= "|$key| -> " . $self->{VARS}->{$key} . "<br />";      #    $result .= "|$key| -> " . $self->{VARS}->{$key} . "<br />";
     #}      #}
   
     $result .= "</td></tr></table>";  #   $result .= '</div>';
   
     $result .= <<FOOTER;      $result .= <<FOOTER;
               </td>  
             </tr>  
           </table>  
         </form>          </form>
 FOOTER  FOOTER
   
Line 2069  the toplevel default.sequence in the res Line 2066  the toplevel default.sequence in the res
   evaluated with "sub { my $helper = shift; my $state = shift;" and    evaluated with "sub { my $helper = shift; my $state = shift;" and
   "}", with the return value used as the mapurl.    "}", with the return value used as the mapurl.
   
   =item * <option />: Allows you to add optional elements to the
     resource chooser currently these can be a checkbox, or a text entry
     or hidden (see the 'type' attribute below).
     the following attributes are supported by this tag:
   
   =over 4
   
   =item * type=control-type : determines the type of control displayed.
     This can be one of the following types: 'checkbox' provides a true/false
     checkbox.  'text' provides a text entry control. 'hidden' provides a
     hidden form element that returns the name of the resource for each
     element of the text box.
   
   =item * text=header-text : provides column header text for the option.
     
   =item * variable=helpervar : provides a helper variable to contain the
     value of the input control for each resource.  In general, the result
     will be a set of values separated by |||  for the checkbox the value between
     the |||'s will either be empty, if the box is not checked, or the resource
     name if checked.  For the text entry, the values will be the text in the
     text box.  This could be empty.  Hidden elements unconditionally provide
     the resource name for each row of the chooser and allow you to therefore
     correlate text entries to their resources.
     The helper variable can be initialized by the user code to pre-load values
     into the controls:
   
   =over 4
   
     
   =item * Preloading checkboxes : Set the helper variable to the value you
      would have gotten from the control if it had been manually set as desired.
   
   =item * Preloading text entries : Set the helper variable to triple pipe
      separated values where each value is of the form resource-name=value
   
   =item * Preloading hidden fields : These cannot be pre-loaded and will always
     be pipe separated resource names.
   
   =back
   
   
   =back
   
 =back  =back
   
 =cut  =cut
Line 2198  sub start_option { Line 2238  sub start_option {
     if (!defined($paramHash->{OPTION_TEXTS})) {      if (!defined($paramHash->{OPTION_TEXTS})) {
  $paramHash->{OPTION_TEXTS} = [ ];   $paramHash->{OPTION_TEXTS} = [ ];
  $paramHash->{OPTION_VARS}  = [ ];   $paramHash->{OPTION_VARS}  = [ ];
    $paramHash->{OPTION_TYPES} = [ ];
   
     }      }
       #  We can have an attribute: type which can have the
       #  values: "checkbox" or "text" which defaults to 
       #           checkbox allowing us to change the type of input
       #           for the option:
       #
       my $input_widget_type = 'checkbox';
       if(defined($token->[2]{'type'})) {
    my $widget_type  = $token->[2]{'type'};
    if ($widget_type eq 'text') {          # only accept legal alternatives
       $input_widget_type = $widget_type; # Illegals are checks.
    } elsif ($widget_type eq 'hidden') {
       $input_widget_type = $widget_type;
    }
       }
   
     # OPTION_TEXTS is a list of the text attribute      # OPTION_TEXTS is a list of the text attribute
     #               values used to create column headings.      #               values used to create column headings.
     # OPTION_VARS is a list of the variable names, used to create the checkbox      # OPTION_VARS is a list of the variable names, used to create the checkbox
     #             inputs.      #             inputs.
       # OPTION_TYPES is a list of the option types:
       #
     #  We're ok with empty elements. as place holders      #  We're ok with empty elements. as place holders
     # Although the 'variable' element should really exist.      # Although the 'variable' element should really exist.
     #      #
   
   
     my $option_texts  = $paramHash->{OPTION_TEXTS};      my $option_texts  = $paramHash->{OPTION_TEXTS};
     my $option_vars   = $paramHash->{OPTION_VARS};      my $option_vars   = $paramHash->{OPTION_VARS};
       my $option_types   = $paramHash->{OPTION_TYPES};
     push(@$option_texts,  $token->[2]{'text'});      push(@$option_texts,  $token->[2]{'text'});
     push(@$option_vars,   $token->[2]{'variable'});      push(@$option_vars,   $token->[2]{'variable'});
       push(@$option_types,   $input_widget_type);
   
   
     #  Need to create and declare the option variables as well to make them      #  Need to create and declare the option variables as well to make them
     # persistent.      # persistent.
Line 2287  BUTTONS Line 2349  BUTTONS
     my $multichoice    = $self->{'multichoice'};      my $multichoice    = $self->{'multichoice'};
     my $option_vars    = $self->{OPTION_VARS};      my $option_vars    = $self->{OPTION_VARS};
     my $option_texts   = $self->{OPTION_TEXTS};      my $option_texts   = $self->{OPTION_TEXTS};
       my $option_types   = $self->{OPTION_TYPES};
     my $addparts       = $self->{'addparts'};      my $addparts       = $self->{'addparts'};
     my $headings_done  = 0;      my $headings_done  = 0;
   
Line 2345  BUTTONS Line 2408  BUTTONS
     my $resource_name =         my $resource_name =   
                    HTML::Entities::encode($raw_name,"<>&\"'");                     HTML::Entities::encode($raw_name,"<>&\"'");
     if($option_vars) {      if($option_vars) {
    my $option_num = 0;
  foreach my $option_var (@$option_vars) {   foreach my $option_var (@$option_vars) {
       my $option_type = $option_types->[$option_num];
       $option_num++;
     my $var_value = "\|\|\|" . $helper->{VARS}->{$option_var} .       my $var_value = "\|\|\|" . $helper->{VARS}->{$option_var} . 
  "\|\|\|";   "\|\|\|";
     my $checked ="";      my $checked ="";
     if($var_value =~ /\Q|||$raw_name|||\E/) {      if($var_value =~ /\Q|||$raw_name|||\E/) {
  $checked = "checked='checked'";   $checked = "checked='checked'";
     }      }
     $col .=       if ($option_type eq 'text') {
                         "<td align='center'><input type='checkbox' name ='$option_var".   #
  "_forminput' value='".   # For text's the variable value is a ||| separated set of
  $resource_name . "' $checked /> </td>";   # resource_name=value 
    #
    my @values = split(/\|\|\|/, $helper->{VARS}->{$option_var});
   
    # Normal practice would be to toss this in a hash but 
    # the only thing that saves is the compare in the loop
    # below and for all but one case we'll break out of the loop
    # before it completes.
   
    my $text_value = '';    # In case there's no match.
    foreach my $value (@values) {
       my ($res, $skip) = split(/=/, $value);
       if($res eq $resource_name) {
    $text_value = $skip;
    last;
       }
    }
    # TODO: add an attribute to <option> that allows the
    #       programmer to set the width of the tex entry box.
   
    $col .=
       "<td align='center'><input type='text' name ='$option_var".
       "_forminput' value='".$text_value."' size='5' /> </td>";
       } elsif ($option_type eq 'hidden') {
     $col .= "<td align='center'><input type='hidden' name ='$option_var".
       "_forminput' value='".
       $resource_name . "'/> </td>";
       } else {
    $col .= 
       "<td align='center'><input type=$option_type name ='$option_var".
       "_forminput' value='".
       $resource_name . "' $checked /> </td>";
       }
  }   }
     }      }
   
Line 3441  snippets and collecting the results. Fin Line 3539  snippets and collecting the results. Fin
 helper, going to a provided page.  helper, going to a provided page.
   
 If the parameter "restartCourse" is true, this will override the buttons and  If the parameter "restartCourse" is true, this will override the buttons and
 will make a "Finish Helper" button that will re-initialize the course for them,  will make a Save button (Finish Helper) that will re-initialize the course for them,
 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.
   
Line 3548  sub render { Line 3646  sub render {
   
     my $actionURL = $self->{EXIT_PAGE};      my $actionURL = $self->{EXIT_PAGE};
     my $targetURL = '';      my $targetURL = '';
     my $finish=&mt('Finish');   my $finish=&mt('Save');
     if ($self->{'restartCourse'}) {      if ($self->{'restartCourse'}) {
  $actionURL = '/adm/roles';   $actionURL = '/adm/roles';
  $targetURL = '/adm/menu';   $targetURL = '/adm/menu';
Line 3560  sub render { Line 3658  sub render {
  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 $previous = HTML::Entities::encode(&mt("Back"), '<>&"');      my $previous = HTML::Entities::encode(&mt("Back"), '<>&"');
     my $next = HTML::Entities::encode(&mt("Next"), '<>&"');      my $next = HTML::Entities::encode(&mt("Next"), '<>&"');
     my $target = " target='loncapaclient'";      $result .= "<p>\n" .
     if ($env{'environment.remote'} eq 'off') {  $target='';  }   "<form action='".$actionURL."' method='post' >\n" .
     $result .= "<center>\n" .  
  "<form action='".$actionURL."' method='post' $target>\n" .  
  "<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></p>\n";
   
     return $result;      return $result;
 }  }
Line 3696  sub render { Line 3791  sub render {
             my $res = $navmap->getById($vars->{RESOURCE_ID});              my $res = $navmap->getById($vars->{RESOURCE_ID});
             $symb = $res->symb();              $symb = $res->symb();
             my $title = $res->compTitle();              my $title = $res->compTitle();
             $resourceString .= '<li>'.&mt('for the resource named [_1] part [_2]',"<b>$title</b>","<b>$part</b>").'</li>';              $resourceString .= '<li>'.&mt('for the resource named [_1], part [_2]',"<b>$title</b>","<b>$part</b>").'</li>';
         } else {          } else {
             $resourceString .= '<li>'.&mt('for the resource ID [_1] (name unavailable) part [_2]','<b>'.$vars->{RESOURCE_ID}.'</b>',"<b>$part</b>").'</li>';              $resourceString .= '<li>'.&mt('for the resource ID [_1] (name unavailable), part [_2]','<b>'.$vars->{RESOURCE_ID}.'</b>',"<b>$part</b>").'</li>';
             &Apache::lonnet::logthis('Retrieval of resource title failed in lonhelper.pm - could not create navmap object for course.');              &Apache::lonnet::logthis('Retrieval of resource title failed in lonhelper.pm - could not create navmap object for course.');
         }          }
  if ($vars->{TARGETS} eq 'course') {   if ($vars->{TARGETS} eq 'course') {
Line 3731  sub render { Line 3826  sub render {
     $result .= "<input type='hidden' name='psprt' value='".      $result .= "<input type='hidden' name='psprt' value='".
  HTML::Entities::encode($part,"'<>&\"") . "' />\n";   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>';      $result .= '<p class="LC_info">'
                 .&mt('Confirm that this information is correct, then click &quot;Save&quot; to complete setting the parameter.')
                 .'</p>'
                 .'<ul>';
           
     # Print the type of manipulation:      # Print the type of manipulation:
     my $extra;      my $extra;
Line 3807  sub render { Line 3905  sub render {
         my $showdate = &Apache::lonlocal::locallocaltime($vars->{PARM_DATE});          my $showdate = &Apache::lonlocal::locallocaltime($vars->{PARM_DATE});
  $result .= '<li>'.&mt('to [_1] ([_2])',"<b>".$showdate."</b>",Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}))."</li>\n";   $result .= '<li>'.&mt('to [_1] ([_2])',"<b>".$showdate."</b>",Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}))."</li>\n";
     }      }
   
    $result .= '</ul>';
     
   # FIXME: Make previous button working
   #        Found to be dysfunctional when used to change the selected student
   #   my $previous = HTML::Entities::encode(&mt("Back"), '<>&"');
       my $buttons .= '<p><span class="LC_nobreak">'
   #                 .'<input name="back" type="button"'
   #                 .' value="'.$previous.'" onclick="history.go(-1)" />'
                     .' <input type="submit" value="'.&mt('Save').'" />' # Finish Helper
                     .'</span></p>'."\n";
   
     # print pres_marker      # print pres_marker
     $result .= "\n<input type='hidden' name='pres_marker'" .      $result .= "\n<input type='hidden' name='pres_marker'" .
         " value='$affectedResourceId&$parm_name&$level' />\n";          " value='$affectedResourceId&$parm_name&$level' />\n";
Line 3817  sub render { Line 3926  sub render {
     $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='".&mt('Finish Helper')."' /></center></form>\n";      $result .= $buttons;
   
     return $result;      return $result;
 }  }

Removed from v.1.173  
changed lines
  Added in v.1.179


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