485 lines
20 KiB
PHP
485 lines
20 KiB
PHP
<?php
|
|
if(!function_exists('add_filter')) exit;
|
|
|
|
function fansub_login_body_class($classes, $action) {
|
|
$classes[] = 'fansub';
|
|
if(!empty($action)) {
|
|
$classes[] = 'action-' . $action;
|
|
}
|
|
return $classes;
|
|
}
|
|
add_filter('login_body_class', 'fansub_login_body_class', 10, 2);
|
|
|
|
function fansub_login_redirect_if_logged_in() {
|
|
$action = isset($_GET['action']) ? $_GET['action'] : '';
|
|
if(empty($action) && is_user_logged_in()) {
|
|
wp_redirect(home_url('/'));
|
|
exit;
|
|
}
|
|
}
|
|
add_action('login_init', 'fansub_login_redirect_if_logged_in');
|
|
|
|
function fansub_get_login_logo_url() {
|
|
$user_login = fansub_option_get_object_from_list('user_login');
|
|
$url = '';
|
|
if(fansub_object_valid($user_login)) {
|
|
$option = $user_login->get();
|
|
$logo = fansub_get_value_by_key($option, 'logo');
|
|
$logo = fansub_sanitize_media_value($logo);
|
|
$url = $logo['url'];
|
|
}
|
|
if(empty($url)) {
|
|
$theme_setting = fansub_option_get_object_from_list('theme_setting');
|
|
if(fansub_object_valid($theme_setting)) {
|
|
$option = $theme_setting->get();
|
|
$logo = fansub_get_value_by_key($option, 'logo');
|
|
$logo = fansub_sanitize_media_value($logo);
|
|
$url = $logo['url'];
|
|
}
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
function fansub_use_captcha_for_login_page() {
|
|
$options = get_option('fansub_user_login');
|
|
$use_captcha = fansub_get_value_by_key($options, 'use_captcha');
|
|
$use_captcha = apply_filters('fansub_use_captcha_for_login_page', $use_captcha);
|
|
return (bool)$use_captcha;
|
|
}
|
|
|
|
function fansub_login_captcha_field() {
|
|
echo fansub_login_get_captcha_field();
|
|
}
|
|
|
|
function fansub_login_get_captcha_field() {
|
|
ob_start();
|
|
$args = array(
|
|
'before' => '<p>',
|
|
'after' => '</p>'
|
|
);
|
|
fansub_field_captcha($args);
|
|
return ob_get_clean();
|
|
}
|
|
|
|
function fansub_login_form_top() {
|
|
ob_start();
|
|
do_action('fansub_login_form_before');
|
|
return ob_get_clean();
|
|
}
|
|
|
|
function fansub_login_form_middle() {
|
|
ob_start();
|
|
do_action('login_form');
|
|
return ob_get_clean();
|
|
}
|
|
|
|
function fansub_login_form_bottom() {
|
|
ob_start();
|
|
do_action('fansub_login_form_after');
|
|
return ob_get_clean();
|
|
}
|
|
|
|
function fansub_verify_login_captcha($user, $password) {
|
|
if(isset($_POST['captcha'])) {
|
|
$captcha_code = $_POST['captcha'];
|
|
$captcha = new FANSUB_Captcha();
|
|
if($captcha->check($captcha_code)) {
|
|
return $user;
|
|
}
|
|
return new WP_Error(__('Captcha Invalid', 'fansub'), '<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('Please enter a valid captcha.', 'fansub'));
|
|
}
|
|
return new WP_Error(__('Captcha Invalid', 'fansub'), '<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('You are a robot, if not please check JavaScript enabled on your browser.', 'fansub'));
|
|
}
|
|
|
|
function fansub_verify_registration_captcha($errors, $sanitized_user_login, $user_email) {
|
|
if(isset($_POST['captcha'])) {
|
|
$captcha_code = $_POST['captcha'];
|
|
$captcha = new FANSUB_Captcha();
|
|
if(!$captcha->check($captcha_code)) {
|
|
$errors->add(__('Captcha Invalid', 'fansub'), '<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('Please enter a valid captcha.', 'fansub'));
|
|
}
|
|
} else {
|
|
$errors->add(__('Captcha Invalid', 'fansub'), '<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('You are a robot, if not please check JavaScript enabled on your browser.', 'fansub'));
|
|
}
|
|
return $errors;
|
|
}
|
|
|
|
function fansub_verify_lostpassword_captcha() {
|
|
if(isset($_POST['captcha'])) {
|
|
$captcha_code = $_POST['captcha'];
|
|
$captcha = new FANSUB_Captcha();
|
|
if(!$captcha->check($captcha_code)) {
|
|
wp_die('<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('Please enter a valid captcha.', 'fansub'), __('Captcha Invalid', 'fansub'));
|
|
}
|
|
} else {
|
|
wp_die('<strong>' . __('ERROR:', 'fansub') . '</strong> ' . __('You are a robot, if not please check JavaScript enabled on your browser.', 'fansub'), __('Captcha Invalid', 'fansub'));
|
|
}
|
|
}
|
|
|
|
if(fansub_use_captcha_for_login_page()) {
|
|
add_action('login_form', 'fansub_login_captcha_field');
|
|
add_action('lostpassword_form', 'fansub_login_captcha_field');
|
|
add_action('register_form', 'fansub_login_captcha_field');
|
|
add_filter('wp_authenticate_user', 'fansub_verify_login_captcha', 10, 2);
|
|
add_filter('registration_errors', 'fansub_verify_registration_captcha', 10, 3);
|
|
add_action('lostpassword_post', 'fansub_verify_lostpassword_captcha');
|
|
}
|
|
|
|
add_filter('login_form_top', 'fansub_login_form_top');
|
|
add_filter('login_form_middle', 'fansub_login_form_middle');
|
|
add_filter('login_form_bottom', 'fansub_login_form_bottom');
|
|
|
|
function fansub_get_account_url($type = 'login', $action = '') {
|
|
$url = '';
|
|
$page_account = fansub_get_pages_by_template('page-templates/account.php', array('output' => 'object'));
|
|
switch($type) {
|
|
case 'signup':
|
|
case 'register':
|
|
$page = fansub_get_pages_by_template('page-templates/register.php', array('output' => 'object'));
|
|
if(is_a($page, 'WP_Post')) {
|
|
$url = get_permalink($page);
|
|
} else {
|
|
if(is_a($page_account, 'WP_Post')) {
|
|
$url = get_permalink($page_account);
|
|
$url = trailingslashit($url);
|
|
$url = add_query_arg(array('action' => 'register'), $url);
|
|
}
|
|
}
|
|
break;
|
|
case 'lostpassword':
|
|
if(is_a($page_account, 'WP_Post')) {
|
|
$url = get_permalink($page_account);
|
|
$url = trailingslashit($url);
|
|
$url = add_query_arg(array('action' => 'lostpassword'), $url);
|
|
}
|
|
break;
|
|
default:
|
|
if(empty($type) || 'account' === $type) {
|
|
if(is_a($page_account, 'WP_Post')) {
|
|
$url = get_permalink($page_account);
|
|
}
|
|
} else {
|
|
$page = fansub_get_pages_by_template('page-templates/login.php', array('output' => 'object'));
|
|
if(is_a($page, 'WP_Post')) {
|
|
$url = get_permalink($page);
|
|
} else {
|
|
if(is_a($page_account, 'WP_Post')) {
|
|
$url = get_permalink($page_account);
|
|
$url = trailingslashit($url);
|
|
if(empty($action)) {
|
|
$action = 'login';
|
|
}
|
|
$url = add_query_arg(array('action' => $action), $url);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
function fansub_user_force_login($user_id) {
|
|
wp_set_auth_cookie($user_id, true);
|
|
}
|
|
|
|
function fansub_user_login($username, $password, $remember = true) {
|
|
$credentials = array();
|
|
$credentials['user_login'] = $username;
|
|
$credentials['user_password'] = $password;
|
|
$credentials['remember'] = $remember;
|
|
$user = wp_signon($credentials, false);
|
|
if(fansub_allow_user_login_with_email() && !is_a($user, 'WP_User')) {
|
|
if(is_email($username) && email_exists($username)) {
|
|
$new_user = get_user_by('email', $username);
|
|
if(fansub_check_user_password($password, $new_user)) {
|
|
$user = $new_user;
|
|
fansub_user_force_login($new_user->ID);
|
|
}
|
|
}
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
function fansub_account_form_default_args() {
|
|
$lang = fansub_get_language();
|
|
$defaults = array(
|
|
'placeholder_username' => __('Username or email', 'fansub'),
|
|
'placeholder_password' => __('Password', 'fansub'),
|
|
'slogan' => 'One free account gets you into everything %s.',
|
|
'title_lostpassword_link' => __('Password Lost and Found', 'fansub'),
|
|
'text_lostpassword_link' => __('Lost your password?', 'fansub'),
|
|
'text_register_link' => __('Register', 'fansub'),
|
|
'label_email' => __('Email', 'fansub'),
|
|
'label_confirm_password' => __('Confirm your password', 'fansub'),
|
|
'label_phone' => __('Phone', 'fansub')
|
|
);
|
|
if('vi' == $lang) {
|
|
$defaults['label_username'] = 'Tài khoản';
|
|
$defaults['placeholder_username'] = 'Tên tài khoản hoặc email';
|
|
$defaults['label_password'] = 'Mật khẩu';
|
|
$defaults['placeholder_password'] = 'Mật khẩu';
|
|
$defaults['label_remember'] = 'Ghi nhớ đăng nhập?';
|
|
$defaults['label_log_in'] = 'Đăng nhập';
|
|
$defaults['slogan'] = 'Một tài khoản dùng cho tất cả dịch vụ của %s.';
|
|
$defaults['title_lostpassword_link'] = 'Nếu bạn đã quên mật khẩu thì vào đây để lấy lại';
|
|
$defaults['text_lostpassword_link'] = 'Quên mật khẩu?';
|
|
$defaults['text_register_link'] = 'Đăng ký';
|
|
$defaults['label_confirm_password'] = 'Xác nhận mật khẩu';
|
|
$defaults['label_phone'] = 'Điện thoại';
|
|
}
|
|
return apply_filters('fansub_account_form_default_args', $defaults);
|
|
}
|
|
|
|
function fansub_execute_register() {
|
|
$http_post = ('POST' == $_SERVER['REQUEST_METHOD']);
|
|
$user_login = '';
|
|
$user_email = '';
|
|
$pwd = '';
|
|
$pwd_again = '';
|
|
$phone = '';
|
|
$captcha = '';
|
|
$error = false;
|
|
$message = 'Đã có lỗi xảy ra, xin vui lòng thử lại.';
|
|
$inserted = false;
|
|
$user_id = 0;
|
|
$registration_redirect = fansub_get_value_by_key($_REQUEST, 'redirect_to');
|
|
$redirect_to = apply_filters('registration_redirect', $registration_redirect);
|
|
if(is_user_logged_in()) {
|
|
if(empty($redirect_to)) {
|
|
$redirect_to = home_url('/');
|
|
}
|
|
wp_redirect($redirect_to);
|
|
exit;
|
|
}
|
|
$transient = '';
|
|
if($http_post) {
|
|
$action = fansub_get_method_value('action');
|
|
if('register' === $action) {
|
|
$user_login = fansub_get_method_value('user_login');
|
|
$user_email = fansub_get_method_value('user_email');
|
|
$pwd = fansub_get_method_value('pwd');
|
|
$pwd_again = fansub_get_method_value('pwd_again');
|
|
$phone = fansub_get_method_value('phone');
|
|
$captcha = fansub_get_method_value('captcha');
|
|
$user_login = sanitize_user($user_login, true);
|
|
$user_email = sanitize_email($user_email);
|
|
$transient_name = 'fansub_register_user_' . md5($user_email);
|
|
if(false === ($transient = get_transient($transient_name))) {
|
|
if(empty($user_login) || empty($user_email) || empty($pwd) || empty($pwd_again) || empty($phone) || empty($captcha)) {
|
|
$error = true;
|
|
$message = 'Xin vui lòng nhập đầy đủ thông tin đăng ký.';
|
|
} elseif(!is_email($user_email)) {
|
|
$error = true;
|
|
$message = 'Địa chỉ email không đúng.';
|
|
} elseif($pwd !== $pwd_again) {
|
|
$error = true;
|
|
$message = 'Mật khẩu không khớp.';
|
|
} elseif(username_exists($user_login)) {
|
|
$error = true;
|
|
$message = 'Tài khoản đã tồn tại.';
|
|
} elseif(email_exists($user_email)) {
|
|
$error = true;
|
|
$message = 'Địa chỉ email đã tồn tại.';
|
|
} else {
|
|
$capt = new FANSUB_Captcha();
|
|
if(!$capt->check($captcha)) {
|
|
$error = true;
|
|
$message = 'Mã bảo mật không đúng.';
|
|
}
|
|
}
|
|
if(!$error) {
|
|
$user_data = array(
|
|
'username' => $user_login,
|
|
'password' => $pwd,
|
|
'email' => $user_email
|
|
);
|
|
$user = fansub_add_user($user_data);
|
|
if(fansub_id_number_valid($user)) {
|
|
update_user_meta($user, 'phone', $phone);
|
|
$inserted = true;
|
|
fansub_user_force_login($user);
|
|
$message = 'Tài khoản của bạn đã được tạo thành công.';
|
|
$user_id = $user;
|
|
set_transient($transient_name, $user_id);
|
|
}
|
|
}
|
|
if($inserted && !empty($redirect_to)) {
|
|
wp_redirect($redirect_to);
|
|
exit;
|
|
}
|
|
} else {
|
|
if(fansub_id_number_valid($transient)) {
|
|
$inserted = true;
|
|
$message = 'Tài khoản của bạn đã được tạo thành công.';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$result = array(
|
|
'user_login' => $user_login,
|
|
'user_email' => $user_email,
|
|
'pwd' => $pwd,
|
|
'pwd_again' => $pwd_again,
|
|
'phone' => $phone,
|
|
'captcha' => $captcha,
|
|
'error' => $error,
|
|
'message' => $message,
|
|
'inserted' => $inserted,
|
|
'redirect_to' => $redirect_to,
|
|
'user_id' => $user_id,
|
|
'transient' => $transient
|
|
);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_register_form($args = array()) {
|
|
$defaults = fansub_account_form_default_args();
|
|
$args = wp_parse_args($args, $defaults);
|
|
$data = fansub_execute_register();
|
|
$user_login = $data['user_login'];
|
|
$user_email = $data['user_email'];
|
|
$pwd = $data['pwd'];
|
|
$pwd_again = $data['pwd_again'];
|
|
$phone = $data['phone'];
|
|
$error = $data['error'];
|
|
$message = $data['message'];
|
|
$inserted = $data['inserted'];
|
|
$redirect_to = $data['redirect_to'];
|
|
$logo = fansub_get_value_by_key($args, 'logo', fansub_get_login_logo_url());
|
|
?>
|
|
<div class="fansub-login-box module">
|
|
<div class="module-header text-center">
|
|
<?php
|
|
if(!empty($logo)) {
|
|
$a = new FANSUB_HTML('a');
|
|
$a->set_href(home_url('/'));
|
|
$a->set_class('logo');
|
|
$img = new FANSUB_HTML('img');
|
|
$img->set_image_alt('');
|
|
$img->set_image_src($logo);
|
|
$a->set_text($img->build());
|
|
$a->output();
|
|
}
|
|
$slogan = new FANSUB_HTML('p');
|
|
$slogan->set_class('slogan');
|
|
$slogan->set_text(sprintf($args['slogan'], fansub_get_root_domain_name(home_url('/'))));
|
|
$slogan->output();
|
|
if(isset($_REQUEST['error']) || $error) {
|
|
$message = fansub_build_message($message, 'danger');
|
|
echo $message;
|
|
} elseif($inserted || fansub_id_number_valid($data['transient'])) {
|
|
$message = fansub_build_message($message, 'success');
|
|
echo $message;
|
|
fansub_auto_reload_script();
|
|
}
|
|
?>
|
|
</div>
|
|
<div class="module-body">
|
|
<h4 class="form-title">Đăng ký tài khoản</h4>
|
|
<form name="registerform register-form signup-form" id="registerform" action="" method="post" novalidate="novalidate">
|
|
<p>
|
|
<label for="user_login"><?php echo $args['label_username']; ?><br />
|
|
<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label>
|
|
</p>
|
|
<p>
|
|
<label for="user_email"><?php echo $args['label_email']; ?><br />
|
|
<input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( wp_unslash( $user_email ) ); ?>" size="25" /></label>
|
|
</p>
|
|
<p>
|
|
<label for="user_pass"><?php echo $args['label_password']; ?><br />
|
|
<input type="password" name="pwd" id="user_pass" class="input" value="<?php echo $pwd; ?>" size="20" /></label>
|
|
</p>
|
|
<p>
|
|
<label for="user_pass_again"><?php echo $args['label_confirm_password']; ?><br />
|
|
<input type="password" name="pwd_again" id="user_pass_again" class="input" value="<?php echo $pwd_again; ?>" size="20" /></label>
|
|
</p>
|
|
<p>
|
|
<label for="phone"><?php echo $args['label_phone']; ?><br />
|
|
<input type="text" name="phone" id="phone" class="input" value="<?php echo $phone; ?>" size="20" /></label>
|
|
</p>
|
|
<?php do_action('register_form'); ?>
|
|
<input type="hidden" name="action" value="register">
|
|
<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
|
|
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php echo $args['text_register_link']; ?>" /></p>
|
|
</form>
|
|
</div>
|
|
<div class="module-footer">
|
|
<div class="text-center">
|
|
<p class="form-nav">
|
|
<a href="<?php echo esc_url( wp_login_url() ); ?>"><?php echo $args['label_log_in']; ?></a>
|
|
<span class="sep">|</span>
|
|
<a href="<?php echo esc_url(wp_lostpassword_url()); ?>" title="<?php echo $args['title_lostpassword_link']; ?>"><?php echo $args['text_lostpassword_link']; ?></a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
function fansub_login_form($args = array()) {
|
|
$defaults = fansub_account_form_default_args();
|
|
$args = wp_parse_args($args, $defaults);
|
|
$placeholder = (bool)fansub_get_value_by_key($args, 'placeholder', false);
|
|
$args['echo'] = false;
|
|
$form = wp_login_form($args);
|
|
if($placeholder) {
|
|
$form = str_replace('name="log"', 'name="log" placeholder="' . $args['placeholder_username'] . '"', $form);
|
|
$form = str_replace('name="pwd"', 'name="pwd" placeholder="' . $args['placeholder_password'] . '"', $form);
|
|
}
|
|
$logo = fansub_get_value_by_key($args, 'logo', fansub_get_login_logo_url());
|
|
$hide_form = (bool)fansub_get_value_by_key($args, 'hide_form');
|
|
?>
|
|
<div class="fansub-login-box module">
|
|
<div class="module-header text-center">
|
|
<?php
|
|
if(!empty($logo)) {
|
|
$a = new FANSUB_HTML('a');
|
|
$a->set_href(home_url('/'));
|
|
$a->set_class('logo');
|
|
$img = new FANSUB_HTML('img');
|
|
$img->set_image_alt('');
|
|
$img->set_image_src($logo);
|
|
$a->set_text($img->build());
|
|
$a->output();
|
|
}
|
|
$slogan = new FANSUB_HTML('p');
|
|
$slogan->set_class('slogan');
|
|
$slogan->set_text(sprintf($args['slogan'], fansub_get_root_domain_name(home_url('/'))));
|
|
$slogan->output();
|
|
if(isset($_REQUEST['error'])) {
|
|
echo '<p class="alert alert-danger">Đã có lỗi xảy ra, xin vui lòng thử lại.</p>';
|
|
}
|
|
?>
|
|
</div>
|
|
<div class="module-body">
|
|
<h4 class="form-title">Đăng nhập</h4>
|
|
<?php
|
|
if($hide_form) {
|
|
$login_form_top = apply_filters('login_form_top', '', $args);
|
|
$login_form_middle = apply_filters('login_form_middle', '', $args);
|
|
$login_form_bottom = apply_filters('login_form_bottom', '', $args);
|
|
$form = $login_form_top . $login_form_middle . $login_form_bottom;
|
|
$form = fansub_wrap_tag($form, 'form', 'login-form fansub-login-form');
|
|
echo $form;
|
|
} else {
|
|
echo $form;
|
|
}
|
|
?>
|
|
</div>
|
|
<div class="module-footer">
|
|
<div class="text-center">
|
|
<p class="form-nav">
|
|
<?php
|
|
if(!isset($_GET['checkemail']) || !in_array($_GET['checkemail'], array('confirm', 'newpass'))) {
|
|
if(fansub_users_can_register()) {
|
|
$registration_url = sprintf('<a href="%s">%s</a>', esc_url(wp_registration_url()), $args['text_register_link']);
|
|
echo apply_filters('register', $registration_url) . '<span class="sep">|</span>';
|
|
}
|
|
}
|
|
?>
|
|
<a href="<?php echo esc_url(wp_lostpassword_url()); ?>" title="<?php echo $args['title_lostpassword_link']; ?>"><?php echo $args['text_lostpassword_link']; ?></a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|