From 6caee30d9bc631477e47adb296f893ef9f6632e3 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Wed, 22 Jul 2026 17:56:39 +0330 Subject: [PATCH] Fix Jalali year-0 crash on /tasks from invalid target_date. Co-authored-by: Cursor --- app/Models/User.php | 5 ++++- app/Support/JalaliHelper.php | 19 +++++++++++++++++++ resources/views/admin/show.blade.php | 4 ++-- resources/views/attendance/profile.blade.php | 2 +- resources/views/attendance/show.blade.php | 4 ++-- resources/views/tasks/create.blade.php | 8 ++++---- resources/views/tasks/tasks.blade.php | 10 +++++----- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 3297431c..876399cf 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -107,7 +107,10 @@ class User extends Authenticatable foreach ($data->attendances as $att) { if ($att->entered_at) { - $date = \Morilog\Jalali\Jalalian::fromCarbon(\Carbon\Carbon::parse($att->entered_at)); + $date = \App\Support\JalaliHelper::fromDateTime($att->entered_at); + if (!$date) { + continue; + } $month = $date->format('%B'); if (!isset($result[$month])) { diff --git a/app/Support/JalaliHelper.php b/app/Support/JalaliHelper.php index aebecc2a..3df6522a 100644 --- a/app/Support/JalaliHelper.php +++ b/app/Support/JalaliHelper.php @@ -39,4 +39,23 @@ class JalaliHelper return $jalali ? $jalali->format($format) : $fallback; } + + /** تاریخ میلادی امن به صورت Y-m-d */ + public static function toGregorianDate($value, string $fallback = ''): string + { + if ($value === null || $value === '' || str_starts_with((string) $value, '0000-00-00')) { + return $fallback; + } + + try { + $carbon = $value instanceof Carbon ? $value->copy() : Carbon::parse($value); + if ($carbon->year < 1000 || $carbon->year > 3000) { + return $fallback; + } + + return $carbon->format('Y-m-d'); + } catch (Throwable $e) { + return $fallback; + } + } } diff --git a/resources/views/admin/show.blade.php b/resources/views/admin/show.blade.php index 82cc4dc7..a1a4a299 100755 --- a/resources/views/admin/show.blade.php +++ b/resources/views/admin/show.blade.php @@ -307,8 +307,8 @@ foreach ($data as $employee) { @foreach($records as $row) - {{ Jalalian::fromCarbon(Carbon::parse($row->entered_at))->format('m/d') ?? '-' }} - {{ Jalalian::fromCarbon(Carbon::parse($row->entered_at))->format('%A') ?? '-' }} + {{ \App\Support\JalaliHelper::format($row->entered_at, 'm/d') }} + {{ \App\Support\JalaliHelper::format($row->entered_at, '%A') }} {{ Carbon::parse($row->entered_at)->format('H:i') ?? '-' }} {{ $row->exited_at ? Carbon::parse($row->exited_at)->format('H:i') : '-' }} {{ $row->duration ? Carbon::parse($row->duration)->format('H:i') : '-' }} diff --git a/resources/views/attendance/profile.blade.php b/resources/views/attendance/profile.blade.php index 197b3acf..efee6deb 100755 --- a/resources/views/attendance/profile.blade.php +++ b/resources/views/attendance/profile.blade.php @@ -39,7 +39,7 @@
diff --git a/resources/views/attendance/show.blade.php b/resources/views/attendance/show.blade.php index 839d3cb3..776a1c37 100755 --- a/resources/views/attendance/show.blade.php +++ b/resources/views/attendance/show.blade.php @@ -52,8 +52,8 @@ foreach ($data as $month => $attendances) { @foreach($records as $row) - {{ Jalalian::fromCarbon(Carbon::parse($row->entered_at))->format('m/d') ?? '-' }} - {{ Jalalian::fromCarbon(Carbon::parse($row->entered_at))->format('%A') ?? '-' }} + {{ \App\Support\JalaliHelper::format($row->entered_at, 'm/d') }} + {{ \App\Support\JalaliHelper::format($row->entered_at, '%A') }} {{ Carbon::parse($row->entered_at)->format('H:i') ?? '-' }} {{ $row->exited_at ? Carbon::parse($row->exited_at)->format('H:i') : '-' }} {{ $row->exited_at ? Carbon::parse($row->duration)->format('H:i') : '-' }} diff --git a/resources/views/tasks/create.blade.php b/resources/views/tasks/create.blade.php index 6d3df76c..3fbc5a37 100755 --- a/resources/views/tasks/create.blade.php +++ b/resources/views/tasks/create.blade.php @@ -246,12 +246,12 @@ if (isset($task)) { // اگر مقدار اولیه از دیتابیس آمده، فیلد مخفی میلادی را هم پر کن @if(!empty($task?->start_date)) - $('#start_date_gregorian').val(@json(\Carbon\Carbon::parse($task->start_date)->format('Y-m-d'))); - $('#start_date').val(@json(\Morilog\Jalali\Jalalian::fromCarbon(\Carbon\Carbon::parse($task->start_date))->format('Y/m/d'))); + $('#start_date_gregorian').val(@json(\App\Support\JalaliHelper::toGregorianDate($task->start_date))); + $('#start_date').val(@json(\App\Support\JalaliHelper::format($task->start_date, 'Y/m/d', ''))); @endif @if(!empty($task?->target_date)) - $('#target_date_gregorian').val(@json(\Carbon\Carbon::parse($task->target_date)->format('Y-m-d'))); - $('#target_date').val(@json(\Morilog\Jalali\Jalalian::fromCarbon(\Carbon\Carbon::parse($task->target_date))->format('Y/m/d'))); + $('#target_date_gregorian').val(@json(\App\Support\JalaliHelper::toGregorianDate($task->target_date))); + $('#target_date').val(@json(\App\Support\JalaliHelper::format($task->target_date, 'Y/m/d', ''))); @endif $('form').on('submit', function (e) { diff --git a/resources/views/tasks/tasks.blade.php b/resources/views/tasks/tasks.blade.php index 6867f693..c593f083 100755 --- a/resources/views/tasks/tasks.blade.php +++ b/resources/views/tasks/tasks.blade.php @@ -584,10 +584,10 @@ $state = [
مهلت
-
{{ $task->target_date ? Jalalian::fromCarbon(Carbon::parse($task->target_date))->format('Y/m/d') : '-' }}
+
{{ \App\Support\JalaliHelper::format($task->target_date) }}
@endif