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