From 1a0e084bababd6a9b7d2b4c92106dc744e771aca Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 10 Sep 2025 15:21:01 -0400 Subject: [PATCH 1/7] feat: add saved_search_advanced_configuration to filesystem configuration --- .gitignore | 1 + config/filesystems.php | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index 7a47d39bab..8d89feb4b6 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ storage/ssl storage/api/* storage/data-sources/logs/* storage/decision-tables/* +storage/saved_search_advanced_configuration/* npm.sh laravel-echo-server.lock public/.htaccess diff --git a/config/filesystems.php b/config/filesystems.php index 809b4718f7..3fa45d5637 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -136,6 +136,13 @@ // Others declared in packages // - translations - package-translations // - 'filesystems.disks.install' configured on the fly + + 'saved_search_advanced_configuration' => [ + 'driver' => 'local', + 'root' => storage_path('saved_search_advanced_configuration'), + 'url' => env('APP_URL') . '/storage/saved_search_advanced_configuration', + 'visibility' => 'private', + ], ], /* From 2445e0ca004042a348fb174a2612ef3c70dd72fd Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 16 Sep 2025 18:31:15 -0400 Subject: [PATCH 2/7] Add job validation and new scheduling method `scheduleDateJob` --- .../Managers/TaskSchedulerManager.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ProcessMaker/Managers/TaskSchedulerManager.php b/ProcessMaker/Managers/TaskSchedulerManager.php index 10e26e4fd4..af9bde3e9b 100644 --- a/ProcessMaker/Managers/TaskSchedulerManager.php +++ b/ProcessMaker/Managers/TaskSchedulerManager.php @@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; +use InvalidArgumentException; use PDOException; use ProcessMaker\Facades\WorkflowManager; use ProcessMaker\Jobs\StartEventConditional; @@ -888,6 +889,9 @@ public function scheduleCycle( */ public function scheduleCycleJob($interval, array $config): ScheduledTask { + if (!isset($config['job'])) { + throw new InvalidArgumentException('$config["job"] is required'); + } $configuration = [ 'type' => 'TimeCycle', 'interval' => $interval, @@ -904,6 +908,33 @@ public function scheduleCycleJob($interval, array $config): ScheduledTask return $scheduledTask; } + /** + * Schedule a job for a specific datetime + * + * @param string $datetime in ISO-8601 format + * @param array $config configuration + * + * @return ScheduledTask + */ + public function scheduleDateJob($datetime, array $config): ScheduledTask + { + if (!isset($config['job'])) { + throw new InvalidArgumentException('$config["job"] is required'); + } + $configuration = [ + 'type' => 'TimeDate', + 'date' => $datetime, + ...$config, + ]; + $scheduledTask = new ScheduledTask(); + $scheduledTask->configuration = json_encode($configuration); + $scheduledTask->type = 'SCHEDULED_JOB'; + $scheduledTask->last_execution = null; + $scheduledTask->save(); + + return $scheduledTask; + } + /** * Schedule a job execution after a time duration for the given BPMN element, * event definition and an optional Token object From 4f14492daf75b302c68d1e866f6a949e02dd537f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 9 Jul 2026 12:19:44 -0400 Subject: [PATCH 3/7] Bumped tag branch perfomance --- composer.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 27aa31c9d9..b291c6de15 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "processmaker/processmaker", - "version": "2026.12.1", + "version": "2026.12.1-FOUR-26166", "description": "BPM PHP Software", "keywords": [ "php bpm processmaker" @@ -178,7 +178,7 @@ "package-product-analytics": "1.5.11", "package-projects": "1.12.9", "package-rpa": "1.1.2", - "package-savedsearch": "1.43.14", + "package-savedsearch": "dev-feature/FOUR-26166", "package-slideshow": "1.4.3", "package-smart-extract": "1.0.0", "package-signature": "1.15.6", diff --git a/package.json b/package.json index dc8db21e4c..cb79f03d2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/processmaker", - "version": "2026.12.1", + "version": "2026.12.1-FOUR-26166", "description": "ProcessMaker 4", "author": "DevOps ", "license": "ISC", From ea35fe0015835d02a2f0d8f4b5c1cb93c6906fda Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 9 Jul 2026 14:45:56 -0400 Subject: [PATCH 4/7] Fixing issue composer version --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b291c6de15..c0204a9e1a 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "processmaker/processmaker", - "version": "2026.12.1-FOUR-26166", + "version": "2026.12.1-26166", "description": "BPM PHP Software", "keywords": [ "php bpm processmaker" From 880cdbf3d71f884ebff867e516d9eb5838659e83 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 9 Jul 2026 14:47:03 -0400 Subject: [PATCH 5/7] Fixing issue composer version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb79f03d2a..bc3c0e44fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/processmaker", - "version": "2026.12.1-FOUR-26166", + "version": "2026.12.1-26166", "description": "ProcessMaker 4", "author": "DevOps ", "license": "ISC", From ed93d732115e047942e375f327460b6a809bab9f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 9 Jul 2026 14:52:12 -0400 Subject: [PATCH 6/7] Fixing issue composer version --- composer.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index c0204a9e1a..234686ee80 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "processmaker/processmaker", - "version": "2026.12.1-26166", + "version": "2026.12.1+26166", "description": "BPM PHP Software", "keywords": [ "php bpm processmaker" diff --git a/package.json b/package.json index bc3c0e44fd..75b35fb880 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/processmaker", - "version": "2026.12.1-26166", + "version": "2026.12.1+26166", "description": "ProcessMaker 4", "author": "DevOps ", "license": "ISC", From f621ec40f11cbeb98c1be577345e94a2b52204f2 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Fri, 10 Jul 2026 13:35:41 -0400 Subject: [PATCH 7/7] feat: fix TaskSchedulerManager to handle last_execution initialization and update configuration structure for scheduled jobs --- ProcessMaker/Managers/TaskSchedulerManager.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ProcessMaker/Managers/TaskSchedulerManager.php b/ProcessMaker/Managers/TaskSchedulerManager.php index af9bde3e9b..a158118e37 100644 --- a/ProcessMaker/Managers/TaskSchedulerManager.php +++ b/ProcessMaker/Managers/TaskSchedulerManager.php @@ -204,10 +204,11 @@ private function processTaskWithAtomicClaim(ScheduledTask $task, DateTime $today { try { $config = json_decode($task->configuration); - $lastExecution = new DateTime($task->last_execution, new DateTimeZone('UTC')); - if ($lastExecution === null) { - return; + // SCHEDULED_JOB rows use last_execution = null until first run; BPMN timers always set last_execution. + $lastExecution = null; + if ($task->last_execution !== null && $task->last_execution !== '') { + $lastExecution = new DateTime($task->last_execution, new DateTimeZone('UTC')); } $owner = $task->processRequestToken ?: $task->processRequest ?: $task->process; @@ -921,11 +922,14 @@ public function scheduleDateJob($datetime, array $config): ScheduledTask if (!isset($config['job'])) { throw new InvalidArgumentException('$config["job"] is required'); } + + // Must use "interval" so nextDate(TimeDate) picks up the target datetime (same shape as BPMN timer tasks). $configuration = [ 'type' => 'TimeDate', - 'date' => $datetime, ...$config, + 'interval' => $datetime, ]; + $scheduledTask = new ScheduledTask(); $scheduledTask->configuration = json_encode($configuration); $scheduledTask->type = 'SCHEDULED_JOB';