Diff for /loncom/interface/lonhelper.pm between versions 1.68 and 1.98

version 1.68, 2004/04/19 15:40:08 version 1.98, 2005/02/22 11:43:05
Line 263  sub real_handler { Line 263  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'}) {  
             $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'}) {      if ($ENV{'browser.mathml'}) {
         $r->content_type('text/xml');   &Apache::loncommon::content_type($r,'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 583  sub display { Line 575  sub display {
     }      }
   
     # Phase 4: Display.      # Phase 4: Display.
       my $html=&Apache::lonxml::xmlbegin();
     my $stateTitle=&mt($state->title());      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,'','');
Line 592  sub display { Line 585  sub display {
     my $loncapaHelper = &mt("LON-CAPA Helper:");      my $loncapaHelper = &mt("LON-CAPA Helper:");
   
     $result .= <<HEADER;      $result .= <<HEADER;
 <html>  $html
 <script type="text/javascript" language="Javascript" >  
     var editbrowser;  
     function openbrowser(formname,elementname,only,omit) {  
         var url = '/res/?';  
         if (editbrowser == null) {  
             url += 'launch=1&';  
         }  
         url += 'catalogmode=interactive&';  
         url += 'mode=parmset&';  
         url += 'form=' + formname + '&';  
         if (only != null) {  
             url += 'only=' + only + '&';  
         }   
         if (omit != null) {  
             url += 'omit=' + omit + '&';  
         }  
         url += 'element=' + elementname + '';  
         var title = 'Browser';  
         var options = 'scrollbars=1,resizable=1,menubar=0';  
         options += ',width=700,height=600';  
         editbrowser = open(url,title,options,'1');  
         editbrowser.focus();  
     }  
 </script>  
     <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 1022  sub start_message { Line 990  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 1193  sub start_choice { Line 1161  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 1206  sub end_choice { Line 1174  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 1288  BUTTONS Line 1263  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 1303  BUTTONS Line 1280  BUTTONS
             $choiceLabel = eval($choiceLabel);              $choiceLabel = eval($choiceLabel);
             $choiceLabel = &$choiceLabel($helper, $self);              $choiceLabel = &$choiceLabel($helper, $self);
         }          }
  &Apache::lonnet::logthis("TITLE TRANSLATION >$choiceLabel<");          $result .= "/></td><td> ".qq{<label for="$id">}.
         $result .= "/></td><td> " . &mtn($choiceLabel) . "</td></tr>\n";              $choiceLabel. "</label></td></tr>\n";
     }      }
     $result .= "</table>\n\n\n";      $result .= "</table>\n\n\n";
     $result .= $buttons;      $result .= $buttons;
Line 1447  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 1738  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 1783  BEGIN { Line 1762  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 1805  sub start_resource { Line 1784  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'};      $paramHash->{'closeallpages'} = $token->[2]{'closeallpages'};
     return '';      return '';
 }  }
Line 1888  sub start_mapurl { Line 1871  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 1939  BUTTONS Line 1958  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 1954  BUTTONS Line 1977  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 $checked ="";
       if($helper->{VARS}->{$option_var} =~ /$raw_name/) {
    $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 1977  BUTTONS Line 2031  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" />;
   
   RADIO
     $ENV{'form.condition'} = !$self->{'toponly'};      $ENV{'form.condition'} = !$self->{'toponly'};
     my $cols = [$renderColFunc, Apache::lonnavmaps::resource()];      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 2085  sub start_student { Line 2176  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 2122  sub render { Line 2213  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 2130  sub render { Line 2223  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>
Line 2138  SCRIPT Line 2238  SCRIPT
   
         my %lt=&Apache::lonlocal::texthash(          my %lt=&Apache::lonlocal::texthash(
                     'ocs'  => "Select Only Current Students",                      'ocs'  => "Select Only Current Students",
                       'ues'  => "Unselect Expired Students",
                     'sas'  => "Select All Students",                      'sas'  => "Select All Students",
                     'uas'  => "Unselect All Students",                      'uas'  => "Unselect All Students",
                     'sfsg' => "Select for Section/Group",                      'sfsg' => "Select Current Students for Section/Group",
     'ufsg' => "Unselect for Section/Group");      'ufsg' => "Unselect for Section/Group");
     
         $buttons = <<BUTTONS;          $buttons = <<BUTTONS;
 <br />  <br />
 <input type="button" onclick="checkactive()" value="$lt{'ocs'}" />  <table>
 <input type="button" onclick="checkall(true, '$var')" value="$lt{'sas'}" />    <tr>
 <input type="button" onclick="checkall(false, '$var')" value="$lt{'uas'}" />    
 <input type="button" onclick="checksec(true)" value="$lt{'sfsg'}">      <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="$lt{'ufsg'}">    </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 2210  BUTTONS Line 2324  BUTTONS
     }      }
   
     my $name = $self->{'coursepersonnel'} ? &mt('Name') : &mt('Student Name');      my $name = $self->{'coursepersonnel'} ? &mt('Name') : &mt('Student Name');
     &Apache::lonnet::logthis("THE NAME IS >$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";
Line 2230  BUTTONS Line 2343  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'>" 
Line 2398  sub start_filefilter { Line 2514  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 2450  SCRIPT Line 2573  SCRIPT
 <input type="button" onclick="checkall(false, '$var')" value="$lt{'uaf'}" />  <input type="button" onclick="checkall(false, '$var')" value="$lt{'uaf'}" />
 BUTTONS  BUTTONS
   
        my %lt=&Apache::lonlocal::texthash(         %lt=&Apache::lonlocal::texthash(
  'sap'  => "Select All Published",   'sap'  => "Select All Published",
         'uap'  => "Unselect All Published");          'uap'  => "Unselect All Published");
         if ($helper->{VARS}->{'construction'}) {          if ($helper->{VARS}->{'construction'}) {
Line 2484  BUTTONS Line 2607  BUTTONS
     }      }
   
     # 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 2536  BUTTONS Line 2659  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 2571  sub fileState { Line 2696  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 2703  string honors the validation function, i Line 2832  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 2746  sub render { Line 2876  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 2821  be able to call methods on it. Line 2951  be able to call methods on it.
   
 =cut  =cut
   
   use Apache::lonlocal;
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::general',      &Apache::lonhelper::register('Apache::lonhelper::general',
                                  'exec', 'condition', 'clause',                                   'exec', 'condition', 'clause',
Line 2942  will make a "Finish Helper" button that Line 3074  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;
Line 3039  sub render { Line 3174  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';   my $actionURL = '/adm/roles';
    $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 {
Line 3049  sub render { Line 3188  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 $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 3082  package Apache::lonhelper::parmwizfinal; Line 3220  package Apache::lonhelper::parmwizfinal;
 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::parmwizfinal',      &Apache::lonhelper::register('Apache::lonhelper::parmwizfinal',
Line 3130  sub render { Line 3269  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          $level = 9; # general course, see lonparmset.pm perldoc
         $affectedResourceId = "0.0";          $affectedResourceId = "0.0";
         $symb = 'a';          $symb = 'a';
Line 3143  sub render { Line 3282  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>";  
         $level = 8;          $level = 8;
         $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>";  
         $level = 7;          $level = 7;
         $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='get' 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>';      if ($vars->{GRANULARITY} eq 'resource') {
    $result .= "<input type='hidden' name='symb' value='".
       HTML::Entities::encode($symb,"'<>&\"") . "' />\n";
    $result .= "<input type='hidden' name='pscat' value='".
       HTML::Entities::encode($vars->{ACTION_TYPE},"'<>&\"") . "' />\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 3200  sub render { Line 3356  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;          $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();
Line 3214  sub render { Line 3370  sub render {
         # Chop off everything after the last colon (section)          # Chop off everything after the last colon (section)
         $username = substr($username, 0, rindex($username, ':'));          $username = substr($username, 0, rindex($username, ':'));
         my $name = $classlist->{$username}->[6];          my $name = $classlist->{$username}->[6];
         $result .= "<li>for <b>$name</b></li>";          $result .= '<li>'.&mt('for [_1]',"<b>$name</b>").'</li>';
         $level -= 6;          $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 3240  sub render { Line 3394  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='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.68  
changed lines
  Added in v.1.98


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