Доброго всем. Пытаюсь переделать регистрацию на Movable Type 5.2.7. МТ запустил как pcgi. Работает в такой связке nginx+starman. Принцип регистрации: Пользователь жмет ссылку авторизации, в ссылке заложены сам скрипт, id блога, id записи в блоге(если он нажал на ссылку рядом с записью), и возвратный url. Далее подгружается этот скрипт. Скрипт вываливает окно логина, внизу ссылка на регистрацию. При нажатии на нее подгружается форма регистрации. Шаблон этой регистрации я уже переделал как нужно мне. Форму логина вываливает метод login_form в конце видно как он строит форму: Код | $app->build_page( 'login.tmpl', $param );
|
Вход через логин форму осуществляет метод do_login. Форму регистрации вываливает метод - signup, осуществляет регистрацию do_signup. Замечу сразу что скрипт делает чересчур многое, не только авторизацию и регистрацию. Как стартует скрипт, начальная часть: Код | package MT::App::Comments; use strict;
use base 'MT::App';
use MT::Comment; use MT::I18N qw( wrap_text ); use MT::Util qw( remove_html encode_html encode_url decode_url is_valid_email is_valid_url is_url escape_unicode format_ts encode_js epoch2ts ); use MT::Entry qw(:constants); use MT::Author; use MT::JunkFilter qw(:constants);
sub id {'comments'}
sub init { my $app = shift; $app->SUPER::init(@_) or return; $app->add_methods( login => \&login_form, login_external => \&login_external, do_login => \&do_login, signup => \&signup, do_signup => \&do_signup, do_register => \&do_register, preview => \&preview, post => \&post, handle_sign_in => { handler => \&handle_sign_in, charset => 'utf-8' }, userinfo => \&userinfo, verify_session => \&verify_session, edit_profile => \&edit_commenter_profile, save_profile => \&save_commenter_profile, red => \&do_red, generate_captcha => \&generate_captcha,
start_recover => \&start_recover, recover => \&recover, new_pw => \&new_pw,
comment_listing => \&comment_listing,
recover_lockout => 'MT::CMS::User::recover_lockout', ); $app->{template_dir} = 'comment'; $app->{plugin_template_path} = ''; $app->init_commenter_authenticators; $app->init_captcha_providers(); MT->add_callback( 'CommentThrottleFilter', 1, undef, \&MT::App::Comments::_builtin_throttle ); $app; }
sub init_request { my $app = shift; $app->SUPER::init_request(@_); $app->set_no_cache; $app->{default_mode} = 'post'; my $q = $app->param;
if ( my $blog_id = $q->param('blog_id') ) { if ( $blog_id ne int($blog_id) ) { die $app->translate("Invalid request"); } }
# Global '_type' parameter check; if we get something # special character, die if ( my $type = $app->param('_type') ) { if ( $type =~ /\W/ ) { die $app->translate("Invalid request"); } }
## We don't really have a __mode parameter, because we have to ## use named submit buttons for Preview and Post. So we hack it. if ( $q->param('post') || $q->param('post_x') || $q->param('post.x') ) { $app->mode('post'); } elsif ($q->param('preview') || $q->param('preview_x') || $q->param('preview.x') ) { $app->mode('preview'); } elsif ($q->param('reply') || $q->param('reply_x') || $q->param('reply.x') ) { $app->mode('reply'); } elsif ($q->param('reply_preview') || $q->param('reply_preview_x') || $q->param('reply_preview.x') ) { $app->mode('reply_preview'); } elsif ( $app->path_info =~ /captcha/ ) { $app->mode('generate_captcha'); } }
|
Вот сам метод do_signup: Код | sub do_signup { my $app = shift; my $q = $app->param; return $app->error( $app->translate("Invalid request") ) if $app->request_method() ne 'POST';
my $param = {}; $param->{$_} = $q->param($_) foreach qw(blog_id entry_id static email url username nickname return_url );
return $app->errtrans("Invalid request") unless $param->{blog_id};
my $blog = $app->model('blog')->load( $param->{blog_id} || 0 ) or return $app->error( $app->translate( 'Cannot load blog #[_1].', $param->{blog_id} ) );
my $cfg = $app->config; if ( my $registration = $cfg->CommenterRegistration ) { return $app->handle_error( $app->translate('Signing up is not allowed.') ) unless $registration->{Allow} && $blog->allow_commenter_regist; } else { return $app->handle_error( $app->translate('Signing up is not allowed.') ); }
my $filter_result = $app->run_callbacks( 'api_save_filter.author', $app );
return $app->handle_error('Выберите страну') unless $param->{'country'}; return $app->handle_error('Выберите регион') unless $param->{'state'}; return $app->handle_error('Выберите город') unless $param->{'town'};
if($country !~ /^[\d]+$/ ){ return $app->handle_error('Выберите страну'); }elsif($state !~ /^[\d]+$/){ return $app->handle_error('Выберите регион'); }elsif($town !~ /^[\d]+$/ ){ return $app->handle_error('Выберите город'); }else{}
my $user; $user = $app->create_user_pending($param) if $filter_result; unless ($user) { my $blog = $app->model('blog')->load( $param->{blog_id} ) or return $app->error( $app->translate( 'Cannot load blog #[_1].', $param->{blog_id} ) ); if ( my $provider = MT->effective_captcha_provider( $blog->captcha_provider ) ) { $param->{captcha_fields} = $provider->form_fields( $blog->id ); } $param->{error} = $app->errstr; $param->{ 'auth_mode_' . $app->config->AuthenticationModule } = 1; return $app->build_page( 'signup.tmpl', $param ); }
## Assign default role $user->add_default_roles;
my $original = $user->clone(); $app->run_callbacks( 'api_post_save.author', $app, $user, $original );
## Send confirmation email in the background. MT::Util::start_background_task( sub { $app->_send_signup_confirmation( $user->id, $user->email, $param->{entry_id}, $param->{blog_id}, $param->{static} || $param->{return_url} ); } );
my $entry = MT::Entry->load( $param->{entry_id} ) if ( $param->{entry_id} ); if ($entry) { my $entry_url = $entry->permalink; $app->build_page( 'signup_thanks.tmpl', { email => $user->email, entry_url => $entry_url } ); } else { $app->build_page( 'signup_thanks.tmpl', { email => $user->email, return_url => is_valid_url( $param->{return_url} || $param->{static} ) } ); } }
|
При попытке, внести изменения в функцию sign_up ничего не происходит. Пытаюсь вызвать die ничего не происходит. При попытке из этого метода сохранить данные в файл на диске, тоже ничего не происходит. В логах нет ничего. Куда копать? Спасибо. Это сообщение отредактировал(а) Marlik - 24.10.2013, 16:39
|