212 lines
6.5 KiB
PHP
Executable File
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"
|
|
));
|
|
}
|
|
} |