[LON-CAPA-cvs] cvs: loncom /xml lonxml.pm

foxr lon-capa-cvs-allow@mail.lon-capa.org
Wed, 12 Sep 2007 10:58:19 -0000


foxr		Wed Sep 12 06:58:19 2007 EDT

  Modified files:              
    /loncom/xml	lonxml.pm 
  Log:
  BZ4074  - Start moving the book-keeping for the number of bubble lines
  in a problem into lonxml.pm.. to be invoked by the various problem types
  
  
Index: loncom/xml/lonxml.pm
diff -u loncom/xml/lonxml.pm:1.459 loncom/xml/lonxml.pm:1.460
--- loncom/xml/lonxml.pm:1.459	Tue Sep 11 19:53:13 2007
+++ loncom/xml/lonxml.pm	Wed Sep 12 06:58:18 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.459 2007/09/11 23:53:13 albertel Exp $
+# $Id: lonxml.pm,v 1.460 2007/09/12 10:58:18 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -135,6 +135,13 @@
 $Apache::lonxml::counter=1;
 $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
 $Apache::lonxml::usestyle=1;
 
@@ -358,6 +365,9 @@
  }
  &do_registered_ssi();
  if ($Apache::lonxml::counter_changed) { &store_counter() }
+ if ($Apache::lonxml::bubble_line_counter_changed) {
+     &store_bubble_counter();
+ }
 
  &clean_safespace($safeeval);
 
@@ -627,6 +637,7 @@
   $Apache::lonxml::default_homework_loaded=0;
   $Apache::lonxml::usestyle=1;
   &init_counter();
+  &init_bubble_counter();
   @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();
   @script_var_displays=();
@@ -1011,6 +1022,115 @@
     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
 
 For bubble grading mode and exam bubble printing mode, the tracking of
@@ -1041,7 +1161,7 @@
 
 =pod
 
-=item &init_counter($increment);
+=item &init_counter;
 
 Initialize the internal counter environment variable
 
@@ -1085,11 +1205,13 @@
 	    &Apache::lonnet::appenv(('form.counter' => $state));
 	}
     }
+
     sub get_problem_counter {
 	if ($Apache::lonxml::counter_changed) { &store_counter() }
 	&Apache::lonnet::transfer_profile_to_env(undef,undef,1);
 	return $env{'form.counter'};
     }
+
 }
 
 sub get_all_text {