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 ""; + } +} + +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 = "