91 lines
3.4 KiB
PHP
91 lines
3.4 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Middleware;
|
||
|
||
use Closure;
|
||
use Illuminate\Http\Request;
|
||
use App\Services\MenuAccessService;
|
||
use Illuminate\Support\Facades\View;
|
||
use Illuminate\Support\Facades\DB;
|
||
|
||
/**
|
||
* メニューアクセス制御データをビューに共有する Middleware
|
||
*
|
||
* すべてのビューで $isSorin と $visibleCities が利用可能になります。
|
||
* また、nav bar に表示される ハード異常・タスク情報も同時に共有します。
|
||
*/
|
||
class ShareMenuAccessData
|
||
{
|
||
public function handle(Request $request, Closure $next)
|
||
{
|
||
$menuAccessService = app(MenuAccessService::class);
|
||
|
||
// メニュー関連データ
|
||
$viewData = [
|
||
'isSorin' => $menuAccessService->isSorin(),
|
||
'visibleCities' => $menuAccessService->visibleCities(),
|
||
];
|
||
|
||
// Nav bar に表示される ハード異常・タスク件数を取得
|
||
if (auth()->check()) {
|
||
// ハード異常(que_class > 99)かつステータスが未対応(1)または進行中(2)
|
||
$hardwareIssues = DB::table('operator_que as oq')
|
||
->leftJoin('user as u', 'oq.user_id', '=', 'u.user_id')
|
||
->leftJoin('park as p', 'oq.park_id', '=', 'p.park_id')
|
||
->select(
|
||
'oq.que_id', 'oq.que_class', 'oq.que_comment',
|
||
'oq.created_at', 'oq.updated_at', 'oq.que_status'
|
||
)
|
||
->where('oq.que_class', '>', 99)
|
||
->whereIn('oq.que_status', [1, 2])
|
||
->orderBy('oq.created_at', 'DESC')
|
||
->limit(5)
|
||
->get();
|
||
|
||
// タスク(que_class < 99)かつステータスが未対応(1)または進行中(2)
|
||
$taskIssues = DB::table('operator_que as oq')
|
||
->leftJoin('user as u', 'oq.user_id', '=', 'u.user_id')
|
||
->leftJoin('park as p', 'oq.park_id', '=', 'p.park_id')
|
||
->select(
|
||
'oq.que_id', 'oq.que_class', 'oq.que_comment',
|
||
'oq.created_at', 'oq.updated_at', 'oq.que_status'
|
||
)
|
||
->where('oq.que_class', '<', 99)
|
||
->whereIn('oq.que_status', [1, 2])
|
||
->orderBy('oq.created_at', 'DESC')
|
||
->limit(5)
|
||
->get();
|
||
|
||
// ハード異常・タスク件数計算
|
||
$hardCount = DB::table('operator_que')
|
||
->where('que_class', '>', 99)
|
||
->whereIn('que_status', [1, 2])
|
||
->count();
|
||
|
||
$taskCount = DB::table('operator_que')
|
||
->where('que_class', '<', 99)
|
||
->whereIn('que_status', [1, 2])
|
||
->count();
|
||
|
||
// 最新のハード異常・タスク日時
|
||
$hardLatest = $hardwareIssues->first()?->created_at;
|
||
$taskLatest = $taskIssues->first()?->created_at;
|
||
|
||
// Nav bar 関連データをマージ
|
||
$viewData = array_merge($viewData, [
|
||
'hardCount' => $hardCount,
|
||
'hardLatest' => $hardLatest,
|
||
'latestHards' => $hardwareIssues,
|
||
'taskCount' => $taskCount,
|
||
'taskLatest' => $taskLatest,
|
||
'latestTasks' => $taskIssues,
|
||
]);
|
||
}
|
||
|
||
// すべてのビューでこれらのデータが利用可能
|
||
View::share($viewData);
|
||
|
||
return $next($request);
|
||
}
|
||
}
|