Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [18:09] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:09] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: package Forum;
- use strict;
- use Data::Dumper;
- use utf8;
- use CompiledTemplate;
- use RealplexorApi;
- use POSIX;
- use Tie::IxHash;
- use Image::Size;
- require 'text_tools.pl';
- #use Digest::MD5 qw(md5_hex);
- #use File::Copy;
- #use Image::Size;
- ##############
- sub new {
- my $self=$_[1];
- $self->{rpl}=RealplexorApi->new($self->{rpl});
- $self->{lang}=require 'Forum.lang.pl';
- bless $self;
- $self->{ONLINE_TIME}=20;
- $self->{CACHE_TIME}=100;
- $self->{'sort_time'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1);
- $self->{'sort_lasthit'}=Tie::IxHash->new(sticked => -1, moderated => -1, lasthit => -1);
- #$self->{'sort_rating'}=Tie::IxHash->new(sticked => -1, moderated => -1, time => -1, rating => -1);
- $self->{db}{settings}{forum}->save({
- _id => 'nyan',
- tpl => 'nyan',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->{db}{settings}{forum}->save({
- _id => 'test',
- tpl => 'test',
- SORTING => 'lasthit',
- THREADS_PER_PAGE => 25,
- POSTS_PER_PAGE=> 15,
- PREMODERATION => 0,
- RANDNAMES => 0,
- FILETYPES => {gif => undef ,png => undef ,jpg => undef ,jpeg => undef },
- MAX_FILESIZE=> 1024*1024*10,
- MAX_H => 20000,
- MAX_W => 20000,
- T_H => 200,
- T_W => 200,
- TEXT_LENGTH => 1024*4,
- SUBJECT_LENGTH => 50,
- ANON_POSTS => 1,
- ANON_THREADS => 1,
- FILES => 5,
- TAGS => 5,
- VOTE => 1,
- ANON_VOTE => 1,
- BBCODE => {
- sup => ['<sup>', '</sup>'],
- sub => ['<sub>', '</sub>'],
- big => ['<span style="font-size:36px;">', '</span>'],
- small => ['<span style="font-size:8px;">', '</span>'],
- center => ['<center>', '</div>'],
- right => ['<div style="float:right">', '</center>'],
- b => ['<strong>', '</strong>'],
- unown => ['<h2>', '</h2>'],
- ascii => ['<pre>', '</pre>'],
- i => ['<em>', '</em>'],
- code => ['<code>', '</code>'],
- s => ['<del>', '</del>'],
- hide => ['<span class="hide">', '</span>'],
- u => ['<span class="u">', '</span>'],
- o => ['<span class="o">', '</span>'],
- spoiler => ['<span class="spoiler">', '</span>'],
- redfont => ['<font color="red">', '</font>'],
- }
- });
- $self->_load_settings;
- $self->rebuild_cache;
- for(keys %{$self->{SECTIONS}}){
- mkdir('forum/'.$_) unless(-d('forum/'.$_));
- }
- return $self;
- }
- #################
- # Подгружаем все
- use lib '.';
- use forum::Posting;
- use forum::Admin;
- use forum::Cache;
- use forum::Files;
- use forum::Comet;
- use forum::Settings;
- sub section{
- my($self,$SECTION,$data)=@_;
- $data->{SORTING}=$self->{SECTIONS}{$SECTION}{SORTING} unless($data->{SORTING} eq 'time' or $data->{SORTING} eq 'lasthit');
- my $pages=$self->{mem}->get('pcnt'.$SECTION); # количество страниц # кеш
- unless($pages){
- my $count=$self->{db}{forum}{threads}->count({section=>$SECTION});
- $pages= ceil($count/$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE});
- $self->{mem}->set('pcnt'.$SECTION,$pages,$self->{CACHE_TIME});
- };
- $data->{page}=$pages if($data->{page}>$pages);
- $data->{page}=1 if($data->{page}<1);
- $data->{page}--;
- my @threads=$self->{db}{forum}{threads}->find(
- ($data->{hidden} or !$self->{SECTIONS}{$SECTION}{PREMODERATION} or $self->{cgi}->session->{level}>2) ? {section=>$SECTION} : {section=>$SECTION, moderated=> 1} # если премодерация отключена и включен режим скрытых постов или пользователь - модератор, то выводим все сообщения, иначе только одобренные
- ,{
- sort_by=>$self->{'sort_'.$data->{SORTING}},
- limit => $self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE},
- skip => $data->{page}*$self->{SECTIONS}{$SECTION}{THREADS_PER_PAGE}
- })->all;
- if(1){
- my @oids; push @oids, $_->{_id}->value for(@threads);
- my $online=$self->_get_online(@oids);
- $_->{online}=$online->{$_->{_id}->value} for(@threads);
- @threads=sort {$b->{online} <=> $a->{online}} @threads;
- }
- $self->{cgi}->header;
- print $self->{SECTIONS}{$SECTION}{tpl}->threads({
- threads =>\@threads,
- pages=>$pages,
- });
- }
- ############# Вспомогательные обработчики
- sub _translit
- { ($_)=@_;
- #
- # Fonetic correct translit
- #
- s/Сх/Sh/g; s/сх/sh/g; s/СХ/SH/g;
- s/Ш/Sh/g; s/ш/sh/g;
- s/Сцх/Sch/g; s/сцх/sch/g; s/СЦХ/SCH/g;
- s/Щ/Sch/g; s/щ/sch/g;
- s/Цх/Ch/g; s/цх/ch/g; s/ЦХ/CH/g;
- s/Ч/Ch/g; s/ч/ch/g;
- s/Йа/Ja/g; s/йа/ja/; s/ЙА/JA/g;
- s/Я/Ja/g; s/я/ja/g;
- s/Йо/Jo/g; s/йо/jo/g; s/ЙО/JO/g;
- s/Ё/Jo/g; s/ё/jo/g;
- s/Йу/Ju/g; s/йу/ju/g; s/ЙУ/JU/g;
- s/Ю/Ju/g; s/ю/ju/g;
- s/Э/E/g; s/э/e/g;
- s/Е/E/g; s/е/e/g;
- s/Зх/Zh/g; s/зх/zh/g; s/ЗХ/ZH/g;
- s/Ж/Zh/g; s/ж/zh/g;
- s/[ЪъЬь]//g;
- s/ /-/g;
- tr/
- абвгдзийклмнопрстуфхцыАБВГДЗИЙКЛМHОПРСТУФХЦЫ/
- abvgdzijklmnoprstufhcyABVGDZIJKLMNOPRSTUFHCY/;
- s/[^A-z_0-9-]//g;
- return $_;
- }
- 'Анимеаниме - свободное общение^W каваенье и някание';
- [18:10] +pekahucoa: use utf8;
- sub _process_files{
- my($self,$SECTION,$path,$files)=@_;
- my (@errors,@files);
- for my $file(@{$files}){
- $_=$self->_upload_file($SECTION,$path,$file); # обрабатываем файл
- # проверяем на ошибки
- if($_==1){push @errors,$file->{name}.' - '.$self->{lang}{FILE_TOO_BIG}}
- elsif($_==2){push @errors,$file->{name}.' - '.$self->{lang}{NO_FILE}}
- elsif($_==3){push @errors,$file->{name}.' - '.$self->{lang}{CANT_CREATE_THUMBNAIL}}
- elsif($_==4){push @errors,$file->{name}.' - '.$self->{lang}{UNSUPPORTED_FORMAT}}
- elsif($_==5){push @errors,$file->{name}.' - '.$self->{lang}{TOO_BIG_RES}}
- else{push @files,$_;}
- # если это закоментировать и дописать еще пару строк, то можно отправлять сообщения даже с фейлом в загрузке 1/нескольких файлов
- last if(@errors);
- }
- # и это тоже. BEEDLOWCODE
- $self->{cgi}->error(shift @errors)if(@errors);
- return \@files;
- }
- sub _upload_file{
- my ($self,$SECTION,$path,$file)=@_;
- # Возвращает:
- #1 - слишком большой файл
- #2 - ошибка в процессе загрузки
- #3 - невозможно создать превью
- #4 - формат не поддерживается
- #5 - слишком большие размеры картинки
- # успешно - ссылка на хеш
- #{data=>\$data, size=>$len, name =>$name }
- my $data={}; # данные о файле
- $data->{name}=$file->{name};
- my $name=$data->{name};
- # фильтрация имени
- $name=~s|^.*?([^/\\]{0,32})\.([A-z]*)$|$1|;
- my $ext=lc($2);
- $name=~s/[^A-zА-я0-9._-]//g;
- #$name=_translit($name);
- unless(exists $self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}){
- return 4; # расширение запрещено
- }
- else
- {
- return 1 if($file->{size}>$self->{SECTIONS}{$SECTION}{MAX_FILESIZE}); # слишком толсто
- return 2 unless($file->{size}); # чо чо? Опа нихуя!
- $name.=int(rand(9)) while(-e("forum/$SECTION/$path/$name.$ext")); # уникальное имя
- # инфо о файле
- $data->{path}="forum/$SECTION/$path/$name.$ext";
- $data->{size}=sprintf('%.2f',$file->{size}/1024);
- # сохраняем
- open my $fsave,'>',$data->{path} or return 2;
- binmode($fsave);
- print $fsave ${$file->{data}};
- close $fsave;
- #превьюшка
- if(defined $self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}){ # если для файла есть иконка
- $data->{thumbnail}=$self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}; # сохраняем путь к ней
- }
- else #иначе пробуем ресайзить
- {
- my $format;
- ($data->{width},$data->{height},$format)=imgsize($file->{data}); #получаем размеры
- return 3 unless($data->{width} and $data->{height}); # это не картинка
- return 5 if ($data->{width}>$self->{SECTIONS}{$SECTION}{MAX_W} or $data->{height}>$self->{SECTIONS}{$SECTION}{MAX_H}); # слишком большая картинка
- $format=lc($format);
- ($data->{twidth},$data->{theight})=($data->{width},$data->{height});
- #Считаем размеры
- if($data->{twidth}>$self->{SECTIONS}{$SECTION}{T_W}){
- $data->{twidth}=$self->{SECTIONS}{$SECTION}{T_W};
- $data->{theight}=int(($self->{SECTIONS}{$SECTION}{T_W}*$data->{height})/$data->{width});
- };
- if($data->{theight}>$self->{SECTIONS}{$SECTION}{T_H}){
- $data->{theight}=$self->{SECTIONS}{$SECTION}{T_H};
- $data->{twidth}=int(($self->{SECTIONS}{$SECTION}{T_H}*$data->{width})/$data->{height});
- }
- $data->{twidth}=1 unless($data->{twidth});
- $data->{theight}=1 unless($data->{theight});
- #
- $data->{thumbnail}="forum/$SECTION/$path/t$name.$ext"; # сохраняем в инф. файла путь к превьюшке
- $_=$format=~/gif/i ? '[0]' : '';# первый кадр gif
- `convert -channel RGBA -background none -quality 100 -flatten -size $data->{twidth}x$data->{theight} -geometry $data->{twidth}x$data->{theight} $data->{path}$_ $format:$data->{thumbnail}`;
- if($?){unlink $data->{path}; return 3}; #Словили ошибку? удаляем файл и возвращаем ошибку
- }
- return $data; # возвращаем данные о файле
- };
- }
- 'Хочу няшку ._.
- А есть только этот BEEDLOWCOD';
- [18:10] +pekahucoa: use utf8;
- sub _process_files{
- my($self,$SECTION,$path,$files)=@_;
- my (@errors,@files);
- for my $file(@{$files}){
- $_=$self->_upload_file($SECTION,$path,$file); # обрабатываем файл
- # проверяем на ошибки
- if($_==1){push @errors,$file->{name}.' - '.$self->{lang}{FILE_TOO_BIG}}
- elsif($_==2){push @errors,$file->{name}.' - '.$self->{lang}{NO_FILE}}
- elsif($_==3){push @errors,$file->{name}.' - '.$self->{lang}{CANT_CREATE_THUMBNAIL}}
- elsif($_==4){push @errors,$file->{name}.' - '.$self->{lang}{UNSUPPORTED_FORMAT}}
- elsif($_==5){push @errors,$file->{name}.' - '.$self->{lang}{TOO_BIG_RES}}
- else{push @files,$_;}
- # если это закоментировать и дописать еще пару строк, то можно отправлять сообщения даже с фейлом в загрузке 1/нескольких файлов
- last if(@errors);
- }
- # и это тоже. BEEDLOWCODE
- $self->{cgi}->error(shift @errors)if(@errors);
- return \@files;
- }
- sub _upload_file{
- my ($self,$SECTION,$path,$file)=@_;
- # Возвращает:
- #1 - слишком большой файл
- #2 - ошибка в процессе загрузки
- #3 - невозможно создать превью
- #4 - формат не поддерживается
- #5 - слишком большие размеры картинки
- # успешно - ссылка на хеш
- #{data=>\$data, size=>$len, name =>$name }
- my $data={}; # данные о файле
- $data->{name}=$file->{name};
- my $name=$data->{name};
- # фильтрация имени
- $name=~s|^.*?([^/\\]{0,32})\.([A-z]*)$|$1|;
- my $ext=lc($2);
- $name=~s/[^A-zА-я0-9._-]//g;
- #$name=_translit($name);
- unless(exists $self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}){
- return 4; # расширение запрещено
- }
- else
- {
- return 1 if($file->{size}>$self->{SECTIONS}{$SECTION}{MAX_FILESIZE}); # слишком толсто
- return 2 unless($file->{size}); # чо чо? Опа нихуя!
- $name.=int(rand(9)) while(-e("forum/$SECTION/$path/$name.$ext")); # уникальное имя
- # инфо о файле
- $data->{path}="forum/$SECTION/$path/$name.$ext";
- $data->{size}=sprintf('%.2f',$file->{size}/1024);
- # сохраняем
- open my $fsave,'>',$data->{path} or return 2;
- binmode($fsave);
- print $fsave ${$file->{data}};
- close $fsave;
- #превьюшка
- if(defined $self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}){ # если для файла есть иконка
- $data->{thumbnail}=$self->{SECTIONS}{$SECTION}{FILETYPES}{$ext}; # сохраняем путь к ней
- }
- else #иначе пробуем ресайзить
- {
- my $format;
- ($data->{width},$data->{height},$format)=imgsize($file->{data}); #получаем размеры
- return 3 unless($data->{width} and $data->{height}); # это не картинка
- return 5 if ($data->{width}>$self->{SECTIONS}{$SECTION}{MAX_W} or $data->{height}>$self->{SECTIONS}{$SECTION}{MAX_H}); # слишком большая картинка
- $format=lc($format);
- ($data->{twidth},$data->{theight})=($data->{width},$data->{height});
- #Считаем размеры
- if($data->{twidth}>$self->{SECTIONS}{$SECTION}{T_W}){
- $data->{twidth}=$self->{SECTIONS}{$SECTION}{T_W};
- $data->{theight}=int(($self->{SECTIONS}{$SECTION}{T_W}*$data->{height})/$data->{width});
- };
- if($data->{theight}>$self->{SECTIONS}{$SECTION}{T_H}){
- $data->{theight}=$self->{SECTIONS}{$SECTION}{T_H};
- $data->{twidth}=int(($self->{SECTIONS}{$SECTION}{T_H}*$data->{width})/$data->{height});
- }
- $data->{twidth}=1 unless($data->{twidth});
- $data->{theight}=1 unless($data->{theight});
- #
- $data->{thumbnail}="forum/$SECTION/$path/t$name.$ext"; # сохраняем в инф. файла путь к превьюшке
- $_=$format=~/gif/i ? '[0]' : '';# первый кадр gif
- `convert -channel RGBA -background none -quality 100 -flatten -size $data->{twidth}x$data->{theight} -geometry $data->{twidth}x$data->{theight} $data->{path}$_ $format:$data->{thumbnail}`;
- if($?){unlink $data->{path}; return 3}; #Словили ошибку? удаляем файл и возвращаем ошибку
- }
- return $data; # возвращаем данные о файле
- };
- }
- 'Хочу няшку ._.
- А есть только этот BEEDLOWCOD';
- [18:10] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:11] +pekahucoa: use utf8;
- ### Кеширование
- sub rebuild_cache {
- my $self = shift;
- for my $SECTION(keys %{$self->{SECTIONS}}){
- for(qw/post new_thread/){
- open my $file ,'>',"forum/$SECTION/$_.html";
- binmode($file);
- print $file $self->{SECTIONS}{$SECTION}{tpl}->$_( {} , $self->{SECTIONS}{$SECTION} );
- close $file;
- }
- }
- }
- sub rebuild_threads_cache {
- my($self,$SECTION)=@_;
- my($thread,$cnt);
- my $threads=$self->{db}{forum}{threads}->find({section=>$SECTION},{ sort_by=> $self->{'sort_'.$self->{SECTIONS}{$SECTION}{SORTING}} });
- while($thread = $threads->next){
- # удаляем все старые страницы
- unlink glob("forum/$thread->{section}/$thread->{path}/*$thread->{name}.html");
- #создаем папку если нет. Хотя почему ее может не быть? да похуй, пусть эта строчка будет
- mkdir("forum/$thread->{section}/$thread->{path}") unless(-d("forum/$thread->{section}/$thread->{path}"));
- # ребилд страниц
- $self->_build_pages($thread);
- $cnt++;
- }
- return $cnt;
- }
- sub _build_pages {
- my($self,$thread,$all)=@_;
- my $pages= ceil( @{$thread->{posts}}/$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE} );
- my @pages;
- if($all or !-e("forum/$thread->{section}/$thread->{path}/$pages$thread->{name}.html"))
- {@pages=(1..($pages?$pages:1))} # если последней страницы нет - пересобираем все
- else
- {@pages=($pages)}
- foreach my $page(@pages) {
- $page='' if($page<2);
- open my $fhandle,'>',"forum/$thread->{section}/$thread->{path}/$page$thread->{name}.html" or die 'Page building error';
- flock($fhandle,2); # 2 - LOCK_EX
- binmode($fhandle);
- $_=($page?$page-1:$page)*$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE};
- print $fhandle $self->{SECTIONS}{$thread->{section}}{tpl}->thread({
- %{$thread},
- page => $page,
- pages => $pages,
- posts => $self->{db}->getPosts( 'forum','posts',
- [
- @{$thread->{posts}}[ $_..($_+$self->{SECTIONS}{$thread->{section}}{POSTS_PER_PAGE}-1)]
- ] ,
- {sort_by=>{time => 1}} ),
- },{pagination=>"/forum/$thread->{section}/$thread->{path}/$thread->{name}.html", page => $page});
- close $fhandle;
- }
- return $pages[-1];
- }
- 'Рейму - няшка :3 Насколько? Науке это не изестно, но сильно...'
- [18:28] @mdhasik: pekahucoa: ты хуй
- [18:28] %big brother: нет я
- [18:28] Тема 'Добро пожаловать в фанклуб мдхасика!'
- [18:28] +pekahucoa:
- [17:19:00]
- mdhasik: >$page?$page-1:$page
- [17:19:05]
- mdhasik: говнокодер
- [18:59] %PeKa: 77.246.104.149 Any Drop
- Active
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement