X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=yarrg%2Fweb%2Fquery_route;h=a4e9a067e1b4c40b9c31215ad1bcc9abaee3f2fb;hp=4344e1d017d69b1c5113bf70b446e82e78befbad;hb=3dbb2f33eae3a509123ffc99e48e35f858a8292a;hpb=aed32e2dcb952bcfc9678eef4125e269f538edf2 diff --git a/yarrg/web/query_route b/yarrg/web/query_route index 4344e1d..a4e9a06 100644 --- a/yarrg/web/query_route +++ b/yarrg/web/query_route @@ -1,237 +1,130 @@ -<%args> -$quri -$a -$routestring => ''; - -<%perl> -#my $routestring= $queryqf{'routestring'}; -# -# for output: -my @archipelagoes; -my @islandids; -my %islandid2; +<%doc> - + This is part of the YARRG website. YARRG is a tool and website + for assisting players of Yohoho Puzzle Pirates. -

Specify route

-
+ Copyright (C) 2009 Ian Jackson + Copyright (C) 2009 Clare Boothby -%#---------- textbox, user enters route as string ---------- -% if (!$a->{Dropdowns}) { + 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. -Enter route (islands, or archipelagoes, separated by |s or commas; - abbreviations are OK):
+ 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. -<&| script &> -tr_uri= "routetextstring?format=json&type=text/xml" - + "&ocean=<% uri_escape($a->{Ocean}) %>"; + 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. -tr_timeout=false; -tr_request=false; -tr_done=''; -tr_needed=''; -function tr_Later(){ - window.clearTimeout(tr_timeout); - tr_timeout = window.setTimeout(tr_Needed, 500); -} -function tr_Needed(){ - window.clearTimeout(tr_timeout); - tr_element= document.getElementById('routestring'); - tr_needed= tr_element.value; - tr_Request(); -} -function tr_Request(){ - if (tr_request || tr_needed==tr_done) return; - tr_done= tr_needed; - tr_request= new XMLHttpRequest(); - uri= tr_uri+'&string='+encodeURIComponent(tr_needed); - tr_request.open('GET', uri); - tr_request.onreadystatechange= tr_Ready; - tr_request.send(null); -} -function tr_Ready() { - if (tr_request.readyState != 4) return; - if (tr_request.status == 200) { - response= tr_request.responseText; - eval('results='+response); - toedit= document.getElementById('routeresults'); - toedit.innerHTML= results.show; - } - tr_request= false; - tr_Request(); -} -window.onload= tr_Needed; - + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + 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. -
-
 

-% } else { #---------- dropdowns, user selects from menus ---------- + This Mason component generates the core of the `trade route' query. + + + +<%args> +$quri +$dbh +$prselector +$routestring => ''; +$capacitystring => ''; +$lossperleague => ''; +$capitalstring => ''; +$someresults +$emsgokorprint + <%perl> -my ($sth,$row);; -my @archlistdata; -my %islandlistdata; -$islandlistdata{'none'}= [ [ "none", "Select island..." ] ]; - -my $optionlistmap= sub { - my ($optlist, $selected) = @_; - my $out=''; - foreach my $entry (@$optlist) { - $out.= sprintf('', - encode_entities($entry->[0]), - defined $selected && $entry->[0] eq $selected - ? 'selected' : '', - encode_entities($entry->[1])); - } - return $out; +my $emsg; +my @warningfs; +my @archipelagoes; +my @islandids; + +my $qa= \%ARGS; + +my $be_post; +my $startform= sub { + ($be_post)= @_; + + +<%perl> }; +my $goupdate= sub { $be_post ? 'Update' : 'Go' }; -my $dbh= dbw_connect($a->{Ocean}); + -$sth= $dbh->prepare("SELECT DISTINCT archipelago FROM islands - ORDER BY archipelago;"); -$sth->execute(); +% # Sadly we need to do this rather hacky thing to make it be a POST +% # form if the user has already selected some thing(s) +% if (!$qa->{Dropdowns}) { +% $startform->($routestring =~ m/\S/); +% } else { +% $startform->(grep { +% defined $qa->{"archipelago$_"} || +% defined $qa->{"islandid$_"} +% } (0..$qa->{Dropdowns}-1)); +% } -while ($row=$sth->fetchrow_arrayref) { - my ($arch)= @$row; - push @archlistdata, [ $arch, $arch ]; - $islandlistdata{$arch}= [ [ "none", "Whole arch" ] ]; -} +
-$sth= $dbh->prepare("SELECT islandid,islandname,archipelago - FROM islands - ORDER BY islandname;"); -$sth->execute(); +

Specify route

-while ($row=$sth->fetchrow_arrayref) { - my $arch= $row->[2]; - push @{ $islandlistdata{'none'} }, [ @$row ]; - push @{ $islandlistdata{$arch} }, [ @$row ]; - $islandid2{$row->[0]}= { Name => $row->[1], Arch => $arch }; -} +% $prselector->('ShowStalls'); -my %resetislandlistdata; -foreach my $arch (keys %islandlistdata) { - $resetislandlistdata{$arch}= - $optionlistmap->($islandlistdata{$arch}, ''); -} +<& enter_route, qa => $qa, dbh => $dbh, emsg_r => \$emsg, + warningfs_r => \@warningfs, + enterwhat => 'Enter route', + islandids_r => \@islandids, + archipelagoes_r => \@archipelagoes + &> - +%#---------- textboxes, user enters details as strings ---------- +% my $routeparams= { EmsgRef => \$emsg }; +% if (!$qa->{Dropdowns}) { - - -<&| script &> -ms_lists= <% to_json_protecttags(\%resetislandlistdata) %>; -function ms_Setarch(dd) { - debug('ms_SetArch '+dd+' arch='+arch); - var arch= document.getElementsByName('archipelago'+dd).item(0).value; - var got= ms_lists[arch]; - if (got == undefined) return; // unknown arch ? hrm - debug('ms_SetArch '+dd+' arch='+arch+' got ok'); - var select= document.getElementsByName('islandid'+dd).item(0); - select.innerHTML= got; - debug('ms_SetArch '+dd+' arch='+arch+' innerHTML set'); -} - - - - - -% for my $dd (0..$a->{Dropdowns}-1) { - -% } - - - -% for my $dd (0..$a->{Dropdowns}-1) { -% my $arch= $ARGS{"archipelago$dd"}; -% $arch= 'none' if !defined $arch; - -% } - - -
-
-
+<& enter_advrouteopts, qa=>$qa, dbh=>$dbh, routeparams=>$routeparams &> % } #---------- end of dropdowns, now common middle of page code ---------- - - + +% my $ours= sub { $_[0] =~ +% m/^island|^archipelago|^routestring|^capacitystring|^lossperleague|^capitalstring|^[RT]/; +% }; +<& "lookup:formhidden", ours => $ours &> +
+
<%perl> -#========== result computations ========== +#========== results ========== -my $results_head; -$results_head= sub { - print "

Results

\n"; - $results_head= sub { }; -}; - -#---------- result computation - textstring ---------- -if (!$a->{Dropdowns}) { - if (length $routestring) { - $results_head->(); - my $rsr= $m->comp('routetextstring', - ocean => $a->{Ocean}, - string => $routestring, - format => 'return' - ); - if (length $rsr->{Error}) { - print encode_entities($rsr->{Error}); - } else { - foreach my $entry (@{ $rsr->{Results} }) { - push @archipelagoes, - defined $entry->[1] ? undef : $entry->[0]; - push @islandids, $entry->[1]; - } - } - } - -} else { #---------- results - dropdowns ---------- - -my $argorundef= sub { - my ($dd,$base) = @_; - my $thing= $ARGS{"${base}${dd}"}; - $thing= undef if defined $thing and $thing eq 'none'; - return $thing; -}; +$emsgokorprint->($emsg) or @islandids=(); -for my $dd (0..$a->{Dropdowns}-1) { - my $arch= $argorundef->($dd,'archipelago'); - my $island= $argorundef->($dd,'islandid'); - next unless defined $arch or defined $island; - if (defined $island and defined $arch) { - my $ii= $islandid2{$island}; - my $iarch= $ii->{Arch}; - if ($iarch ne $arch) { - $results_head->(); - - Specified archipelago <% $arch %> but - island <% $ii->{Name} %> - which is in <% $iarch %>; using the island.
-<%perl> - } - $arch= undef; - } - push @archipelagoes, $arch; - push @islandids, $island; +foreach my $warningf (@warningfs) { + $someresults->(); + $warningf->(); } -}#---------- result processing, common stuff % if (@islandids) { -% $results_head->(); - -<& routetrade, islandids => \@islandids, archipelagoes => \@archipelagoes &> - +% $someresults->(); +<& routetrade, + dbh => $dbh, + islandids => \@islandids, + archipelagoes => \@archipelagoes, + qa => $qa, + routeparams => $routeparams + &> % } +
+