[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Thu, 20 Feb 2003 22:11:42 -0000


This is a MIME encoded message

--bowersj21045779102
Content-Type: text/plain

bowersj2		Thu Feb 20 17:11:42 2003 EDT

  Modified files:              
    /loncom/interface	lonprintout.pm 
  Log:
  More work on the printout wizard. Deciding to just pass Alex all the data
  I'm collecting and let him sort it out, rather then try to go through
  the code he uses to generate the printout.
  
  Still needs a bit more before it's done. 
  
  
--bowersj21045779102
Content-Type: text/plain
Content-Disposition: attachment; filename="bowersj2-20030220171142.txt"

Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.118 loncom/interface/lonprintout.pm:1.119
--- loncom/interface/lonprintout.pm:1.118	Wed Feb 19 10:14:54 2003
+++ loncom/interface/lonprintout.pm	Thu Feb 20 17:11:42 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.118 2003/02/19 15:14:54 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.119 2003/02/20 22:11:42 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -238,6 +238,7 @@
     $subdirtoprint =~ s/\/[^\/]+$//;
     my @list_of_files = ();
     my @content_directory = ();
+    $r->print("Subdir: " . $subdirtoprint . "<br />");
     if ($subdirtoprint =~ m|/home/([^/]+)/public_html|) {
 	#localmachine CSTR space
 	my $user=$1;
@@ -1216,9 +1217,6 @@
 
     my $r = shift;
 
-    # not sure where the form.* was getting processed.
-    Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING});
-
     # A hook for me to work without disturbing Alex.
     if ($ENV{'form.jeremy'}) {
         printWizard($r);
@@ -1310,29 +1308,40 @@
 
     my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
 
-    my $wizard = Apache::lonwizard->new("Printing Wizard");
+    my $wizard = Apache::lonwizard->new("Printing Wizard", $ENV{QUERY_STRING});
     # PRINT_TYPE: What the user wants to print (current docs,
     #  whole sequence, etc.
-    $wizard->declareVars(['PRINT_TYPE']);
+    $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'postdata', 'url',
+                          'symb', 'RESOURCES', 'FILES']);
+
+    # Extract map
+    my $symb = $wizard->{VARS}->{'symb'};
+    my ($map, $id, $url) = split(/__/, $symb);
+
+    my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.url'});
+
+    # "Delete everything after the last slash."
+    $subdir =~ s|/[^/]+$||;
+
+    # This really ought to be in some repository in loncommon or
+    # something where it can just be grabbed.
+    my $problemFilter = sub { 
+        my $name = shift;
+        return $name =~ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
+    };
 
-    my $subdir = $ENV{'form.postdata'};
-    $subdir =~ s|http://[^/]+||;
-    $subdir =~ m/\/([^\/]+)$/;
-    $subdir =~ s/\Q$1\E//;
-
-    # This code also shows up above... which is prefered? Is one
-    # right for this context?
-    #my $subdir = &Apache::lonnet::filelocation("",$ENV{'form.url'});
-    #$subdir =~ s/\/[^\/]+$//;
-    
     Apache::lonwizard::switch_state->new($wizard, "START", "Selecting Resources to Print", "PRINT_TYPE", [
            ['current_document', "<b>$resourceTitle</b> (exactly what was on the screen)", 'CHOOSE_FORMAT'],
-           ['map_problems', "Problems from <b>$sequenceTitle</b>", 'CHOOSE_FORMAT'],
-           ['map_problems_pages', "All of <b>$sequenceTitle</b>", 'CHOOSE_FORMAT'],
+           ['map_problems', "Problems from <b>$sequenceTitle</b>", 'CHOOSE_PROBLEMS'],
+           ['map_problems_pages', "Problems and pages from <b>$sequenceTitle</b>", 'CHOOSE_PROBLEMS_HTML'],
            ['problems_for_students', "Problems from <b>$sequenceTitle</b> for selected students", 'CHOOSE_FORMAT'],
-           ['problems_from_directory', "Problems from <b>$subdir</b>", 'CHOOSE_FORMAT'] ],
+           ['problems_from_directory', "Problems from <b>$subdir</b>", 'CHOOSE_FROM_SUBDIR'] ],
            "What do you want to print?");
-    
+    Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS", 'Select Problems', "Select problems to print from <b>$sequenceTitle</b>:", '', 'CHOOSE_FORMAT', 'RESOURCES', sub {my $res = shift; return $res->is_problem()}, undef, $map);
+    Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS_HTML", 'Select Resources', "Select resources to print from <b>$sequenceTitle</b>:", '', "CHOOSE_FORMAT", 'RESOURCES', sub {my $res = shift; return !$res->is_map()}, undef, $map);
+    Apache::lonwizard::choose_files->new($wizard, "CHOOSE_FROM_SUBDIR", "Select Files","Select problems you wish to print from <b>$subdir</b>:", '', 'CHOOSE_FORMAT', 'FILES', $subdir, $problemFilter);
+    Apache::lonprintout::page_format_state->new($wizard, "CHOOSE_FORMAT", "Page Format", "FORMAT", "FINAL");
+
     $r->print($wizard->display());
 
     untie %hash;
@@ -1343,5 +1352,153 @@
 
 
 1;
+
+package Apache::lonprintout::page_format_state;
+
+=pod
+
+=head1 Wizard state: page_format_state
+
+See lonwizard.pm documentation for discussion of the wizard framework.
+
+Apache::lonprintout::page_format_state is a state that gives the user an opportunity to select the page layout they wish to print with: Number of columns, portrait/landscape, and paper size. If you want to change the paper size choices, change the @paperSize array contents in this package.
+
+=over 4
+
+=item * B<new>(parentLonWizReference, stateName, stateTitle, varName, nextState): varName is where the print information will be stored in the format FIXME. nextState is the state that follows this one.
+
+=back
+
+=cut
+
+use Apache::lonwizard;
+
+no strict;
+@ISA = ("Apache::lonwizard::state");
+use strict;
+
+my $maxColumns = 2;
+my @paperSize = ("Letter [8 1/2x11 in]", "Legal [8 1/2x14 in]", 
+                 "Ledger/Tabloid [11x17 in]", "Executive [7 1/2x10 in]",
+                 "A2 [420x594 mm]", "A3 [297x420 mm]", "A4 [210x297 mm]", 
+                 "A5 [148x210 mm]", "A6 [105x148 mm]" );
+
+# Tentative format: Orientation (L = Landscape, P = portrait) | Colnum |
+#                   Paper type
+
+sub new { 
+    my $proto = shift;
+    my $class = ref($proto) || $proto;
+    my $self = bless $proto->SUPER::new(shift, shift, shift);
+
+    $self->{VAR_NAME} = shift;
+    $self->{NEXT_STATE} = shift;
+    return $self;
+}
+
+sub postprocess {
+    my $self = shift;
+    my $wizard = $self->{WIZARD};
+
+    # We have to manually collect the value and store it in the 
+    # wizard variable
+    my $result = $ENV{'form.' . $self->{VAR_NAME} . '.layout'} . '|';
+    $result .= $ENV{'form.' . $self->{VAR_NAME} . '.cols'} . '|';
+    $result .= $ENV{'form.' . $self->{VAR_NAME} . '.paper'};
+    
+    $wizard->setVar($self->{VAR_NAME}, $result);
+    $wizard->changeState($self->{NEXT_STATE});
+}
+
+sub render {
+    my $self = shift;
+    my $wizard = $self->{WIZARD};
+    my $result = '';
+    my $var = $self->{VAR_NAME};
+    my $curVal = $self->{WIZARD}->{VARS}->{$var};
+
+    my ($layout, $cols, $paper) = split(/\|/, $curVal);
+
+    my $landscapeChecked = ($layout ne "L")? '' : 'checked ';
+    my $portraitChecked = $landscapeChecked ? '' : 'checked ';
+
+    $result .= <<STATEHTML;
+
+<p>How should the printing be formatted?</p>
+<table cellpadding="3">
+  <tr>
+    <td align="center"><b>Layout</b></td>
+    <td align="center"><b>Columns</b></td>
+    <td align="center"><b>Paper type</b></td>
+  </tr>
+  <tr>
+    <td>
+      <input type="radio" name="${var}.layout" value="L" $landscapeChecked> Landscape<br />
+      <input type="radio" name="${var}.layout" value="P" $portraitChecked> Portrait
+    </td>
+    <td>
+      <select name="${var}.cols">
+STATEHTML
+
+    my $i;
+    for ($i = 1; $i <= $maxColumns; $i++) {
+        if ($i == $cols) {
+            $result .= "<option value='$i' selected>$i</option>\n";
+        } else {
+            $result .= "<option value='$i'>$i</option>\n";
+        }
+    }
+
+    $result .= "</select></td><td>\n";
+    $result .= "<select name='${var}.paper'>\n";
+
+    $i = 0;
+    foreach (@paperSize) {
+        if ($paper == $i) {
+            $result .= "<option selected value='$i'>" . $paperSize[$i] . "</option>\n";
+        } else {
+            $result .= "<option value='$i'>" . $paperSize[$i] . "</option>\n";
+        }
+        $i++;
+    }
+
+    $result .= "</select></td></tr></table>";
+    return $result;
+}
+
+1;
+
+package Apache::lonprintout::printwizfinal;
+
+# This is the final state for the print wizard. It is not generally useful,
+# so it is not perldoc'ed.
+
+no strict;
+@ISA = ('Apache::lonwizard::state');
+use strict;
+
+sub new {
+    my $proto = shift;
+    my $class = ref($proto) || $proto;
+    my $self = bless $proto->SUPER::new(shift, shift, shift);
+
+    # All other variables come from the wizard.
+}
+
+sub render {
+    my $self = shift;
+    my $wizard = $self->{WIZARD};
+    my $wizvars = $wizard->{VARS};
+
+    my $result = '';
+
+    $result .= "<form method='get' action='/adm/printout'>\n";
+
+    # Nope, I'm lost.
+    $result .= "</form>";
+}
+
+1;
+
 __END__
 

--bowersj21045779102--