diff --git a/wp-content/themes/cosmopet/functions.php b/wp-content/themes/cosmopet/functions.php index d0d6129..6294084 100644 --- a/wp-content/themes/cosmopet/functions.php +++ b/wp-content/themes/cosmopet/functions.php @@ -434,7 +434,7 @@ require_once('modules/blog/module-ajax-controller.php'); require_once('modules/forms/module-ajax-controller.php'); require_once('modules/shop/module-ajax-controller.php'); require_once('modules/profile/module-ajax-controller.php'); - +require_once('modules/footer/module-ajax-controller.php'); add_action('wp', 'my_custom_checkout_code'); function my_custom_checkout_code() { diff --git a/wp-content/themes/cosmopet/modules/footer/module-ajax-controller.php b/wp-content/themes/cosmopet/modules/footer/module-ajax-controller.php index e69de29..4f04a01 100644 --- a/wp-content/themes/cosmopet/modules/footer/module-ajax-controller.php +++ b/wp-content/themes/cosmopet/modules/footer/module-ajax-controller.php @@ -0,0 +1,202 @@ + +
+ Hello, " . esc_html($current_user->display_name) . "!"; + echo "

Log out

"; + } +} + +function tgScript(){ + $bot_username = BOT_USERNAME; + ?> + + + sanitize_text_field($_POST['userid']), + 'first_name' => sanitize_text_field($_POST['fname']), + 'last_name' => sanitize_text_field($_POST['lname']), + 'username' => sanitize_text_field($_POST['username'] ?? ''), + ]; + + if (!$auth_data['id']) { + wp_die(json_encode(['status' => 'error', 'message' => 'Invalid Telegram data'])); + } + + // Проверяем существование пользователя по tg_account + $users = get_users([ + 'meta_key' => 'tg_account', + '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 { + // Новый пользователь + $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'])); +} + +// Функция привязки Telegram к существующему пользователю +add_action('wp_ajax_linktelegram', 'linkTelegram'); +add_action('wp_ajax_nopriv_linktelegram', 'linkTelegram'); + +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' => sanitize_text_field($_POST['fname']), + 'last_name' => sanitize_text_field($_POST['lname']) + ]); + + wp_die(json_encode(['status' => 'success'])); +} + +// Функция обновления 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 +add_filter('manage_users_columns', 'add_tg_account_column'); +function add_tg_account_column($columns) { + $columns['tg_username'] = 'Telegram'; + return $columns; +} + +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_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 ('tg_username' === $query->get('orderby')) { + $query->set('meta_key', 'tg_username'); + $query->set('orderby', 'meta_value'); + } +} \ No newline at end of file diff --git a/wp-content/themes/cosmopet/modules/footer/module-controller.php b/wp-content/themes/cosmopet/modules/footer/module-controller.php index 64ed74f..84ea5a5 100644 --- a/wp-content/themes/cosmopet/modules/footer/module-controller.php +++ b/wp-content/themes/cosmopet/modules/footer/module-controller.php @@ -9,184 +9,3 @@ add_filter('timber/context', function($context) { return $context; }); -// Динамическое определение BOT_USERNAME -$site_url = site_url(); -if ($site_url === 'https://cosmopet-test-ru.cp.good-production.xyz') { - define('BOT_USERNAME', 'cosmopet_test_RU_bot'); -} elseif ($site_url === 'https://cosmopet-test-ae.cp.good-production.xyz') { - define('BOT_USERNAME', 'cosmopet_test_AE_bot'); -} else { - define('BOT_USERNAME', 'cosmopet_test_default_bot'); // Фallback на случай других доменов -} - -// Функция получения данных Telegram -function getTelegramUserData() { - if (isset($_SESSION['tg_user'])) { - return $_SESSION['tg_user']; - } - return false; -} - -// Функция вывода Telegram Widget -function tgWidget() { - if (!is_user_logged_in()) { - $bot_username = BOT_USERNAME; - $html = ''; - echo $html; - } else { - $current_user = wp_get_current_user(); - $html = "

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

"; - $html .= "

Log out

"; - echo $html; - } -} - -// Обработчик авторизации через 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'])); - } - - // Проверяем существование пользователя по tg_account - $users = get_users([ - 'meta_key' => 'tg_account', - '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 { - // Новый пользователь - $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'])); -} - -// Функция привязки Telegram к существующему пользователю -add_action('wp_ajax_linktelegram', 'linkTelegram'); -add_action('wp_ajax_nopriv_linktelegram', 'linkTelegram'); - -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' => sanitize_text_field($_POST['fname']), - 'last_name' => sanitize_text_field($_POST['lname']) - ]); - - wp_die(json_encode(['status' => 'success'])); -} - -// Функция обновления 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 -add_filter('manage_users_columns', 'add_tg_account_column'); -function add_tg_account_column($columns) { - $columns['tg_username'] = 'Telegram'; - return $columns; -} - -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_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 ('tg_username' === $query->get('orderby')) { - $query->set('meta_key', 'tg_username'); - $query->set('orderby', 'meta_value'); - } -} \ No newline at end of file diff --git a/wp-content/themes/cosmopet/modules/footer/module.template.twig b/wp-content/themes/cosmopet/modules/footer/module.template.twig index 5574dc8..8ccbf19 100644 --- a/wp-content/themes/cosmopet/modules/footer/module.template.twig +++ b/wp-content/themes/cosmopet/modules/footer/module.template.twig @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/wp-content/themes/cosmopet/static/front-page/js/main.js b/wp-content/themes/cosmopet/static/front-page/js/main.js index a87edee..4a503b4 100644 --- a/wp-content/themes/cosmopet/static/front-page/js/main.js +++ b/wp-content/themes/cosmopet/static/front-page/js/main.js @@ -582,14 +582,17 @@ document.addEventListener('DOMContentLoaded', function() { }); // Close popup - closePopup.addEventListener('click', function() { - reviewPopup.style.display = 'none'; - }); - - // Close popup when clicking outside + if (closePopup) { + closePopup.addEventListener('click', function() { + reviewPopup.style.display = 'none'; + }); + } + if (reviewPopup){ reviewPopup.addEventListener('click', function(e) { if (e.target === reviewPopup) { reviewPopup.style.display = 'none'; } }); + } + // Close popup when clicking outside }); diff --git a/wp-content/themes/cosmopet/templates/footer.twig b/wp-content/themes/cosmopet/templates/footer.twig index 43bcedc..5809cd8 100644 --- a/wp-content/themes/cosmopet/templates/footer.twig +++ b/wp-content/themes/cosmopet/templates/footer.twig @@ -110,7 +110,8 @@ {% endverbatim %} - +{{ function ('tgScript') }}