chiark / gitweb /
Support Specific Destination route search
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 22 Nov 2009 13:31:29 +0000 (13:31 +0000)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 22 Nov 2009 13:51:50 +0000 (13:51 +0000)
yarrg/TODO
yarrg/web/check_deststring [new file with mode: 0644]
yarrg/web/lookup
yarrg/web/query_routesearch

index 3dd23be..3b0e919 100644 (file)
@@ -16,7 +16,6 @@ WEBSITE
 initial/final stocks feature
 
 query_routesearch should show capital for each voyage
-query_routesearch should support ending in specific place(s)
 
 
 USEFUL WEBSITE UI SUGGESTIONS
@@ -27,3 +26,10 @@ be typed.  Put % sign in HTML after the entry box ?
 
 15:59 <fivemack> font size=-3 for the license info at the bottom
 would also be good
+
+
+USER GUIDE
+----------
+
+Document "Minimum trade value"
+Document "Specific destination" (routesearch)
diff --git a/yarrg/web/check_deststring b/yarrg/web/check_deststring
new file mode 100644 (file)
index 0000000..1fd8594
--- /dev/null
@@ -0,0 +1,58 @@
+<%doc>
+
+ This is part of the YARRG website.  YARRG is a tool and website
+ for assisting players of Yohoho Puzzle Pirates.
+
+ Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ Copyright (C) 2009 Clare Boothby
+
+  YARRG's client code etc. is covered by the ordinary GNU GPL (v3 or later).
+  The YARRG website is covered by the GNU Affero GPL v3 or later, which
+   basically means that every installation of the website will let you
+   download the source.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+ are used without permission.  This program is not endorsed or
+ sponsored by Three Rings.
+
+
+ This Mason component simply defines how to look up a single island name.
+ It is called by qtextstring.
+
+</%doc>
+
+<%attr>
+multiple => 0
+maxambig => 5
+</%attr>
+
+<%method sqlstmt>
+               SELECT islandname,islandid,NULL
+                       FROM islands WHERE islandname LIKE ?
+</%method>
+
+<%method nomatch>
+  no island matches <% $ARGS{specq} %>
+</%method>
+
+<%method ambiguous>
+  ambiguous island <% $ARGS{specq} %>,
+  could be <% $ARGS{couldbe} |h %>
+</%method>
+
+<%method manyambig>
+  &nbsp;
+</%method>
index b99cf0a..15c5206 100755 (executable)
@@ -87,6 +87,7 @@ my %styles;
                Before => 'Type of routes to search for: ',
                Values => [     [ 0, 'Open-ended' ],
                                [ 1, 'Circular' ],
+                               [ 2, 'Specific destination' ],
                        ],
                QuerySpecific => 1,
        });
@@ -166,7 +167,7 @@ foreach my $var (@vars) {
 foreach my $var (keys %ARGS) {
        next unless $var =~
                m/^(?: (?:route|commod|capacity|capital|minprofit
-                        |island)string |
+                        |island|dest)string |
                        lossperleague | distance |
                        commodid |
                        islandid \d |
index 3f65fc3..f8a697a 100644 (file)
@@ -57,6 +57,8 @@ my $emsg;
 my @warningfs;
 my @islandids;
 
+my $destspec;
+
 my $maxmaxdist=35;
 my $maxcpu=90;
 my $concur_lim=5;
@@ -84,6 +86,30 @@ This feature is not available from the "drop down menus" interface.
        islandids_r => \@islandids, archipelagoes_r => undef
  &>
 
+% my $searchtype= $ARGS{RouteSearchType};
+% if ($searchtype == 0) {
+%      $destspec= 'any';
+% } elsif ($searchtype == 1) {
+%      $destspec= 'circ';
+% } elsif ($searchtype == 2) {
+
+Destination (one island only):
+<& qtextstring, qa => $qa, dbh => $dbh, emsgstore => \$emsg,
+    thingstring => 'deststring',
+    prefix => 'ds', boxopts => 'size=40',
+    onresults => sub {
+print STDERR "ONRESULTS @_\n";
+       return unless @_;
+       my ($canonname, $island, $arch) = @{ $_[0] };
+       die unless defined $island;
+       $destspec= $island;
+    }
+ &>
+
+% } else {
+%      die "$destspec ?";
+% }
+
 <&| enter_advrouteopts, qa=>$qa, dbh=>$dbh, routeparams=>$routeparams &>
 <td>
 &nbsp;
@@ -116,6 +142,7 @@ print("</div>"), return
      unless $emsgokorprint->($emsg)
        and @islandids
        and $allargs->{'submit'}
+       and defined $destspec
        and (defined $routeparams->{MaxMass} or
             defined $routeparams->{MaxVolume});
 
@@ -149,7 +176,7 @@ push @rsargs, defined $routeparams->{LossPerLeaguePct}
        ? $routeparams->{LossPerLeaguePct}*0.01 : 1e-9;
 push @rsargs, 0; #$routeparams->{MinProfit};
 push @rsargs, 'search',$maxdist, $maxcountea,$maxcountea;
-push @rsargs, $ARGS{RouteSearchType} ? 'circ' : 'any';
+push @rsargs, $destspec;
 push @rsargs, @islandids;
 
 m/[^-.0-9a-zA-Z]/ and die "$_ $& ?" foreach @rsargs;