[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 {