chiark / gitweb /
Use <%doc> for head comments
[ypp-sc-tools.db-test.git] / yarrg / CommodsWeb.pm
1 # This is part of the YARRG website.  YARRG is a tool and website
2 # for assisting players of Yohoho Puzzle Pirates.
3 #
4 # Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
5 # Copyright (C) 2009 Clare Boothby
6 #
7 #  YARRG's client code etc. is covered by the ordinary GNU GPL (v3 or later).
8 #  The YARRG website is covered by the GNU Affero GPL v3 or later, which
9 #   basically means that every installation of the website will let you
10 #   download the source.
11 #
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU Affero General Public License as
14 # published by the Free Software Foundation, either version 3 of the
15 # License, or (at your option) any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 # GNU Affero General Public License for more details.
21 #
22 # You should have received a copy of the GNU Affero General Public License
23 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
24 #
25 # Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
26 # are used without permission.  This program is not endorsed or
27 # sponsored by Three Rings.
28
29
30 # This Perl module is used by the Mason scripts in yarrg/web/.
31 # We look for a symlink DATA to the actual data to use, so that
32 # the data uploader and website displayer can use different code.
33
34 package CommodsWeb;
35
36 use strict;
37 use warnings;
38
39 use DBI;
40 use POSIX;
41
42 use Commods;
43 use CommodsDatabase;
44
45 our $self_url;
46 our $base_url;
47
48 BEGIN {
49     use Exporter ();
50     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
51     $VERSION     = 1.00;
52     @ISA         = qw(Exporter);
53     @EXPORT      = qw(&dbw_connect &ocean_list $sourcebasedir);
54     %EXPORT_TAGS = ( );
55
56     @EXPORT_OK   = qw();
57 }
58
59 our $datadir='.';
60 our $sourcebasedir;
61
62 for my $dir (@INC) {
63     if ($dir =~ m/\.perl-lib$/) {
64         $sourcebasedir= "$dir/..";
65         if (stat "$dir/DATA") {
66             $datadir= "$dir/DATA";
67         } elsif ($!==&ENOENT) {
68             $datadir= "$dir";
69         } else {
70             die "stat $dir/DATA $!";
71         }
72         last;
73     }
74 }
75 defined $sourcebasedir or
76     die "no source base dir in @INC";
77
78 my @ocean_list;
79
80 sub ocean_list () {
81     if (!@ocean_list) {
82         my $fn= "$datadir/master-info.txt";
83         my $f= new IO::File $fn or die $!;
84         my @r;
85         while (<$f>) {
86             next unless m/^ocean\s+(\S.*\S)\s*$/;
87             push @r, $1;
88         }
89         $f->error and die $!;
90         close $fn;
91         @ocean_list= @r;
92     }
93     return @ocean_list;
94 }
95
96 sub dbw_connect ($) {
97     my ($ocean) = @_;
98     die "unknown ocean $ocean ?"
99         unless grep { $_ eq $ocean } ocean_list();
100     return dbr_connect($datadir, $ocean);
101 }
102
103 1;