|
@@ -5,6 +5,8 @@ namespace App\Http\Controllers\Admin;
|
|
use App\Classes\Pterodactyl;
|
|
use App\Classes\Pterodactyl;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use App\Models\User;
|
|
|
|
+use App\Notifications\DynamicNotification;
|
|
|
|
+use Spatie\QueryBuilder\QueryBuilder;
|
|
use Exception;
|
|
use Exception;
|
|
use Illuminate\Contracts\Foundation\Application;
|
|
use Illuminate\Contracts\Foundation\Application;
|
|
use Illuminate\Contracts\View\Factory;
|
|
use Illuminate\Contracts\View\Factory;
|
|
@@ -12,8 +14,11 @@ use Illuminate\Contracts\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Http\Response;
|
|
|
|
+use Illuminate\Notifications\Messages\MailMessage;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
+use Illuminate\Support\Facades\Notification;
|
|
|
|
+use Illuminate\Support\HtmlString;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Validation\ValidationException;
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
|
|
@@ -50,6 +55,30 @@ class UserController extends Controller
|
|
]);
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Get a JSON response of users.
|
|
|
|
+ *
|
|
|
|
+ * @return \Illuminate\Support\Collection|\App\models\User
|
|
|
|
+ */
|
|
|
|
+ public function json(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $users = QueryBuilder::for(User::query())
|
|
|
|
+ ->allowedFilters(['id', 'name', 'pterodactyl_id', 'email'])
|
|
|
|
+ ->paginate(25);
|
|
|
|
+
|
|
|
|
+ if ($request->query('user_id')) {
|
|
|
|
+ $user = User::query()->findOrFail($request->input('user_id'));
|
|
|
|
+ $user->avatarUrl = $user->getAvatar();
|
|
|
|
+
|
|
|
|
+ return $user;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $users->map(function ($item) {
|
|
|
|
+ $item->avatarUrl = $item->getAvatar();
|
|
|
|
+
|
|
|
|
+ return $item;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
/**
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
*
|
|
@@ -103,7 +132,6 @@ class UserController extends Controller
|
|
$user->update($request->all());
|
|
$user->update($request->all());
|
|
|
|
|
|
return redirect()->route('admin.users.index')->with('success', 'User updated!');
|
|
return redirect()->route('admin.users.index')->with('success', 'User updated!');
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -141,6 +169,56 @@ class UserController extends Controller
|
|
return redirect()->route('admin.users.index');
|
|
return redirect()->route('admin.users.index');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Show the form for seding notifications to the specified resource.
|
|
|
|
+ *
|
|
|
|
+ * @param User $user
|
|
|
|
+ * @return Application|Factory|View|Response
|
|
|
|
+ */
|
|
|
|
+ public function notifications(User $user)
|
|
|
|
+ {
|
|
|
|
+ return view('admin.users.notifications');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Notify the specified resource.
|
|
|
|
+ *
|
|
|
|
+ * @param Request $request
|
|
|
|
+ * @param User $user
|
|
|
|
+ * @return RedirectResponse
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ public function notify(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $data = $request->validate([
|
|
|
|
+ "via" => "required|min:1|array",
|
|
|
|
+ "via.*" => "required|string|in:mail,database",
|
|
|
|
+ "all" => "required_without:users|boolean",
|
|
|
|
+ "users" => "required_without:all|min:1|array",
|
|
|
|
+ "users.*" => "exists:users,id",
|
|
|
|
+ "title" => "required|string|min:1",
|
|
|
|
+ "content" => "required|string|min:1"
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $mail = null;
|
|
|
|
+ $database = null;
|
|
|
|
+ if (in_array('database', $data["via"])) {
|
|
|
|
+ $database = [
|
|
|
|
+ "title" => $data["title"],
|
|
|
|
+ "content" => $data["content"]
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ if (in_array('mail', $data["via"])) {
|
|
|
|
+ $mail = (new MailMessage)
|
|
|
|
+ ->subject($data["title"])
|
|
|
|
+ ->line(new HtmlString($data["content"]));
|
|
|
|
+ }
|
|
|
|
+ $all = $data["all"] ?? false;
|
|
|
|
+ $users = $all ? User::all() : User::whereIn("id", $data["users"])->get();
|
|
|
|
+ Notification::send($users, new DynamicNotification($data["via"], $database, $mail));
|
|
|
|
+ return redirect()->route('admin.users.notifications')->with('success', 'Notification sent!');
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
* @throws Exception
|
|
* @throws Exception
|
|
@@ -185,16 +263,16 @@ class UserController extends Controller
|
|
})
|
|
})
|
|
->editColumn('role', function (User $user) {
|
|
->editColumn('role', function (User $user) {
|
|
switch ($user->role) {
|
|
switch ($user->role) {
|
|
- case 'admin' :
|
|
|
|
|
|
+ case 'admin':
|
|
$badgeColor = 'badge-danger';
|
|
$badgeColor = 'badge-danger';
|
|
break;
|
|
break;
|
|
- case 'mod' :
|
|
|
|
|
|
+ case 'mod':
|
|
$badgeColor = 'badge-info';
|
|
$badgeColor = 'badge-info';
|
|
break;
|
|
break;
|
|
- case 'client' :
|
|
|
|
|
|
+ case 'client':
|
|
$badgeColor = 'badge-success';
|
|
$badgeColor = 'badge-success';
|
|
break;
|
|
break;
|
|
- default :
|
|
|
|
|
|
+ default:
|
|
$badgeColor = 'badge-secondary';
|
|
$badgeColor = 'badge-secondary';
|
|
break;
|
|
break;
|
|
}
|
|
}
|