Diff for /loncom/xml/lonxml.pm between versions 1.451 and 1.460

version 1.451, 2007/08/17 21:24:21 version 1.460, 2007/09/12 10:58:18
Line 135  $Apache::lonxml::request=''; Line 135  $Apache::lonxml::request='';
 $Apache::lonxml::counter=1;  $Apache::lonxml::counter=1;
 $Apache::lonxml::counter_changed=0;  $Apache::lonxml::counter_changed=0;
   
   # A count of bubble lines needed for a set.. and a check on 
   # whether or not it is ever used too:
   
   $Apache::lonxml::bubble_line_counter         = 1;
   $Apache::lonxml::bubble_line_counter_changed = 0;
   
   
 #internal check on whether to look at style defs  #internal check on whether to look at style defs
 $Apache::lonxml::usestyle=1;  $Apache::lonxml::usestyle=1;
   
Line 358  sub xmlparse { Line 365  sub xmlparse {
  }   }
  &do_registered_ssi();   &do_registered_ssi();
  if ($Apache::lonxml::counter_changed) { &store_counter() }   if ($Apache::lonxml::counter_changed) { &store_counter() }
    if ($Apache::lonxml::bubble_line_counter_changed) {
        &store_bubble_counter();
    }
   
  &clean_safespace($safeeval);   &clean_safespace($safeeval);
   
Line 627  sub setup_globals { Line 637  sub setup_globals {
   $Apache::lonxml::default_homework_loaded=0;    $Apache::lonxml::default_homework_loaded=0;
   $Apache::lonxml::usestyle=1;    $Apache::lonxml::usestyle=1;
   &init_counter();    &init_counter();
     &init_bubble_counter();
   @Apache::lonxml::pwd=();    @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();    @Apache::lonxml::extlinks=();
   @script_var_displays=();    @script_var_displays=();
Line 800  sub init_safespace { Line 811  sub init_safespace {
   $safehole->wrap(\&Math::Random::random_set_seed_from_phrase,$safeeval,'&random_set_seed_from_phrase');    $safehole->wrap(\&Math::Random::random_set_seed_from_phrase,$safeeval,'&random_set_seed_from_phrase');
   $safehole->wrap(\&Math::Random::random_get_seed,$safeeval,'&random_get_seed');    $safehole->wrap(\&Math::Random::random_get_seed,$safeeval,'&random_get_seed');
   $safehole->wrap(\&Math::Random::random_set_seed,$safeeval,'&random_set_seed');    $safehole->wrap(\&Math::Random::random_set_seed,$safeeval,'&random_set_seed');
     $safehole->wrap(\&Apache::loncommon::languages,$safeeval,'&languages');
   $safehole->wrap(\&Apache::lonxml::error,$safeeval,'&LONCAPA_INTERNAL_ERROR');    $safehole->wrap(\&Apache::lonxml::error,$safeeval,'&LONCAPA_INTERNAL_ERROR');
   $safehole->wrap(\&Apache::lonxml::debug,$safeeval,'&LONCAPA_INTERNAL_DEBUG');    $safehole->wrap(\&Apache::lonxml::debug,$safeeval,'&LONCAPA_INTERNAL_DEBUG');
   $safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');    $safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');
Line 908  sub endredirection { Line 920  sub endredirection {
     }      }
     pop @Apache::lonxml::outputstack;      pop @Apache::lonxml::outputstack;
 }  }
   sub in_redirection {
       return ($Apache::lonxml::redirection > 0)
   }
   
 sub end_tag {  sub end_tag {
   my ($tagstack,$parstack,$token)=@_;    my ($tagstack,$parstack,$token)=@_;
Line 1007  sub get_all_text_unbalanced { Line 1022  sub get_all_text_unbalanced {
     return $result      return $result
 }  }
   
   
   =pod
   
   For bubble grading mode and exam bubble printing mode, the tracking of
   the current 'bubble line number' is stored in the %env element
   'form.bubble_line_counter', and is modifed and handled by 
   the following routines.
   
   The value of it is stored in $Apache:lonxml::bubble_line_counter when 
   live and stored back to env after done.
   
   =item &increment_bubble_counter($increment)
   
   Increments the bubble line counter by the optional value
   $increment (defaults to 1).
   
    'bad increments' are also treated as an increment of 1.
   ('bad' means <=0).
   
   =cut
   
   sub increment_bubble_counter {
       my ($increment) = @_;
       if (!defined($increment) || $increment le 0) {
    $increment = 1;
       }
       $Apache::lonxml::bubble_line_counter         += $increment;
       $Apache::lonxml::bubble_line_counter_changed  = 1;
   }
   =pod
       
   =item &init_bubble_counter
   
   Initialize the internal counter to the env. variable
   or 1 if we are inconstruction space, or if the env var
   is not defined.
   
   =cut
   
   sub init_bubble_counter {
       if ($env{'request.state'} eq 'construct') {
    $Apache::lonxml::bubble_line_counter         = 1;
    $Apache::lonxml::bubble_line_counter_changed = 1;
       } elsif (defined($env{'form.bubble_line_counter'})) {
    $Apache::lonxml::bubble_line_counter         =
                                      $env{'form.bubble_line_counter'};
    $Aapche::lonxml::bubble_line_counter_changed = 0;
       } else {
    $Apache::lonxml::bubble_line_counter         = 1;
    $Apache::lonxml::bubble_line_counter_changed = 1;
       }
   
   }
   
   =pod
   
   =item store_bubble_counter;
   
      Store the bubble line counter in its env var.  The changed flag
       is reset indicating the env is up to date with respect to the
       local variable.
   =cut
   
   sub store_bubble_counter {
       &Apache::lonnet::appenv(('form.bubble.counter' => 
               $Apache::lonxml::bubble_line_counter));
       $Apache::lonnet::bubble_line_counter_changed = 0;
   
       return '';
   }
   
   =pod
     
   The next set of subs allow a single level of save/restore for the
   bubble_line_counter.
   
   =cut
   
   {
       my $bubble_counter_state;
   
       sub clear_bubble_counter {
    undef($bubble_counter_state);
    &Apache::lonnet::delenv('form.bubble_line_counter');
    &Apache::lonxml::init_bubble_counter();
    &Apache::lonxml::store_bubble_counter();
       }
   
       sub remember_bubble_counter {
    &Apache::lonnet::transfer_profile_to_env(undef,undef, 1);
    $bubble_counter_state = $env{'form.bubble_line_counter'};
       }
   
       sub restore_bubble_counter {
    if (defined($bubble_counter_state)) {
       &Apache::lonnet::appenv(('form.bubble_line_counter' => 
                    $bubble_counter_state));
    }
       }
   
       sub get_bubble_counter {
    if ($Apache::lonxml::bubble_line_counter_changed) {
       &store_bubble_counter();
    }
    &Apache::lonnet::transfer_profile_to_env(undef, undef, 1);
    return $env{'form.bubble_line_counter'};
       }
   }
   
 =pod  =pod
   
 For bubble grading mode and exam bubble printing mode, the tracking of  For bubble grading mode and exam bubble printing mode, the tracking of
Line 1037  sub increment_counter { Line 1161  sub increment_counter {
   
 =pod  =pod
   
 =item &init_counter($increment);  =item &init_counter;
   
 Initialize the internal counter environment variable  Initialize the internal counter environment variable
   
Line 1081  sub store_counter { Line 1205  sub store_counter {
     &Apache::lonnet::appenv(('form.counter' => $state));      &Apache::lonnet::appenv(('form.counter' => $state));
  }   }
     }      }
   
     sub get_problem_counter {      sub get_problem_counter {
  if ($Apache::lonxml::counter_changed) { &store_counter() }   if ($Apache::lonxml::counter_changed) { &store_counter() }
  &Apache::lonnet::transfer_profile_to_env(undef,undef,1);   &Apache::lonnet::transfer_profile_to_env(undef,undef,1);
  return $env{'form.counter'};   return $env{'form.counter'};
     }      }
   
 }  }
   
 sub get_all_text {  sub get_all_text {
Line 1355  sub inserteditinfo { Line 1481  sub inserteditinfo {
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';  #      my $editheader='<a href="#editsection">Edit below</a><hr />';
       my $xml_help = '';        my $xml_help = '';
       my $initialize='';        my $initialize='';
       my $add_to_onload;        my $textarea_id = 'filecont';
       if ($filetype eq 'html') {        my ($add_to_onload, $add_to_onresize);
   my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();        my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
   $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
   if (!&Apache::lonhtmlcommon::htmlareablocked() &&        if ($filetype eq 'html' 
       &Apache::lonhtmlcommon::htmlareabrowser()) {    && (!&Apache::lonhtmlcommon::htmlareablocked() &&
       $initialize.=(<<FULLPAGE);        &Apache::lonhtmlcommon::htmlareabrowser())) {
     $textarea_id .= '_htmlarea';
     $initialize.=(<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 $addbuttons  $addbuttons
   
Line 1375  $addbuttons Line 1503  $addbuttons
    function () {     function () {
        HTMLArea._addEvents(editor._doc,         HTMLArea._addEvents(editor._doc,
    ["keypress","mousedown"], unClean);     ["keypress","mousedown"], unClean);
          editor._iframe.id = '$textarea_id';
          resize_textarea('$textarea_id','LC_aftertextarea');
    },300);     },300);
     }      }
 </script>  </script>
 FULLPAGE  FULLPAGE
           } else {        } else {
       $initialize.=(<<FULLPAGE);    $initialize.=(<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 $addbuttons  $addbuttons
     function initDocument() {      function initDocument() {
    resize_textarea('$textarea_id','LC_aftertextarea');
     }      }
 </script>  </script>
 FULLPAGE  FULLPAGE
   }        }
   $add_to_onload = 'initDocument();';  
         $add_to_onload = 'initDocument();';
         $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
   
         if ($filetype eq 'html') {
   $xml_help=&Apache::loncommon::helpLatexCheatsheet();    $xml_help=&Apache::loncommon::helpLatexCheatsheet();
       }        }
   
       my $cleanbut = '';        my $cleanbut = '';
   
       my $titledisplay=&display_title();        my $titledisplay=&display_title();
Line 1402  FULLPAGE Line 1538  FULLPAGE
       my $buttons=(<<BUTTONS);        my $buttons=(<<BUTTONS);
 $cleanbut  $cleanbut
 <input type="submit" name="discardview" accesskey="d"  value="$lt{'dv'}" />  <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="Undo" accesskey="u"  value="$lt{'un'}" /><hr />
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />  <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />  <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS  BUTTONS
Line 1418  $xml_help Line 1554  $xml_help
 <input type="hidden" name="editmode" value="$lt{'ed'}" />  <input type="hidden" name="editmode" value="$lt{'ed'}" />
 $buttons<br />  $buttons<br />
 <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>  <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
   <div id="LC_aftertextarea">
 <br />$buttons  <br />$buttons
 <br />  <br />
 </form>  
 $titledisplay  $titledisplay
   </div>
   </form>
 </body>  </body>
 ENDFOOTER  ENDFOOTER
       return ($editfooter,$add_to_onload);;        return ($editfooter,$add_to_onload,$add_to_onresize);;
 }  }
   
 sub get_target {  sub get_target {
Line 1520  ENDNOTFOUND Line 1658  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();
     $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,      $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
  '',%mystyle);   '',%mystyle);
     undef($Apache::lonhomework::parsing_a_task);      # .html files may contain <problem> or <Task> need to clean
       # up if it did
       &Apache::structuretags::reset_problem_globals();
       &Apache::lonhomework::finished_parsing();
     &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') {
    my $controls =
       ($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls()
                                              : '';
    my %options = ('bgcolor' => '#FFFFFF');
    $result = 
       &Apache::loncommon::start_page(undef,undef,\%options).
       $controls.
       $result.
       &Apache::loncommon::end_page();
       }
  }   }
     }      }
       
 #  #
 # Edit action? Insert editing commands  # Edit action? Insert editing commands
 #  #
     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)=      my ($edit_info, $add_to_onload, $add_to_onresize)=
  &inserteditinfo($filecontents,$filetype);   &inserteditinfo($filecontents,$filetype);
   
     my $displayfile=$request->uri;      my $displayfile=$request->uri;
     $displayfile=~s/^\/[^\/]*//;      $displayfile=~s/^\/[^\/]*//;
     my %options =       my %options = 
  ('add_entries' =>   ('add_entries' =>
     {'onload'   => $add_to_onload, });                     {'onresize' => $add_to_onresize,
       'onload'   => $add_to_onload,   });
   
     if ($env{'environment.remote'} ne 'off') {      if ($env{'environment.remote'} ne 'off') {
  $options{'bgcolor'}   = '#FFFFFF';   $options{'bgcolor'}   = '#FFFFFF';
  $options{'only_body'} = 1;   $options{'only_body'} = 1;
     }      }
     my $js = &Apache::edit::js_change_detection();      my $js =
    &Apache::edit::js_change_detection().
    &Apache::loncommon::resize_textarea_js();
     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.
Line 1607  sub show_error_warn_msg { Line 1764  sub show_error_warn_msg {
 }  }
   
 sub error {  sub error {
       my @errors = @_;
   
     $errorcount++;      $errorcount++;
   
       if (defined($Apache::inputtags::part)) {
    if ( @Apache::inputtags::response ) {
       push(@errors,
    &mt("This error occurred while processing response [_1] in part [_2]",
        $Apache::inputtags::response[-1],
        $Apache::inputtags::part));
    } else {
       push(@errors,
    &mt("This error occurred while processing part [_1]",
        $Apache::inputtags::part));
    }
       }
   
     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",@_)."<br />\n");       "<b>ERROR:</b>".join("<br />\n",@errors)."<br />\n");
  $Apache::lonxml::warnings_error_header='';   $Apache::lonxml::warnings_error_header='';
     } else {      } else {
  my $errormsg;   my $errormsg;
Line 1622  sub error { Line 1795  sub error {
     $errormsg=&mt("An error occured while processing this resource. The author has been notified.");      $errormsg=&mt("An error occured while processing this resource. The author has been notified.");
  }   }
  my $host=$Apache::lonnet::perlvar{'lonHostID'};   my $host=$Apache::lonnet::perlvar{'lonHostID'};
  my $msg = join('<br />',(@_,"The error occurred on host <tt>$host</tt>"));   push(@errors, "The error occurred on host <tt>$host</tt>");
   
    my $msg = join('<br />', @errors);
   
  #notify author   #notify author
  &Apache::lonmsg::author_res_msg($env{'request.filename'},$msg);   &Apache::lonmsg::author_res_msg($env{'request.filename'},$msg);
  #notify course   #notify course

Removed from v.1.451  
changed lines
  Added in v.1.460


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