middleware('auth'); } public function getFormStats(FormStatsRequest $request) { $form = $request->form; // Added by ProForm middleware $this->authorize('view', $form); $formStats = $form->statistics()->whereBetween('date', [$request->date_from, $request->date_to])->get(); $periodStats = ['views' => [], 'submissions' => []]; foreach (CarbonPeriod::create($request->date_from, $request->date_to) as $dateObj) { $date = $dateObj->format('d-m-Y'); $statisticData = $formStats->where('date', $dateObj->format('Y-m-d'))->first(); $periodStats['views'][$date] = $statisticData->data['views'] ?? 0; $periodStats['submissions'][$date] = $form->submissions()->whereDate('created_at', $dateObj)->count(); if ($dateObj->toDateString() === now()->toDateString()) { $periodStats['views'][$date] += $form->views()->count(); } } return $periodStats; } public function getFormStatsDetails(Request $request) { $form = $request->form; // Added by ProForm middleware $this->authorize('view', $form); $totalViews = $form->views_count; $totalSubmissions = $form->submissions_count; $averageDuration = \Cache::remember('form_stats_average_duration_' . $form->id, 1800, function () use ($form) { $submissionsWithDuration = $form->submissions()->whereNotNull('completion_time')->count() ?? 0; $totalDuration = $form->submissions()->whereNotNull('completion_time')->sum('completion_time') ?? 0; return $submissionsWithDuration > 0 ? round($totalDuration / $submissionsWithDuration) : null; }); return [ 'views' => $totalViews, 'submissions' => $totalSubmissions, 'completion_rate' => $totalViews > 0 ? round(($totalSubmissions / $totalViews) * 100, 2) : 0, 'average_duration' => $averageDuration ? CarbonInterval::seconds($averageDuration)->cascade()->forHumans(null, true) : null ]; } }