Task: 6607 | Работа авторизации ТГ

pull/29/head
parent 2bd9b7d156
commit 741c9c83f8
  1. 260
      wp-content/themes/cosmopet/modules/footer/module-controller.php
  2. 4
      wp-content/themes/cosmopet/modules/layout/assets/css/gp-style-core.css

@ -1,6 +1,6 @@
<?php <?php
// Добавляем данные в контекст Timber
add_filter('timber/context', function($context) { add_filter('timber/context', function($context) {
$context['email_list'] = get_field('email_list', 'options'); $context['email_list'] = get_field('email_list', 'options');
$context['adres'] = get_field('adres', 'options'); $context['adres'] = get_field('adres', 'options');
@ -9,180 +9,184 @@ add_filter('timber/context', function($context) {
return $context; return $context;
}); });
define('BOT_USERNAME', 'cosmopet_test_AE_bot'); // Динамическое определение 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() { function getTelegramUserData() {
if (isset($_COOKIE['tg_user'])) { if (isset($_SESSION['tg_user'])) {
$auth_data_json = urldecode($_COOKIE['tg_user']); return $_SESSION['tg_user'];
$auth_data = json_decode($auth_data_json, true);
return $auth_data;
} }
return false; return false;
} }
/*
if ($_GET['logout']) { // Функция вывода Telegram Widget
setcookie('tg_user', '');
header('Location: login.php');
}
*/
function tgWidget() { function tgWidget() {
$tg_user = getTelegramUserData(); if (!is_user_logged_in()) {
if ($tg_user !== false) {
$first_name = htmlspecialchars($tg_user['first_name']);
$last_name = htmlspecialchars($tg_user['last_name']);
if (isset($tg_user['username'])) {
$username = htmlspecialchars($tg_user['username']);
$html = "<h1>Hello, <a href=\"https://t.me/{$username}\">{$first_name} {$last_name}</a>!</h1>";
} else {
$html = "<h1>Hello, {$first_name} {$last_name}!</h1>";
}
if (isset($tg_user['photo_url'])) {
$photo_url = htmlspecialchars($tg_user['photo_url']);
$html .= "<img src=\"{$photo_url}\">";
}
$html .= "<p><a href=\"?logout=1\">Log out</a></p>";
} else {
$bot_username = BOT_USERNAME; $bot_username = BOT_USERNAME;
$html = '<script async src="https://telegram.org/js/telegram-widget.js?2" data-telegram-login="'.$bot_username.'" data-size="large" data-onauth="onTelegramAuth(user)"></script>'; $html = '<script async src="https://telegram.org/js/telegram-widget.js?2" data-telegram-login="' . esc_attr($bot_username) . '" data-size="large" data-onauth="onTelegramAuth(user)" data-request-access="write"></script>';
} echo $html;
if(!is_user_logged_in()) { } else {
$current_user = wp_get_current_user();
$html = "<h1>Hello, " . esc_html($current_user->display_name) . "!</h1>";
$html .= "<p><a href='" . wp_logout_url() . "'>Log out</a></p>";
echo $html; echo $html;
} }
} }
add_action( 'wp_ajax_ontelegramauth', 'onTelegramAuth' ); // Обработчик авторизации через Telegram
add_action( 'wp_ajax_nopriv_ontelegramauth', 'onTelegramAuth' ); 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_account
$tg_id = $_POST['userid']; $users = get_users([
$tg_username = $_POST['username'];
$user = get_users(
array(
'meta_key' => 'tg_account', 'meta_key' => 'tg_account',
'meta_value' => $tg_id 'meta_value' => $auth_data['id'],
) 'number' => 1
); ]);
// $user = get_users(
// array( $password = wp_generate_password(12, true, false); // Генерация безопасного пароля
// 'meta_key' => 'tg_username',
// 'meta_value' => $tg_username if ($users) {
// ) // Существующий пользователь
// ); $user = $users[0];
wp_set_password($password, $user->ID);
// Генерация пароля $login = wp_signon([
$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#!()'; 'user_login' => $user->user_login,
$pass = array(); 'user_password' => $password,
$alphaLength = strlen($alphabet) - 1; 'remember' => true
for ($i = 0; $i < 12; $i++) { ]);
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n]; if (!is_wp_error($login)) {
} session_start();
$pass = implode($pass); $_SESSION['tg_user'] = $auth_data;
session_write_close();
if($user) { wp_die(json_encode(['status' => 'success', 'redirect' => admin_url()]));
$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',
)
);
} else { } else {
$user_id = wp_create_user( $tg_username, $pass, ''); // Новый пользователь
add_user_meta( $user_id, 'tg_account', $tg_id); $username = sanitize_user($auth_data['username'] ?: $auth_data['first_name'] . '_' . $auth_data['last_name'], true);
add_user_meta( $user_id, 'tg_username', $tg_username); $username = wp_slash($username); // Экранируем для безопасности
wp_update_user( [ $user_id = wp_create_user($username, $password, $username . '@telegram.com');
'ID' => $user_id,
'first_name' => $_POST['fname'], if (!is_wp_error($user_id)) {
'last_name' => $_POST['lname'] wp_update_user([
] ); 'ID' => $user_id,
wp_set_auth_cookie( $user_id, true ); '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' ); // Функция привязки Telegram к существующему пользователю
add_action( 'wp_ajax_nopriv_linktelegram', 'linkTelegram' ); add_action('wp_ajax_linktelegram', 'linkTelegram');
add_action('wp_ajax_nopriv_linktelegram', 'linkTelegram');
function linkTelegram(){ function linkTelegram() {
$tg_id = $_POST['userid']; 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(); $user_id = get_current_user_id();
add_user_meta( $user_id, 'tg_account', $tg_id); add_user_meta($user_id, 'tg_account', $tg_id);
wp_update_user( [ wp_update_user([
'ID' => $user_id, 'ID' => $user_id,
'first_name' => $_POST['fname'], 'first_name' => sanitize_text_field($_POST['fname']),
'last_name' => $_POST['lname'] 'last_name' => sanitize_text_field($_POST['lname'])
] ); ]);
wp_die(json_encode(['status' => 'success']));
} }
add_action( 'wp_ajax_email_link', 'emailLink' ); // Функция обновления email
add_action( 'wp_ajax_nopriv_email_link', 'emailLink' ); add_action('wp_ajax_email_link', 'emailLink');
function emailLink(){ add_action('wp_ajax_nopriv_email_link', 'emailLink');
$email = $_POST['email']; function emailLink() {
$user_id = get_current_user_id(); if (!is_user_logged_in()) {
wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in']));
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 = 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'); add_filter('manage_users_columns', 'add_tg_account_column');
function add_tg_account_column($columns) { function add_tg_account_column($columns) {
$columns['tg_username'] = 'Telegram'; $columns['tg_username'] = 'Telegram';
return $columns; return $columns;
} }
// Заполняем колонку данными add_action('manage_users_custom_column', 'add_tg_account_column_content', 10, 3);
add_filter('manage_users_custom_column', 'add_tg_account_column_content', 10, 3);
function add_tg_account_column_content($value, $column_name, $user_id) { function add_tg_account_column_content($value, $column_name, $user_id) {
if ('tg_username' == $column_name) { if ('tg_username' == $column_name) {
$tg_account = get_user_meta($user_id, 'tg_username', true); $tg_username = get_user_meta($user_id, 'tg_username', true);
if ($tg_account) { return $tg_username ? '<a href="https://t.me/' . esc_attr($tg_username) . '" target="_blank">@' . esc_html($tg_username) . '</a>' : '<span style="color:#ccc;">не указан</span>';
return '<a href="https://t.me/"' . esc_attr($tg_account) . '" target="_blank">@' . esc_html($tg_account) . '</a>';
}
return '<span style="color:#ccc;">не указан</span>';
} }
return $value; return $value;
} }
// Делаем колонку сортируемой
add_filter('manage_users_sortable_columns', 'make_tg_account_column_sortable'); add_filter('manage_users_sortable_columns', 'make_tg_account_column_sortable');
function make_tg_account_column_sortable($columns) { function make_tg_account_column_sortable($columns) {
$columns['tg_username'] = 'tg_username'; $columns['tg_username'] = 'tg_username';
return $columns; return $columns;
} }
// Обрабатываем сортировку
add_action('pre_get_users', 'handle_tg_account_sorting'); add_action('pre_get_users', 'handle_tg_account_sorting');
function handle_tg_account_sorting($query) { function handle_tg_account_sorting($query) {
if (!is_admin() || !$query->is_main_query()) { if (!is_admin() || !$query->is_main_query()) return;
return;
}
if ('tg_username' === $query->get('orderby')) { if ('tg_username' === $query->get('orderby')) {
$query->set('meta_key', 'tg_username'); $query->set('meta_key', 'tg_username');
$query->set('orderby', 'meta_value'); $query->set('orderby', 'meta_value');
} }
} }
?>

@ -2173,4 +2173,8 @@ textarea{
position: relative; position: relative;
} }
.modal__aside {
right: 0%!important;
}

Loading…
Cancel
Save