]> git.sesse.net Git - ccbs/blobdiff - html/ccbs.pm
Shape text using Pango and HarfBuzz; gives us nice ligatures and exotic scripts.
[ccbs] / html / ccbs.pm
index 60178f74d5d2e09ac68a05460424253c4b530db9..1807e0953de82cfdbb066373c8c4af7ed4ba58a4 100755 (executable)
@@ -1,6 +1,7 @@
 package ccbs;
 use Template;
 use CGI;
+use CGI::Cookie;
 use DBI;
 use HTML::Entities;
 use Time::HiRes;
@@ -10,17 +11,33 @@ use strict;
 use warnings;
 require '../intl/Sesse::GettextizeTemplates.pm';
 
+require '../config.pm';
+-r '../config.local.pm' and require '../config.local.pm';
+
+# Check for language settings
+my %cookies = fetch CGI::Cookie;
+my $lang = defined($cookies{'language'}) ? $cookies{'language'}->value : undef;
+if (defined($lang) && ($lang eq 'nb_NO' || $lang eq 'nn_NO' || $lang eq 'en_US')) {
+       POSIX::setlocale( &POSIX::LC_CTYPE , $lang . ".UTF-8" );
+       POSIX::setlocale( &POSIX::LC_MESSAGES , $lang . ".UTF-8" );
+} else {
+       POSIX::setlocale( &POSIX::LC_CTYPE , $ccbs::config::lang );
+       POSIX::setlocale( &POSIX::LC_MESSAGES , $ccbs::config::lang );
+}
+Locale::gettext::bindtextdomain("ccbs", "po");
+Locale::gettext::textdomain("ccbs");
+
 our $start_time;
 
 BEGIN {
        $start_time = [Time::HiRes::gettimeofday()];
 }
 
-our $ccbs_dbdebug = 0;
+# Hack to get the non-templatized gettext stuff working
+*_ = sub {
+       return Locale::gettext::gettext(@_);
+};
 
-# Set this flag to disable any admin tasks -- it's quite crude, but hey :-)
-our $ccbs_noadmin = 0;
-       
 sub print_header {
        print CGI::header(-type=>'text/html; charset=utf-8');
 }
@@ -28,14 +45,12 @@ sub print_see_other {
        my $location = shift;
 
        print CGI::header(-status=>'303 See other',
-                         -location=>'http://ccbs.sesse.net/' . $location,
+                         -location=>$ccbs::config::webroot . $location,
                          -type=>'text/html; charset=utf-8');
 }
 
 sub db_connect {
-       $ccbs_dbdebug = defined(shift) ? 1 : 0;
-
-       my $dbh = DBI->connect("dbi:Pg:dbname=ccbs;host=www.positivegaming.com", "ccbs", "GeT|>>B_")
+       my $dbh = DBI->connect("dbi:Pg:dbname=$ccbs::config::dbname;host=$ccbs::config::dbhost", $ccbs::config::dbuser, $ccbs::config::dbpass)
                or die "Couldn't connect to database";
        $dbh->{RaiseError} = 1;
        return $dbh;
@@ -48,14 +63,14 @@ sub db_fetch_all {
        $q->execute(@parms)
                or die "Could not execute query: " . $dbh->errstr;
 
-       if ($ccbs_dbdebug) {
+       if ($config::ccbs::dbdebug) {
                warn $sql;
                warn "params=" . join(', ', @parms);
        }
        
        my @ret = ();
        while (my $ref = $q->fetchrow_hashref()) {
-               if ($ccbs_dbdebug) {
+               if ($config::ccbs::dbdebug) {
                        my $dbstr = "";
                        for my $k (sort keys %$ref) {
                                $dbstr .= " " . $k . "=" . $ref->{$k};
@@ -73,13 +88,9 @@ sub process_template {
        my ($page, $title, $vars) = @_;
        $vars->{'page'} = $page;
        $vars->{'title'} = $title;
-       $vars->{'public'} = $ccbs_noadmin;
+       $vars->{'public'} = $ccbs::config::noadmin;
        $vars->{'timetogenerate'} = sprintf "%.3f", Time::HiRes::tv_interval($start_time);
        
-       POSIX::setlocale( &POSIX::LC_MESSAGES , "nb_NO.UTF-8");
-       Locale::gettext::bindtextdomain("ccbs", "po");
-       Locale::gettext::textdomain("ccbs");
-       
        my $config = {
                INCLUDE_PATH => 'templates/',
                INTERPOLATE  => 1,
@@ -90,7 +101,7 @@ sub process_template {
        my $template = Template->new($config);
 
        my $output = '';
-       $template->process('main.tmpl', $vars, \$output)
+       $template->process($ccbs::config::main_template, $vars, \$output)
                or die $template->error();
 
        print $output;
@@ -100,13 +111,13 @@ sub user_error {
        my $msg = shift;
 
        ccbs::print_header();
-       ccbs::process_template('user-error.tmpl', 'Feil',
+       ccbs::process_template('user-error.tmpl', _('Error'),
                { message => $msg });
 
        exit;
 }
 sub admin_only {
-       user_error("Beklager, databasen står i no-admin-mode.") if ($ccbs_noadmin);
+       user_error(_("Sorry, the database is in no-admin-mode.")) if ($config::ccbs::noadmin);
 }
 
 $SIG{__DIE__} = sub {
@@ -115,7 +126,7 @@ $SIG{__DIE__} = sub {
        return if $msg =~ m#Win32/Registry.pm#;
 
        ccbs::print_header();
-       ccbs::process_template('error.tmpl', 'Internal Server Error',
+       ccbs::process_template('error.tmpl', _('Internal Server Error'),
                { message => HTML::Entities::encode_entities($msg) });
 };