diff --git a/app/Http/Controllers/Admin/GroupUserController.php b/app/Http/Controllers/Admin/GroupUserController.php index 2b7a346..b2ce60b 100755 --- a/app/Http/Controllers/Admin/GroupUserController.php +++ b/app/Http/Controllers/Admin/GroupUserController.php @@ -78,7 +78,22 @@ class GroupUserController extends Controller Gate::authorize('view', $group); $group->load(['organization', 'users']); - $users = User::where('organization_id', $group->organization_id)->get(); + + // Получаем доступных пользователей для этой группы + if ($group->organization_id) { + // Группа организации — только пользователи этой организации + $users = User::where('organization_id', $group->organization_id) + ->whereDoesntHave('groups', function($q) use ($group) { + $q->where('groups.id', $group->id); + }) + ->get(); + } else { + // Общая группа — все пользователи которые ещё не в группе + $users = User::whereDoesntHave('groups', function($q) use ($group) { + $q->where('groups.id', $group->id); + }) + ->get(); + } return view('admin.groups.show', compact('group', 'users')); } @@ -145,18 +160,33 @@ class GroupUserController extends Controller { $validated = $request->validate([ 'group_id' => 'required|exists:groups,id', + 'user_ids' => 'nullable|string', ]); $group = Group::findOrFail($validated['group_id']); - // Проверка доступа - if ($group->organization_id && $user->organization_id !== $group->organization_id) { - return back()->with('error', 'Нельзя добавить пользователя в группу другой организации.'); + // Если переданы user_ids (из tags-input) + if (!empty($validated['user_ids'])) { + $userIds = array_map('intval', array_filter(explode(',', $validated['user_ids']))); + + foreach ($userIds as $userId) { + $user = User::find($userId); + if (!$user) continue; + + // Проверка доступа + if ($group->organization_id && $user->organization_id !== $group->organization_id) { + continue; // Пропускаем пользователей из других организаций + } + + $group->users()->attach($userId); + } } - $group->users()->attach($user->id); + if ($request->ajax()) { + return response()->json(['success' => true]); + } - return back()->with('success', 'Пользователь добавлен в группу.'); + return back()->with('success', 'Пользователи добавлены в группу.'); } /** @@ -168,6 +198,45 @@ class GroupUserController extends Controller $group->users()->detach($user->id); + // Для AJAX запросов + if (request()->ajax()) { + return response()->json(['success' => true]); + } + return back()->with('success', 'Пользователь удалён из группы.'); } + + /** + * Редактирование группы (modal) + */ + public function edit(Group $group) + { + Gate::authorize('update', $group); + + return redirect()->route('admin.groups.show', $group)->with('edit', true); + } + + /** + * Обновление группы + */ + public function update(Request $request, Group $group) + { + Gate::authorize('update', $group); + + $validated = $request->validate([ + 'name' => 'required|string|max:255', + 'description' => 'nullable|string', + 'is_active' => 'boolean', + ]); + + $group->update($validated); + + // Для AJAX запросов + if ($request->ajax()) { + return response()->json(['success' => true, 'group' => $group]); + } + + return redirect()->route('admin.groups.show', $group) + ->with('success', 'Группа успешно обновлена.'); + } } diff --git a/resources/views/admin/groups/show.blade.php b/resources/views/admin/groups/show.blade.php index cb55f0f..2b31279 100755 --- a/resources/views/admin/groups/show.blade.php +++ b/resources/views/admin/groups/show.blade.php @@ -8,54 +8,64 @@

{{ $group->name }}

- Редактировать + Назад
-
-
+
+
Информация
- - - - - -
Организация:{{ $group->organization?->name ?? '—' }}
Описание:{{ $group->description ?? '—' }}
Статус:@if($group->is_active)Активна@elseНе активна@endif
Создана:{{ $group->created_at->format('d.m.Y') }}
+
Организация: {{ $group->organization?->name ?? 'Общая группа' }}
+
Описание: {{ $group->description ?? '—' }}
+
Статус: + @if($group->is_active) + Активна + @else + Не активна + @endif +
+
Создана: {{ $group->created_at->format('d.m.Y') }}
- -
+
-
Пользователи в группе ({{ $group->users->count() }})
+
Статистика
- @if($group->users->count() > 0) -
- - - - - - - - - - @foreach($group->users as $user) - - - - - - @endforeach - -
ИмяEmailДолжность
{{ $user->name }}{{ $user->email }}{{ $user->getRoleNames()->first() ?? '—' }}
+
{{ $group->users->count() }}
+
Пользователей в группе
+
+
+
+
+ +
+
+
+
+
Пользователи
+ +
+
+
+ @if($group->users->count() > 0) + + @else +

Нет пользователей

+ @endif
- @else -

В этой группе пока нет пользователей

- @endif
@@ -63,4 +73,148 @@
+ + + + + + + +@push('scripts') + +@endpush @endsection diff --git a/routes/web.php b/routes/web.php index 96741c5..496c393 100644 --- a/routes/web.php +++ b/routes/web.php @@ -54,7 +54,9 @@ Route::middleware('auth')->group(function () { Route::resource('tests.questions', QuestionController::class); Route::resource('course-assignments', CourseAssignmentController::class)->except(['show', 'edit', 'update']); Route::get('/course-assignments/{course}', CourseAssignmentController::class . '@show')->name('course-assignments.show'); - Route::resource('groups', GroupUserController::class); + Route::resource('groups', GroupUserController::class)->except(['edit', 'update']); + Route::get('/groups/{group}/edit', [GroupUserController::class, 'edit'])->name('groups.edit'); + Route::put('/groups/{group}', [GroupUserController::class, 'update'])->name('groups.update'); Route::post('/users/{user}/groups/add', [GroupUserController::class, 'addUser'])->name('groups.users.add'); Route::delete('/groups/{group}/users/{user}/remove', [GroupUserController::class, 'removeUser'])->name('groups.users.remove'); });