-# This is part of ypp-sc-tools, a set of third-party tools for assisting
-# players of Yohoho Puzzle Pirates.
+# 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 General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# 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 General Public License for more details.
+# GNU Affero General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
+# 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 package is used by the Mason scripts in yarrg/web/.
+
+# This Perl module is used by the Mason scripts in yarrg/web/.
# We look for a symlink DATA to the actual data to use, so that
# the data uploader and website displayer can use different code.
use DBI;
use POSIX;
+use JSON;
use Commods;
use CommodsDatabase;
our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
- @EXPORT = qw($dbh &db_setocean &db_connect &db_doall
- &ocean_list);
+ @EXPORT = qw(&dbw_connect &ocean_list $sourcebasedir
+ to_json to_json_protecttags);
%EXPORT_TAGS = ( );
@EXPORT_OK = qw();
}
+our $datadir='.';
+our $sourcebasedir;
+
for my $dir (@INC) {
if ($dir =~ m/\.perl-lib$/) {
- db_setdatadir("$dir/DATA");
+ $sourcebasedir= "$dir/..";
+ if (stat "$dir/DATA") {
+ $datadir= "$dir/DATA";
+ } elsif ($!==&ENOENT) {
+ $datadir= "$dir";
+ } else {
+ die "stat $dir/DATA $!";
+ }
last;
}
}
+defined $sourcebasedir or
+ die "no source base dir in @INC";
my @ocean_list;
sub ocean_list () {
if (!@ocean_list) {
- my $fn= "$db_datadir/master-info.txt";
+ my $fn= "$datadir/master-info.txt";
my $f= new IO::File $fn or die $!;
my @r;
while (<$f>) {
return @ocean_list;
}
+sub dbw_connect ($) {
+ my ($ocean) = @_;
+ die "unknown ocean $ocean ?"
+ unless grep { $_ eq $ocean } ocean_list();
+ return dbr_connect($datadir, $ocean);
+}
+
+sub to_json_protecttags ($) {
+ my ($v) = @_;
+ my $j= to_json($v);
+ $j =~ s,/,\\/,g;
+ return $j;
+}
+
1;