Lae/app/Http/Controllers/Admin/NotificationController.php

92 lines
2.7 KiB
PHP
Raw Normal View History

2022-12-31 10:04:28 +00:00
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
2023-01-13 14:12:49 +00:00
use App\Jobs\User\SendUserNotificationsJob;
2022-12-31 10:04:28 +00:00
use App\Models\Module;
use App\Models\User;
use GeneaLabs\LaravelModelCaching\CachedBuilder;
use Illuminate\Database\Eloquent\Builder;
2022-12-31 10:04:28 +00:00
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class NotificationController extends Controller
{
/**
* Show the form for creating a new resource.
*
2023-02-07 09:04:11 +00:00
* @param Request $request
2022-12-31 10:04:28 +00:00
* @return View
*/
2023-01-10 13:42:27 +00:00
public function create(Request $request): View
2022-12-31 10:04:28 +00:00
{
$modules = Module::all();
$users = $this->query($request)->paginate(20)->withQueryString();
return view('admin.notifications.create', compact('modules', 'users'));
}
public function query(Request|array $request): User|CachedBuilder|Builder
2022-12-31 10:04:28 +00:00
{
if ($request instanceof Request) {
$request = $request->all();
}
2023-02-07 09:04:11 +00:00
if (! empty($request['user_id'])) {
2023-01-10 13:42:27 +00:00
$users = (new User)->where('id', $request['user_id']);
2022-12-31 10:04:28 +00:00
} else {
$users = User::query();
2023-02-07 09:04:11 +00:00
if (! empty($request['user'])) {
2022-12-31 10:04:28 +00:00
$user = $request['user'];
if ($user == 'active') {
// 寻找有 host 的用户
$users = $users->whereHas('hosts');
2023-02-07 09:04:11 +00:00
} elseif ($user == 'normal') {
2022-12-31 10:04:28 +00:00
$users = $users->whereNull('banned_at');
2023-02-07 09:04:11 +00:00
} elseif ($user == 'banned') {
2022-12-31 10:04:28 +00:00
$users = $users->whereNotNull('banned_at');
}
}
}
2023-02-07 09:04:11 +00:00
if (! empty($request['module_id'])) {
2022-12-31 10:04:28 +00:00
// 从 hosts 中找到 module_id然后找到拥有此 host 的用户
$users = $users->whereHas('hosts', function ($query) use ($request) {
$query->where('module_id', $request['module_id']);
});
}
return $users;
}
2023-01-01 13:01:13 +00:00
/**
* Store a newly created resource in storage.
*
2023-02-07 09:04:11 +00:00
* @param Request $request
2023-01-01 13:01:13 +00:00
* @return RedirectResponse
*/
2023-01-10 13:42:27 +00:00
public function store(Request $request): RedirectResponse
2023-01-01 13:01:13 +00:00
{
$request->validate([
'title' => 'required',
'content' => 'required',
'user_id' => 'nullable',
'module_id' => 'nullable',
'user' => 'nullable',
2023-01-13 14:12:49 +00:00
'send_mail' => 'boolean',
2023-01-01 13:01:13 +00:00
]);
2023-01-13 14:12:49 +00:00
// send mail 是 checkbox值为 1
$send_mail = $request->has('send_mail');
dispatch(new SendUserNotificationsJob($request->toArray(), $request->input('title'), $request->input('content'), $send_mail));
2023-01-01 13:01:13 +00:00
return back()->with('success', '通知发送成功。')->withInput();
}
2022-12-31 10:04:28 +00:00
}