diff --git a/app/Http/Controllers/Admin/GroupUserController.php b/app/Http/Controllers/Admin/GroupUserController.php new file mode 100755 index 0000000..16f3afb --- /dev/null +++ b/app/Http/Controllers/Admin/GroupUserController.php @@ -0,0 +1,92 @@ +middleware('auth'); + } + + public function index(Request $request) + { + Gate::authorize('viewAny', Group::class); + + $query = Group::with(['organization', 'users']); + + if ($request->filled('organization_id')) { + $query->where('organization_id', $request->organization_id); + } + + $groups = $query->orderBy('name')->paginate(20); + $organizations = Organization::pluck('name', 'id'); + + return view('admin.groups.index', compact('groups', 'organizations')); + } + + public function show(Group $group) + { + Gate::authorize('view', $group); + + $group->load(['organization', 'users']); + $users = User::where('organization_id', $group->organization_id)->get(); + + return view('admin.groups.show', compact('group', 'users')); + } + + public function edit(Group $group) + { + Gate::authorize('update', $group); + + $group->load(['organization', 'users']); + $users = User::where('organization_id', $group->organization_id)->get(); + + return view('admin.groups.edit', compact('group', 'users')); + } + + 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', + 'users' => 'nullable|array', + 'users.*' => 'exists:users,id', + ]); + + $group->update($validated); + + // Синхронизируем пользователей в группе + if (isset($validated['users'])) { + $group->users()->sync($validated['users']); + } + + return redirect()->route('admin.groups.show', $group) + ->with('success', 'Группа успешно обновлена.'); + } + + public function destroy(Group $group) + { + Gate::authorize('delete', $group); + + if ($group->users()->count() > 0) { + return back()->with('error', 'Нельзя удалить группу с пользователями. Сначала удалите пользователей из группы.'); + } + + $group->delete(); + + return redirect()->route('admin.groups.index') + ->with('success', 'Группа успешно удалена.'); + } +} diff --git a/resources/views/admin/groups/create.blade.php b/resources/views/admin/groups/create.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/admin/groups/edit.blade.php b/resources/views/admin/groups/edit.blade.php old mode 100644 new mode 100755 index 8992508..b00d4d7 --- a/resources/views/admin/groups/edit.blade.php +++ b/resources/views/admin/groups/edit.blade.php @@ -1,95 +1,64 @@ @extends('layouts.app') - @section('title', 'Редактировать группу') - @section('content')
- - +
-
+

Редактировать группу

- - Назад к организации - + Назад
- - @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- @csrf - @method('PUT') + + + @csrf @method('PUT')
-
-
+
+
+
Основная информация
-
Основная информация
-
- - - @error('name') -
{{ $message }}
- @enderror + + + @error('name')
{{ $message }}
@enderror
-
- - - @error('description') -
{{ $message }}
- @enderror + +
- -
- is_active) ? 'checked' : '' }}> - +
+ is_active) ? 'checked' : '' }}> +
- -
-
+ +
+
+
Пользователи в группе
-
Организация
-

{{ $organization->name }}

- @if($organization->inn) -

ИНН: {{ $organization->inn }}

- @endif -
-

- Создана: {{ $group->created_at->format('d.m.Y') }}
- Обновлена: {{ $group->updated_at->format('d.m.Y') }} -

+
+ +
+ @foreach($users as $user) +
+ users->contains($user->id) ? 'checked' : '' }}> + +
+ @endforeach +
+ Отметьте пользователей для добавления в группу +
- -
- - - Отмена - -
+ + + Отмена
diff --git a/resources/views/admin/groups/index.blade.php b/resources/views/admin/groups/index.blade.php old mode 100644 new mode 100755 index bdd25cf..8be4417 --- a/resources/views/admin/groups/index.blade.php +++ b/resources/views/admin/groups/index.blade.php @@ -1,54 +1,42 @@ @extends('layouts.app') - -@section('title', 'Группы организации') - +@section('title', 'Группы пользователей') @section('content')
- - +
-
-

Группы организации

-
- - К организации - - @can('create', App\Models\Group::class) - - Добавить группу - - @endcan +
+

Группы пользователей

+
+ @if(session('success'))
{{ session('success') }}
@endif + @if(session('error'))
{{ session('error') }}
@endif + +
+
+
+
+ +
+
+ +
+
- - @if(session('success')) - - @endif - - @if(session('error')) - - @endif - +
- - + @@ -57,10 +45,9 @@ @forelse($groups as $group) - - - + + @empty - @endforelse @@ -100,12 +79,7 @@ - - @if($groups->hasPages()) -
- {{ $groups->links() }} -
- @endif + {{ $groups->links() }} diff --git a/resources/views/admin/groups/show.blade.php b/resources/views/admin/groups/show.blade.php old mode 100644 new mode 100755 index 56aaf46..cb55f0f --- a/resources/views/admin/groups/show.blade.php +++ b/resources/views/admin/groups/show.blade.php @@ -1,106 +1,58 @@ @extends('layouts.app') - @section('title', $group->name) - @section('content')
- - +
-
+

{{ $group->name }}

- - - @if(session('success')) -
- {{ session('success') }} -
- @endif - +
-
-
-
-
Информация
-
+
+
+
Информация
ID НазваниеОписаниеОрганизация Пользователей Статус Действия
{{ $group->id }} {{ $group->name }}{{ Str::limit($group->description, 50) ?? '—' }}{{ $group->users_count }}{{ $group->organization?->name ?? '—' }}{{ $group->users->count() }} @if($group->is_active) Активна @@ -70,28 +57,20 @@
- @can('update', $group) - - - - @endcan - @can('delete', $group) -
- @csrf - @method('DELETE') - + + + + @csrf @method('DELETE') +
- @endcan
- -

В этой организации пока нет групп

+
+ +

Групп пока нет

- - - - - - - - - - - - - - - - - - - - - - - - + + + +
Название:{{ $group->name }}
Описание:{{ $group->description ?? '—' }}
Статус: - @if($group->is_active) - Активна - @else - Не активна - @endif -
Организация: - {{ $organization->name }} -
Создана:{{ $group->created_at->format('d.m.Y H:i') }}
Обновлена:{{ $group->updated_at->format('d.m.Y H:i') }}
Организация:{{ $group->organization?->name ?? '—' }}
Описание:{{ $group->description ?? '—' }}
Статус:@if($group->is_active)Активна@elseНе активна@endif
Создана:{{ $group->created_at->format('d.m.Y') }}
- -
-
-
-
Пользователи
-
+ +
+
+
Пользователи в группе ({{ $group->users->count() }})
-
{{ $group->users->count() }}
-

пользователей в группе

- @if($group->users->count() > 0) -
-
    - @foreach($group->users->take(10) as $user) -
  • - {{ $user->name }} - {{ $user->email }} -
  • - @endforeach -
- @if($group->users->count() > 10) -
- + ещё {{ $group->users->count() - 10 }} пользователей +
+ + + + + + + + + + @foreach($group->users as $user) + + + + + + @endforeach + +
ИмяEmailДолжность
{{ $user->name }}{{ $user->email }}{{ $user->getRoleNames()->first() ?? '—' }}
- @endif @else

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

@endif @@ -108,19 +60,6 @@
- -
-
-
-
-
Назначения курсов
-
-
-

Функционал назначений курсов будет доступен в следующем обновлении.

-
-
-
-
diff --git a/resources/views/partials/_sidebar.blade.php b/resources/views/partials/_sidebar.blade.php index 4286de9..ff41de8 100644 --- a/resources/views/partials/_sidebar.blade.php +++ b/resources/views/partials/_sidebar.blade.php @@ -25,7 +25,7 @@ @@ -52,7 +52,7 @@ diff --git a/routes/web.php b/routes/web.php index 3b52a59..a52c685 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,6 +10,7 @@ use App\Http\Controllers\Admin\CourseController; use App\Http\Controllers\Admin\TestController; use App\Http\Controllers\Admin\QuestionController; use App\Http\Controllers\Admin\CourseAssignmentController; +use App\Http\Controllers\Admin\GroupUserController; use App\Http\Controllers\DashboardController; use Illuminate\Support\Facades\Route; @@ -48,5 +49,6 @@ Route::middleware('auth')->group(function () { Route::resource('courses.tests', TestController::class); Route::resource('tests.questions', QuestionController::class); Route::resource('course-assignments', CourseAssignmentController::class); + Route::resource('groups', GroupUserController::class)->except(['create', 'store']); }); });