mivita/resources/views/admin/user/cleanup/index.blade.php
2026-02-20 17:55:06 +01:00

692 lines
37 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('layouts.layout-2')
@push('head')
<style>
/* Bootstrap-select Dropdown im Modal */
.bootstrap-select .dropdown-menu {
z-index: 10060 !important;
}
</style>
@endpush
@section('content')
<h4 class="font-weight-bold py-2 mb-2">
<i class="ion ion-ios-people"></i> {{ __('navigation.user_cleanup') }}
</h4>
<div class="row mb-3">
<div class="col">
<div class="alert alert-info">
<strong>Info:</strong> Diese Übersicht zeigt alle deaktivierten und gelöschten User.
Deaktivierte User können ihre Downline behalten oder an den Sponsor übertragen haben.
Gelöschte User haben alle Daten an den Sponsor übertragen.
</div>
</div>
</div>
<div class="nav-tabs-top mb-4">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" href="{{ route('admin_user_cleanup') }}">
<i class="ion ion-ios-people"></i> Deaktivierte/Gelöschte User
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('admin_user_cleanup_logs') }}">
<i class="ion ion-md-git-network"></i> Downline-Übertragungen
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('admin_user_cleanup_shopping_logs') }}">
<i class="ion ion-md-cart"></i> Kunden-Übertragungen
</a>
</li>
</ul>
</div>
<div class="card">
<div class="card-datatable table-responsive">
<table class="datatables-cleanup table table-striped table-bordered">
<thead>
<tr>
<th>ID</th>
<th>{{ __('tables.firstname') }}</th>
<th>{{ __('tables.lastname') }}</th>
<th>{{ __('E-Mail') }}</th>
<th>M-Account</th>
<th>Status</th>
<th>Gelöscht am</th>
<th>Account bis</th>
<th>Sponsor</th>
<th>Pre-Sponsor</th>
<th>Downline</th>
<th>Kunden</th>
<th> #</th>
</tr>
</thead>
</table>
</div>
</div>
<!-- Modal User Historie -->
<div class="modal fade" id="modal-user-history" tabindex="-1" role="dialog">
<div class="modal-dialog modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="fa fa-history"></i> User Historie & Details
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body" id="history-content" style="max-height: 75vh; overflow-y: auto;">
<div class="text-center py-5">
<i class="fa fa-spinner fa-spin fa-3x"></i>
<p class="mt-3">Lade Daten...</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
</div>
</div>
</div>
</div>
<!-- Modal Restore User -->
<div class="modal fade" id="modal-restore-user">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">User wiederherstellen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<input type="hidden" id="restore-user-id">
<div class="form-group">
<label>E-Mail:</label>
<input type="text" class="form-control" id="restore-user-email" readonly>
</div>
<div class="alert alert-warning">
<strong>Hinweis:</strong> Dies führt den Artisan-Befehl <code>user:restore</code> aus.
Bitte in den Logs überprüfen ob die Wiederherstellung erfolgreich war.
</div>
<div class="alert alert-info">
<strong>Was wird wiederhergestellt:</strong>
<ul class="mb-0">
<li>User wird reaktiviert (active=true)</li>
<li>Sponsor wird aus pre_sponsor wiederhergestellt</li>
<li>Downline-Struktur wird wiederhergestellt</li>
</ul>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
<button type="button" class="btn btn-success" id="btn-restore-user">
<i class="fa fa-undo"></i> User wiederherstellen
</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$('.datatables-cleanup').dataTable({
"processing": true,
"serverSide": true,
"ajax": '{!! route('admin_user_cleanup_datatable') !!}',
"order": [[0, "desc"]],
"columns": [
{ data: 'user_id', name: 'id' },
{ data: 'first_name', name: 'account.first_name' },
{ data: 'last_name', name: 'account.last_name' },
{ data: 'email', name: 'email' },
{ data: 'm_account', name: 'account.m_account' },
{ data: 'status', name: 'status' },
{ data: 'deleted_at', name: 'pre_deleted_at', orderable: true },
{ data: 'payment_account', name: 'payment_account' },
{ data: 'm_sponsor', name: 'm_sponsor', orderable: false },
{ data: 'pre_sponsor', name: 'pre_sponsor', orderable: false },
{ data: 'childs_count', name: 'childs_count', orderable: false, searchable: false },
{ data: 'shopping_users_count', name: 'shopping_users_count', orderable: false, searchable: false },
{ data: 'action', orderable: false, searchable: false }
],
"bLengthChange": false,
"iDisplayLength": 50,
"language": {
"url": "/js/datatables-{{ \App::getLocale() }}.json"
}
});
// Modal Cleanup beim Schließen
$('#modal-user-history').on('hidden.bs.modal', function() {
// Zerstöre selectpicker Instanz wenn vorhanden
if ($('#select-new-sponsor').length && $('#select-new-sponsor').hasClass('selectpicker')) {
$('#select-new-sponsor').selectpicker('destroy');
}
currentUserId = null;
});
// Modal Historie Handler
$(document).on('click', '.btn-user-history', function() {
var userId = $(this).data('id');
var userEmail = $(this).data('email');
$('#modal-user-history').modal('show');
$('#history-content').html('<div class="text-center py-5"><i class="fa fa-spinner fa-spin fa-3x"></i><p class="mt-3">Lade Daten...</p></div>');
$.ajax({
url: '{{ route('admin_user_cleanup_history', ['userId' => ':userId']) }}'.replace(':userId', userId),
type: 'GET',
success: function(response) {
if (response.success) {
renderHistory(response);
} else {
$('#history-content').html('<div class="alert alert-danger">Fehler: ' + response.message + '</div>');
}
},
error: function(xhr) {
$('#history-content').html('<div class="alert alert-danger">Fehler beim Laden der Daten: ' + xhr.responseText + '</div>');
}
});
});
var currentUserId = null;
function renderHistory(data) {
currentUserId = data.user.id;
var html = '';
// User Info
html += '<div class="card mb-3">';
html += '<div class="card-header"><h5><i class="fa fa-user"></i> User Informationen</h5></div>';
html += '<div class="card-body">';
html += '<div class="row">';
html += '<div class="col-md-6"><strong>Name:</strong> ' + data.user.name + '</div>';
html += '<div class="col-md-6"><strong>E-Mail:</strong> ' + data.user.email + '</div>';
html += '<div class="col-md-6"><strong>M-Account:</strong> ' + data.user.m_account + '</div>';
html += '<div class="col-md-6"><strong>Status:</strong> ';
if (data.user.deleted) {
html += '<span class="badge badge-danger">Gelöscht am ' + data.user.deleted_at + '</span>';
} else if (data.user.active) {
html += '<span class="badge badge-success">Aktiv</span>';
} else {
html += '<span class="badge badge-warning">Deaktiviert</span>';
}
html += '</div>';
html += '</div></div></div>';
// Sponsor Neu-Zuweisen
// Die zu übertragenden Werte kommen IMMER aus den Logs (bereits übertragene, die neu zugewiesen werden sollen)
var childrenCount = data.cleanup_logs ? data.cleanup_logs.length : 0;
var customersCount = data.shopping_logs ? data.shopping_logs.length : 0;
html += '<div class="card mb-3 border-warning">';
html += '<div class="card-header bg-warning"><h5><i class="fa fa-exchange-alt"></i> Sponsor manuell neu zuweisen</h5></div>';
html += '<div class="card-body">';
html += '<div class="alert alert-warning">';
html += '<strong>⚠️ Achtung:</strong> Diese Funktion ermöglicht die manuelle Korrektur eines falsch zugewiesenen Sponsors. ';
html += 'Alle Änderungen werden vollständig geloggt und können bei Bedarf rückgängig gemacht werden.';
html += '</div>';
// Bereits übertragene Zuordnungen anzeigen (aus Logs)
html += '<div class="alert alert-info mb-3">';
html += '<strong>📊 Bereits übertragene Zuordnungen (können neu zugewiesen werden):</strong><br>';
html += '<div class="row mt-2">';
html += '<div class="col-6">';
html += '<i class="fa fa-users"></i> <strong>Downline:</strong> ';
if (childrenCount > 0) {
html += '<span class="badge badge-warning">' + childrenCount + ' bereits übertragen</span>';
} else {
html += '<span class="text-muted">Keine Übertragungen</span>';
}
html += '</div>';
html += '<div class="col-6">';
html += '<i class="fa fa-shopping-cart"></i> <strong>Kunden:</strong> ';
if (customersCount > 0) {
html += '<span class="badge badge-warning">' + customersCount + ' bereits übertragen</span>';
} else {
html += '<span class="text-muted">Keine Übertragungen</span>';
}
html += '</div>';
html += '</div>';
html += '</div>';
html += '<div class="form-group">';
html += '<label for="select-new-sponsor"><strong>Neuer Sponsor auswählen:</strong></label>';
html += '<select id="select-new-sponsor" class="selectpicker" data-style="btn-light" data-live-search="true" data-size="8" style="width: 100%;">';
html += '<option value="">Bitte auswählen...</option>';
html += '</select>';
html += '<small class="form-text text-muted">Suche nach Name, E-Mail oder M-Account</small>';
html += '</div>';
html += '<hr>';
html += '<h6 class="mb-3">Was soll mit übertragen werden?</h6>';
html += '<div class="form-group">';
html += '<div class="custom-control custom-checkbox">';
html += '<input type="checkbox" class="custom-control-input" id="transfer-downline" ' + (childrenCount > 0 ? 'checked' : 'disabled') + '>';
html += '<label class="custom-control-label" for="transfer-downline">';
html += '<strong>Downline neu zuweisen</strong> ';
if (childrenCount > 0) {
html += '<span class="badge badge-primary">' + childrenCount + '</span>';
} else {
html += '<span class="text-muted">(keine Übertragungen vorhanden)</span>';
}
html += '</label>';
html += '</div>';
html += '<small class="form-text text-muted">Die bereits übertragenen Downline-Mitglieder werden dem neuen Sponsor zugewiesen</small>';
html += '</div>';
html += '<div class="form-group">';
html += '<div class="custom-control custom-checkbox">';
html += '<input type="checkbox" class="custom-control-input" id="transfer-customers" ' + (customersCount > 0 ? 'checked' : 'disabled') + '>';
html += '<label class="custom-control-label" for="transfer-customers">';
html += '<strong>Shopping-Kunden neu zuweisen</strong> ';
if (customersCount > 0) {
html += '<span class="badge badge-primary">' + customersCount + '</span>';
} else {
html += '<span class="text-muted">(keine Übertragungen vorhanden)</span>';
}
html += '</label>';
html += '</div>';
html += '<small class="form-text text-muted">Die bereits übertragenen Shopping-Kunden werden dem neuen Berater zugewiesen</small>';
html += '</div>';
html += '<button type="button" class="btn btn-warning btn-block btn-lg" id="btn-reassign-sponsor">';
html += '<i class="fa fa-exchange-alt"></i> Sponsor jetzt neu zuweisen';
html += '</button>';
html += '</div></div>';
// Downline Position
html += '<div class="card mb-3">';
html += '<div class="card-header">';
html += '<h5 class="mb-0"><i class="fa fa-sitemap"></i> Position in der Downline</h5>';
html += '</div>';
html += '<div class="card-body">';
// Sponsor-Info
html += '<div class="row mb-3">';
html += '<div class="col-md-6">';
html += '<strong>Aktueller Sponsor:</strong><br>';
if (data.sponsor) {
html += '<span class="badge badge-' + (data.sponsor.active ? 'success' : 'warning') + '">' + data.sponsor.name + '</span> ';
html += '<small class="text-muted">(' + data.sponsor.email + ')</small>';
} else {
html += '<em class="text-muted">Nicht vorhanden</em>';
}
html += '</div>';
if (data.pre_sponsor) {
html += '<div class="col-md-6">';
html += '<strong>Vorheriger Sponsor (Pre-Sponsor):</strong><br>';
html += '<span class="badge badge-info">' + data.pre_sponsor.name + '</span> ';
html += '<small class="text-muted">(' + data.pre_sponsor.email + ')</small>';
html += '</div>';
}
html += '</div>';
html += '<hr>';
// Downline mit Badge
html += '<div class="mb-2">';
html += '<strong>Direkte Downline:</strong> ';
if (data.children.length > 0) {
html += '<span class="badge badge-primary">' + data.children.length + ' Mitglieder</span>';
} else {
html += '<span class="badge badge-secondary">0 Mitglieder</span>';
}
html += '</div>';
if (data.children.length > 0) {
html += '<table class="table table-sm mt-2">';
html += '<thead><tr><th>Name</th><th>E-Mail</th><th>Status</th></tr></thead><tbody>';
data.children.forEach(function(child) {
html += '<tr>';
html += '<td>' + child.name + '</td>';
html += '<td>' + child.email + '</td>';
html += '<td>';
if (child.deleted) {
html += '<span class="badge badge-danger">Gelöscht</span>';
} else if (child.active) {
html += '<span class="badge badge-success">Aktiv</span>';
} else {
html += '<span class="badge badge-warning">Inaktiv</span>';
}
if (child.is_pre_sponsor) {
html += ' <span class="badge badge-info">Pre-Sponsor</span>';
}
html += '</td></tr>';
});
html += '</tbody></table>';
} else {
html += '<p class="mt-2 mb-0"><em>Keine direkten Downline-Mitglieder</em></p>';
}
html += '</div></div></div>';
// Shopping Kunden
html += '<div class="card mb-3">';
html += '<div class="card-header">';
html += '<h5 class="mb-0">';
html += '<i class="fa fa-shopping-cart"></i> Shopping-Kunden ';
if (data.shopping_users.length > 0) {
html += '<span class="badge badge-primary">' + data.shopping_users.length + '</span>';
} else {
html += '<span class="badge badge-secondary">0</span>';
}
html += '</h5>';
html += '</div>';
html += '<div class="card-body">';
if (data.shopping_users.length > 0) {
html += '<table class="table table-sm">';
html += '<thead><tr><th>Name</th><th>E-Mail</th><th>Stadt</th><th>Erstellt am</th></tr></thead><tbody>';
data.shopping_users.forEach(function(customer) {
html += '<tr>';
html += '<td>' + customer.name + '</td>';
html += '<td>' + customer.email + '</td>';
html += '<td>' + customer.city + '</td>';
html += '<td>' + customer.created_at + '</td>';
html += '</tr>';
});
html += '</tbody></table>';
} else {
html += '<p class="mb-0"><em>Keine Shopping-Kunden vorhanden</em></p>';
}
html += '</div></div>';
// Cleanup Logs
if (data.cleanup_logs.length > 0) {
html += '<div class="card mb-3">';
html += '<div class="card-header">';
html += '<h5 class="mb-0">';
html += '<i class="fa fa-exchange-alt"></i> Downline-Übertragungen (Protokoll) ';
html += '<span class="badge badge-info">' + data.cleanup_logs.length + '</span>';
html += '</h5>';
html += '</div>';
html += '<div class="card-body">';
html += '<table class="table table-sm">';
html += '<thead><tr><th>Betroffener User</th><th>Status</th><th>Von Sponsor</th><th>Zu Sponsor</th><th>Datum</th></tr></thead><tbody>';
data.cleanup_logs.forEach(function(log) {
html += '<tr>';
html += '<td>' + (log.child_user ? log.child_user.name + '<br><small>' + log.child_user.email + '</small>' : 'N/A') + '</td>';
html += '<td>';
if (log.child_user) {
if (log.child_user.deleted) {
html += '<span class="badge badge-danger">Gelöscht</span>';
} else if (log.child_user.active) {
html += '<span class="badge badge-success">Aktiv</span>';
} else {
html += '<span class="badge badge-warning">Inaktiv</span>';
}
} else {
html += 'N/A';
}
html += '</td>';
html += '<td>' + (log.inactive_sponsor ? log.inactive_sponsor.name + '<br><small>' + log.inactive_sponsor.email + '</small>' : 'N/A') + '</td>';
html += '<td>';
// Ursprünglicher Sponsor aus dem Log
if (log.new_sponsor) {
html += '<small class="text-muted">Damals:</small><br>';
html += log.new_sponsor.name + '<br><small>' + log.new_sponsor.email + '</small>';
// Falls aktueller Sponsor anders ist
if (log.current_sponsor) {
html += '<hr class="my-1">';
html += '<span class="badge badge-warning">Geändert!</span><br>';
html += '<small class="text-success">Aktuell:</small><br>';
html += '<strong>' + log.current_sponsor.name + '</strong><br>';
html += '<small>' + log.current_sponsor.email + '</small>';
}
} else {
html += 'N/A';
}
html += '</td>';
html += '<td>' + log.created_at + '</td>';
html += '</tr>';
});
html += '</tbody></table></div></div>';
}
// Shopping Logs
if (data.shopping_logs.length > 0) {
html += '<div class="card mb-3">';
html += '<div class="card-header">';
html += '<h5 class="mb-0">';
html += '<i class="fa fa-users"></i> Kunden-Übertragungen (Protokoll) ';
html += '<span class="badge badge-info">' + data.shopping_logs.length + '</span>';
html += '</h5>';
html += '</div>';
html += '<div class="card-body">';
html += '<table class="table table-sm">';
html += '<thead><tr><th>Kunde</th><th>Neuer Berater</th><th>Datum</th></tr></thead><tbody>';
data.shopping_logs.forEach(function(log) {
html += '<tr>';
html += '<td>' + log.customer_name + '<br><small>' + log.customer_email + '</small></td>';
html += '<td>';
// Ursprünglicher Berater aus dem Log
if (log.new_member) {
html += '<small class="text-muted">Damals:</small><br>';
html += log.new_member.name + '<br><small>' + log.new_member.email + '</small>';
// Falls aktueller Berater anders ist
if (log.current_member) {
html += '<hr class="my-1">';
html += '<span class="badge badge-warning">Geändert!</span><br>';
html += '<small class="text-success">Aktuell:</small><br>';
html += '<strong>' + log.current_member.name + '</strong><br>';
html += '<small>' + log.current_member.email + '</small>';
}
} else {
html += 'N/A';
}
html += '</td>';
html += '<td>' + log.created_at + '</td>';
html += '</tr>';
});
html += '</tbody></table></div></div>';
}
$('#history-content').html(html);
// Lade Sponsoren und initialisiere selectpicker
setTimeout(function() {
var selectElement = $('#select-new-sponsor');
if (selectElement.length) {
console.log('Lade Sponsoren für selectpicker...');
// Lade alle aktiven Sponsoren
$.ajax({
url: '{{ route('admin_user_cleanup_search_sponsors') }}',
type: 'GET',
data: {
q: '', // Leere Suche = alle laden
exclude_user_id: currentUserId,
load_all: true
},
success: function(response) {
if (response.results && response.results.length > 0) {
// Füge alle Sponsoren als Options hinzu
response.results.forEach(function(sponsor) {
selectElement.append(
$('<option></option>')
.val(sponsor.id)
.text(sponsor.text)
);
});
// Initialisiere selectpicker
selectElement.selectpicker('refresh');
console.log('Selectpicker initialisiert mit ' + response.results.length + ' Sponsoren');
} else {
console.warn('Keine Sponsoren gefunden');
}
},
error: function(xhr) {
console.error('Fehler beim Laden der Sponsoren:', xhr);
}
});
} else {
console.error('Select Element nicht gefunden');
}
}, 200);
// Reassign Sponsor Handler
$('#btn-reassign-sponsor').off('click').on('click', function() {
var newSponsorId = $('#select-new-sponsor').val();
var transferDownline = $('#transfer-downline').is(':checked');
var transferCustomers = $('#transfer-customers').is(':checked');
if (!newSponsorId) {
alert('Bitte wählen Sie einen neuen Sponsor aus!');
return;
}
var sponsorName = $('#select-new-sponsor option:selected').text() || 'ID: ' + newSponsorId;
var confirmMsg = '═══════════════════════════════════════\n';
confirmMsg += 'SPONSOR NEU ZUWEISEN - BESTÄTIGUNG\n';
confirmMsg += '═══════════════════════════════════════\n\n';
confirmMsg += '👤 User:\n ' + data.user.name + '\n ' + data.user.email + '\n\n';
confirmMsg += '➡️ Neuer Sponsor:\n ' + sponsorName + '\n\n';
confirmMsg += '───────────────────────────────────────\n';
confirmMsg += 'WAS WIRD NEU ZUGEWIESEN?\n';
confirmMsg += '───────────────────────────────────────\n\n';
if (transferDownline && childrenCount > 0) {
confirmMsg += '✅ Downline: ' + childrenCount + ' bereits übertragene Kinder\n';
} else if (childrenCount > 0) {
confirmMsg += '❌ Downline: ' + childrenCount + ' Kinder (NICHT neu zuweisen)\n';
} else {
confirmMsg += '⚪ Downline: Keine Übertragungen vorhanden\n';
}
if (transferCustomers && customersCount > 0) {
confirmMsg += '✅ Kunden: ' + customersCount + ' bereits übertragene Kunden\n';
} else if (customersCount > 0) {
confirmMsg += '❌ Kunden: ' + customersCount + ' Kunden (NICHT neu zuweisen)\n';
} else {
confirmMsg += '⚪ Kunden: Keine Übertragungen vorhanden\n';
}
confirmMsg += '\n───────────────────────────────────────\n';
confirmMsg += '📝 WICHTIG:\n';
confirmMsg += ' • Alle Änderungen werden geloggt\n';
confirmMsg += ' • Kann rückgängig gemacht werden\n';
confirmMsg += ' • User wird dem neuen Sponsor zugewiesen\n\n';
confirmMsg += '═══════════════════════════════════════\n\n';
confirmMsg += 'Fortfahren?';
if (!confirm(confirmMsg)) {
return;
}
var btn = $(this);
btn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> Wird neu zugewiesen...');
$.ajax({
url: '{{ route('admin_user_cleanup_reassign_sponsor') }}',
type: 'POST',
data: {
_token: '{{ csrf_token() }}',
user_id: currentUserId,
new_sponsor_id: newSponsorId,
transfer_downline: transferDownline,
transfer_customers: transferCustomers
},
success: function(response) {
if (response.success) {
var msg = '═══════════════════════════════════════\n';
msg += '✅ ERFOLGREICH ABGESCHLOSSEN\n';
msg += '═══════════════════════════════════════\n\n';
msg += 'Der Sponsor wurde erfolgreich neu zugewiesen!\n\n';
if (response.logs && response.logs.length > 0) {
msg += '───────────────────────────────────────\n';
msg += '📋 Durchgeführte Änderungen:\n';
msg += '───────────────────────────────────────\n\n';
response.logs.forEach(function(log) {
msg += '• ' + log + '\n';
});
msg += '\n';
}
if (response.transferred) {
msg += '───────────────────────────────────────\n';
msg += '📊 Zusammenfassung:\n';
msg += '───────────────────────────────────────\n\n';
if (response.transferred.downline > 0) {
msg += '✓ Downline übertragen\n';
}
if (response.transferred.customers > 0) {
msg += '✓ Kunden übertragen\n';
}
msg += '✓ User neu zugewiesen\n\n';
}
msg += '═══════════════════════════════════════';
alert(msg);
$('#modal-user-history').modal('hide');
$('.datatables-cleanup').DataTable().ajax.reload();
} else {
alert('❌ FEHLER\n\n' + response.message);
btn.prop('disabled', false).html('<i class="fa fa-exchange-alt"></i> Sponsor jetzt neu zuweisen');
}
},
error: function(xhr) {
var errorMsg = 'Fehler beim Neu-Zuweisen';
try {
var response = JSON.parse(xhr.responseText);
errorMsg += ': ' + response.message;
} catch(e) {
errorMsg += ': ' + xhr.responseText;
}
alert(errorMsg);
btn.prop('disabled', false).html('<i class="fa fa-exchange-alt"></i> Sponsor jetzt neu zuweisen');
}
});
});
}
// Modal Restore Handler
$('#modal-restore-user').on('show.bs.modal', function(event) {
var button = $(event.relatedTarget);
$('#restore-user-id').val(button.data('id'));
$('#restore-user-email').val(button.data('email'));
});
$('#btn-restore-user').click(function() {
var userId = $('#restore-user-id').val();
var btn = $(this);
btn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> Wird wiederhergestellt...');
$.ajax({
url: '{{ route('admin_user_cleanup_restore') }}',
type: 'POST',
data: {
_token: '{{ csrf_token() }}',
user_id: userId
},
success: function(response) {
if (response.success) {
alert('User wurde erfolgreich wiederhergestellt!');
$('#modal-restore-user').modal('hide');
$('.datatables-cleanup').DataTable().ajax.reload();
} else {
alert('Fehler: ' + response.message);
}
btn.prop('disabled', false).html('<i class="fa fa-undo"></i> User wiederherstellen');
},
error: function(xhr) {
alert('Fehler beim Wiederherstellen: ' + xhr.responseText);
btn.prop('disabled', false).html('<i class="fa fa-undo"></i> User wiederherstellen');
}
});
});
});
</script>
@endsection