|
|
@ -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() { |
|
|
|
|
|
|
|
if (!is_user_logged_in()) { |
|
|
|
|
|
|
|
wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in'])); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function linkTelegram(){ |
|
|
|
$tg_id = sanitize_text_field($_POST['userid']); |
|
|
|
$tg_id = $_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() { |
|
|
|
|
|
|
|
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(); |
|
|
|
$user_id = get_current_user_id(); |
|
|
|
|
|
|
|
|
|
|
|
if(email_exists($email)){ |
|
|
|
if (email_exists($email)) { |
|
|
|
header("Content-Type: application/json"); |
|
|
|
wp_die(json_encode(['status' => 'error', 'message' => 'Email is already registered'])); |
|
|
|
echo json_encode(array( |
|
|
|
|
|
|
|
'error' => esc_html__( 'Email is already registered', 'woodmart' ) |
|
|
|
|
|
|
|
)); |
|
|
|
|
|
|
|
exit(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
wp_update_user( [ |
|
|
|
|
|
|
|
'ID' => $user_id, |
|
|
|
|
|
|
|
'user_email' => $email |
|
|
|
|
|
|
|
] ); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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'); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|