#!/usr/bin/perl

package myDBprovider;
use base 'Template::Provider';
use DBI;
use strict;
use warnings;
use Template;
use utf8;
my $dbh = DBI->connect("DBI:mysql:database=barcelon_barcelona;host=127.0.0.1;port=3306","barcelon_admin","kaktus",{mysql_enable_utf8 => 1});
$dbh->do("SET NAMES utf8mb4");

sub _template_modified {
	my ($self, $path) = @_;
	# template must be in format "DB3", where 3 is id of template in db
	my ($id) = $path =~ /DB(\d+)/i;
	my ($time) = $dbh->selectrow_array("SELECT UNIX_TIMESTAMP(upd_time) FROM templates WHERE `id`=?", undef, $id);
	return $time || 1;
}
sub _template_content {
	my ($self, $path) = @_;
	# template must be in format "DB3", where 3 is id of template in db
	my ($id) = $path =~ /DB(\d+)/;
	my ($time, $content) = $dbh->selectrow_array("SELECT UNIX_TIMESTAMP(upd_time), `content` FROM templates WHERE `id`=?", undef, $id);
	my $error;
	if (!$content) {
		$error = "No such template: $path (id: $id)";
	}
	return wantarray ? ($content, $error, ($time || 1)) : $content;
}

package main;

use CGI;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use POSIX ();
use strict;
use warnings;
use Template;
use utf8;

$|=1;

my $dbh = DBI->connect("DBI:mysql:database=barcelon_barcelona;host=127.0.0.1;port=3306","barcelon_admin","kaktus",{mysql_enable_utf8 => 1});
$dbh->do("SET NAMES utf8mb4");
my $provider_default = Template::Provider->new({
    INCLUDE_PATH => '/home/sitestyl/public_html/barcelona-plus.net/2014/TEMPLATES',
	RELATIVE => 1,
	COMPILE_DIR => '/home/sitestyl/public_html/barcelona-plus.net/2014/TEMPLATES/CACHE',
	COMPILE_EXT => '.cache',
	EVAL_PERL =>1,
});
my $provider_db = myDBprovider->new({
	COMPILE_DIR => '/home/sitestyl/public_html/barcelona-plus.net/2014/TEMPLATES/CACHE',
	COMPILE_EXT => '.db.cache',
	EVAL_PERL =>1,
});
my $tt = Template->new({
	ENCODING => 'utf8',
	EVAL_PERL => 1,
	LOAD_TEMPLATES => [$provider_default, $provider_db],
});


sub Latinize {
	$_[0] =~ s/\W+/_/gms;
	$_[0] =~ tr/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫЭабвгдезийклмнопрстуфхцыэÁÀÂĄÇĆÉÈÊËĘÎÏÍŁÑŃÓÔŚÚÙÛŹŻáàâąçćéèêëęîïíłñńóôśúùûźżЪЬъь/ABVGDEZIYKLMNOPRSTUFHCYEabvgdeziyklmnoprstufhcyeAAAACCEEEEEIIILNNOOSUUUZZaaaacceeeeeiiilnnoosuuuzz/d;
	my %mchars = (	'ж'=>'zh','ё'=>'yo','ч'=>'ch','ш'=>'sh','щ'=>'shch','ю'=>'yu','я'=>'ya',
					'Ж'=>'Zh','Ё'=>'Yo','Ч'=>'Ch','Ш'=>'Sh','Щ'=>'Shch','Ю'=>'Yu','Я'=>'Ya',
					'ä'=>'ae','ö'=>'oe','ü'=>'ue','ß'=>'ss','Ä'=>'Ae','Ö'=>'Oe','Ü'=>'Ue',
					);
	for my $c (keys %mchars) {
		$_[0] =~ s/$c/$mchars{$c}/g;
	}
	return $_[0];
}

my $url_name_cache = {};
sub GetUrl {
	my $id = shift;
	if (exists $url_name_cache->{$id}) {
		return $url_name_cache->{$id};
	} else {
		my $url;
		my ($shorttitle) = $dbh->selectrow_array("SELECT shorttitle FROM templates WHERE id=? LIMIT 1", undef, $id);
		if ($shorttitle) {
			$url = "/$id-".Latinize($shorttitle).'.html';
		}
		return $url;
	}
}






my $q = new CGI;
my $t = $q->param('t');
my $id = $q->param('id');
my $db_page;
if ($t eq 'PAGE.tt') {
	$id ||= 7;
	$db_page = $dbh->selectrow_hashref("SELECT * FROM templates WHERE `id`=? LIMIT 1", undef, $id);
}

if ($t eq 'PAGE.tt') {
	my $url = $ENV{REQUEST_URI};
	$url =~ s/^\/?(\d+-.*?)\.html.*/$1/;
	if ($url && $id != 7 && $t) {
		my ($id, $shorttitle) = $dbh->selectrow_array("SELECT id, shorttitle FROM templates WHERE id = ${id} LIMIT 1");
		my $url_ = $id . "-" . Latinize($shorttitle);
		if ($url ne $url_) {
			my $R = "http://" . $ENV{SERVER_NAME} . "/" . $url_ . ".html".($ENV{QUERY_STRING}?"?$ENV{QUERY_STRING}":'');
			print $q->redirect(
				-location => $R,
				-status => 301,
			);
			exit;
		}
	}
}

my $vars = {
	dbh => $dbh,
	GetUrl => \&GetUrl,
	GetSettings => sub {
		return $dbh->selectall_arrayref("SELECT * FROM settings WHERE param=?", {Slice=>{}}, $_[0]);
	},
	db_page => $db_page,
	CEIL => sub {return POSIX::ceil($_[0])},
};
my $header = {
	-type => 'text/html',
	-charset => 'utf-8',
	-status => 200,
};
print $q->header($header);

$tt->process($t, $vars) || die $tt->error();

