1 # This is part of the YARRG website. YARRG is a tool and website
2 # for assisting players of Yohoho Puzzle Pirates.
4 # Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
5 # Copyright (C) 2009 Clare Boothby
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.
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.
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.
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/>.
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.
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.
48 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
51 @EXPORT = qw(&dbw_connect &ocean_list &sourcebasedir
52 &to_json_shim &to_json_protecttags
54 &prettyprint_age &meta_prettyprint_age);
60 sub dotperllibdir () {
64 if ($dir =~ m/\.perl-lib$/) {
68 die "no appropriate dotperllib dir in @INC";
71 sub sourcebasedir () {
72 return dotperllibdir().'/..';
76 my $edir= $ENV{'YARRG_DATA_DIR'};
77 return $edir if defined $edir;
78 my $dir= dotperllibdir();
79 if (stat "$dir/DATA") {
81 } elsif ($!==&ENOENT) {
84 die "stat $dir/DATA $!";
92 my $datadir= datadir();
94 my $fn= "$datadir/source-info.txt";
95 my $f= new IO::File $fn or die "$fn $!";
98 next unless m/^ocean\s+(\S.*\S)\s*$/;
101 $f->error and die $!;
108 sub dbw_connect ($) {
110 die "unknown ocean $ocean ?"
111 unless grep { $_ eq $ocean } ocean_list();
112 return dbr_connect(datadir(), $ocean);
115 sub to_json_shim ($) {
117 # In JSON.pm 2.x, jsonToObj prints a warning to stderr which
118 # our callers don't like at all.
119 if ($JSON::VERSION >= 2.0) {
120 return to_json($obj);
122 return objToJson($obj);
126 sub to_json_protecttags ($) {
128 my $j= to_json_shim($v);
133 sub meta_prettyprint_age ($$$) {
134 my ($age,$floor,$plus) = @_;
136 $age < 60 ? 'less than a minute' :
137 $age < 60*2 ? '1 minute' :
138 $age < 3600*2 ? $floor ($age/60) $plus' minutes' :
139 $age < 86400*2 ? $floor ($age/3600) $plus ' hours' :
140 $floor ($age/86400) $plus ' days';
145 sub prettyprint_age ($) {
147 '.meta_prettyprint_age('$age','floor','.').'