Files
osint/app/Http/Controllers/GroupController.php
T

95 lines
2.5 KiB
PHP
Raw Normal View History

2026-07-20 10:22:05 +03:00
<?php
namespace App\Http\Controllers;
use App\Models\Group;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class GroupController extends Controller
{
public function index(Request $request): View
{
$user = $request->user();
$groups = Group::query()
->where('owner_id', $user->id)
->orWhereHas('members', fn ($q) => $q->where('users.id', $user->id))
->withCount('members')
->orderBy('name')
->get();
return view('groups.index', compact('groups'));
}
public function create(): View
{
$this->authorize('create', Group::class);
return view('groups.create');
}
public function store(Request $request): RedirectResponse
{
$this->authorize('create', Group::class);
$data = $request->validate([
'name' => ['required', 'string', 'max:255'],
'description' => ['nullable', 'string', 'max:5000'],
]);
$group = Group::create([
...$data,
'owner_id' => $request->user()->id,
]);
return redirect()->route('groups.show', $group);
}
public function show(Request $request, Group $group): View
{
$this->authorize('view', $group);
$group->load('owner', 'members');
return view('groups.show', [
'group' => $group,
'canManage' => $request->user()->can('manageMembers', $group),
]);
}
public function addMember(Request $request, Group $group): RedirectResponse
{
$this->authorize('manageMembers', $group);
$data = $request->validate([
'email' => ['required', 'email'],
]);
$user = User::where('email', $data['email'])->first();
if (! $user) {
return back()->withErrors(['email' => 'No user found with that email address.']);
}
if ($user->id === $group->owner_id) {
return back()->withErrors(['email' => 'The group owner is already implicitly a member.']);
}
$group->members()->syncWithoutDetaching([$user->id]);
return redirect()->route('groups.show', $group);
}
public function removeMember(Request $request, Group $group, User $user): RedirectResponse
{
$this->authorize('manageMembers', $group);
$group->members()->detach($user->id);
return redirect()->route('groups.show', $group);
}
}