[LON-CAPA-cvs] cvs: loncom /interface lonhelper.pm lonprintout.pm
foxr
foxr@source.lon-capa.org
Tue, 12 Jan 2010 10:40:01 -0000
This is a MIME encoded message
--foxr1263292801
Content-Type: text/plain
foxr Tue Jan 12 10:40:01 2010 EDT
Modified files:
/loncom/interface lonprintout.pm lonhelper.pm
Log:
Memorize the previous extra vskip values.
--foxr1263292801
Content-Type: text/plain
Content-Disposition: attachment; filename="foxr-20100112104001.txt"
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.568 loncom/interface/lonprintout.pm:1.569
--- loncom/interface/lonprintout.pm:1.568 Mon Dec 21 12:11:51 2009
+++ loncom/interface/lonprintout.pm Tue Jan 12 10:40:01 2010
@@ -2,7 +2,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.568 2009/12/21 12:11:51 foxr Exp $
+# $Id: lonprintout.pm,v 1.569 2010/01/12 10:40:01 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1757,7 +1757,7 @@
#
#
# use Data::Dumper;
-#sub dump_helper_vars {
+# sub dump_helper_vars {
# my ($helper) = @_;
# my $helpervars = Dumper($helper->{'VARS'});
# &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");
@@ -1772,6 +1772,107 @@
}
return %page_breaks;
}
+#
+# Returns text to insert for any extra vskip prior to the resource.
+# Parameters:
+# helper - Reference to the helper object driving the printout.
+# resource - Identifies the resource about to be printed.
+#
+# This is done as follows:
+# POSSIBLE_RESOURCES has the list of possible resources.
+# EXTRASPACE has the list of extra space values.
+#
+# The resource is found in the POSSIBLE_RESOURCES to get the index
+# of the EXTRASPACE value.
+#
+# In order to speed this up for lengthy printouts, the first time,
+# POSSIBLE_RESOURCES is turned into a look up hash and
+# EXTRASPACE is turned into an array.
+#
+
+
+my %possible_resources;
+my @extraspace;
+my $skips_loaded = 0;
+
+# Function to load the skips hash and array
+
+sub load_skips {
+
+ my ($helper) = @_;
+
+ # If this is the first time, unrap the resources and extra spaces:
+
+ if (!$skips_loaded) {
+ @extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));
+ my @resource_list = (split(/\|\|\|/, $helper->{'VARS'}->{'POSSIBLE_RESOURCES'}));
+ my $i = 0;
+ foreach my $resource (@resource_list) {
+ $possible_resources{$resource} = $i;
+ $i++;
+ }
+ $skips_loaded = 1;
+ }
+}
+
+sub get_extra_vspaces {
+ my ($helper, $resource) = @_;
+
+ &load_skips($helper);
+
+ # Lookup the resource in the possible resources hash.. that is the index
+ # into the extraspace array that gives us either an empty string or
+ # the number of mm to skip:
+
+ my $index = $possible_resources{$resource};
+ my $skip = $extraspace[$index];
+
+ my $result = '';
+ if ($skip ne '') {
+ $result = '\vskip '.$skip.' mm';
+ }
+ return $result;
+
+
+}
+
+#
+# The resource chooser part of the helper needs more than just
+# the value of the extraspaces var to recover the value into a text
+# field option. This sub produces the required format for the saved var:
+# specifically
+# ||| separated fields of the form resourcename=value
+#
+# Parameters:
+# $helper - Refers to the helper we are configuring
+# Implicit input:
+# $helper->{'VARS'}->{'EXTRASPACE'} - the spaces helper var has the text field
+# value.
+# $helper->{'VARS'}->{'POSSIBLE_RESOURCES'} - has the list of resources. |||
+# separated of course.
+# Implicit outputs:
+# $env{'form.extrapsace'}
+#
+sub set_form_extraspace {
+ my ($helper) = @_;
+
+ # the most convenient way to do this is to drive from the skips arrays/hash.
+ # may not be the fastest, but this is once per print request so it's not so
+ # speed critical:
+
+ &load_skips($helper);
+
+ my $result = '';
+
+ foreach my $resource (keys(%possible_resources)) {
+ my $vskip = $extraspace[$possible_resources{$resource}];
+ $result .= $resource .'=' . $vskip . '|||';
+ }
+
+ $env{'form.extraspace'} = $result;
+ return $result;
+
+}
# Output a sequence (recursively if neeed)
# from construction space.
@@ -1943,11 +2044,12 @@
# indexed by symb and contains 1's for each break.
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'};
+ &set_form_extraspace($helper);
$env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'};
&Apache::loncommon::store_course_settings('print',
{'pagebreaks' => 'scalar',
+ 'extraspace' => 'scalar',
'lastprinttype' => 'scalar'});
-
my %page_breaks = &get_page_breaks($helper);
my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
@@ -2211,6 +2313,7 @@
$result.="\\newpage\n";
}
}
+ $result .= &get_extra_vspaces($helper, $master_seq[$i]);
my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
$urlp=&Apache::lonnet::clutter($urlp);
$form{'symb'}=$master_seq[$i];
@@ -2812,6 +2915,7 @@
$current_output.= "\\newpage\n";
}
}
+ $current_output .= &get_extra_vspaces($helper, $curresline);
$i++;
if ( !($type eq 'problems' &&
@@ -3059,19 +3163,20 @@
$helper->declareVar('PRINT_TYPE');
$helper->declareVar("showallfoils");
$helper->declareVar("STUDENTS");
-
+ $helper->declareVar("EXTRASPACE");
- # The page breaks can get loaded initially from the course environment:
+ # The page breaks and extra spaces
+ # can get loaded initially from the course environment:
# But we only do this in the initial state so that they are allowed to change.
#
- # $helper->{VARS}->{FINISHPAGE} = '';
&Apache::loncommon::restore_course_settings('print',
{'pagebreaks' => 'scalar',
+ 'extraspace' => 'scalar',
'lastprinttype' => 'scalar'});
# This will persistently load in the data we want from the
@@ -3081,10 +3186,12 @@
if (!defined ($env{"form.CURRENT_STATE"})) {
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
} else {
my $state = $env{"form.CURRENT_STATE"};
if ($state eq "START") {
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
}
}
@@ -3203,7 +3310,12 @@
if ($perm{'pav'}) {
$start_new_option =
"<option text='".&mt('Start new page<br />before selected').
- "' variable='FINISHPAGE' />";
+ "' variable='FINISHPAGE' />".
+ "<option text='".&mt('Extra space(mm)<br />before selected').
+ "' variable='EXTRASPACE' type='text' />" .
+ "<option " .
+ "' variable='POSSIBLE_RESOURCES' type='hidden' />";
+
}
# If not construction space user can print the components of a page:
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.176 loncom/interface/lonhelper.pm:1.177
--- loncom/interface/lonhelper.pm:1.176 Mon Jun 15 11:18:11 2009
+++ loncom/interface/lonhelper.pm Tue Jan 12 10:40:01 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# .helper XML handler to implement the LON-CAPA helper
#
-# $Id: lonhelper.pm,v 1.176 2009/06/15 11:18:11 bisitz Exp $
+# $Id: lonhelper.pm,v 1.177 2010/01/12 10:40:01 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2195,20 +2195,42 @@
if (!defined($paramHash->{OPTION_TEXTS})) {
$paramHash->{OPTION_TEXTS} = [ ];
$paramHash->{OPTION_VARS} = [ ];
+ $paramHash->{OPTION_TYPES} = [ ];
}
+ # We can have an attribute: type which can have the
+ # values: "checkbox" or "text" which defaults to
+ # checkbox allowing us to change the type of input
+ # for the option:
+ #
+ my $input_widget_type = 'checkbox';
+ if(defined($token->[2]{'type'})) {
+ my $widget_type = $token->[2]{'type'};
+ if ($widget_type eq 'text') { # only accept legal alternatives
+ $input_widget_type = $widget_type; # Illegals are checks.
+ } elsif ($widget_type eq 'hidden') {
+ $input_widget_type = $widget_type;
+ }
+ }
+
# OPTION_TEXTS is a list of the text attribute
# values used to create column headings.
# OPTION_VARS is a list of the variable names, used to create the checkbox
# inputs.
+ # OPTION_TYPES is a list of the option types:
+ #
# We're ok with empty elements. as place holders
# Although the 'variable' element should really exist.
#
+
my $option_texts = $paramHash->{OPTION_TEXTS};
my $option_vars = $paramHash->{OPTION_VARS};
+ my $option_types = $paramHash->{OPTION_TYPES};
push(@$option_texts, $token->[2]{'text'});
push(@$option_vars, $token->[2]{'variable'});
+ push(@$option_types, $input_widget_type);
+
# Need to create and declare the option variables as well to make them
# persistent.
@@ -2284,6 +2306,7 @@
my $multichoice = $self->{'multichoice'};
my $option_vars = $self->{OPTION_VARS};
my $option_texts = $self->{OPTION_TEXTS};
+ my $option_types = $self->{OPTION_TYPES};
my $addparts = $self->{'addparts'};
my $headings_done = 0;
@@ -2342,17 +2365,50 @@
my $resource_name =
HTML::Entities::encode($raw_name,"<>&\"'");
if($option_vars) {
+ my $option_num = 0;
foreach my $option_var (@$option_vars) {
+ my $option_type = $option_types->[$option_num];
+ $option_num++;
my $var_value = "\|\|\|" . $helper->{VARS}->{$option_var} .
"\|\|\|";
my $checked ="";
if($var_value =~ /\Q|||$raw_name|||\E/) {
$checked = "checked='checked'";
}
- $col .=
- "<td align='center'><input type='checkbox' name ='$option_var".
- "_forminput' value='".
- $resource_name . "' $checked /> </td>";
+ if ($option_type eq 'text') {
+ #
+ # For text's the variable value is a ||| separated set of
+ # resource_name=value
+ #
+ my @values = split(/\|\|\|/, $helper->{VARS}->{$option_var});
+
+ # Normal practice would be to toss this in a hash but
+ # the only thing that saves is the compare in the loop
+ # below and for all but one case we'll break out of the loop
+ # before it completes.
+
+ my $text_value = ''; # In case there's no match.
+ foreach my $value (@values) {
+ my ($res, $skip) = split(/=/, $value);
+ if($res eq $resource_name) {
+ $text_value = $skip;
+ last;
+ }
+ }
+
+ $col .=
+ "<td align='center'><input type='text' name ='$option_var".
+ "_forminput' value='".$text_value."' size='5' /> </td>";
+ } elsif ($option_type eq 'hidden') {
+ $col .= "<td align='center'><input type='hidden' name ='$option_var".
+ "_forminput' value='".
+ $resource_name . "'/> </td>";
+ } else {
+ $col .=
+ "<td align='center'><input type=$option_type name ='$option_var".
+ "_forminput' value='".
+ $resource_name . "' $checked /> </td>";
+ }
}
}
--foxr1263292801--