chiark / gitweb /
Pass $dbh down through the stack, for better lifetime
[ypp-sc-tools.web-live.git] / yarrg / web / lookup
index 38d87d6352d9b96c4a82f059e171c1a336f0d176..f194fc5d56d2cb3f4a6a2e955dd0b84c3493cfc2 100755 (executable)
@@ -35,9 +35,9 @@
 
 </%doc>
 <%perl>
-my %a;
 my %ahtml;
 my @vars;
+my %styles;
 
 #---------- "mode" argument parsing and mode menu at top of page ----------
 
@@ -56,6 +56,7 @@ my @vars;
        }, {    Name => 'Query',
                Before => 'Query: ',
                Values => [     [ 'route', 'Trades for route' ],
+                               [ 'commod', 'Prices for commodity' ],
                                [ 'age', 'Data age' ] ]
        });
 
@@ -69,16 +70,34 @@ foreach my $var (@vars) {
                $val= [ $val, encode_entities($val) ];
        }
        if (exists $ARGS{$lname}) {
-               $a{$name}= $ARGS{$lname};
-               my @html= grep { $_->[0] eq $a{$name} } @{ $var->{Values} };
+               $styles{$name}= $ARGS{$lname};
+               my @html= grep { $_->[0] eq $styles{$name} }
+                               @{ $var->{Values} };
                $ahtml{$name}= @html==1 ? $html[0][1] : '???';
        } else {
-               $a{$name}= $var->{Values}[0][0];
+               $styles{$name}= $var->{Values}[0][0];
                $ahtml{$name}= $var->{Values}[0][1];
        }
 }
 
 </%perl>
+
+<%shared>
+my %baseqf;
+my %queryqf;
+</%shared>
+
+<%method formhidden>
+<%args>
+$ours
+</%args>
+% foreach my $n (keys %baseqf, keys %queryqf) {
+%      next if $ours->($n);
+%      my $v= exists $baseqf{$n} ? $baseqf{$n} : $queryqf{$n};
+<input type=hidden name=<% $n %> value="<% $v |h %>">
+% }
+</%method>
+
 <html><head><title><% ucfirst $ahtml{Query} %> - YARRG</title></head><body>
 
 <a href="<% $m->current_comp()->name() |u %>">YARRG</a> -
@@ -88,17 +107,15 @@ foreach my $var (@vars) {
 <p>
 <%perl>
 
-my %baseqf;
 foreach my $var (@vars) {
        my $lname= lc $var->{Name};
        next unless exists $ARGS{$lname};
        $baseqf{$lname}= $ARGS{$lname};
 }
 
-my %queryqf;
 foreach my $var (keys %ARGS) {
        next unless $var =~
-               m/^(?:routestring|islandid\d|archipelago\d|debug)$/;
+               m/^(?:(?:route|commod)string|islandid\d|archipelago\d|debug)$/;
        my $val= $ARGS{$var};
        next if $val eq 'none';
        $queryqf{$var}= $val;
@@ -114,7 +131,7 @@ foreach my $var (@vars) {
        my $name= $var->{Name};
        my $lname= lc $var->{Name};
        my $delim= $var->{Before};
-       my $canon= &{$var->{CmpCanon}}($a{$name});
+       my $canon= &{$var->{CmpCanon}}($styles{$name});
        my $cvalix= 0;
        foreach my $valr (@{ $var->{Values} }) {
                print $delim;  $delim= "\n|\n";
@@ -141,7 +158,17 @@ foreach my $var (@vars) {
 
 #---------- initial checks, startup, main entry form ----------
 
-dbw_connect($a{Ocean});
+die if $styles{Query} =~ m/[^a-z]/;
+
+my $mydbh;
+my $dbh= ($mydbh= dbw_connect($styles{Ocean}));
+
+my $results_head_done=0;
+my $someresults= sub {
+       return if $results_head_done;
+       $results_head_done=1;
+       print "\n<h1>Results</h1>\n";
+};
 
 </%perl>
 <%args>
@@ -150,17 +177,19 @@ $debug => 0
 
 <hr>
 
-%########### query `route' ##########
-% if ($a{Query} eq 'route') {
-
-<& query_route, %baseqf, %queryqf, quri => $quri, a => \%a &>
-
-% } elsif ($a{Query} eq 'age') {
-% ########### query `age' ##########
+<& "query_$styles{Query}", %baseqf, %queryqf, %styles,
+    quri => $quri, dbh => $dbh,
+    someresults => $someresults,
+    emsgokorprint => sub {
+       my ($emsg) = @_;
+       return 1 unless defined $emsg and length $emsg;
+       $someresults->();
+       print $emsg;
+       return 0;
+    }
+ &>
 
-<& query_age, %baseqf, %queryqf &>
-
-% } ########## end of `age' query ##########
+<p>
 
 %#---------- debugging and epilogue ----------
 
@@ -188,3 +217,8 @@ use HTML::Entities;
 use URI::Escape;
 
 </%init>
+<%cleanup>
+
+$mydbh->rollback() if $mydbh;
+
+</%cleanup>