Fix | tg auth Fix ru

pull/30/head
Максим Максимов 2 months ago committed by Your Name
parent b4afa6279a
commit a62fe7a812
  1. 2
      wp-content/themes/cosmopet/functions.php
  2. 202
      wp-content/themes/cosmopet/modules/footer/module-ajax-controller.php
  3. 181
      wp-content/themes/cosmopet/modules/footer/module-controller.php
  4. 7
      wp-content/themes/cosmopet/static/front-page/js/main.js
  5. 8
      wp-content/themes/cosmopet/templates/footer.twig

@ -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() {

@ -0,0 +1,202 @@
<?php
// Динамическое определение 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()) {
?>
<div id="telegram-widget-container"></div>
<?php
} else {
$current_user = wp_get_current_user();
echo "<h1>Hello, " . esc_html($current_user->display_name) . "!</h1>";
echo "<p><a href='" . wp_logout_url() . "'>Log out</a></p>";
}
}
function tgScript(){
$bot_username = BOT_USERNAME;
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
var s = document.createElement('script');
s.src = 'https://telegram.org/js/telegram-widget.js?2';
s.async = true;
s.setAttribute('data-telegram-login', '<?php echo $bot_username?>');
s.setAttribute('data-size', 'large');
s.setAttribute('data-onauth', 'onTelegramAuth(user)');
s.setAttribute('data-request-access', 'write');
document.getElementById('telegram-widget-container').appendChild(s);
});
</script>
<?php
}
// Обработчик авторизации через Telegram
add_action('wp_ajax_ontelegramauth', 'onTelegramAuth');
add_action('wp_ajax_nopriv_ontelegramauth', 'onTelegramAuth');
function onTelegramAuth() {
// Получаем данные от Telegram
$auth_data = [
'id' => 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 ? '<a href="https://t.me/' . esc_attr($tg_username) . '" target="_blank">@' . esc_html($tg_username) . '</a>' : '<span style="color:#ccc;">не указан</span>';
}
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');
}
}

@ -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 = '<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;
} 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;
}
}
// Обработчик авторизации через 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 ? '<a href="https://t.me/' . esc_attr($tg_username) . '" target="_blank">@' . esc_html($tg_username) . '</a>' : '<span style="color:#ccc;">не указан</span>';
}
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');
}
}

@ -582,14 +582,17 @@ document.addEventListener('DOMContentLoaded', function() {
});
// Close popup
if (closePopup) {
closePopup.addEventListener('click', function() {
reviewPopup.style.display = 'none';
});
// Close popup when clicking outside
}
if (reviewPopup){
reviewPopup.addEventListener('click', function(e) {
if (e.target === reviewPopup) {
reviewPopup.style.display = 'none';
}
});
}
// Close popup when clicking outside
});

@ -110,7 +110,8 @@
{% endverbatim %}
<script>
function onTelegramAuth(user) {
function onTelegramAuth(user) {
console.log(123)
var data = {
action: 'ontelegramauth',
userid: user.id,
@ -124,7 +125,8 @@
data: data,
success: function(){
location.href = '/my-account';
}
},
});
}
function linkTelegram(user) {
@ -253,4 +255,4 @@ document.addEventListener('DOMContentLoaded', function() {
});
</script>
{{ function ('tgScript') }}

Loading…
Cancel
Save