From b4370076a3ae75342ef5ba5a0280ea077a09cb4f Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Mon, 16 Feb 2026 11:34:38 +0100 Subject: [PATCH] feat: Add recursive task handling and lightbox for task images --- autoload/class.Cron.php | 6 ++- autoload/controls/class.Tasks.php | 3 +- autoload/factory/class.Tasks.php | 4 +- templates/tasks/task_edit.php | 15 +++++-- templates/tasks/task_popup.php | 69 +++++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 7 deletions(-) diff --git a/autoload/class.Cron.php b/autoload/class.Cron.php index a22c393..533e3bc 100644 --- a/autoload/class.Cron.php +++ b/autoload/class.Cron.php @@ -84,6 +84,10 @@ class Cron } } + /* sprawdzenie daty ostatniego powtórzenia */ + if ( $row['recursive_last_date'] and $new_date_end > $row['recursive_last_date'] ) + continue; + $days_reminder = explode( ',', $row['reminders_interval'] ); $max_days_reminder = max( $days_reminder ); @@ -97,7 +101,7 @@ class Cron $row['show_in_calendar'] ? $show_in_calendar = 'on' : $show_in_calendar = 'off'; $new_task_id = \factory\Tasks::task_save( - null, $row['id'], $row['created_by'], $row['name'], $row['text'], $new_date_start, $new_date_end, $row['project_id'], $row['client_id'], $row['pay_rate'], $row['reminders_interval'], $row['recursively'] ? 'on' : 'off', $row['frequency'], $row['period'], $task_users, $row['date_end_month_day'], $row['date_start_month_day'], null, $row['status_change_mail'], true, $status, $show_in_calendar, $row['priority'] + null, $row['id'], $row['created_by'], $row['name'], $row['text'], $new_date_start, $new_date_end, $row['project_id'], $row['client_id'], $row['pay_rate'], $row['reminders_interval'], $row['recursively'] ? 'on' : 'off', $row['frequency'], $row['period'], $task_users, $row['date_end_month_day'], $row['date_start_month_day'], null, $row['status_change_mail'], true, $status, $show_in_calendar, $row['priority'], $row['recursive_last_date'] ); if ( $new_task_id ) { diff --git a/autoload/controls/class.Tasks.php b/autoload/controls/class.Tasks.php index 5cd0f79..1030a81 100644 --- a/autoload/controls/class.Tasks.php +++ b/autoload/controls/class.Tasks.php @@ -415,10 +415,11 @@ class Tasks $values['send_email_notification'] = isset( $values['send_email_notification'] ) ? $values['send_email_notification'] : 'off'; $values['users'] = isset( $values['users'] ) ? $values['users'] : []; $values['priority'] = isset( $values['priority'] ) && $values['priority'] !== '' ? $values['priority'] : 0; + $values['recursive_last_date'] = isset( $values['recursive_last_date'] ) ? $values['recursive_last_date'] : null; $status = \Controllers\TasksController::resolveTaskStatusForSave( $values ); if ( $id = \factory\Tasks::task_save( - $values['id'], null, $user['id'], $values['name'], $values['text'], $values['date_start'], $values['date_end'], $values['project_id'], $values['client_id'], $values['pay_rate'], $values['reminders_interval'], $values['recursively'], $values['frequency'], $values['period'], $values['users'], null, null, $values['send_email_notification'], $values['status_change_mail'], false, $status, $values['show_in_calendar'], $values['priority'] + $values['id'], null, $user['id'], $values['name'], $values['text'], $values['date_start'], $values['date_end'], $values['project_id'], $values['client_id'], $values['pay_rate'], $values['reminders_interval'], $values['recursively'], $values['frequency'], $values['period'], $values['users'], null, null, $values['send_email_notification'], $values['status_change_mail'], false, $status, $values['show_in_calendar'], $values['priority'], $values['recursive_last_date'] ) ) { \factory\Tasks::clear_task_opened( $id ); diff --git a/autoload/factory/class.Tasks.php b/autoload/factory/class.Tasks.php index 65a9013..356bcbf 100644 --- a/autoload/factory/class.Tasks.php +++ b/autoload/factory/class.Tasks.php @@ -447,7 +447,7 @@ class Tasks } // przy zmianach pamiętać o zadaniach z CRON - static public function task_save( $task_id, $parent_id = null, $user_id, $name, $text, $date_start, $date_end, $project_id, $client_id, $pay_rate, $reminders_interval, $recursively, $frequency, $period, $users, $date_end_month_day = null, $date_start_month_day = null, $send_email_notification = false, $status_change_mail, $rescursive = false, $status = 0, $show_in_calendar, $priority = 0 ) + static public function task_save( $task_id, $parent_id = null, $user_id, $name, $text, $date_start, $date_end, $project_id, $client_id, $pay_rate, $reminders_interval, $recursively, $frequency, $period, $users, $date_end_month_day = null, $date_start_month_day = null, $send_email_notification = false, $status_change_mail, $rescursive = false, $status = 0, $show_in_calendar, $priority = 0, $recursive_last_date = null ) { global $mdb; @@ -476,6 +476,7 @@ class Tasks 'status' => $status, 'show_in_calendar' => self::isEnabled( $show_in_calendar ) ? 1 : 0, 'priority' => $priority, + 'recursive_last_date' => $recursive_last_date != '' ? $recursive_last_date : null, ] ); $id = $mdb -> id(); @@ -518,6 +519,7 @@ class Tasks 'status' => $status, 'show_in_calendar' => self::isEnabled( $show_in_calendar ) ? 1 : 0, 'priority' => $priority, + 'recursive_last_date' => $recursive_last_date != '' ? $recursive_last_date : null, ], [ 'AND' => [ 'id' => $task_id diff --git a/templates/tasks/task_edit.php b/templates/tasks/task_edit.php index a69b127..604d8b8 100644 --- a/templates/tasks/task_edit.php +++ b/templates/tasks/task_edit.php @@ -203,6 +203,12 @@ if ( is_array( $this -> priorities ) ) +
+ +
+ +
+
'Powiadom użytkowników mailem', @@ -264,10 +270,11 @@ echo $grid -> draw(); $(document).ready(function () { function toggleRecursiveDetails() { - if ( $( '#recursively' ).is( ':checked' ) ) - $( '#recursive-details' ).show(); - else - $( '#recursive-details' ).hide(); + if ( $( '#recursively' ).is( ':checked' ) ) { + $( '#recursive-details, .recursive-detail' ).show(); + } else { + $( '#recursive-details, .recursive-detail' ).hide(); + } } $('input[type="checkbox"]').iCheck({ diff --git a/templates/tasks/task_popup.php b/templates/tasks/task_popup.php index d140318..726d2f9 100644 --- a/templates/tasks/task_popup.php +++ b/templates/tasks/task_popup.php @@ -284,6 +284,50 @@ .task_popup .task_details .content .right .client .select2-container--bootstrap-5.select2-container--open .select2-selection { border-color: #6690f4; } + + /* Lightbox - powiększanie zdjęć w opisie */ + .task_popup .task_details .description img { + cursor: zoom-in; + transition: opacity .2s ease; + } + .task_popup .task_details .description img:hover { + opacity: .85; + } + .task-img-lightbox { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 99999; + background: rgba(0,0,0,.85); + display: flex; + align-items: center; + justify-content: center; + cursor: zoom-out; + animation: taskLightboxIn .2s ease; + } + @keyframes taskLightboxIn { + from { opacity: 0; } + to { opacity: 1; } + } + .task-img-lightbox img { + max-width: 90vw; + max-height: 90vh; + border-radius: 4px; + box-shadow: 0 0 40px rgba(0,0,0,.5); + object-fit: contain; + } + .task-img-lightbox .lightbox-close { + position: absolute; + top: 16px; + right: 24px; + color: #fff; + font-size: 32px; + cursor: pointer; + line-height: 1; + text-shadow: 0 0 8px rgba(0,0,0,.6); + }