chiark / gitweb /
WIP route fixes etc.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 12 Aug 2009 00:54:17 +0000 (01:54 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 12 Aug 2009 00:54:17 +0000 (01:54 +0100)
yarrg/CommodsDatabase.pm
yarrg/CommodsWeb.pm
yarrg/web/pirate-route
yarrg/web/routetextstring

index 2ea674d6963e489647b779fb880b464931fc1684..7bd7c77e1191055137e9b7fa43b45d2bec08263c 100644 (file)
@@ -44,7 +44,8 @@ BEGIN {
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
     @EXPORT      = qw(&db_setocean &db_writer &db_connect $dbh
-                     &db_filename &db_doall &db_onconflict &db_setdatadir);
+                     &db_filename &db_doall &db_onconflict
+                     &db_setdatadir $db_datadir);
     %EXPORT_TAGS = ( );
 
     @EXPORT_OK   = qw();
@@ -52,14 +53,14 @@ BEGIN {
 
 our $dbfn;
 our $dbh;
-our $datadir= '.';
+our $db_datadir= '.';
 
 sub db_setdatadir ($) {
-    $datadir= $_[0];
+    $db_datadir= $_[0];
 }
 sub db_setocean ($) {
     my ($oceanname) = @_;
-    $dbfn= "$datadir/OCEAN-$oceanname.db";
+    $dbfn= "$db_datadir/OCEAN-$oceanname.db";
 }
 sub db_filename () {
     return $dbfn;
@@ -93,7 +94,6 @@ sub db_writer () {
 }
 
 sub db_connect () {
-    return if $dbh;
     $dbh= DBI->connect("dbi:SQLite:$dbfn",'','',
                       { AutoCommit=>0,
                         RaiseError=>1, ShowErrorStatement=>1,
index 377d97b1c5c8e9794df7917e1bfb0cb3a6680a66..d09331d4c54e40ae91861d3abbf080187caba06a 100644 (file)
@@ -44,7 +44,7 @@ BEGIN {
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
     @EXPORT      = qw($dbh &db_setocean &db_connect &db_doall
-                     $self_url $base_url);
+                     &ocean_list);
     %EXPORT_TAGS = ( );
 
     @EXPORT_OK   = qw();
@@ -57,7 +57,22 @@ for my $dir (@INC) {
     }
 }
 
-$self_url= 'http://'.$ENV{'SERVER_NAME'}.$ENV{'SCRIPT_NAME'}.$ENV{'PATH_INFO'};
-$base_url= $self_url;  $base_url =~ s,/[^/]+,,;
+my @ocean_list;
+
+sub ocean_list () {
+    if (!@ocean_list) {
+       my $fn= "$db_datadir/master-info.txt";
+       my $f= new IO::File $fn or die $!;
+       my @r;
+       while (<$f>) {
+           next unless m/^ocean\s+(\S.*\S)\s*$/;
+           push @r, $1;
+       }
+       $f->error and die $!;
+       close $fn;
+       @ocean_list= @r;
+    }
+    return @ocean_list;
+}
 
 1;
index 58f8f28ae7d8d147a03c0d6fc4e9c3e93d99c492..639c8b19d91449ea2b14708ddb89368e0ec1ceab 100644 (file)
@@ -7,7 +7,7 @@ my @vars;
 @vars= ({      Name => 'Ocean',
                Before => 'Ocean: ',
                CmpCanon => sub { ucfirst lc $_[0] },
-               Values => [ qw(Midnight Ice) ]
+               Values => [ ocean_list() ]
        }, {    Name => 'Dropdowns',
                Before => 'Interface: ',
                CmpCanon => sub { !!$_[0] },
@@ -55,7 +55,7 @@ foreach my $var (@vars) {
                                        $qf{$n}= $value;
                                }
                        }
-                       my $uri= URI->new($self_url);
+                       my $uri= URI->new($m->current_comp()->name());
                        $uri->query_form(%qf);
                        print '<a href="', $uri->path_query(), '">';
                        $after= '</a>';
@@ -66,6 +66,9 @@ foreach my $var (@vars) {
        print '<p>';
 }
 
+die "unknown ocean $a{Ocean} ?"
+       unless grep { $_ eq $a{Ocean} } ocean_list();
+
 db_setocean($a{Ocean});
 db_connect();
 
@@ -75,7 +78,7 @@ db_connect();
 <form action="/ucgi/~clareb/mason/something" method="get">
 
 % if (!$a{Dropdowns}) {
-Enter route (islands, or archipelagoes, separated by commas;
+Enter route (islands, or archipelagoes, separated by |s or commas;
  abbreviations are OK):<br/>
 
 <script type="text/javascript">
@@ -139,16 +142,46 @@ while ($row=$sth->fetchrow_arrayref) {
                sprintf('<option value="%s">%s</option>',
                        map { encode_entities($_) } @$row);
 }
+
+$sth=$dbh->prepare("SELECT DISTINCT archipelago FROM islands
+                          ORDER BY archipelago;");
+$sth->execute();
+my $archlistdata='';
+
+while ($row=$sth->fetchrow_arrayref) {
+       $archlistdata.=
+               sprintf('<option value="%s">%s</option>',
+                       map { encode_entities($_) } (@$row, @$row));
+}
 </%perl>
 
+<script type="text/javascript">
+function setarch(dd) {
+ alert('setarch '+dd);
+}
+function setisland(dd) {
+ alert('setisland '+dd);
+}
+</script>
+
 <table>
+
 <tr>
 %      for my $dd (0..$a{Dropdowns}-1) {
-<td><select name="islandid<% $dd %>">
+<td><select name="archipelago<% $dd %>" onchange="setarch(<% $dd %>)">
+<option name="none">Whole ocean</option>
+<% $archlistdata %></select></td>
+%      }
+</tr>
+
+<tr>
+%      for my $dd (0..$a{Dropdowns}-1) {
+<td><select name="islandid<% $dd %>" onchange="setisland(<% $dd %>)">
 <option name="none">Select island...</option>
 <% $islandlistdata %></select></td>
 %      }
 </tr>
+
 </table>
 % }
 
index b84fd8447708e70b4b463ab10fdf2719545cc1d0..c39d48bde187a9d86600454c4a1456c44a4d61f1 100644 (file)
@@ -60,7 +60,7 @@ foreach my $each (split m#[/|,]#, $string) {
        push @results, $results->[0];
 }
 
-$canontext= join ' | ', map { encode_entities($_->[2]) } @results;
+$canontext= join ' | ', map { $_->[2] } @results;
 
 $output->();