]> git.sesse.net Git - wloh/blob - include/common.pm
Remove dead function print_navbar().
[wloh] / include / common.pm
1 use strict;
2 use warnings;
3 use POSIX;
4 use XML::Template;
5
6 package wloh_common;
7
8 sub get_max_season {
9         my ($dbh, $locale) = @_;
10         my $ref = $dbh->selectrow_hashref('SELECT MAX(sesong) AS max_sesong FROM fotballserier se JOIN fotballspraak sp ON se.spraak=sp.id WHERE kultur=?',
11                 undef, $locale);
12         return $ref->{'max_sesong'};
13 }
14
15 sub get_last_sync {
16         my $dbh = shift;
17         my $ref = $dbh->selectrow_hashref('SELECT EXTRACT(EPOCH FROM last_sync) AS last_sync FROM last_sync');
18         if (!defined($ref)) {
19                 return "(ukjent)";
20         } else {
21                 return POSIX::strftime("%Y-%m-%d %H:%M %Z", localtime($ref->{'last_sync'}));
22         }
23 }
24
25 sub output_last_sync {
26         my $dbh = shift;
27         my $ts = get_last_sync($dbh);
28         print "    <p class=\"lastsync\">Databasen ble sist synkronisert $ts.</p>\n";
29 }
30
31 sub get_locale {
32         my $cgi = shift;
33         my $url = $cgi->url(-absolute => 1);
34         $url =~ m#^/([a-z][a-z]-[A-Z][A-Z])/# or die "Invalid locale!";
35         return $1;
36 }
37
38 sub set_locale {
39         my $locale = shift;
40         $locale =~ s/-/_/;
41         POSIX::setlocale(&POSIX::LC_ALL, $locale . '.UTF-8');
42 }
43
44 sub get_auxillary_parameters {
45         my ($dbh, $locale) = @_;
46
47         my $q = $dbh->prepare('SELECT * FROM aux_params WHERE kultur=?');
48         $q->execute($locale);
49
50         my $aux_parms = {};
51         while (my $ref = $q->fetchrow_hashref) {
52                 $aux_parms->{$ref->{'id'}} = $ref->{'value'};
53         }
54         return $aux_parms;
55 }
56
57 sub get_navbar {
58         my ($cgi, $dbh, $locale) = @_;
59         my $url = $cgi->url(-relative => 1);
60
61         print "<p style=\"font-size: smaller;\">";
62
63         my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5 ORDER BY id');
64         $q->execute;
65
66         my @languages = ();
67
68         my $first = 1;
69         while (my $ref = $q->fetchrow_hashref) {
70                 my %lang = ();
71                 if ($first) {
72                         $lang{'separator'} = '';
73                 }
74                 $first = 0;
75
76                 if ($ref->{'kultur'} eq $locale) {
77                         $lang{'lang-with-link'} = '';
78                         $lang{'lang-no-link'} = Encode::decode_utf8($ref->{'spraak'});
79                 } else {
80                         $lang{'a'} = Encode::decode_utf8($ref->{'spraak'});
81                         $lang{'a/href'} = sprintf "/%s/%s", $ref->{'kultur'}, $url;
82                         $lang{'lang-no-link'} = '';
83                 }
84                 push @languages, \%lang;
85         }
86
87         return \@languages;
88 }
89
90 # mapping from locale to translation to use (if not found, "en" is used)
91 my %translation_mapping = (
92         'nb-NO' => 'no',
93         'nn-NO' => 'no',
94         'da-DK' => 'no',
95         'sv-SE' => 'no',
96         'nl-NL' => 'en',
97 );
98
99 sub process_template {
100         my ($filename, $locale, $parms) = @_;
101
102         my $translation = $translation_mapping{$locale} // 'en';
103         my $doc;
104         if (-r "../templates/$filename.$translation.xml") {
105                 $parms->{'html/xml:lang'} = $translation;
106                 $doc = XML::Template::process_file("../templates/$filename.$translation.xml", $parms);
107         } else {
108                 $doc = XML::Template::process_file("../templates/$filename.xml", $parms);
109         }
110         print $doc->toString;
111 }
112
113 sub get_ordinal {
114         my ($num, $locale) = @_;
115         my $translation = $translation_mapping{$locale} // 'en';
116
117         if ($translation eq 'no') {
118                 return $num . ".";
119         } elsif ($translation eq 'en') {
120                 # http://en.wikipedia.org/wiki/English_numerals#Ordinal_numbers
121                 my $units = $num % 10;
122                 my $tens = (($num - $units) / 10) % 10;
123                 if ($tens == 1) {
124                         return $num . "th";
125                 } elsif ($units == 1) {
126                         return $num . "st";
127                 } elsif ($units == 2) {
128                         return $num . "nd";
129                 } elsif ($units == 3) {
130                         return $num . "rd";
131                 } else {
132                         return $num . "th";
133                 }
134         } else {
135                 die "Missing ordinal strategy for locale $locale";
136         }       
137 }
138
139 sub find_all_locales {
140         my $dbh = shift;
141         my $q = $dbh->prepare('SELECT kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5');
142         $q->execute;
143
144         my @locales = ();
145         while (my $ref = $q->fetchrow_hashref) {
146                 push @locales, $ref->{'kultur'};
147         }
148
149         return @locales;
150 }
151
152 1;