neonail-database/app/Http/Controllers/AdminController.php
2025-08-10 18:09:07 +02:00

212 lines
6.5 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\NailPolish;
use App\Models\Manufacturer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
class AdminController extends Controller
{
/**
* Dashboard für Administratoren
*/
public function dashboard()
{
$totalUsers = User::count();
$totalNailPolishes = NailPolish::count();
$totalManufacturers = Manufacturer::count();
$recentUsers = User::latest()->take(5)->get();
$recentNailPolishes = NailPolish::latest()->take(5)->get();
$recentManufacturers = Manufacturer::latest()->take(5)->get();
return view("admin.dashboard", compact("totalUsers", "totalNailPolishes", "totalManufacturers", "recentUsers", "recentNailPolishes", "recentManufacturers"));
}
/**
* Liste aller Benutzer
*/
public function users(Request $request)
{
$search = $request->get("search");
$users = User::when($search, function($query) use ($search) {
return $query->where("name", "like", "%{$search}%")
->orWhere("email", "like", "%{$search}%");
})->orderBy("name")->paginate(20);
return view("admin.users.index", compact("users", "search"));
}
/**
* Formular zum Erstellen eines neuen Benutzers
*/
public function createUser()
{
return view("admin.users.create");
}
/**
* Neuen Benutzer speichern
*/
public function storeUser(Request $request)
{
$request->validate([
"name" => "required|string|max:255",
"email" => "required|string|email|max:255|unique:users",
"password" => "required|string|min:8|confirmed",
]);
// Passwort für E-Mail speichern (wird nach dem Speichern gelöscht)
$plainPassword = $request->password;
// User erstellen
$user = User::create([
"name" => $request->name,
"email" => $request->email,
"password" => Hash::make($request->password),
"is_admin" => $request->has("is_admin"),
]);
// Willkommens-E-Mail senden
try {
Mail::send("emails.welcome-user", [
"user" => $user,
"password" => $plainPassword
], function($message) use ($user) {
$message->to($user->email, $user->name)
->subject("🎨 Willkommen bei der NeoNail DB - Ihre Login-Daten")
->from(config("mail.from.address"), config("mail.from.name"));
});
// Admin-Bestätigung senden
Mail::raw("Hallo Admin!
Ein neuer User wurde erfolgreich erstellt und eine Willkommens-E-Mail gesendet.
📋 User-Details:
- Name: {$user->name}
- E-Mail: {$user->email}
- Admin-Status: " . ($user->isAdmin() ? "Ja" : "Nein") . "
- Erstellt: " . now() . "
Die Willkommens-E-Mail enthält:
- Login-Daten (Website, E-Mail, Passwort)
- Aufforderung zum Passwort-Ändern
- Feature-Übersicht
- Direkte Links zur Anwendung
Viele Grüße,
NeoNail DB System", function($message) {
$message->to("oliver@vogt.de.com", "Admin")
->subject("✅ NeoNail DB - Neuer User erstellt")
->from(config("mail.from.address"), config("mail.from.name"));
});
$successMessage = "Benutzer erfolgreich erstellt! Willkommens-E-Mail wurde gesendet.";
} catch (\Exception $e) {
// User wurde erstellt, aber E-Mail fehlgeschlagen
\Log::error("Fehler beim Senden der Willkommens-E-Mail: " . $e->getMessage());
$successMessage = "Benutzer erfolgreich erstellt! E-Mail konnte nicht gesendet werden.";
}
return redirect()->route("admin.users.index")
->with("success", $successMessage);
}
/**
* Formular zum Bearbeiten eines Benutzers
*/
public function editUser(User $user)
{
return view("admin.users.edit", compact("user"));
}
/**
* Benutzer aktualisieren
*/
public function updateUser(Request $request, User $user)
{
$request->validate([
"name" => "required|string|max:255",
"email" => "required|string|email|max:255|unique:users,email," . $user->id,
"password" => "nullable|string|min:8|confirmed",
]);
$user->name = $request->name;
$user->email = $request->email;
$user->is_admin = $request->has("is_admin");
if ($request->filled("password")) {
$user->password = Hash::make($request->password);
}
$user->save();
return redirect()->route("admin.users.index")
->with("success", "Benutzer erfolgreich aktualisiert!");
}
/**
* Benutzer löschen
*/
public function destroyUser(User $user)
{
$userName = $user->name;
$userEmail = $user->email;
$user->delete();
// Admin-Benachrichtigung über gelöschten User
try {
Mail::raw("Hallo Admin!
Ein User wurde erfolgreich gelöscht.
📋 Gelöschter User:
- Name: {$userName}
- E-Mail: {$userEmail}
- Gelöscht: " . now() . "
Viele Grüße,
NeoNail DB System", function($message) {
$message->to("oliver@vogt.de.com", "Admin")
->subject("🗑️ NeoNail DB - User gelöscht")
->from(config("mail.from.address"), config("mail.from.name"));
});
} catch (\Exception $e) {
\Log::error("Fehler beim Senden der Lösch-Benachrichtigung: " . $e->getMessage());
}
return redirect()->route("admin.users.index")
->with("success", "Benutzer erfolgreich gelöscht!");
}
/**
* Statistiken anzeigen
*/
public function statistics()
{
$totalUsers = User::count();
$totalNailPolishes = NailPolish::count();
$usersWithCollections = User::has("nailPolishes")->count();
$averageCollectionSize = User::withCount("nailPolishes")->avg("nail_polishes_count");
$topUsers = User::withCount("nailPolishes")
->orderBy("nail_polishes_count", "desc")
->take(10)
->get();
return view("admin.statistics", compact(
"totalUsers",
"totalNailPolishes",
"usersWithCollections",
"averageCollectionSize",
"topUsers"
));
}
}