<%args>
$quri
$dbh
+$baseqf
$queryqf
$islandstring => '';
$capacitystring => '';
$lossperleague => '';
$capitalstring => '';
+$minprofitstring => '';
$distance => '';
$prselector
$someresults
my @warningfs;
my @islandids;
-my $maxmaxdist=35;
+my $destspec;
+
+my @maxmaxdist= qw(100 100 100);
my $maxcpu=90;
my $concur_lim=5;
</%perl>
+<div class="query">
<h1>Find most profitable routes and trades</h1>
+% my $searchtype= $ARGS{RouteSearchType};
+% my $searchtype_show;
+%
% if ($qa->{Dropdowns}) {
This feature is not available from the "drop down menus" interface.
% } else {
islandids_r => \@islandids, archipelagoes_r => undef
&>
+% if ($searchtype == 0) {
+% $destspec= 'any';
+% $searchtype_show= 'open-ended';
+% } elsif ($searchtype == 1) {
+% $destspec= 'circ';
+% $searchtype_show= 'circular';
+% } elsif ($searchtype == 2) {
+% $searchtype_show= 'specific-destination';
+
+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>
<td>
Maximum distance:
- <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ml',
- thingstring => 'distance', emsgstore => \$emsg,
- onresults => sub { ($maxdist)= @_; } &>
- size=10
- </&>
+ <& qtextstring, qa => $qa, dbh => $dbh, prefix => 'ml',
+ thingstring => 'distance', emsgstore => \$emsg, boxopts => 'size=10',
+ onresults => sub { ($maxdist)= @_; }
+ &>
</&>
<input type=submit name=submit value="Search">
-% my $ours= sub { $_[0] =~ m/^lossperleague|^islandstring|^capitalstring|^capacitystring|^distance/; };
+% my $ours= sub { $_[0] =~ m/^lossperleague|^islandstring|^deststring|^capitalstring|^capacitystring|^minprofitstring|^distance/; };
<& "lookup:formhidden", ours => $ours &>
% }
</form>
+</div>
+<div class="results">
<%perl>
+my $maxmaxdist= $maxmaxdist[$searchtype];
if (!$emsg && $maxdist > $maxmaxdist) {
- $emsg= "Searching for routes of more than $maxmaxdist leagues is not".
- " supported, sorry.";
+ $emsg= "Searching for $searchtype_show routes".
+ " of more than $maxmaxdist leagues is not".
+ " supported, sorry.";
}
-$emsgokorprint->($emsg) or return;
-@islandids or return;
-$allargs->{'submit'} or return;
-defined $routeparams->{MaxMass} or defined $routeparams->{MaxVolume} or return;
+print("</div>"), return
+ unless $emsgokorprint->($emsg)
+ and @islandids
+ and $allargs->{'submit'}
+ and defined $destspec
+ and (defined $routeparams->{MaxMass} or
+ defined $routeparams->{MaxVolume});
#---------- prepare island names ----------
}
push @rsargs, defined $routeparams->{LossPerLeaguePct}
? $routeparams->{LossPerLeaguePct}*0.01 : 1e-9;
-push @rsargs, '0';
+push @rsargs, $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;
for ($i=1; $i < @i-1; $i++) {
push @{ $item->{Vias} }, $i[$i];
}
- my %linkqf= %$queryqf;
+ my %linkqf= (%$baseqf, %$queryqf);
delete $linkqf{'query'};
$linkqf{'routestring'}= join ', ', @fi;
$item->{Url}= $quri->(%linkqf);
die $! if $!;
die $? if $? != 24; # SIGXCPU but not in POSIX.pm :-/
</%perl>
-<h2>Search took too long and was terminated</h2>
+% $someresults->('Search took too long and was terminated');
Sorry, but your query resulted in a search that took too long.
Searches are limited to <% $maxcpu |h %> seconds of CPU time to
make sure that shorter searches can still happen.
<p>
-Please try a search with a smaller minimum distance, or place more
+Please try a search with a smaller maximum distance, or place more
restrictions on the route.
+</div>
<%perl>
return;
}
if ($concur_fail) {
</%perl>
-<h2>Server too busy</h2>
+% $someresults->('Server too busy');
Sorry, but there are already <% $concur_lim |h %> route searches
running. We limit the number which can run at once to avoid
<p>
If you submitted several searches and gave up on them (eg by hitting
-`back' or `stop' in your browser), be aware that that doesn't
+"back" or "stop" in your browser), be aware that that doesn't
generally stop the search process at the server end. So it's best to
avoid asking for large searches that you're not sure about.
Otherwise, please try later. Searches are limited to <% $maxcpu |h %>
seconds of CPU time so more processing resources should be available soon.
+</div>
<%perl>
return;
}
% } else {
<h2>Best routes for profit per league</h2>
% }
-<table rules=groups id="ap<% $ap %>_table">
+<table class="data" rules=groups id="ap<% $ap %>_table">
<colgroup span=2>
<colgroup span=1>
<colgroup span=1>
<th>Start
<th>Via
<th>Finish
-<tr>
<tr id="ap<% $ap %>_sortrow"><th><th><th><th><th><th><th>
% my $datarow=0;
% my %sortkeys;
<h2>Notes</h2>
Per league values count each island visited as one
-(additional) league; the `Dist.' column is however the actual distance
+(additional) league; the "Dist." column is however the actual distance
to be sailed. All profit figures are somewhat approximate; get a
complete trading plan for a route for accurate information.
-<%perl>
-
-
-</%perl>
+</div>