/
denispirit
/
gruzovozoff
Обзор
Документация
Войти
/
denispirit
/
gruzovozoff
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
app/Http/Controllers/AdminController.php
98 строк
3 KB
denispirit
итоговый проект Грузовозофф
27 фев 2026, 09:30
27 фев 2026, 09:30
377ca07
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Models\Order; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Closure; class AdminController extends Controller { /** * Middleware для проверки администратора */ public function __construct() { $this->middleware(function (Request $request, Closure $next) { if (Auth::check() && Auth::user()->login === 'admin') { return $next($request); } abort(403, 'Доступ запрещен.'); }); } /** * Показать панель администратора со списком заказов */ public function index(Request $request) { $query = Order::with('user'); // Фильтрация по статусу if ($request->has('status') && $request->status !== 'all') { $query->where('status', $request->status); } // Фильтрация по типу груза if ($request->has('cargo_type') && $request->cargo_type !== 'all') { $query->where('cargo_type', $request->cargo_type); } // Поиск по ID заказа if ($request->has('search')) { $query->where('id', $request->search); } $orders = $query->orderBy('created_at', 'desc')->paginate(15); $statuses = Order::getStatuses(); $cargoTypes = Order::getCargoTypes(); return view('admin.index', compact('orders', 'statuses', 'cargoTypes')); } /** * Обновление статуса заказа */ public function updateStatus(Request $request, Order $order) { $validated = $request->validate([ 'status' => ['required', 'in:' . implode(',', Order::getStatuses())], 'admin_notes' => ['nullable', 'string', 'max:1000'], ]); $order->update([ 'status' => $validated['status'], 'admin_notes' => $validated['admin_notes'] ?? $order->admin_notes, ]); return back()->with('success', 'Статус заказа обновлен успешно!'); } /** * Показать статистику */ public function statistics() { $totalOrders = Order::count(); $newOrders = Order::where('status', Order::STATUS_NEW)->count(); $completedOrders = Order::where('status', Order::STATUS_COMPLETED)->count(); $totalUsers = User::where('login', '!=', 'admin')->count(); // Статистика по типам груза $cargoStats = Order::select('cargo_type') ->selectRaw('COUNT(*) as count') ->groupBy('cargo_type') ->get(); return view('admin.statistics', compact( 'totalOrders', 'newOrders', 'completedOrders', 'totalUsers', 'cargoStats' )); } }