diff --git a/wp-content/themes/cosmopet/modules/footer/module-controller.php b/wp-content/themes/cosmopet/modules/footer/module-controller.php index e1d0f4a..64ed74f 100644 --- a/wp-content/themes/cosmopet/modules/footer/module-controller.php +++ b/wp-content/themes/cosmopet/modules/footer/module-controller.php @@ -1,6 +1,6 @@ Hello, {$first_name} {$last_name}!"; - } else { - $html = "

Hello, {$first_name} {$last_name}!

"; - } - if (isset($tg_user['photo_url'])) { - $photo_url = htmlspecialchars($tg_user['photo_url']); - $html .= ""; - } - $html .= "

Log out

"; - } else { + if (!is_user_logged_in()) { $bot_username = BOT_USERNAME; - $html = ''; - } - if(!is_user_logged_in()) { + $html = ''; + echo $html; + } else { + $current_user = wp_get_current_user(); + $html = "

Hello, " . esc_html($current_user->display_name) . "!

"; + $html .= "

Log out

"; echo $html; } } -add_action( 'wp_ajax_ontelegramauth', 'onTelegramAuth' ); -add_action( 'wp_ajax_nopriv_ontelegramauth', 'onTelegramAuth' ); +// Обработчик авторизации через Telegram +add_action('wp_ajax_ontelegramauth', 'onTelegramAuth'); +add_action('wp_ajax_nopriv_ontelegramauth', 'onTelegramAuth'); + +function onTelegramAuth() { + // Получаем данные от Telegram + $auth_data = [ + 'id' => sanitize_text_field($_POST['id']), + 'first_name' => sanitize_text_field($_POST['first_name']), + 'last_name' => sanitize_text_field($_POST['last_name']), + 'username' => sanitize_text_field($_POST['username'] ?? ''), + 'photo_url' => sanitize_text_field($_POST['photo_url'] ?? '') + ]; + + if (!$auth_data['id']) { + wp_die(json_encode(['status' => 'error', 'message' => 'Invalid Telegram data'])); + } -function onTelegramAuth(){ - $tg_id = $_POST['userid']; - $tg_username = $_POST['username']; - $user = get_users( - array( + // Проверяем существование пользователя по tg_account + $users = get_users([ 'meta_key' => 'tg_account', - 'meta_value' => $tg_id - ) - ); - // $user = get_users( - // array( - // 'meta_key' => 'tg_username', - // 'meta_value' => $tg_username - // ) - // ); - - // Генерация пароля - $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#!()'; - $pass = array(); - $alphaLength = strlen($alphabet) - 1; - for ($i = 0; $i < 12; $i++) { - $n = rand(0, $alphaLength); - $pass[] = $alphabet[$n]; - } - $pass = implode($pass); - - if($user) { - $user_login = $user[0]->data->user_login; - $user_id = get_user_by( 'login', $user_login )->ID; - wp_set_password( $pass, get_user_by( 'login', $user_login )->ID ); - wp_signon( - array( - 'user_login' => $user_login, - 'user_password' => $pass, - 'remember' => 'on', - ) - ); + 'meta_value' => $auth_data['id'], + 'number' => 1 + ]); + + $password = wp_generate_password(12, true, false); // Генерация безопасного пароля + + if ($users) { + // Существующий пользователь + $user = $users[0]; + wp_set_password($password, $user->ID); + $login = wp_signon([ + 'user_login' => $user->user_login, + 'user_password' => $password, + 'remember' => true + ]); + + if (!is_wp_error($login)) { + session_start(); + $_SESSION['tg_user'] = $auth_data; + session_write_close(); + wp_die(json_encode(['status' => 'success', 'redirect' => admin_url()])); + } } else { - $user_id = wp_create_user( $tg_username, $pass, ''); - add_user_meta( $user_id, 'tg_account', $tg_id); - add_user_meta( $user_id, 'tg_username', $tg_username); - wp_update_user( [ - 'ID' => $user_id, - 'first_name' => $_POST['fname'], - 'last_name' => $_POST['lname'] - ] ); - wp_set_auth_cookie( $user_id, true ); + // Новый пользователь + $username = sanitize_user($auth_data['username'] ?: $auth_data['first_name'] . '_' . $auth_data['last_name'], true); + $username = wp_slash($username); // Экранируем для безопасности + $user_id = wp_create_user($username, $password, $username . '@telegram.com'); + + if (!is_wp_error($user_id)) { + wp_update_user([ + 'ID' => $user_id, + 'display_name' => $auth_data['first_name'] . ' ' . $auth_data['last_name'], + 'first_name' => $auth_data['first_name'], + 'last_name' => $auth_data['last_name'] + ]); + add_user_meta($user_id, 'tg_account', $auth_data['id']); + add_user_meta($user_id, 'tg_username', $auth_data['username']); + + $login = wp_signon([ + 'user_login' => $username, + 'user_password' => $password, + 'remember' => true + ]); + + if (!is_wp_error($login)) { + session_start(); + $_SESSION['tg_user'] = $auth_data; + session_write_close(); + wp_die(json_encode(['status' => 'success', 'redirect' => admin_url()])); + } + } } - + + wp_die(json_encode(['status' => 'error', 'message' => 'Login failed'])); } -add_action( 'wp_ajax_linktelegram', 'linkTelegram' ); -add_action( 'wp_ajax_nopriv_linktelegram', 'linkTelegram' ); +// Функция привязки Telegram к существующему пользователю +add_action('wp_ajax_linktelegram', 'linkTelegram'); +add_action('wp_ajax_nopriv_linktelegram', 'linkTelegram'); -function linkTelegram(){ - $tg_id = $_POST['userid']; +function linkTelegram() { + if (!is_user_logged_in()) { + wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in'])); + } + + $tg_id = sanitize_text_field($_POST['userid']); $user_id = get_current_user_id(); - - add_user_meta( $user_id, 'tg_account', $tg_id); - wp_update_user( [ - 'ID' => $user_id, - 'first_name' => $_POST['fname'], - 'last_name' => $_POST['lname'] - ] ); + + add_user_meta($user_id, 'tg_account', $tg_id); + wp_update_user([ + 'ID' => $user_id, + 'first_name' => sanitize_text_field($_POST['fname']), + 'last_name' => sanitize_text_field($_POST['lname']) + ]); + + wp_die(json_encode(['status' => 'success'])); } -add_action( 'wp_ajax_email_link', 'emailLink' ); -add_action( 'wp_ajax_nopriv_email_link', 'emailLink' ); -function emailLink(){ - - $email = $_POST['email']; - $user_id = get_current_user_id(); - - if(email_exists($email)){ - header("Content-Type: application/json"); - echo json_encode(array( - 'error' => esc_html__( 'Email is already registered', 'woodmart' ) - )); - exit(); - } else { - wp_update_user( [ - 'ID' => $user_id, - 'user_email' => $email - ] ); +// Функция обновления email +add_action('wp_ajax_email_link', 'emailLink'); +add_action('wp_ajax_nopriv_email_link', 'emailLink'); + +function emailLink() { + if (!is_user_logged_in()) { + wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in'])); } - -} + $email = sanitize_email($_POST['email']); + $user_id = get_current_user_id(); + if (email_exists($email)) { + wp_die(json_encode(['status' => 'error', 'message' => 'Email is already registered'])); + } + wp_update_user(['ID' => $user_id, 'user_email' => $email]); + wp_die(json_encode(['status' => 'success'])); +} -// Добавляем колонку Telegram в список пользователей +// Добавление и настройка колонки Telegram add_filter('manage_users_columns', 'add_tg_account_column'); function add_tg_account_column($columns) { $columns['tg_username'] = 'Telegram'; return $columns; } -// Заполняем колонку данными -add_filter('manage_users_custom_column', 'add_tg_account_column_content', 10, 3); +add_action('manage_users_custom_column', 'add_tg_account_column_content', 10, 3); function add_tg_account_column_content($value, $column_name, $user_id) { if ('tg_username' == $column_name) { - $tg_account = get_user_meta($user_id, 'tg_username', true); - if ($tg_account) { - return '@' . esc_html($tg_account) . ''; - } - return 'не указан'; + $tg_username = get_user_meta($user_id, 'tg_username', true); + return $tg_username ? '@' . esc_html($tg_username) . '' : 'не указан'; } return $value; } -// Делаем колонку сортируемой add_filter('manage_users_sortable_columns', 'make_tg_account_column_sortable'); function make_tg_account_column_sortable($columns) { $columns['tg_username'] = 'tg_username'; return $columns; } -// Обрабатываем сортировку add_action('pre_get_users', 'handle_tg_account_sorting'); function handle_tg_account_sorting($query) { - if (!is_admin() || !$query->is_main_query()) { - return; - } - + if (!is_admin() || !$query->is_main_query()) return; if ('tg_username' === $query->get('orderby')) { $query->set('meta_key', 'tg_username'); $query->set('orderby', 'meta_value'); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/wp-content/themes/cosmopet/modules/layout/assets/css/gp-style-core.css b/wp-content/themes/cosmopet/modules/layout/assets/css/gp-style-core.css index 03011a4..dad8e2b 100644 --- a/wp-content/themes/cosmopet/modules/layout/assets/css/gp-style-core.css +++ b/wp-content/themes/cosmopet/modules/layout/assets/css/gp-style-core.css @@ -2173,4 +2173,8 @@ textarea{ position: relative; } +.modal__aside { + right: 0%!important; +} +