Diff for /loncom/xml/lonxml.pm between versions 1.465 and 1.494

version 1.465, 2007/10/16 23:20:05 version 1.494, 2009/04/17 01:00:20
Line 37 Line 37
 # to any other parties under any circumstances.  # to any other parties under any circumstances.
 #  #
   
   =pod
   
   =head1 NAME
   
   Apache::lonxml
   
   =head1 SYNOPSIS
   
   XML Parsing Module
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   
   =head1 SUBROUTINES
   
   =cut
   
   
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
Line 90  use Apache::lonfeedback(); Line 109  use Apache::lonfeedback();
 use Apache::lonmsg();  use Apache::lonmsg();
 use Apache::loncacc();  use Apache::loncacc();
 use Apache::lonmaxima();  use Apache::lonmaxima();
   use Apache::lonr();
 use Apache::lonlocal;  use Apache::lonlocal;
   
 #====================================   Main subroutine: xmlparse    #====================================   Main subroutine: xmlparse  
Line 361  sub xmlparse { Line 381  sub xmlparse {
    $safeeval,\%style_for_target,1);     $safeeval,\%style_for_target,1);
   
  if (@stack) {   if (@stack) {
      &warning("At end of file some tags were still left unclosed, ".       &warning(&mt('At end of file some tags were still left unclosed:').
       '<tt>&lt;'.join('&gt;</tt>, <tt>&lt;',reverse(@stack)).        ' <tt>&lt;'.join('&gt;</tt>, <tt>&lt;',reverse(@stack)).
       '&gt;</tt>');        '&gt;</tt>');
  }   }
  if ($env{'request.uri'}) {   if ($env{'request.uri'}) {
Line 377  sub xmlparse { Line 397  sub xmlparse {
      $finaloutput .= join('',@script_var_displays);       $finaloutput .= join('',@script_var_displays);
      undef(@script_var_displays);       undef(@script_var_displays);
  }   }
    &init_state();
  if ($env{'form.return_only_error_and_warning_counts'}) {   if ($env{'form.return_only_error_and_warning_counts'}) {
        if ($env{'request.filename'}=~/\.(html|htm|xml)$/i) { 
           my $error=&verify_html($content_file_string);
           if ($error) { $errorcount++; }
        }
      return "$errorcount:$warningcount";       return "$errorcount:$warningcount";
  }   }
  return $finaloutput;   return $finaloutput;
Line 482  sub inner_xmlparse { Line 506  sub inner_xmlparse {
     while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {      while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {
  my $lasttag=$$stack[-1];   my $lasttag=$$stack[-1];
  if ($token->[1] =~ /^\Q$lasttag\E$/i) {   if ($token->[1] =~ /^\Q$lasttag\E$/i) {
     &Apache::lonxml::warning('Using tag &lt;/'.$token->[1].'&gt; on line '.$token->[3].' as end tag to &lt;'.$$stack[-1].'&gt;');      &Apache::lonxml::warning(&mt('Using tag [_1] on line [_2] as end tag to [_3]','&lt;/'.$token->[1].'&gt;','.$token->[3].','&lt;'.$$stack[-1].'&gt;'));
     last;      last;
  } else {   } else {
     &Apache::lonxml::warning('Found tag &lt;/'.$token->[1].'&gt; on line '.$token->[3].' when looking for &lt;/'.$$stack[-1].'&gt; in file');                      &Apache::lonxml::warning(&mt('Found tag [_1] on line [_2] when looking for [_3] in file.','&lt;/'.$token->[1].'&gt;',$token->[3],'&lt;/'.$$stack[-1].'&gt;'));
     &end_tag($stack,$parstack,$token);      &end_tag($stack,$parstack,$token);
  }   }
     }      }
Line 501  sub inner_xmlparse { Line 525  sub inner_xmlparse {
   if (!$Apache::lonxml::usestyle) {    if (!$Apache::lonxml::usestyle) {
       $extras=$Apache::lonxml::style_values;        $extras=$Apache::lonxml::style_values;
   }    }
  if ( $#$parstack > -1 ) {    if ( $#$parstack > -1 ) {
   $result=&Apache::run::evaluate($result,$safeeval,$extras.$$parstack[-1]);        $result=&Apache::run::evaluate($result,$safeeval,$extras.$$parstack[-1]);
  } else {    } else {
   $result= &Apache::run::evaluate($result,$safeeval,$extras);        $result= &Apache::run::evaluate($result,$safeeval,$extras);
  }            }
       }        }
       $Apache::lonxml::post_evaluate=1;        $Apache::lonxml::post_evaluate=1;
   
Line 654  sub setup_globals { Line 678  sub setup_globals {
   $Apache::lonxml::request=$request;    $Apache::lonxml::request=$request;
   $errorcount=0;    $errorcount=0;
   $warningcount=0;    $warningcount=0;
     $Apache::lonxml::internal_error=0;
   $Apache::lonxml::default_homework_loaded=0;    $Apache::lonxml::default_homework_loaded=0;
   $Apache::lonxml::usestyle=1;    $Apache::lonxml::usestyle=1;
   &init_counter();    &init_counter();
   &clear_bubble_lines_for_part();    &clear_bubble_lines_for_part();
   &init_state();    &init_state();
     &set_state('target',$target);
   @Apache::lonxml::pwd=();    @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();    @Apache::lonxml::extlinks=();
   @script_var_displays=();    @script_var_displays=();
Line 713  sub init_safespace { Line 739  sub init_safespace {
   $safeeval->permit(":base_math");    $safeeval->permit(":base_math");
   $safeeval->permit("sort");    $safeeval->permit("sort");
   $safeeval->permit("time");    $safeeval->permit("time");
     $safeeval->permit("caller");
   $safeeval->deny("rand");    $safeeval->deny("rand");
   $safeeval->deny("srand");    $safeeval->deny("srand");
   $safeeval->deny(":base_io");    $safeeval->deny(":base_io");
Line 722  sub init_safespace { Line 749  sub init_safespace {
   $safehole->wrap(\&Apache::chemresponse::chem_standard_order,$safeeval,    $safehole->wrap(\&Apache::chemresponse::chem_standard_order,$safeeval,
   '&chem_standard_order');    '&chem_standard_order');
   $safehole->wrap(\&Apache::response::check_status,$safeeval,'&check_status');    $safehole->wrap(\&Apache::response::check_status,$safeeval,'&check_status');
     $safehole->wrap(\&Apache::response::implicit_multiplication,$safeeval,'&implicit_multiplication');
   
   $safehole->wrap(\&Apache::lonmaxima::maxima_eval,$safeeval,'&maxima_eval');    $safehole->wrap(\&Apache::lonmaxima::maxima_eval,$safeeval,'&maxima_eval');
   $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');    $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');
   $safehole->wrap(\&Apache::lonmaxima::maxima_cas_formula_fix,$safeeval,    $safehole->wrap(\&Apache::lonmaxima::maxima_cas_formula_fix,$safeeval,
   '&maxima_cas_formula_fix');    '&maxima_cas_formula_fix');
   
     $safehole->wrap(\&Apache::lonr::r_eval,$safeeval,'&r_eval');
     $safehole->wrap(\&Apache::lonr::r_check,$safeeval,'&r_check');
     $safehole->wrap(\&Apache::lonr::r_cas_formula_fix,$safeeval,
                     '&r_cas_formula_fix');
    
   $safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval,    $safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval,
   '&capa_formula_fix');    '&capa_formula_fix');
   
     $safehole->wrap(\&Apache::lonlocal::locallocaltime,$safeeval,
                     '&locallocaltime');
   
   $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');    $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
   $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos');    $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos');
   $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan');    $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan');
Line 1066  Increments the internal counter environm Line 1102  Increments the internal counter environm
 Optional Arguments:  Optional Arguments:
   $increment - amount to increment by (defaults to 1)    $increment - amount to increment by (defaults to 1)
                Also 1 if the value is negative or zero.                 Also 1 if the value is negative or zero.
   $part_id   - optional part id.. during analysis, this    $part_response - A concatenation of the part and response id
                indicates whic part of a problem is being                     identifying exactly what is being 'answered'.
                counted.  
   
 =cut  =cut
   
 sub increment_counter {  sub increment_counter {
     my ($increment, $part_id) = @_;      my ($increment, $part_response) = @_;
       if ($env{'form.grade_noincrement'}) { return; }
     if (!defined($increment) || $increment le 0) {      if (!defined($increment) || $increment le 0) {
  $increment = 1;   $increment = 1;
     }      }
     $Apache::lonxml::counter += $increment;      $Apache::lonxml::counter += $increment;
   
     # If the caller supplied the part_id parameter,       # If the caller supplied the response_id parameter, 
     # Maintain its counter.. creating if necessary.      # Maintain its counter.. creating if necessary.
   
     if(defined($part_id)) {      if (defined($part_response)) {
  if (!defined($Apache::lonxml::counters_per_part{$part_id})) {   if (!defined($Apache::lonxml::counters_per_part{$part_response})) {
     $Apache::lonxml::counters_per_part{$part_id} = 0;      $Apache::lonxml::counters_per_part{$part_response} = 0;
  }   }
  $Apache::lonxml::counters_per_part{$part_id} += $increment;   $Apache::lonxml::counters_per_part{$part_response} += $increment;
  my $new_value = $Apache::lonxml::counters_per_part{$part_id};   my $new_value = $Apache::lonxml::counters_per_part{$part_response};
     }      }
   
     $Apache::lonxml::counter_changed=1;      $Apache::lonxml::counter_changed=1;
Line 1115  sub init_counter { Line 1152  sub init_counter {
 }  }
   
 sub store_counter {  sub store_counter {
     &Apache::lonnet::appenv(('form.counter' => $Apache::lonxml::counter));      &Apache::lonnet::appenv({'form.counter' => $Apache::lonxml::counter});
     $Apache::lonxml::counter_changed=0;      $Apache::lonxml::counter_changed=0;
     return '';      return '';
 }  }
Line 1136  sub store_counter { Line 1173  sub store_counter {
   
     sub restore_problem_counter {      sub restore_problem_counter {
  if (defined($state)) {   if (defined($state)) {
     &Apache::lonnet::appenv(('form.counter' => $state));      &Apache::lonnet::appenv({'form.counter' => $state});
  }   }
     }      }
     sub get_problem_counter {      sub get_problem_counter {
Line 1148  sub store_counter { Line 1185  sub store_counter {
   
 =pod  =pod
   
 =item  bubble_lines_for_part(part_id)  =item  bubble_lines_for_part(part_response)
   
 Returns the number of lines required to get a response for  Returns the number of lines required to get a response for
 $part_id (this is just $Apache::lonxml::counters_per_part{$part_id}  $part_response (this is just $Apache::lonxml::counters_per_part{$part_response}
   
 =cut  =cut
   
 sub bubble_lines_for_part {  sub bubble_lines_for_part {
     my ($part_id) = @_;      my ($part_response) = @_;
   
     if (!defined($Apache::lonxml::counters_per_part{$part_id})) {      if (!defined($Apache::lonxml::counters_per_part{$part_response})) {
  return 0;   return 0;
     } else {      } else {
  return $Apache::lonxml::counters_per_part{$part_id};   return $Apache::lonxml::counters_per_part{$part_response};
     }      }
   
 }  }
   
 =pod  =pod
Line 1182  sub clear_bubble_lines_for_part { Line 1218  sub clear_bubble_lines_for_part {
   
 =pod  =pod
   
 =item set_bubble_lines(part_id, value)  =item set_bubble_lines(part_response, value)
   
 If there is a problem part, that for whatever reason  If there is a problem part, that for whatever reason
 requires bubble lines that are not  requires bubble lines that are not
Line 1192  analysis to set its hash value explicitl Line 1228  analysis to set its hash value explicitl
 =cut  =cut
   
 sub set_bubble_lines {  sub set_bubble_lines {
     my ($part_id, $value) = @_;      my ($part_response, $value) = @_;
   
     $Apache::lonxml::counters_per_part{$part_id} = $value;      $Apache::lonxml::counters_per_part{$part_response} = $value;
 }  }
   
 =pod  =pod
Line 1374  sub writeallows { Line 1410  sub writeallows {
          &Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl;           &Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl;
     }      }
     @extlinks=();      @extlinks=();
     &Apache::lonnet::appenv(%httpref);      &Apache::lonnet::appenv(\%httpref);
 }  }
   
 sub register_ssi {  sub register_ssi {
Line 1441  sub storefile { Line 1477  sub storefile {
         $fh->close();          $fh->close();
         return 1;          return 1;
     } else {      } else {
  &warning("Unable to save file $file");   &warning(&mt('Unable to save file [_1]','<tt>'.$file.'</tt>'));
  return 0;   return 0;
     }      }
 }  }
Line 1474  SIMPLECONTENT Line 1510  SIMPLECONTENT
   return $filecontents;    return $filecontents;
 }  }
   
   sub createnewjs {
       my $filecontents=(<<SIMPLECONTENT);
   <script type="text/javascript" language="Javascript">
   
   </script>
   SIMPLECONTENT
       return $filecontents;
   }
   
   sub verify_html {
       my ($filecontents)=@_;
       if ($filecontents!~/(?:\<|\&lt\;)(?:html|xml)[^\<]*(?:\>|\&gt\;)/is) {
          return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;xml&gt;');
       }
       if ($filecontents!~/(?:\<|\&lt\;)\/(?:html|xml)(?:\>|\&gt\;)/is) {
          return &mt('File does not have [_1] or [_2] ending tag','&lt;html&gt;','&lt;xml&gt;');
       }
       if ($filecontents!~/(?:\<|\&lt\;)(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
          return &mt('File does not have [_1] or [_2] starting tag','&lt;body&gt;','&lt;frameset&gt;');
       }
       if ($filecontents!~/(?:\<|\&lt\;)\/(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
          return &mt('File does not have [_1] or [_2] ending tag','&lt;body&gt;','&lt;frameset&gt;');
       }
       return '';
   }
   
   sub renderingoptions {
       my %langchoices=('' => '');
       foreach (&Apache::loncommon::languageids()) {
           if (&Apache::loncommon::supportedlanguagecode($_)) {
               $langchoices{&Apache::loncommon::supportedlanguagecode($_)}
                          = &Apache::loncommon::plainlanguagedescription($_);
           }
       }
       return
          '<span class="LC_nobreak">'.
          &mt('Language:').' '.
          &Apache::loncommon::select_form($env{'form.languages'},'languages',
                                                        %langchoices).'
        </span>
        <span class="LC_nobreak">'.
          &mt('Math Rendering:').' '.
          &Apache::loncommon::select_form($env{'form.texengine'},'texengine',
                                                        ('' => '',
                                                         'tth' => 'tth (TeX to HTML)',
                                                         'jsMath' => 'jsMath',
                                                         'mimetex' => 'mimetex (Convert to Images)')).'
        </span>';
   }
   
 sub inserteditinfo {  sub inserteditinfo {
       my ($filecontents,$filetype)=@_;        my ($filecontents, $filetype, $filename)=@_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');        $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';  
       my $xml_help = '';        my $xml_help = '';
       my $initialize='';        my $initialize='';
       my $textarea_id = 'filecont';        my $textarea_id = 'filecont';
         my $dragmath_button;
       my ($add_to_onload, $add_to_onresize);        my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
       if ($filetype eq 'html'         if ($filetype eq 'html' 
Line 1519  FULLPAGE Line 1604  FULLPAGE
     }      }
 </script>  </script>
 FULLPAGE  FULLPAGE
             if ($filetype eq 'html') {
                 $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
                 $dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1);
             }
       }        }
   
       $add_to_onload = 'initDocument();';        $add_to_onload = 'initDocument();';
Line 1528  FULLPAGE Line 1617  FULLPAGE
   $xml_help=&Apache::loncommon::helpLatexCheatsheet();    $xml_help=&Apache::loncommon::helpLatexCheatsheet();
       }        }
   
       my $cleanbut = '';  
   
       my $titledisplay=&display_title();        my $titledisplay=&display_title();
       my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',        my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',
  'vi' => 'Save and View',   'vi' => 'Save and View',
  'dv' => 'Discard Edits and View',   'dv' => 'Discard Edits and View',
  'un' => 'undo',   'un' => 'undo',
  'ed' => 'Edit');   'ed' => 'Edit');
       my $buttons=(<<BUTTONS);        my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
 $cleanbut  
 <input type="submit" name="discardview" accesskey="d"  value="$lt{'dv'}" />  
 <input type="submit" name="Undo" accesskey="u"  value="$lt{'un'}" /><hr />  
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />  
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />  
 BUTTONS  
       $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');  
       my $textarea_events = &Apache::edit::element_change_detection();        my $textarea_events = &Apache::edit::element_change_detection();
       my $form_events     = &Apache::edit::form_change_detection();        my $form_events     = &Apache::edit::form_change_detection();
         my $htmlerror;
         if ($filetype eq 'html') {
             $htmlerror=&verify_html($filecontents);
             if ($htmlerror) {
                 $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
             }
         }
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 $initialize  $initialize
 <hr />  
 <a name="editsection" />  <a name="editsection" />
 <form $form_events method="post" name="xmledit">  <form $form_events method="post" name="xmledit">
 $xml_help    <div class="LC_edit_problem_editxml_header">
 <input type="hidden" name="editmode" value="$lt{'ed'}" />      <table class="LC_edit_problem_header_title"><tr><td>
 $buttons<br />          $filename
 <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>        </td><td align="right">
 <div id="LC_aftertextarea">          $xml_help
 <br />$buttons        </td></tr>
 <br />      </table>
 $titledisplay      <div class="LC_edit_problem_discards">
 </div>        <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
         <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
         $dragmath_button $spelllink $htmlerror
       </div>
       <div class="LC_edit_problem_saves">
         <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />
         <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
       </div>
     </div>
     <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
     <div id="LC_aftertextarea">
       <br />
       $titledisplay
     </div>
 </form>  </form>
 </body>  </body>
 ENDFOOTER  ENDFOOTER
Line 1595  sub get_target { Line 1694  sub get_target {
   
 sub handler {  sub handler {
     my $request=shift;      my $request=shift;
       
     my $target=&get_target();      my $target=&get_target();
       
     $Apache::lonxml::debug=$env{'user.debug'};      $Apache::lonxml::debug=$env{'user.debug'};
           
     &Apache::loncommon::content_type($request,'text/html');      &Apache::loncommon::content_type($request,'text/html');
Line 1613  sub handler { Line 1711  sub handler {
   
     my $file=&Apache::lonnet::filelocation("",$request->uri);      my $file=&Apache::lonnet::filelocation("",$request->uri);
     my $filetype;      my $filetype;
     if ($file =~ /\.sty$/) {      if ($file =~ /\.(sty|css|js|txt)$/) {
  $filetype='sty';   $filetype=$1;
     } else {      } else {
  $filetype='html';   $filetype='html';
     }      }
   
 #  #
 # Edit action? Save file.  # Edit action? Save file.
 #  #
Line 1625  sub handler { Line 1724  sub handler {
  if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) {   if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) {
     my $html_file=&Apache::lonnet::getfile($file);      my $html_file=&Apache::lonnet::getfile($file);
     my $error = &Apache::lonhomework::handle_save_or_undo($request, \$html_file, \$env{'form.filecont'});      my $error = &Apache::lonhomework::handle_save_or_undo($request, \$html_file, \$env{'form.filecont'});
               if ($env{'form.savethisfile'}) {
                   $env{'form.editmode'}='Edit'; #force edit mode
               }
  }   }
     }      }
     my %mystyle;      my %mystyle;
Line 1643  ENDNOTFOUND Line 1745  ENDNOTFOUND
  if ($env{'request.state'} ne 'published') {   if ($env{'request.state'} ne 'published') {
     if ($filetype eq 'sty') {      if ($filetype eq 'sty') {
  $filecontents=&createnewsty();   $filecontents=&createnewsty();
     } else {              } elsif ($filetype eq 'js') {
                   $filecontents=&createnewjs();
               } elsif (($filetype ne 'css') && ($filetype ne 'txt')) {
  $filecontents=&createnewhtml();   $filecontents=&createnewhtml();
     }      }
     $env{'form.editmode'}='Edit'; #force edit mode      $env{'form.editmode'}='Edit'; #force edit mode
Line 1659  ENDNOTFOUND Line 1763  ENDNOTFOUND
     ['editmode']);      ['editmode']);
  }   }
  if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) {   if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) {
     &Apache::structuretags::reset_problem_globals();              if ($filetype eq 'html' || $filetype eq 'sty') {
     $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,          &Apache::structuretags::reset_problem_globals();
  '',%mystyle);          $result = &Apache::lonxml::xmlparse($request,$target,
                                                       $filecontents,'',%mystyle);
     # .html files may contain <problem> or <Task> need to clean      # .html files may contain <problem> or <Task> need to clean
     # up if it did      # up if it did
     &Apache::structuretags::reset_problem_globals();          &Apache::structuretags::reset_problem_globals();
     &Apache::lonhomework::finished_parsing();          &Apache::lonhomework::finished_parsing();
               } else {
                   $result = $filecontents;
               }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['rawmode']);      ['rawmode']);
     if ($env{'form.rawmode'}) { $result = $filecontents; }      if ($env{'form.rawmode'}) { $result = $filecontents; }
     if ($filetype eq 'sty') {      if ($filetype ne 'html') {
                   my $nochgview = 1; 
  my $controls =   my $controls =
     ($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls()      ($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls($nochgview)
                                            : '';                                             : '';
  my %options = ('bgcolor' => '#FFFFFF');                  if ($filetype ne 'sty') {
  $result =                       $result =~ s/</&lt;/g;
     &Apache::loncommon::start_page(undef,undef,\%options).                      $result =~ s/>/&gt;/g;
     $controls.                      $result = '<table class="LC_sty_begin">'.
     $result.                                '<tr><td><b><pre>'.$result.
     &Apache::loncommon::end_page();                                '</pre></b></td></tr></table>';
     }                  }
                   if ($env{'environment.remote'} eq 'off') {
                       my %options = ('bgcolor' => '#FFFFFF');
       $result = 
           &Apache::loncommon::start_page(undef,undef,\%options).
           $controls.
           $result.
           &Apache::loncommon::end_page();
                   } else {
                       $result = $controls.$result;
                   }
               }
  }   }
     }      }
   
Line 1689  ENDNOTFOUND Line 1809  ENDNOTFOUND
     unless ($env{'request.state'} eq 'published') {      unless ($env{'request.state'} eq 'published') {
  if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))   if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))
  {   {
     my ($edit_info, $add_to_onload, $add_to_onresize)=  
  &inserteditinfo($filecontents,$filetype);  
   
     my $displayfile=$request->uri;      my $displayfile=$request->uri;
     $displayfile=~s/^\/[^\/]*//;      $displayfile=~s/^\/[^\/]*//;
   
       my ($edit_info, $add_to_onload, $add_to_onresize)=
    &inserteditinfo($filecontents,$filetype,$displayfile);
   
     my %options =       my %options = 
  ('add_entries' =>   ('add_entries' =>
                    {'onresize' => $add_to_onresize,                     {'onresize' => $add_to_onresize,
Line 1709  ENDNOTFOUND Line 1830  ENDNOTFOUND
     my $start_page = &Apache::loncommon::start_page(undef,$js,      my $start_page = &Apache::loncommon::start_page(undef,$js,
     \%options);      \%options);
     $result=$start_page.      $result=$start_page.
  &Apache::lonxml::message_location().'<h3>'.   &Apache::lonxml::message_location().
  $displayfile.  
  '</h3>'.  
  $edit_info.   $edit_info.
  &Apache::loncommon::end_page();   &Apache::loncommon::end_page();
  }          }
     }      }
     if ($filetype eq 'html') { &writeallows($request->uri); }      if ($filetype eq 'html') { &writeallows($request->uri); }
           
Line 1732  sub display_title { Line 1851  sub display_title {
     $title = $env{'request.filename'};      $title = $env{'request.filename'};
     $title = substr($title, rindex($title, '/') + 1);      $title = substr($title, rindex($title, '/') + 1);
  }   }
  $result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA Construction Space';</script>";          $result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA "
                     .&mt('Construction Space')."';</script>";
     }      }
     return $result;      return $result;
 }  }
Line 1769  sub error { Line 1889  sub error {
   
     $errorcount++;      $errorcount++;
   
       $Apache::lonxml::internal_error=1;
   
     if (defined($Apache::inputtags::part)) {      if (defined($Apache::inputtags::part)) {
  if ( @Apache::inputtags::response ) {   if ( @Apache::inputtags::response ) {
     push(@errors,      push(@errors,
Line 1785  sub error { Line 1907  sub error {
     if ( &show_error_warn_msg() ) {      if ( &show_error_warn_msg() ) {
  # If printing in construction space, put the error inside <pre></pre>   # If printing in construction space, put the error inside <pre></pre>
  push(@Apache::lonxml::error_messages,   push(@Apache::lonxml::error_messages,
      $Apache::lonxml::warnings_error_header.       $Apache::lonxml::warnings_error_header
      "<b>ERROR:</b>".join("<br />\n",@errors)."<br />\n");               .'<div class="LC_error">'
                .'<b>'.&mt('ERROR:').' </b>'.join("<br />\n",@errors)
                ."</div>\n");
  $Apache::lonxml::warnings_error_header='';   $Apache::lonxml::warnings_error_header='';
     } else {      } else {
  my $errormsg;   my $errormsg;
  my ($symb)=&Apache::lonnet::symbread();   my ($symb)=&Apache::lonnet::symbread();
  if ( !$symb ) {   if ( !$symb ) {
     #public or browsers      #public or browsers
     $errormsg=&mt("An error occured while processing this resource. The author has been notified.");      $errormsg=&mt("An error occurred while processing this resource. The author has been notified.");
  }   }
  my $host=$Apache::lonnet::perlvar{'lonHostID'};   my $host=$Apache::lonnet::perlvar{'lonHostID'};
  push(@errors, "The error occurred on host <tt>$host</tt>");   push(@errors,
           &mt("The error occurred on host [_1]",
                "<tt>$host</tt>"));
   
  my $msg = join('<br />', @errors);   my $msg = join('<br />', @errors);
   
Line 1830  sub error { Line 1956  sub error {
  }   }
     }      }
     if ($env{'request.role.adv'}) {      if ($env{'request.role.adv'}) {
  $errormsg=&mt("An error occured while processing this resource. The course personnel ([_1]) and the author have been notified.",join(', ',@userlist));   $errormsg=&mt("An error occurred while processing this resource. The course personnel ([_1]) and the author have been notified.",join(', ',@userlist));
     } else {      } else {
  $errormsg=&mt("An error occured while processing this resource. The instructor has been notified.");   $errormsg=&mt("An error occurred while processing this resource. The instructor has been notified.");
     }      }
  }   }
  push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />");   push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />");
Line 1845  sub warning { Line 1971  sub warning {
     if ($env{'form.grade_target'} ne 'tex') {      if ($env{'form.grade_target'} ne 'tex') {
  if ( &show_error_warn_msg() ) {   if ( &show_error_warn_msg() ) {
     push(@Apache::lonxml::warning_messages,      push(@Apache::lonxml::warning_messages,
  $Apache::lonxml::warnings_error_header.   $Apache::lonxml::warnings_error_header
  "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n");                  .'<div class="LC_warning">'
                   .&mt('[_1]W[_2]ARNING','<b>','</b>')."<b>:</b> ".join('<br />',@_)
                   ."</div>\n"
                   );
     $Apache::lonxml::warnings_error_header='';      $Apache::lonxml::warnings_error_header='';
  }   }
     }      }
Line 2071  sub get_tag { Line 2200  sub get_tag {
     return $insertlist{"$tagnum.tag"};      return $insertlist{"$tagnum.tag"};
 }  }
   
   ############################################################
   #                                           PDF-FORM-METHODS
   
   =pod
   
   =item &print_pdf_radiobutton(fieldname, value,  text)
   
   Returns a latexline to generate a PDF-Form-Radiobutton with Text.
   
   $fieldname: PDF internalname of the radiobutton
   $value:     Value of radiobutton (read when dumping the PDF data)
   $text:      Text on the rightside of the radiobutton
   
   =cut
   sub print_pdf_radiobutton {
       my $result = '';
       my ($fieldName, $value, $text) = @_;
       $result .= '\begin{tabularx}{\textwidth}{p{0cm}X}'."\n";
       $result .= '\radioButton[\symbolchoice{circle}]{'. 
                  $fieldName.'}{10bp}{10bp}{'.$value.'}&'.$text."\n";
       $result .= '\end{tabularx}' . "\n";
       $result .= '\hspace{2mm}' . "\n";
       return $result;
   }
   
   
   =pod
   
   =item &print_pdf_start_combobox(fieldname)
   
   Starts a latexline to generate a PDF-Form-Combobox with text.
   
   $fieldname: PDF internal name of the Combobox
   
   =cut
   sub print_pdf_start_combobox {
       my $result;
       my ($fieldName) = @_;
       $result .= '\begin{tabularx}{\textwidth}{p{2.5cm}X}'."\n";
       $result .= '\comboBox[]{'.$fieldName.'}{2.3cm}{14bp}{'; # 
   
       return $result;
   }
   
   
   =pod
   
   =item &print_pdf_add_combobox_option(options)
   
   Generates a latexline to add Options to a PDF-Form-ComboBox.
   
   $option: PDF internal name of the Combobox-Option
   
   =cut
   sub print_pdf_add_combobox_option {
   
       my $result;
       my ($option) = @_;  
   
       $result .= '('.$option.')';
       
       return $result;
   }
   
   
   =pod
   
   =item &print_pdf_end_combobox(text) {
   
   Returns latexcode to end a PDF-Form-Combobox with text.
   
   =cut
   sub print_pdf_end_combobox {
       my $result;
       my ($text) = @_;
   
       $result .= '}&'.$text."\\\\\n";
       $result .= '\end{tabularx}' . "\n";
       $result .= '\hspace{2mm}' . "\n";
       return $result;
   }
   
   
   =pod
   
   =item &print_pdf_hiddenField(fieldname, user, domain)
   
   Returns a latexline to generate a PDF-Form-hiddenField with userdata.
   
   $fieldname label for hiddentextfield
   $user:    name of user
   $domain:  domain of user
   
   =cut
   sub print_pdf_hiddenfield {
       my $result;
       my ($fieldname, $user, $domain) = @_;
   
       $result .= '\textField [\F{\FHidden}\F{-\FPrint}\V{'.$domain.'&'.$user.'}]{'.$fieldname.'}{0in}{0in}'."\n";
   
       return $result;
   }
   
 1;  1;
 __END__  __END__
   
   

Removed from v.1.465  
changed lines
  Added in v.1.494


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