#!/usr/bin/perl
use lib '/devel/perl/dvijok';
use lib '/var/www/unkom/data/www/tehno-import.ru/perl-bin/stihl';
my $baseDir = "/var/www/unkom/data/www/tehno-import.ru";
#print "Content-type: text/html\n\n";
#print "Hello\n";
#exit;
#use CGI::Carp;
use warnings;
use strict;
use Template;
use CGI;
use Data::Dumper;
use HTML::Scrubber;
use dvijok::Site;
use dvijok::Config;
use dvijok::Db;
#use dvijok::Auth;
use dvijok::Tree;
use dvijok::Date;
#use dvijok::WebIn;
my $tt = Template->new({
INCLUDE_PATH => "$baseDir/perl-bin/stihl/templates",
COMPILE_DIR => "$baseDir/perl-bin/stihl/cache",
EVAL_PERL => 1,
});
my $site;
eval {
my $conf = new dvijok::Config("$baseDir/perl-bin/stihl/config.xml");
$site = new dvijok::Site($conf);
my $db = new dvijok::Db($conf);
#my $auth = new dvijok::Auth($db);
my $tree = new dvijok::Tree($db,$conf);
my $scrubber = new HTML::Scrubber;
#warningsToBrowser(1);
"$baseDir/data/e006cce476278b7f6ff3dcacd4a7dea6/SAPE.pm" =~ /^(.+)$/;
require $1;
my $sape = new SAPE(
user => 'e006cce476278b7f6ff3dcacd4a7dea6',
host => 'http://www.tehno-import.ru', # необязательно, по умолчанию: $ENV{HTTP_HOST}
charset => 'windows-1251', # необязательно, по умолчанию: windows-1251
),
my $filter = {
'onlyNews' => sub {
my $node = shift();
return 1 if ($node->{group}->{name} eq 'Новость');
return 0;
},
'newsByMonth' => sub {
my $node = shift();
my $text = shift();
my $group = $node->{group}->{name};
my $value = $node->gValue('Дата начала показа')->Split();
if (defined $value) {
#my $newsDate = dvijok::Date->new()->sHumanTime($value)->Split();
return 1 if ($value->{mon} == $site->{cgi}->url_param('month') && $value->{year} == $site->{cgi}->url_param('year'));
}
return 0;
},
'fullTextSearch' => sub { # Фильтр, для поиска по сайту
my $node = shift(); # Анализируемый узел
my $text = shift(); # Что ищем
my $group = $node->{group}->{name};
my @attr_list = ();
my @names_list = ();
if ($group eq 'Новость') {
@attr_list = ('Заголовок','Анонс','Главный текст');
$node->{searchCategory} = 'Новость';
} else {
my $is_tovar = $node->inClass('Товар');
#foreach my $class(@{$tree->{schema}->gClassesList($node->{group}->{groupId})}) {
# if ($class->{name} eq 'Товар') {
# $is_tovar = 1;
#
# last;
# }
#}
if ($is_tovar) {
$node->{searchCategory} = 'Товар';
@attr_list = ('Аннотация');
@names_list = ('Наименование товара');
} else {
return 0;
}
}
#elsif ($group eq 'Текстовые страницы') {
# @attr_list = ('Заголовок', 'Анонс', 'Главный текст', 'Автор');
#}
foreach my $attr(@attr_list) {
my $value = $node->gValue($attr);
if (defined $value) {
#$value =~ s/<[bB][rR]>//g;
#$value =~ s/<\/?[pP]>//g;
$value = $scrubber->scrub($value) if ($group eq 'Новость');
$value =~ s/\n//g;
$value =~ tr/a-z/A-Z/;
$value =~ tr/а-я/А-Я/;
if ($value =~ m/(.{0,150})?($text)(.{0,150})?/) {
my $left_text = $1||'';
my $main_text = $2||'';
my $right_text = $3||'';
$node->{founded} = "... ".$left_text."$main_text".$right_text." ...";
return 1;
}
}
}
foreach my $name(@names_list) {
my $value = $node->gName($name);
if (defined $value) {
#$value =~ s/<[bB][rR]>//g;
#$value =~ s/<\/?[pP]>//g;
$value = $scrubber->scrub($value) if ($group eq 'Новость');
$value =~ s/\n//g;
$value =~ tr/a-z/A-Z/;
$value =~ tr/а-я/А-Я/;
if ($value =~ m/(.{0,150})?($text)(.{0,150})?/) {
my $left_text = $1||'';
my $main_text = $2||'';
my $right_text = $3||'';
$node->{founded} = "... ".$left_text."$main_text".$right_text." ...";
return 1;
}
}
}
return 0;
},
};
my $order = {
newsByDate => sub {
my $a = shift();
my $b = shift();
#my $date_a = dvijok::Date->new()->sHumanTime($a->gAttribute('Дата начала показа')->{value1});
#my $date_b = dvijok::Date->new()->sHumanTime($b->gAttribute('Дата начала показа')->{value1});
return 0 if ($a->gValue('Дата начала показа')->gTimestamp() == $b->gValue('Дата начала показа')->gTimestamp());
return 1 if ($a->gValue('Дата начала показа')->gTimestamp() < $b->gValue('Дата начала показа')->gTimestamp());
return -1;
},
};
sub showdump {
my $ref = shift;
return Dumper($ref);
}
sub rusUpStr {
my $str = shift();
$str =~ tr/a-z/A-Z/;
$str =~ tr/а-я/А-Я/;
return $str;
}
sub createFilter {
my $question = shift();
my $answerId = shift();
my $childs = $question->gChilds()->gArray();
my $answer = $childs->[$answerId];
my $retfilter = {
'filter' => sub {
my $node = shift();
my $condition = $answer->gAttribute('Фильтр')->{value1};
return 1 if ($condition eq "");
#warn ($node->gAttribute('Вес')->{value1}." - ".eval("($condition) ? 1 : 0").'-'."($condition) ? 1 : 0"."\n");
return eval("($condition) ? 1 : 0");
}
};
return $retfilter;
}
$site->{cookiesEnabled} = 1;
my $output = "";
$tt->process('index.tmpl',{
#webin => $site->{webin},
db => $db,
site => $site,
tree => $tree,
showdump => \&showdump,
filter => $filter,
order => $order,
createFilter => \&createFilter,
rusUpStr => \&rusUpStr,
cgi => $site->{cgi},
seCounterPath => "$baseDir/perl-bin/stihl/s_engines",
env => \%ENV,
},\$output) or die($tt->error);
$site->printHeader({-Last_Modified => $tree->gLastModTime()});
print $output;
};
if ($@) {
$site->printHeader();
$tt->process('error.html',{
error => $@
});
}