Update from Git Manager GUI
This commit is contained in:
@@ -174,6 +174,8 @@ class WBF_DB {
|
||||
// Zeitlich begrenzte Sperren
|
||||
self::maybe_add_column("{$wpdb->prefix}forum_users", 'ban_until', "ALTER TABLE {$wpdb->prefix}forum_users ADD COLUMN ban_until DATETIME DEFAULT NULL");
|
||||
self::maybe_add_column("{$wpdb->prefix}forum_users", 'pre_ban_role', "ALTER TABLE {$wpdb->prefix}forum_users ADD COLUMN pre_ban_role VARCHAR(20) DEFAULT 'member'");
|
||||
// Profilbanner
|
||||
self::maybe_add_column("{$wpdb->prefix}forum_users", 'banner_url', "ALTER TABLE {$wpdb->prefix}forum_users ADD COLUMN banner_url VARCHAR(255) DEFAULT ''");
|
||||
// Thread-Abonnements
|
||||
$sql_subscriptions = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}forum_subscriptions (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
@@ -354,6 +356,67 @@ class WBF_DB {
|
||||
public static function update_user( $id, $data ) {
|
||||
global $wpdb;
|
||||
$wpdb->update("{$wpdb->prefix}forum_users", $data, ['id' => $id]);
|
||||
|
||||
// --- Discord-Rollen-Sync nach Rollenänderung ---
|
||||
if (isset($data['role'])) {
|
||||
// Discord-User-ID holen
|
||||
$discord_user_id = $wpdb->get_var($wpdb->prepare(
|
||||
"SELECT meta_value FROM {$wpdb->prefix}forum_user_meta WHERE user_id = %d AND meta_key = 'discord_user_id'",
|
||||
$id
|
||||
));
|
||||
if ($discord_user_id) {
|
||||
// Einstellungen laden
|
||||
$s = function_exists('wbf_get_settings') ? wbf_get_settings() : [];
|
||||
$token = trim($s['discord_bot_token'] ?? '');
|
||||
$guild = trim($s['discord_guild_id'] ?? '');
|
||||
$role_map = json_decode($s['discord_role_map'] ?? '{}', true) ?: [];
|
||||
if ($token && $guild && !empty($role_map)) {
|
||||
// Ziel-Discord-Rolle anhand Mapping finden
|
||||
$target_discord_role = null;
|
||||
foreach ($role_map as $dc_role_id => $forum_role) {
|
||||
if ($forum_role === $data['role']) {
|
||||
$target_discord_role = (string)$dc_role_id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($target_discord_role) {
|
||||
// Aktuelle Rollen des Users abrufen
|
||||
$res = wp_remote_get("https://discord.com/api/v10/guilds/{$guild}/members/{$discord_user_id}", [
|
||||
'timeout' => 6,
|
||||
'headers' => ['Authorization' => 'Bot ' . $token],
|
||||
]);
|
||||
if (!is_wp_error($res) && wp_remote_retrieve_response_code($res) === 200) {
|
||||
$member = json_decode(wp_remote_retrieve_body($res), true);
|
||||
$user_roles = $member['roles'] ?? [];
|
||||
// Alle gemappten Discord-Rollen entfernen, außer Zielrolle
|
||||
$remove_roles = [];
|
||||
foreach ($role_map as $dc_role_id => $forum_role) {
|
||||
if ((string)$dc_role_id !== $target_discord_role && in_array((string)$dc_role_id, $user_roles, true)) {
|
||||
$remove_roles[] = (string)$dc_role_id;
|
||||
}
|
||||
}
|
||||
// Zielrolle hinzufügen, falls nicht vorhanden
|
||||
if (!in_array($target_discord_role, $user_roles, true)) {
|
||||
$user_roles[] = $target_discord_role;
|
||||
}
|
||||
// Entfernte Rollen rausnehmen
|
||||
$user_roles = array_values(array_diff($user_roles, $remove_roles));
|
||||
// PATCH an Discord senden
|
||||
$body = json_encode(['roles' => array_values($user_roles)]);
|
||||
wp_remote_request("https://discord.com/api/v10/guilds/{$guild}/members/{$discord_user_id}", [
|
||||
'method' => 'PATCH',
|
||||
'timeout' => 6,
|
||||
'headers' => [
|
||||
'Authorization' => 'Bot ' . $token,
|
||||
'Content-Type' => 'application/json',
|
||||
],
|
||||
'body' => $body,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_all_users( $limit = 100, $offset = 0 ) {
|
||||
|
||||
Reference in New Issue
Block a user