Главная | Разделы | Поиск | Группы | Чат | Видеоальбомы | Фотоальбомы | Блоги | Помощь


Здравствуйте, гость. Пожалуйста войдите или Зарегистрируйтесь (забыл пароль)
Логин:
Пароль:

Пользователей: 25
Новичок:
BUM
Сейчас на сайте: 6
Сообщений: 20
Тем: 18
Разделов: 41
Статистика

Новые темы:
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
catalyst не видит путь
Остальные

Новые разделы:
staynet.ru
MVC Catalyst
Остальные

Новые сообщений:
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
Остальные

Рейтинг контента:
CRUD Perl Web
сравнение.. сложных структур данных в Perl
Остальные

Новые фотографии:
Рейтинг фотографий

Новые видео клипы:
Рейтинг видео клипов





Просмотр темы

Главная --> Компьютеры --> Интернет --> Программирование --> perl --> MVC Catalyst -->
      
На уровень выше Посмотреть подразделы


Тема: catalyst не видит путь        (Просмотров: 5296)
Автор: test01
Дата: 1265302088
Новое: 1270872525
Посмотреть комментарии этой темы


catalyst не видит путь

подскажите, почему каталист может не видеть путь например http://localhost:3000/photo/view/34/170/page/4 photo/view/34/170/page/4 контроллер photo.pm вот Code: sub view_pages_photo : Regex('^view\/(\d+)\/(\d+)\/page\/(\d+)$') { my ( $self, $c, $album, $photo, $view, $page ) = @_; $c->stash->{page_cm} = $c->req->captures->[2]; $c->forward( 'view', [ $c->req->captures->[0], $c->req->captures->[1] ] ); } просто выдает белую страницу с текстом Page not found БЕЗ каких либо ошибок в отладке такой путь работат photo/view/34/170 Code: sub view : Local : Args(2) { my ( $self, $c, $album, $photo ) = @_; а такой тоже не работает, в 3 парамтера photo/view/34/170/4 Code: sub view_privat_page : Path('/view_privat') : Args(3) { my ( $self, $c, $album, $photo, $page ) = @_; что за прикол? красиво нельзя исправить? а то если руками исправлять, то вся мощ фремворка терятеся... ================== сделал так, не знаю на сколько это правильно Code: use Quantum::Superpositions; sub begin : Private { my ( $self, $c ) = @_; .................... if ( !$c->request->{match} ) { if ($c->request->{arguments}->[0] eq 'photo' && $c->request->{arguments}->[1] eq any( qw( view view_privat view_privat_max view_max ) ) && scalar @{$c->request->{arguments}} == 5) { $c->forward( 'MyApp::Controller::'.$c->request->{arguments}->[0], $c->request->{arguments}->[1], [ $c->request->{arguments}->[2], $c->request->{arguments}->[3], $c->request->{arguments}->[4] ] ); $c->detach(); } } ================== вот пример Code: sub view_page : Path('/view') : Args(3) { my ( $self, $c, $album, $photo, $page ) = @_; ................... путь для него .photo/view/34/170/4 (внизу отладка при страте каталиста) Code: package MyApp::Controller::photo; use strict; use warnings; use parent 'Catalyst::Controller'; use File::Path qw(make_path remove_tree); =head1 NAME MyApp::Controller::photo - Catalyst Controller =head1 DESCRIPTION Catalyst Controller. =head1 METHODS forwarded from view_content void *index_off_foreach */photo/content/$id void *index_off void *index_off_foreach */photo/last/$id_un/$id void *index_off void *index_off_foreach =cut =head2 detailed information for developers: WWW: http://www.x0.org.ua/help it is architecture of classes, methods, program events... =cut # ## from profile sub view_profile sub count_photo_album_users : Privat { my ( $self, $c, $id_un ) = @_; my $user = 'SELECT count(*) FROM photo_albums AS t1 WHERE t1.privat_pa = 1 AND id_un = '.$id_un; return $c->model('DBI')->dbh->selectrow_array($user); } sub photo_content_limit : Privat { my ( $self, $c, $id_co ) = @_; $c->stash->{forward_sql_p} = ' SELECT t1.id_co, t1.id_pa, t1.id_un, t1.name_pa, t1.description_pa, t1.hidden_pa, t1.created, t1.privat_pa, t4.username, (SELECT count(*) FROM photo_files AS t5 WHERE t1.id_pa = t5.id_pa ) AS count_photo_files, (SELECT SUM(t6.size_pf) FROM photo_files AS t6 WHERE t1.id_pa = t6.id_pa ) AS sum_v_photo_files, (SELECT min(t7.id_pf) FROM photo_files AS t7 WHERE t1.id_pa = t7.id_pa AND t7.size_pf is NOT NULL AND t7.size_pf > 0 ) AS min_v_photo_files FROM photo_albums AS t1 LEFT JOIN users AS t4 ON t1.id_un = t4.id WHERE t1.id_co = ' . $id_co . ' AND t1.privat_pa = 0 ORDER BY t1.created desc LIMIT 4'; my $loop_data = $c->model('DBI') ->dbh->selectall_arrayref( $c->stash->{forward_sql_p}, { Slice => {} } ); # surplus, and conclusion in 4 columns $c->forward( 'index_off_foreach', [$loop_data] ); # if ($loop_data); } sub content : Local { my ( $self, $c, $id_co, $id ) = @_; $c->stash->{template} = 'photo_content.tt'; if ( $id_co !~ /^\d+$/ ) { $c->stash( no_id_co => 1, off_photo => 1, ); $c->detach(); } ## terms of query for current content my $sql; if ( !$c->check_user_roles('moder_se') && $c->user_exists() == 1 ) { $sql = 'AND (( t1.hiden_co = 0 AND t1.active_co = 1) OR t1.id_un = ' . $c->user->{user}->{id} . ')'; } elsif ( $c->check_user_roles('moder_se') ) { $sql = ''; } elsif ( $c->user_exists() == 0 ) { $sql = 'AND t1.active_co = 1 AND t1.hiden_co = 0 AND t1.hiden_g_co = 0'; } else { $c->response->redirect( $c->uri_for('/') ); $c->detach(); } my $sql_content = 'SELECT t1.id_co, t1.id_un, t1.id_se, t1.name_co, t1.heading_name_co, t1.keys_co, t1.text_co, t1.active_co, t1.hiden_co, t1.hiden_g_co, t1.close_co, t1.voting_co, t1.vo_all_co, t1.vo_balls_co, t1.vo_per, t1.created, t1.viewing, t1.modified, t1.forbi_comm_co, t2.name_se, t2.forbi_content_se, t2.hiden_g_co AS hiden_g_se, t2.active_se, t2.id_un AS id_un_par, t3.username FROM content AS t1 LEFT JOIN section AS t2 ON t1.id_se = t2.id_se LEFT JOIN users AS t3 ON t1.id_un = t3.id WHERE t1.id_co = ' . $id_co . ' ' . $sql . ' LIMIT 1'; my $loop_data2 = $c->model('DBI')->dbh->selectrow_hashref($sql_content); # rights for access, content if ( !$loop_data2 ) { $c->stash( messages_error => 1, off_photo => 1, ); $c->detach(); } if ( $loop_data2->{hiden_g_se} == 1 && !$c->user_exists() ) { $c->stash( error_hiden_g => 1, off_photo => 1, ); $c->detach(); } if ( $loop_data2->{active_se} == 0 && $loop_data2->{id_un_par} != $c->user->{user}->{id} && !$c->check_user_roles('moder_co') ) { $c->stash( error_active_se => 1, off_photo => 1, ); $c->detach(); } # warned reports for the author of information if ( ( $c->user_exists() && $loop_data2->{id_un} == $c->user->{user}->{id} ) || $c->check_user_roles('moder_co') ) { $c->stash->{edit_pa} = 1; } $c->stash($loop_data2); $c->stash->{forward_sql3} = ' WHERE t1.id_co = ' . $id_co . ' AND t1.privat_pa = 0 '; $c->stash->{forward_sql_p} = ' SELECT t1.id_co, t1.id_pa, t1.id_un, t1.name_pa, t1.description_pa, t1.hidden_pa, t1.created, t1.privat_pa, t4.username, (SELECT count(*) FROM photo_files AS t5 WHERE t1.id_pa = t5.id_pa ) AS count_photo_files, (SELECT SUM(t6.size_pf) FROM photo_files AS t6 WHERE t1.id_pa = t6.id_pa ) AS sum_v_photo_files, (SELECT min(t7.id_pf) FROM photo_files AS t7 WHERE t1.id_pa = t7.id_pa AND t7.size_pf is NOT NULL AND t7.size_pf > 0 ) AS min_v_photo_files FROM photo_albums AS t1 LEFT JOIN users AS t4 ON t1.id_un = t4.id ' . $c->stash->{forward_sql3} . ' ORDER BY t1.created desc LIMIT ?,?'; # URL pages $c->stash->{forward_url} = '/photo/content/' . $id_co . '/'; $c->forward( 'index_off', [$id] ); } sub last : Local { my ( $self, $c, $id_un, $id ) = @_; $c->stash->{template} = 'photo.tt'; $c->stash->{current_last} = 1; $c->stash->{id_un} = $id_un; # all last photos are albums of user if ( $id_un !~ /^\d+$/ ) { $c->stash( no_user_id => 1, off_photo => 1, ); $c->detach(); } # access to private information # is settled access: if the session of user private and if he looks the information my $user = $c->forward( qw /MyApp::Controller::friends found_users/, [ $id_un ] ); my $friends = $c->user_exists() && $c->forward( qw /MyApp::Controller::friends found_friends/, [ $id_un, $c->user->{user}->{id} ] ); # if !let_look_profile && !friends && ! if ( ( ( $c->user_exists() && $id_un != $c->user->{user}->{id} ) && !$friends && ( $user && $user->{let_look_profile} == 0 ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat_friends => 1, off_photo => 1, ); $c->detach(); } # if !friends or or etc if ( (!$c->user_exists() && $user->{let_look_profile} == 0 ) || ( ( $c->user_exists() && $id_un != $c->user->{user}->{id} ) && !$friends && ( $user && $user->{let_look_profile} == 0 ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat => 1, off_photo => 1, ); $c->detach(); } # access to information # is settled access: if the session of user private and if he looks the information =dffdg if ( $id_un !~ /^\d+$/ || ( !$c->user_exists() || $id_un != $c->user->{user}->{id} ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat => 1, off_photo => 1, ); $c->detach(); } =cut # URL pages $c->stash->{forward_sql3} = ' LEFT JOIN content AS t2 ON t1.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE t1.id_un = ' . $id_un; $c->stash->{forward_sql_p} = 'SELECT t1.id_co, t1.id_pa, t1.id_un, t1.name_pa, t1.description_pa, t1.hidden_pa, t1.created, t1.privat_pa, t2.name_co, t2.active_co, t2.hiden_co, t2.hiden_g_co, t2.close_co, t3.hiden_g_co AS hiden_g_se, t3.active_se, t4.username, (SELECT count(*) FROM photo_files AS t5 WHERE t1.id_pa = t5.id_pa ) AS count_photo_files, (SELECT SUM(t6.size_pf) FROM photo_files AS t6 WHERE t1.id_pa = t6.id_pa ) AS sum_v_photo_files, (SELECT min(t7.id_pf) FROM photo_files AS t7 WHERE t1.id_pa = t7.id_pa AND t7.size_pf is NOT NULL AND t7.size_pf > 0 ) AS min_v_photo_files FROM photo_albums AS t1 LEFT JOIN users AS t4 ON t1.id_un = t4.id ' . $c->stash->{forward_sql3} . ' ORDER BY t1.created desc LIMIT ?,?'; $c->stash->{forward_url} = '/photo/last/' . $id_un . '/'; $c->forward( 'index_off', [$id] ); } sub privat : Local { my ( $self, $c, $id_un, $id ) = @_; $c->stash->{template} = 'photo.tt'; $c->stash->{current_privat} = 1; $c->stash->{id_un} = $id_un; # use Data::Dumper; # print Dumper($c->user); if ( $id_un !~ /^\d+$/ ) { $c->stash( no_user_id => 1, off_photo => 1, ); $c->detach(); } # access to private information # is settled access: if the session of user private and if he looks the information my $user = $c->forward( qw /MyApp::Controller::friends found_users/, [ $id_un ] ); my $friends = $c->user_exists() && $c->forward( qw /MyApp::Controller::friends found_friends/, [ $id_un, $c->user->{user}->{id} ] ); # if !let_look_profile && !friends && ! if ( ( ( $c->user_exists() && $id_un != $c->user->{user}->{id} ) && !$friends && ( $user && $user->{let_look_profile} == 0 ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat_friends => 1, off_photo => 1, ); $c->detach(); } # print $user->{let_look_profile}; # if !friends or or etc if ( (!$c->user_exists() && $user->{let_look_profile} == 0 ) || ( ( $c->user_exists() && $id_un != $c->user->{user}->{id} ) && !$friends && ( $user && $user->{let_look_profile} == 0 ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat => 1, off_photo => 1, ); $c->detach(); } =dfdf if ( $id_un !~ /^\d+$/ || !$c->user_exists() || ( $id_un != $c->user->{user}->{id} && !$c->forward( qw /MyApp::Controller::friends found_friends/, [ $id_un, $c->user->{user}->{id} ] ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat => 1, off_photo => 1, ); $c->detach(); } =cut $c->stash->{forward_sql3} = ' WHERE t1.id_un = ' . $id_un . ' AND t1.privat_pa = 1 '; $c->stash->{forward_sql_p} = ' SELECT t1.id_co, t1.id_pa, t1.id_un, t1.name_pa, t1.description_pa, t1.hidden_pa, t1.created, t1.privat_pa, t4.username, (SELECT count(*) FROM photo_files AS t5 WHERE t1.id_pa = t5.id_pa ) AS count_photo_files, (SELECT SUM(t6.size_pf) FROM photo_files AS t6 WHERE t1.id_pa = t6.id_pa ) AS sum_v_photo_files, (SELECT min(t7.id_pf) FROM photo_files AS t7 WHERE t1.id_pa = t7.id_pa AND t7.size_pf is NOT NULL AND t7.size_pf > 0 ) AS min_v_photo_files FROM photo_albums AS t1 LEFT JOIN users AS t4 ON t1.id_un = t4.id ' . $c->stash->{forward_sql3} . ' ORDER BY t1.created desc LIMIT ?,?'; # URL pages $c->stash->{forward_url} = '/photo/privat/' . $id_un . '/'; $c->forward( 'index_off', [$id] ); } sub index_pages_photo : Path('/photo') : Args(1) { my ( $self, $c, $id, ) = @_; $c->stash->{template} = 'photo.tt'; $c->forward( 'index_photo', [$id] ); } sub index_photo : Path('/photo') : Args(0) { my ( $self, $c, $id ) = @_; $c->stash->{template} = 'photo.tt'; $c->stash->{current_view} = 1; if ( $c->user_exists() == 0 ) { $c->stash->{forward_sql3} = ' LEFT JOIN content AS t2 ON t1.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE t2.hiden_g_co = 0 AND t2.hiden_co = 0 AND t2.active_co = 1 AND t3.active_se = 1 AND t3.hiden_g_co = 0 '; } if ( !$c->check_user_roles('moder_se') && $c->user_exists() == 1 ) { $c->stash->{forward_sql3} = ' LEFT JOIN content AS t2 ON t1.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE (( t2.hiden_co = 0 AND t2.active_co = 1) OR t2.id_un = ' . $c->user->{user}->{id} . ') AND (t3.active_se = 1 OR t3.id_un = ' . $c->user->{user}->{id} . ')'; } if ( $c->check_user_roles('moder_co') ) { $c->stash->{forward_sql3} = ' LEFT JOIN content AS t2 ON t1.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se '; } $c->stash->{forward_sql_p} = 'SELECT t1.id_co, t1.id_pa, t1.id_un, t1.name_pa, t1.description_pa, t1.hidden_pa, t1.created, t1.privat_pa, t2.name_co, t2.active_co, t2.hiden_co, t2.hiden_g_co, t2.close_co, t3.hiden_g_co AS hiden_g_se, t3.active_se, t4.username, (SELECT count(*) FROM photo_files AS t5 WHERE t1.id_pa = t5.id_pa ) AS count_photo_files, (SELECT SUM(t6.size_pf) FROM photo_files AS t6 WHERE t1.id_pa = t6.id_pa ) AS sum_v_photo_files, (SELECT min(t7.id_pf) FROM photo_files AS t7 WHERE t1.id_pa = t7.id_pa AND t7.size_pf is NOT NULL AND t7.size_pf > 0 ) AS min_v_photo_files FROM photo_albums AS t1 LEFT JOIN users AS t4 ON t1.id_un = t4.id ' . $c->stash->{forward_sql3} . ' ORDER BY t1.created desc LIMIT ?,?'; # URL pages $c->stash->{forward_url} = '/photo/'; # if ($c->stash->{forward_url}); $c->forward( 'index_off', [$id] ); } ### ### END Dispatcher from photo* to index : Privat ### sub index_off : Privat { my ( $self, $c, $id ) = @_; if ( $id && $id !~ /^\d+$/ ) { $c->stash( error_online_or_id => 1, off_form => 1 ); $c->detach(); } # count of totally of units, for a paginal conclusion my $max_count = 'SELECT count(*) FROM photo_albums AS t1 ' . $c->stash->{forward_sql3}; my $count = $c->model('DBI')->dbh->selectrow_array($max_count); # $c->stash->{forward_url} generation of paginal conclusion my ( $count_limit, $page, $max_page ) = $c->model('DBI') ->build_pages( $c->stash->{forward_url}, $count, $id, undef, 12 ); $c->stash->{page} = $page if ($page); # $c->stash->{forward_sql_p} SQL my $loop_data = $c->model('DBI')->dbh->selectall_arrayref( $c->stash->{forward_sql_p}, { Slice => {} }, $count_limit, $max_page ); # surplus, and conclusion in 4 columns $c->forward( 'index_off_foreach', [$loop_data] ); # if ($loop_data); } sub index_off_foreach : Privat { my ( $self, $c, $loop_data ) = @_; # surplus, and conclusion in 4 columns if ( @{$loop_data} ) { foreach $_ ( @{$loop_data} ) { $_->{sum_v_photo_files} = sprintf( '%.1f', $_->{sum_v_photo_files} / 1048576 ) if ( $_->{sum_v_photo_files} ); $_->{see} = 1 if ( $_->{id_pa} ); $_->{username} = 'Guest' if ( !$_->{username} ); if ( ( $c->user_exists() && $_->{id_un} == $c->user->{user}->{id} ) || $c->check_user_roles('moder_co') ) { $_->{delete_pa} = 1; $_->{edit_pa} = 1; } } # in 4 columns $c->stash->{photo_album} = $c->model('DBI')->col_array($loop_data); } } ### ### END Dispatcher ### sub add_privat : Local : Args(1) { my ( $self, $c, $id ) = @_; $c->stash->{privat} = 1; $c->forward( 'add', [ $id, 1 ] ); } sub add : Local : Args(1) { my ( $self, $c, $id, $privat ) = @_; $c->stash->{template} = 'add_photo.tt'; if ( !MyApp->config->{log}->{photo_files_upload_on} ) { $c->stash( error_upload_off => 1, off_form => 1 ); $c->detach(); } # print MyApp->config->{setting}->{photos_dir}; if ( !$c->user_exists() || $id !~ /^\d+$/ ) { $c->stash( error_online_or_id => 1, off_form => 1 ); $c->detach(); } # selection of sql at: # $privat selection of photo of album: his proprietor, ID and names, verification of privat or not privat # !$privat selection of photo of album: his proprietor, ID and names, also selection of content: # ID of content, name, closed or opened # return of hash_ref my $loop = $c->forward( 'select_pa', [ $id, $privat ] ); # treatment hash_ref # conclusion of error of vital error, and conclusion of hash_ref in a template # return of id_pa photo of album my $id_pa = $c->forward( 'check_pa_acl', [ $loop, $privat ] ); $c->request->parameters->{form_submit} ||= ''; ## <input type="hidden" name="form_submit" value="yes"> # if load of picture from a form if ( $c->request->parameters->{form_submit} eq 'yes' ) { # $CGI::POST_MAX = 444; # $c->request->params->{name_pf} ||= ''; # $c->request->params->{description_pf} ||= ''; $c->request->params->{quality} ||= ''; $c->request->params->{geometry} ||= ''; my $f = $c->model('ExtraDBI')->new; if ( $c->request->params->{description_pf} ) { $c->request->params->{description_pf} = $c->model('BBcode')->input_bb( $c->request->params->{description_pf}, [ 'url' ] ); $c->request->params->{description_pf} = $f->addition( 'description_pf', $c->request->params->{description_pf} )->out; } $c->request->params->{name_pf} = $f->head_text( 'name_pf', $c->request->params->{name_pf} )->out if ( $c->request->params->{name_pf} ); # verification of maximally possible loads from an user if ( !$c->check_user_roles('moder_co') && MyApp->config->{log}->{photo_files_max_limit} < $c->model('DBI')->select_log( ['3', $c->user->{user}->{id}, $c->request->address || undef, $c->request->header('X-Forwarded-For') || undef, time - MyApp->config->{log}->{photo_files_max_limit_time}] ) ) { $c->stash( limit_max_uload => 1, max_limit => MyApp->config->{log}->{photo_files_max_limit}, max_time => MyApp->config->{log}->{photo_files_max_limit_time} / 60 , off_form => 1 ); $c->detach(); } my $id_pf; my $file; my $file_thumbnail; my $dir; my $dir_thumbnail; # account of amount of the loaded files loaded # to control the maximally possible amount of loads $c->model('DBI')->insert_log([ 3, $c->user->{user}->{id}, time, $c->request->address || undef, $c->request->header('X-Forwarded-For') || undef ]) if ( !$c->check_user_roles('moder_co') ); if ( my $upload = $c->request->upload('field') ) { if ($upload->is_image) { # $id_pa, $name_pf, $description_pf # we insert the photos of files given in a table, #to define ID and create a file with the same ID... $id_pf = $c->forward( 'insert_photo', [ $id_pa, $c->request->params->{name_pf}, $c->request->params->{description_pf} ] ); $dir = MyApp->config->{setting}->{photos_dir} . '' . $id_pa; $file = $dir . '/' . $id_pf . '.jpg'; $dir_thumbnail = $dir . '/thumbnail'; $file_thumbnail = $dir_thumbnail . '/' . $id_pf . '.jpg'; make_path( $dir, { mode => 0750 } ) unless ( -d $dir ); make_path( $dir_thumbnail, { mode => 0750 } ) unless ( -d $dir_thumbnail ); unless ( $upload->link_to($file) || $upload->copy_to($file) ) { die("Failed to copy '$file' to '$file': $!"); } my $size = ( stat($file) )[7]; # if max photo 5-7Mb, to delete... if (7000000 < $size) { remove_tree( $file ); $c->stash->{error_upload_big_image} = 1; $c->detach(); } # did simpler and more transparent (but not very much beautifully) } else { $c->stash->{error_upload_no_image} = 1; $c->detach(); } } else { $c->stash->{error_upload_no_image} = 1; $c->detach(); } my ( $ox, $oy ); # Smoothing for X and Y to the standard size, #if a mark is included for this purpose ( $ox, $oy ) = $c->model('Image')->thumbnail( MyApp->config->{setting}->{x}, MyApp->config->{setting}->{y}, $file, undef, $c->request->params->{quality} ) if ( $c->request->params->{geometry} ); # we change quality, if a mark is included for this purpose $c->model('Image')->convert_quality( $file, 1 ) if ( $c->request->params->{quality} && !$c->request->params->{geometry} ); # thumbnail $c->model('Image') ->thumbnail( '150', '150', $file, $file_thumbnail, $c->request->params->{geometry} ); # if we did not change geometry - it is needed to know final X and Y of picture ( $ox, $oy ) = $c->model('Image')->get_width_height($file) if ( !$ox || !$oy ); my $size = ( stat($file) )[7]; # we add information about a photo file, because we did INSERT to get correct future ID $c->model('DBI')->dbh->do( qq{UPDATE photo_files SET size_pf = ?, x_pf = ?, y_pf = ? WHERE id_pf = ?}, undef, $size, $ox, $oy, $id_pf ); $c->stash->{quality} = 1 if ( $c->request->params->{quality} eq 'on' ); $c->stash->{geometry} = 1 if ( $c->request->params->{geometry} eq 'on' ); $c->stash->{added_photo} = 1; } } sub view_max : Local : Args(2) { my ( $self, $c, $album, $photo ) = @_; $c->stash->{maximally_view} = 1; $c->forward( 'view', [ $album, $photo ] ); } sub view_privat_max : Local : Args(2) { my ( $self, $c, $album, $photo ) = @_; $c->stash->{maximally_view} = 1; $c->forward( 'view_privat', [ $album, $photo ] ); } sub view_privat_page : Path('/view_privat') : Args(3) { my ( $self, $c, $album, $photo, $page ) = @_; $c->stash->{page_cm} = $page; $c->forward( 'view_privat'. [ $album, $photo ] ); } sub view_privat : Local : Args(2) { my ( $self, $c, $album, $photo ) = @_; $c->stash->{template} = 'view_photo_privat.tt'; if ( !$c->user_exists() || $album !~ /^\d+$/ || $photo !~ /^\d+$/ ) { $c->stash( error_album_or_photo => 1, off_photo => 1 ); $c->detach(); } my $sql_p = 'SELECT t1.id_pf, t1.id_pa, t1.id_un, t1.name_pf, t1.description_pf, t1.hidden_pf, t1.created, t1.viewing, t1.size_pf, t1.x_pf, t1.y_pf, t5.hidden_pa, t5.name_pa, t5.privat_pa, t5.description_pa, t4.username, ( SELECT MIN(t6.id_pf) FROM photo_files AS t6 WHERE t6.id_pa = t1.id_pa AND t6.id_pf > t1.id_pf LIMIT 1 ) AS next, ( SELECT MAX(t7.id_pf) FROM photo_files AS t7 WHERE t7.id_pa = t1.id_pa AND t7.id_pf < t1.id_pf LIMIT 1 ) AS prev, (SELECT count(*) FROM photo_files AS t8 WHERE t8.id_pa = t1.id_pa ) AS count_photos, (SELECT count(*) FROM photo_files AS t9 WHERE t9.id_pa = t1.id_pa AND t9.id_pf <= t1.id_pf ) AS count_photo_to FROM photo_files AS t1 LEFT JOIN photo_albums AS t5 ON t1.id_pa = t5.id_pa LEFT JOIN users AS t4 ON t1.id_un = t4.id WHERE t1.id_pf = ? AND t5.id_pa = ? ORDER BY t1.created LIMIT 1'; # print $sql_p; # return; my $loop_data = $c->model('DBI')->dbh->selectrow_hashref( $sql_p, undef, $photo, $album ); if ($loop_data) { if ( $loop_data->{privat_pa} == 0 || ($loop_data->{id_un} != $c->user->{user}->{id} && !$c->forward( qw /MyApp::Controller::friends found_friends/, [ $loop_data->{id_un}, $c->user->{user}->{id} ] ) ) && !$c->check_user_roles('moder_co') ) { $c->stash( no_on_privat_photo_album => 1, off_photo => 1, ); $c->detach(); } ## here must be the module of friends ## ##to define whether there is an author of picture by a friend who looks over that picture ## if ( $loop_data->{hidden_pa} == 1 && ( $c->user_exists() && $loop_data->{id_un} != $c->user->{user}->{id} || !$c->check_user_roles('moder_co') ) ) { $c->stash( error_hidden_pa => 1, off_photo => 1, ); $c->detach(); } if ( $loop_data->{hidden_pf} == 1 && ( $c->user_exists() && $loop_data->{id_un} != $c->user->{user}->{id} || !$c->check_user_roles('moder_co') ) ) { $c->stash( error_hidden_pf => 1, off_photo => 1, ); $c->detach(); } } $c->forward( 'view_off', [ $album, $photo, $loop_data ] ); } sub view_page : Path('/view') : Args(3) { my ( $self, $c, $album, $photo, $page ) = @_; $c->stash->{page_cm} = $page; $c->forward( 'view'. [ $album, $photo ] ); } sub view : Local : Args(2) { my ( $self, $c, $album, $photo, $page ) = @_; $c->stash->{template} = 'view_photo.tt'; $c->stash->{page_cm} = $page; if ( $album !~ /^\d+$/ || $photo !~ /^\d+$/ ) { $c->stash( error_album_or_photo => 1, off_photo => 1 ); $c->detach(); } my $sql3; my $sql_where_min; my $sql_where_max; if ( !$c->user_exists() ) { $sql3 = ' LEFT JOIN content AS t2 ON t5.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE t1.id_pf = ? AND t5.id_pa = ? AND t2.hiden_g_co = 0 AND t2.hiden_co = 0 AND t2.active_co = 1 AND t3.active_se = 1 AND t3.hiden_g_co = 0 '; $sql_where_min = ' AND t6.hidden_pf = 0'; $sql_where_max = ' AND t7.hidden_pf = 0'; } elsif ( !$c->check_user_roles('moder_co') && $c->user_exists() ) { $sql3 = ' LEFT JOIN content AS t2 ON t5.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE t1.id_pf = ? AND t5.id_pa = ? AND (( t2.hiden_co = 0 AND t2.active_co = 1) OR t2.id_un = ' . $c->user->{user}->{id} . ') AND (t3.active_se = 1 OR t3.id_un = ' . $c->user->{user}->{id} . ')'; $sql_where_min = ' AND (t6.hidden_pf = 0 OR t6.id_un = ' . $c->user->{user}->{id} . ')'; $sql_where_max = ' AND (t7.hidden_pf = 0 OR t7.id_un = ' . $c->user->{user}->{id} . ')'; } elsif ( $c->check_user_roles('moder_co') ) { $sql3 = ' LEFT JOIN content AS t2 ON t5.id_co = t2.id_co LEFT JOIN section AS t3 ON t2.id_se = t3.id_se WHERE t1.id_pf = ? AND t5.id_pa = ?'; $sql_where_min = ''; $sql_where_max = ''; } else { $c->response->redirect( $c->uri_for('/') ); $c->detach(); } my $sql_p = 'SELECT t1.id_pf, t1.id_pa, t1.id_un, t1.name_pf, t1.description_pf, t1.hidden_pf, t1.created, t1.viewing, t1.size_pf, t1.x_pf, t1.y_pf, t5.hidden_pa, t5.name_pa, t5.privat_pa, t5.id_co, t5.description_pa, t2.name_co, t2.active_co, t2.hiden_co, t2.hiden_g_co, t2.close_co, t3.close_se, t3.hiden_g_co AS hiden_g_se, t3.active_se, t3.id_se, t3.name_se, t4.username, ( SELECT MIN(t6.id_pf) FROM photo_files AS t6 WHERE t6.id_pa = t1.id_pa AND t6.id_pf > t1.id_pf ' . $sql_where_min . ' LIMIT 1 ) AS next, ( SELECT MAX(t7.id_pf) FROM photo_files AS t7 WHERE t7.id_pa = t1.id_pa AND t7.id_pf < t1.id_pf ' . $sql_where_max . ' LIMIT 1 ) AS prev, (SELECT count(*) FROM photo_files AS t8 WHERE t8.id_pa = t1.id_pa ) AS count_photos, (SELECT count(*) FROM photo_files AS t9 WHERE t9.id_pa = t1.id_pa AND t9.id_pf <= t1.id_pf ) AS count_photo_to FROM photo_files AS t1 LEFT JOIN photo_albums AS t5 ON t1.id_pa = t5.id_pa LEFT JOIN users AS t4 ON t1.id_un = t4.id ' . $sql3 . ' ORDER BY t1.created LIMIT 1'; # print $sql_p; # return; my $loop_data = $c->model('DBI')->dbh->selectrow_hashref( $sql_p, undef, $photo, $album ); ## ##to define whether there is an author of picture by a friend who looks over that picture ## if ($loop_data) { if ( $loop_data->{privat_pa} == 1 ) { $c->stash( no_on_privat_photo_album => 1, off_photo => 1, ); $c->detach(); } if ( $loop_data->{hidden_pa} == 1 && ( $c->user_exists() && $loop_data->{id_un} != $c->user->{user}->{id} || !$c->check_user_roles('moder_co') ) ) { $c->stash( error_hidden_pa => 1, off_photo => 1, ); $c->detach(); } if ( $loop_data->{hidden_pf} == 1 && ( $c->user_exists() && $loop_data->{id_un} != $c->user->{user}->{id} || !$c->check_user_roles('moder_co') ) ) { $c->stash( error_hidden_pf => 1, off_photo => 1, ); $c->detach(); } } $c->forward( 'view_off', [ $album, $photo, $loop_data ] ); } ### ### END Dispatcher from photo/view* to index : Privat ### sub view_off : Privat { my ( $self, $c, $album, $photo, $loop_data ) = @_; if ( !$loop_data ) { $c->stash( no_photo_album => 1, off_photo => 1, ); $c->detach(); } if ( ( $c->user_exists() && $loop_data->{id_un} == $c->user->{user}->{id} ) || $c->check_user_roles('moder_co') ) { $c->stash->{edit_pa} = 1; } # if we did not change geometry - it is needed to know final X and Y of picture ( $loop_data->{x_pf}, $loop_data->{y_pf} ) = $c->model('Image') ->get_width_height( MyApp->config->{setting}->{photos_dir} . '' . $loop_data->{id_pa} . '/' . $loop_data->{id_pf} . '.jpg' ) if ( !$loop_data->{x_pf} || !$loop_data->{y_pf} ); if ( $loop_data->{x_pf} > MyApp->config->{setting}->{x} + 2 || $loop_data->{y_pf} > MyApp->config->{setting}->{y} + 2 ) { $c->stash( max_view => 1, max_x => MyApp->config->{setting}->{x}, max_y => MyApp->config->{setting}->{y} + 20, ); } $loop_data->{size_pf} = sprintf( '%.1f', $loop_data->{size_pf} / 1024 ) if ( $loop_data->{size_pf} ); $loop_data->{name_pf} = $loop_data->{id_pf} . '.jpg' if ( !$loop_data->{name_pf} ); $loop_data->{next} = $loop_data->{id_pf} if ( !$loop_data->{next} ); $loop_data->{prev} = $loop_data->{id_pf} if ( !$loop_data->{prev} ); $c->stash($loop_data); $c->model('DBI')->dbh->do( qq{UPDATE photo_files SET viewing=1+viewing WHERE id_pf = ?}, undef, $photo ); $c->forward( qw /MyApp::Controller::Comments_photo view_pf_comment/, [ $album, $photo, $c->stash->{page_cm}, $loop_data ] ); # $c->forward( qw /MyApp::Controller::comments_photo view_pf_comment/, # [ $album, $photo, $c->request->params->{page}, $loop_data ] ); $c->detach(); } sub delete : Local : Args(1) { my ( $self, $c, $id ) = @_; $c->stash->{template} = 'add_photo.tt'; if ( !$c->user_exists() || $id !~ /^\d+$/ ) { $c->response->redirect( $c->request->referer() or '/' ); $c->detach(); } my $where = !$c->check_user_roles('moder_co') ? 'AND id_un = ' . $c->user->{user}->{id} : ''; my $limit_sql = 'SELECT id_pf, id_pa, id_un FROM photo_files WHERE id_pf = ? ' . $where . ' LIMIT 1'; my $loop = $c->model('DBI')->dbh->selectrow_hashref( $limit_sql, undef, $id ); if ( !$loop || !$loop->{id_pf} ) { $c->response->redirect( $c->request->referer() or '/' ); $c->detach(); } my $file = MyApp->config->{setting}->{photos_dir} . '' . $loop->{id_pa} . '/' . $loop->{id_pf} . '.jpg'; my $file_thumbnail = MyApp->config->{setting}->{photos_dir} . '' . $loop->{id_pa} . '/thumbnail/' . $loop->{id_pf} . '.jpg'; remove_tree( $file_thumbnail, $file ); $c->model('DBI')->dbh->do( 'DELETE from photo_files WHERE id_pf = ' . $id ); $c->response->redirect( $c->request->referer() or '/' ); $c->detach(); } sub hidden : Local : Args(1) { my ( $self, $c, $id ) = @_; $c->stash->{template} = 'add_photo.tt'; if ( !$c->user_exists() || $id !~ /^\d+$/ ) { $c->response->redirect( $c->request->referer() or '/' ); $c->detach(); } my $where = !$c->check_user_roles('moder_co') ? 'AND id_un = ' . $c->user->{user}->{id} : ''; my $limit_sql = 'UPDATE photo_files SET hidden_pf = 1-hidden_pf WHERE id_pf = ? ' . $where; $c->model('DBI')->dbh->do( $limit_sql, undef, $id ); $c->response->redirect( $c->request->referer() or '/' ); $c->detach(); } ## Privats sub select_pa : Privat { my ( $self, $c, $id, $privat ) = @_; # selection of sql at: # $privat selection of photo of album: his proprietor, ID and names, verification of privat or not privat # !$privat selection of photo of album: his proprietor, ID and names, also selection of content: # ID of content, name, closed or opened # return of hash_ref my $loop_data; # my $sql_u = 'AND t1.id_un = ' . $c->user->{user}->{id} if (!$c->check_user_roles('moder_co')); my $limit_sql; if ($privat) { $limit_sql = 'SELECT t1.id_pa, t1.id_un, t1.name_pa, t1.privat_pa, t1.hidden_pa FROM photo_albums AS t1 WHERE t1.id_pa = ? LIMIT 1'; } else { $limit_sql = 'SELECT t1.id_pa, t1.id_un, t1.hidden_pa, t1.name_pa, t2.close_co, t2.name_co, t2.id_co FROM photo_albums AS t1 LEFT JOIN content AS t2 ON t1.id_co = t2.id_co WHERE t1.id_pa = ? LIMIT 1'; } $loop_data = $c->model('DBI')->dbh->selectrow_hashref( $limit_sql, undef, $id ); return $loop_data ? $loop_data : undef; } sub check_pa_acl : Privat { my ( $self, $c, $loop_data, $privat ) = @_; # treatment hash_ref # conclusion of error of vital error, and conclusion of hash_ref in a template # return of id_pa photo of album if ( !$loop_data || !$loop_data->{id_pa} ) { $c->stash( no_photo => 1, off_form => 1 ); $c->detach(); } if ( !$c->check_user_roles('moder_co') && $loop_data->{id_un} != $c->user->{user}->{id} ) { $c->stash( photo_add_no_user => 1, off_form => 1 ); $c->detach(); } if ($privat) { if ( !$loop_data->{privat_pa} ) { $c->stash( no_privat => 1, off_form => 1 ); $c->detach(); } if ( $loop_data->{close_co} ) { $c->stash( photo_add_no_close_co => 1, off_form => 1 ); $c->detach(); } } $c->stash($loop_data); return $loop_data->{id_pa}; } sub insert_photo : Privat { my ( $self, $c, $id_pa, $name_pf, $description_pf ) = @_; # $id_pa, $name_pf, $description_pf # we insert the photos of files given in a table, to define ID and create a file with the same ID... my $sql = 'INSERT INTO photo_files SET id_pa = ?, id_un = ?, name_pf = ?, description_pf = ?, created = ?'; $c->model('DBI')->dbh->do( $sql, undef, $id_pa, $c->user->{user}->{id}, $name_pf, $description_pf, time ); return $c->model('DBI')->dbh->{mysql_insertid}; } =head1 AUTHOR Dmitriy email: rtyug@ukr.net www: http://unixforum.org.ua =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; отладка Code: ./myapp_server.pl -r Useless use of hash element in void context at /home/x0/data4/MyApp/script/../lib/MyApp/Controller/voting.pm line 114. MyApp::View::HTML::Template is using the deprecated Catalyst::Base, update your application as this will be removed in the next major release at /usr/local/lib/perl5/site_perl/5.8.9/Catalyst/Base.pm line 7. [debug] Debug messages enabled [debug] Statistics enabled [warn] You are running an old script! Please update by running (this will overwrite existing files): catalyst.pl -force -scripts MyApp or (this will not overwrite existing files): catalyst.pl -scripts MyApp [debug] Loaded plugins: .----------------------------------------------------------------------------. | Catalyst::Plugin::Authentication 0.100091 | | Catalyst::Plugin::Authentication::Store::DBI 0.01 | | Catalyst::Plugin::Authorization::Roles 0.07 | | Catalyst::Plugin::Captcha 0.03 | | Catalyst::Plugin::ConfigLoader 0.23 | | Catalyst::Plugin::Session 0.22 | | Catalyst::Plugin::Session::State::Cookie 0.11 | | Catalyst::Plugin::Session::Store::DBI 0.13 | | Catalyst::Plugin::Static::Simple 0.21 | | Catalyst::Plugin::Unicode 0.91 | | Catalyst::Plugin::Upload::Image::Magick | '----------------------------------------------------------------------------' [debug] Loaded dispatcher "Catalyst::Dispatcher" [debug] Loaded engine "Catalyst::Engine::HTTP::Restarter" [debug] Found home "/home/x0/data4/MyApp" [debug] Loaded Config "/home/x0/data4/MyApp/myapp.conf" [debug] Setting up auth realm default [debug] Loaded components: .-----------------------------------------------------------------+----------. | Class | Type | +-----------------------------------------------------------------+----------+ | MyApp::Controller::Comments_api | instance | | MyApp::Controller::Comments_photo | instance | | MyApp::Controller::Cron | instance | | MyApp::Controller::Error | instance | | MyApp::Controller::Help | instance | | MyApp::Controller::Login | instance | | MyApp::Controller::Logout | instance | | MyApp::Controller::Profile | instance | | MyApp::Controller::Root | instance | | MyApp::Controller::albums | instance | | MyApp::Controller::comment | instance | | MyApp::Controller::delete | instance | | MyApp::Controller::friends | instance | | MyApp::Controller::groups | instance | | MyApp::Controller::groups_photo | instance | | MyApp::Controller::groups_video | instance | | MyApp::Controller::meneger | instance | | MyApp::Controller::meneger_users | instance | | MyApp::Controller::personal_reports | instance | | MyApp::Controller::photo | instance | | MyApp::Controller::photo_album | instance | | MyApp::Controller::registration | instance | | MyApp::Controller::search | instance | | MyApp::Controller::stat | instance | | MyApp::Controller::video | instance | | MyApp::Controller::video_album | instance | | MyApp::Controller::view_content | instance | | MyApp::Controller::view_content_head | instance | | MyApp::Controller::view_global_section | instance | | MyApp::Controller::view_section | instance | | MyApp::Controller::voting | instance | | MyApp::Model::BBcode | instance | | MyApp::Model::DBI | instance | | MyApp::Model::ExtraDBI | instance | | MyApp::Model::Image | instance | | MyApp::Model::Quantum | instance | | MyApp::Model::Sorting | instance | | MyApp::Model::Tree | instance | | MyApp::View::HTML::Template | instance | '-----------------------------------------------------------------+----------' .................................................. .................................................. [debug] Loaded Path actions: .-------------------------------------+--------------------------------------. | Path | Private | +-------------------------------------+--------------------------------------+ | / | /default | | / | /index | | /albums | /albums/index | | /comment | /comment/index | | /comment/add | /comment/add | | /comment/delete_comment | /comment/delete_comment | | /comment/edit2 | /comment/edit2 | | /comment/edit_comment | /comment/edit_comment | | /comments_api | /comments_api/index | | /comments_photo | /comments_photo/index | | /comments_photo/add | /comments_photo/add | | /comments_photo/create_captcha | /comments_photo/create_captcha | | /cron/converts_video | /cron/converts_video | | /delete | /delete/index | | /delete/delete_comment | /delete/delete_comment | | /delete/delete_content | /delete/delete_content | | /delete/delete_section | /delete/delete_section | | /error | /error/index | | /friends | /friends/index | | /friends/add_friends | /friends/add_friends | | /friends/confirm | /friends/confirm | | /friends/confirm_friend | /friends/confirm_friend | | /friends/decline | /friends/decline | | /friends/decline_friend | /friends/decline_friend | | /friends/delete_friend | /friends/delete_friend | | /friends/not_confirm | /friends/not_confirm | | /friends/not_decline | /friends/not_decline | | /groups | /groups/index | | /groups_photo | /groups_photo/index | | /groups_video | /groups_video/index | | /help | /help/index | | /login | /login/login | | /logout | /logout/index | | /meneger | /meneger/index | | /meneger/active_cs | /meneger/active_cs | | /meneger_users | /meneger_users/index | | /meneger_users/active | /meneger_users/active | | /meneger_users/delete_user | /meneger_users/delete_user | | /meneger_users/level_access | /meneger_users/level_access | | /personal_reports | /personal_reports/index | | /photo | /photo/index_photo | | /photo | /photo/index_pages_photo | | /photo/add | /photo/add | | /photo/add_privat | /photo/add_privat | | /photo/content | /photo/content | | /photo/delete | /photo/delete | | /photo/hidden | /photo/hidden | | /photo/last | /photo/last | | /photo/privat | /photo/privat | | /photo/view | /photo/view | | /photo/view_max | /photo/view_max | | /photo/view_privat | /photo/view_privat | | /photo/view_privat_max | /photo/view_privat_max | | /photo_album | /photo_album/index | | /photo_album | /photo_album/index_pages_album | | /photo_album/add | /photo_album/add | | /photo_album/add2 | /photo_album/add2 | | /photo_album/add2_privat | /photo_album/add2_privat | | /photo_album/add_privat | /photo_album/add_privat | | /photo_album/delete | /photo_album/delete | | /photo_album/edit | /photo_album/edit | | /photo_album/edit2 | /photo_album/edit2 | | /photo_album/edit2_privat | /photo_album/edit2_privat | | /photo_album/edit_privat | /photo_album/edit_privat | | /photo_album/hidden | /photo_album/hidden | | /photo_album/privat | /photo_album/privat | | /profile | /profile/index | | /profile/add_content | /profile/add_content | | /profile/add_content2 | /profile/add_content2 | | /profile/add_section | /profile/add_section | | /profile/add_section2 | /profile/add_section2 | | /profile/edit_content | /profile/edit_content | | /profile/edit_pesonal_content | /profile/edit_pesonal_content | | /profile/edit_pesonal_content2 | /profile/edit_pesonal_content2 | | /profile/edit_pesonal_section | /profile/edit_pesonal_section | | /profile/edit_pesonal_section2 | /profile/edit_pesonal_section2 | | /profile/edit_section | /profile/edit_section | | /profile/view_pesonal_comment | /profile/view_pesonal_comment | | /profile/view_pesonal_comment | /profile/view_pesonal_comment_page | | /profile/view_pesonal_comment | /profile/view_pesonal_comment_admin | | /profile/view_pesonal_content | /profile/view_pesonal_content | | /profile/view_pesonal_content | /profile/view_pesonal_content_page | | /profile/view_pesonal_content | /profile/view_pesonal_content_admin | | /profile/view_pesonal_section | /profile/view_pesonal_section | | /profile/view_pesonal_section | /profile/view_pesonal_section_page | | /profile/view_pesonal_section | /profile/view_pesonal_section_admin | | /profile/view_profile | /profile/view_profile | | /registration | /registration/index | | /registration/active | /registration/active | | /registration/add | /registration/add | | /registration/create_captcha | /registration/create_captcha | | /registration/edit | /registration/edit | | /re





Проголосовавшых: 1        Балов: 1        Среднее: 0        Популярность: 8       
Чтобы проголосовать вы должны зарегистрироватся !




Фотоальбомы:       
фотоальбомов не найдено





Видеоальбомы:       
Видеоальбомов не найдено



Комментарии



Гостям, запрещено создавать комментарии! Можете зарегистрироватся ...



HTML/CSS/JS has been tested in a browser Firefox2-3, secondary - IE.
BETA testing, Lite version, MVC Catalyst, Perl, Open source (email: q7u5@ukr.net)
English version (in development, detail of email: q7u5@ukr.net)
Если вы нашли ошибку, сообщите пожалуйста на email: q7u5@ukr.net (не забудьте отправить текст ошибку которая будет на экране или опишите ее)
Copyright 2008 www.x0.org.ua . All rights reserved
видео сервис, видео просмотр, видео с мобильного, скрипт перекодирование видео, сервис, перекодирование видео, mp3 музыка, социальная сеть, социальные сети, разработка социальных сетей, крупные порталы, большие порталы, высоконагруженный портал видео сайт, фотоальбом фотоальбомы, фотогрфия фотогрфии, фото графии, фото альбомы, фото видео, разработки perl разработчики perl разработанные perl разрабатывать perl разработки perl разрабатывание разрабатываю разработчики разработанные модули модели контроллеры представление разработка сайтов, разработка движка CMS фремворки, фреймфорки фрейворк, форемфорк движки конвертирвоание видео, чат чаты социальная сеть социальной сети социальные сеть разработка социальной сети разработка социальная сеть разрабатывание социальной сеть социальная сеть клубы большие порталы, разработчики разработки моделирование заказы магазин поиск работы музыка компонены веб разработка высокопроизводительный мультимедиа видео трансляция поисковая транслирование видео сервисы видео портал порталы архив файл обмен статьи блогеры програмирование программисты программировать фремворки фремворка фремворк web основы javascript jquery markitup java script mod_perl fastcgi apache22 mysql украина украинский русский россия библиотека видео сай трансляция транслирование seek read write open close все о программирвоании супер программное обеспчение обезпчение обеспечение кеширование кеширование memchahe запросы новые возможности catalyst perl video service, video viewing, video from mobile, video transcoding script, service, transcoding video, mp3 music, social networking, social networks, the development of social networks, large portals, large portals, heavy-Portal video site, photo albums, More Photos More Photos, photo graphy, photo albums, photo video, development perl perl developer perl designed to develop perl development perl razrabatyvanie developers develop applications designed modules model controllers submission web development, development engine CMS The framework, freymforki freyvork, foremfork Engines konvertirvoanie video, chat chat social network social networking social network development of social network development razrabatyvanie social network social networking social network of clubs big portals, developers design modeling jobs store job search music component web development high-performance multimedia video transyaltsiya Search Video Services Video Portal Portal Archive file sharing article bloggers programmers programming programming The framework The framework The framework web framework javascript jquery markitup java script mod_perl fastcgi apache22 mysql Ukraine Ukrainian Russian Russia Library video broadcast broadcast sai seek read write open close all about super programmirvoanii software obespchenie software caching caching memchahe requests закачивание закачка скачивание просмотр видео фото музыка mp3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1