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

version 1.460, 2007/09/12 10:58:18 version 1.466, 2007/10/22 09:27:50
Line 92  use Apache::loncacc(); Line 92  use Apache::loncacc();
 use Apache::lonmaxima();  use Apache::lonmaxima();
 use Apache::lonlocal;  use Apache::lonlocal;
   
 #==================================================   Main subroutine: xmlparse    #====================================   Main subroutine: xmlparse  
   
 #debugging control, to turn on debugging modify the correct handler  #debugging control, to turn on debugging modify the correct handler
   
 $Apache::lonxml::debug=0;  $Apache::lonxml::debug=0;
   
 # keeps count of the number of warnings and errors generated in a parse  # keeps count of the number of warnings and errors generated in a parse
Line 135  $Apache::lonxml::request=''; Line 137  $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   # Part counter hash.   In analysis mode, the
 # whether or not it is ever used too:  # problems can use this to record which parts increment the counter
   # by how much.  The counter subs will maintain this hash via
   # their optional part parameters.  Note that the assumption is that
   # analysis is done in one request and therefore it is not necessary to
   # save this information request-to-request.
   
 $Apache::lonxml::bubble_line_counter         = 1;  
 $Apache::lonxml::bubble_line_counter_changed = 0;  
   
   %Apache::lonxml::counters_per_part = ();
   
 #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 365  sub xmlparse { Line 370  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 629  sub callsub { Line 631  sub callsub {
   return $currentstring;    return $currentstring;
 }  }
   
   {
       my %state;
   
       sub init_state {
    undef(%state);
       }
       
       sub set_state {
    my ($key,$value) = @_;
    $state{$key} = $value;
    return $value;
       }
       sub get_state {
    my ($key) = @_;
    return $state{$key};
       }
   }
   
 sub setup_globals {  sub setup_globals {
   my ($request,$target)=@_;    my ($request,$target)=@_;
   $Apache::lonxml::request=$request;    $Apache::lonxml::request=$request;
Line 637  sub setup_globals { Line 657  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();    &clear_bubble_lines_for_part();
     &init_state();
   @Apache::lonxml::pwd=();    @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();    @Apache::lonxml::extlinks=();
   @script_var_displays=();    @script_var_displays=();
Line 1020  sub get_all_text_unbalanced { Line 1041  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;  #           bubble line counter management                              #
   #                                                                       #
    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
   
Line 1146  Increments the internal counter environm Line 1065  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.
     $response_id - The id of the response to record.  This
                  indicates whicn part of which  problem is being
                  counted.
   
 =cut  =cut
   
 sub increment_counter {  sub increment_counter {
     my ($increment) = @_;      my ($increment, $response_id) = @_;
     if (defined($increment) && $increment gt 0) {      if (!defined($increment) || $increment le 0) {
  $Apache::lonxml::counter+=$increment;   $increment = 1;
     } else {  
  $Apache::lonxml::counter++;  
     }      }
       $Apache::lonxml::counter += $increment;
   
       # If the caller supplied the response_id parameter, 
       # Maintain its counter.. creating if necessary.
   
       if(defined($response_id)) {
    if (!defined($Apache::lonxml::counters_per_part{$response_id})) {
       $Apache::lonxml::counters_per_part{$response_id} = 0;
    }
    $Apache::lonxml::counters_per_part{$response_id} += $increment;
    my $new_value = $Apache::lonxml::counters_per_part{$response_id};
       }
   
     $Apache::lonxml::counter_changed=1;      $Apache::lonxml::counter_changed=1;
 }  }
   
 =pod  =pod
   
 =item &init_counter;  =item &init_counter($increment);
   
 Initialize the internal counter environment variable  Initialize the internal counter environment variable
   
Line 1205  sub store_counter { Line 1139  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'};
     }      }
   }
   
   =pod
   
   =item  bubble_lines_for_part(response_id)
   
   Returns the number of lines required to get a response for
   $response_id (this is just $Apache::lonxml::counters_per_part{$response_id}
   
   =cut
   
   sub bubble_lines_for_part {
       my ($response_id) = @_;
   
       if (!defined($Apache::lonxml::counters_per_part{$response_id})) {
    return 0;
       } else {
    return $Apache::lonxml::counters_per_part{$response_id};
       }
   
   }
   
   =pod
   
   =item clear_bubble_lines_for_part
   
   Clears the hash of bubble lines per part.  If a caller
   needs to analyze several resources this should be called between
   resources to reset the hash for each problem being analyzed.
   
   =cut
   
   sub clear_bubble_lines_for_part {
       undef(%Apache::lonxml::counters_per_part);
 }  }
   
   =pod
   
   =item set_bubble_lines(response_id, value)
   
   If there is a problem part, that for whatever reason
   requires bubble lines that are not
   the same as the counter increment, it can call this sub during
   analysis to set its hash value explicitly.
   
   =cut
   
   sub set_bubble_lines {
       my ($response_id, $value) = @_;
   
       $Apache::lonxml::counters_per_part{$response_id} = $value;
   }
   
   =pod
   
   =item get_bubble_line_hash
   
   Returns the current bubble line hash.  This is assumed to 
   be small so we return a copy
   
   
   =cut
   
   sub get_bubble_line_hash {
       return %Apache::lonxml::counters_per_part;
   }
   
   
   #--------------------------------------------------
   
 sub get_all_text {  sub get_all_text {
     my($tag,$pars,$style)= @_;      my($tag,$pars,$style)= @_;
     my $gotfullstack=1;      my $gotfullstack=1;
Line 1483  sub inserteditinfo { Line 1483  sub inserteditinfo {
       my $initialize='';        my $initialize='';
       my $textarea_id = 'filecont';        my $textarea_id = 'filecont';
       my ($add_to_onload, $add_to_onresize);        my ($add_to_onload, $add_to_onresize);
       my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();  
       $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
       if ($filetype eq 'html'         if ($filetype eq 'html' 
   && (!&Apache::lonhtmlcommon::htmlareablocked() &&    && (!&Apache::lonhtmlcommon::htmlareablocked() &&
       &Apache::lonhtmlcommon::htmlareabrowser())) {        &Apache::lonhtmlcommon::htmlareabrowser())) {
   $textarea_id .= '_htmlarea';    $textarea_id .= '___Frame';
     my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
   $initialize.=(<<FULLPAGE);    $initialize.=(<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 $addbuttons  lonca
   
     HTMLArea.loadPlugin("FullPage");  
   
     function initDocument() {      function initDocument() {
  var editor=new HTMLArea("filecont",config);          var oFCKeditor = new FCKeditor('filecont');
  editor.registerPlugin(FullPage);   oFCKeditor.Config['CustomConfigurationsPath'] = '/fckeditor/loncapaconfig.js'  ;
  editor.generate();   oFCKeditor.Config['FullPage'] = true
  setTimeout(   oFCKeditor.Config['AutoDetectLanguage'] = false;
    function () {          oFCKeditor.Config['DefaultLanguage'] = "$lang";
        HTMLArea._addEvents(editor._doc,   oFCKeditor.ReplaceTextarea();
    ["keypress","mousedown"], unClean);      }
        editor._iframe.id = '$textarea_id';      function check_if_dirty(editor) {
        resize_textarea('$textarea_id','LC_aftertextarea');   if (editor.IsDirty()) {
    },300);      unClean();
    }
       }
       function FCKeditor_OnComplete(editor) {
    editor.Events.AttachEvent("OnSelectionChange",check_if_dirty);
    resize_textarea('$textarea_id','LC_aftertextarea');
     }      }
 </script>  </script>
 FULLPAGE  FULLPAGE
       } else {        } else {
   $initialize.=(<<FULLPAGE);    $initialize.=(<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 $addbuttons  
     function initDocument() {      function initDocument() {
  resize_textarea('$textarea_id','LC_aftertextarea');   resize_textarea('$textarea_id','LC_aftertextarea');
     }      }

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


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