#!/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 => $@ }); }