Skip to content

Commit b5d8da9

Browse files
Merge remote-tracking branch 'origin/develop' into FOUR-33159
2 parents c171a6e + 70e48d6 commit b5d8da9

30 files changed

Lines changed: 675 additions & 350 deletions

File tree

ProcessMaker/Http/Controllers/Process/ModelerController.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,15 @@ public function prepareModelerData(
128128

129129
$defaultEmailNotification = $this->getDefaultEmailNotification();
130130

131+
$modelerPackageScripts = array_values(array_filter(
132+
$manager->getScriptWithParams(),
133+
fn ($params) => !str_contains($params['src'], 'initialLoad')
134+
));
135+
131136
return [
132137
'process' => $process,
133138
'manager' => $manager,
139+
'modelerPackageScripts' => $modelerPackageScripts,
134140
'signalPermissions' => SignalManager::permissions($request->user()),
135141
'autoSaveDelay' => config('versions.delay.process', 5000),
136142
'isVersionsInstalled' => PackageHelper::isPackageInstalled('ProcessMaker\Package\Versions\PluginServiceProvider'),

ProcessMaker/Repositories/ProcessExecutionRawRepository.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -483,13 +483,12 @@ private function mergeGroupMemberUserIdsRaw(array $groupIds, array &$users): voi
483483

484484
if ($subGroupIds) {
485485
$subGroupIds = array_values(array_unique($subGroupIds));
486-
$groupPlaceholders = implode(',', array_fill(0, count($subGroupIds), '?'));
487-
$activeGroups = DB::select(
488-
"SELECT id FROM groups WHERE id IN ($groupPlaceholders) AND status = ?",
489-
array_merge($subGroupIds, ['ACTIVE'])
490-
);
491-
foreach ($activeGroups as $group) {
492-
$pending[] = (int) $group->id;
486+
$activeGroupIds = DB::table('groups')
487+
->whereIn('id', $subGroupIds)
488+
->where('status', 'ACTIVE')
489+
->pluck('id');
490+
foreach ($activeGroupIds as $groupId) {
491+
$pending[] = (int) $groupId;
493492
}
494493
}
495494
}

ProcessMaker/Traits/TaskControllerIndexMethods.php

Lines changed: 44 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Illuminate\Database\QueryException;
77
use Illuminate\Support\Arr;
88
use Illuminate\Support\Facades\Cache;
9+
use Illuminate\Support\Facades\DB;
910
use ProcessMaker\Filters\Filter;
1011
use ProcessMaker\Managers\DataManager;
1112
use ProcessMaker\Models\Process;
@@ -69,7 +70,7 @@ private function applyFilters($query, $request)
6970
}
7071

7172
$filterByFields = [
72-
'process_id',
73+
'process_request_tokens.process_id' => 'process_id',
7374
'process_request_tokens.user_id' => 'user_id',
7475
'process_request_tokens.status' => 'status',
7576
'element_id',
@@ -247,60 +248,6 @@ private function applyColumnOrdering($query, $request)
247248
'is_priority',
248249
];
249250

250-
$hasProcessRequestOrdering = false;
251-
$hasUserOrdering = false;
252-
foreach ($orderColumns as $column) {
253-
$normalizedColumn = preg_replace(
254-
'/^(process_request|processRequests)\./',
255-
'process_requests.',
256-
$column
257-
);
258-
259-
if (in_array($normalizedColumn, array_map(
260-
fn ($name) => 'process_requests.' . $name,
261-
$processRequestColumns
262-
), true) || preg_match('/^data\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/', $column)) {
263-
$hasProcessRequestOrdering = true;
264-
}
265-
if ($column === 'user.name') {
266-
$hasUserOrdering = true;
267-
}
268-
}
269-
270-
if ($hasProcessRequestOrdering) {
271-
$query->leftJoin(
272-
'process_requests',
273-
'process_requests.id',
274-
'=',
275-
'process_request_tokens.process_request_id'
276-
);
277-
}
278-
if ($hasUserOrdering) {
279-
$query->leftJoin(
280-
'users',
281-
'users.id',
282-
'=',
283-
'process_request_tokens.user_id'
284-
);
285-
}
286-
if ($hasProcessRequestOrdering || $hasUserOrdering) {
287-
if ($query->getQuery()->columns === null) {
288-
$query->select('process_request_tokens.*');
289-
} else {
290-
$query->select(array_map(function ($column) {
291-
if (!is_string($column)) {
292-
return $column;
293-
}
294-
295-
$column = ltrim($column, '.');
296-
297-
return str_contains($column, '.')
298-
? $column
299-
: 'process_request_tokens.' . $column;
300-
}, $query->getQuery()->columns));
301-
}
302-
}
303-
304251
$hasValidOrdering = false;
305252
foreach ($orderColumns as $index => $column) {
306253
$direction = strtolower($orderDirections[$index] ?? $orderDirections[0] ?? 'asc');
@@ -312,17 +259,44 @@ private function applyColumnOrdering($query, $request)
312259
);
313260

314261
if ($column === 'user.name') {
315-
$query->orderBy('users.firstname', $direction)
316-
->orderBy('users.lastname', $direction);
262+
$query->orderBy(
263+
$this->relatedOrderSubquery('users', 'firstname', 'users.id', 'process_request_tokens.user_id'),
264+
$direction
265+
)->orderBy(
266+
$this->relatedOrderSubquery('users', 'lastname', 'users.id', 'process_request_tokens.user_id'),
267+
$direction
268+
);
317269
$hasValidOrdering = true;
318270
} elseif (preg_match('/^data\.([A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*)$/', $column, $matches)) {
319-
$query->orderBy('process_requests.data->' . str_replace('.', '->', $matches[1]), $direction);
271+
$jsonColumn = 'data->' . str_replace('.', '->', $matches[1]);
272+
$query->orderBy(
273+
$this->relatedOrderSubquery(
274+
'process_requests',
275+
$jsonColumn,
276+
'process_requests.id',
277+
'process_request_tokens.process_request_id'
278+
),
279+
$direction
280+
);
320281
$hasValidOrdering = true;
321282
} elseif (in_array($normalizedColumn, array_map(
322283
fn ($name) => 'process_requests.' . $name,
323284
$processRequestColumns
324285
), true)) {
325-
$query->orderBy($normalizedColumn, $direction);
286+
$columnName = substr($normalizedColumn, strlen('process_requests.'));
287+
if ($columnName === 'id') {
288+
$query->orderBy('process_request_tokens.process_request_id', $direction);
289+
} else {
290+
$query->orderBy(
291+
$this->relatedOrderSubquery(
292+
'process_requests',
293+
$columnName,
294+
'process_requests.id',
295+
'process_request_tokens.process_request_id'
296+
),
297+
$direction
298+
);
299+
}
326300
$hasValidOrdering = true;
327301
} elseif (in_array($column, $tokenColumns, true)) {
328302
$query->orderBy('process_request_tokens.' . $column, $direction);
@@ -335,14 +309,22 @@ private function applyColumnOrdering($query, $request)
335309
}
336310
}
337311

312+
private function relatedOrderSubquery(string $table, string $column, string $localKey, string $foreignKey)
313+
{
314+
return DB::table($table)
315+
->select($column)
316+
->whereColumn($localKey, $foreignKey)
317+
->limit(1);
318+
}
319+
338320
private function applyStatusFilter($query, $request)
339321
{
340322
$statusFilter = $request->input('statusfilter', '');
341323
if ($statusFilter) {
342324
$statusFilter = array_map(function ($value) {
343325
return mb_strtoupper(trim($value));
344326
}, explode(',', $statusFilter));
345-
$query->whereIn('status', $statusFilter);
327+
$query->whereIn('process_request_tokens.status', $statusFilter);
346328
}
347329
}
348330

@@ -544,8 +526,8 @@ private function applyForCurrentUser($query, $user)
544526
}
545527

546528
$query->where(function ($query) use ($user) {
547-
$query->where('user_id', $user->id)
548-
->orWhereIn('id', $user->availableSelfServiceTasksQuery());
529+
$query->where('process_request_tokens.user_id', $user->id)
530+
->orWhereIn('process_request_tokens.id', $user->availableSelfServiceTasksQuery());
549531
});
550532
}
551533

composer.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "processmaker/processmaker",
3-
"version": "2026.15.1",
3+
"version": "2026.15.2",
44
"description": "BPM PHP Software",
55
"keywords": [
66
"php bpm processmaker"
@@ -36,7 +36,7 @@
3636
"laravel/ui": "^4.6",
3737
"lavary/laravel-menu": "^1.8",
3838
"lcobucci/jwt": "^5.6",
39-
"league/commonmark": "^2.9.0",
39+
"league/commonmark": "^2.10.0",
4040
"league/flysystem-aws-s3-v3": "^3.25.1",
4141
"mateusjunges/laravel-kafka": "^2.11",
4242
"mittwald/vault-php": "^2.1",
@@ -117,10 +117,10 @@
117117
"Gmail"
118118
],
119119
"processmaker": {
120-
"build": "d323d2ce",
120+
"build": "a1d20216",
121121
"cicd-enabled": true,
122122
"custom": {
123-
"package-ellucian-ethos": "1.19.10",
123+
"package-ellucian-ethos": "1.19.12",
124124
"paypal-package": "dev-fall",
125125
"pps-adsync": "dev-fall",
126126
"ps_ethos": "dev-main",
@@ -180,15 +180,15 @@
180180
"package-product-analytics": "1.5.12",
181181
"package-projects": "1.12.12",
182182
"package-rpa": "1.1.2",
183-
"package-savedsearch": "1.43.20",
183+
"package-savedsearch": "1.43.21",
184184
"package-slideshow": "1.4.3",
185185
"package-smart-extract": "1.0.1",
186186
"package-signature": "1.15.6",
187187
"package-testing": "1.8.2",
188188
"package-translations": "2.14.7",
189189
"package-versions": "1.13.1",
190190
"package-vocabularies": "2.17.2",
191-
"package-webentry": "2.29.19",
191+
"package-webentry": "2.29.20",
192192
"package-api-testing": "1.3.3",
193193
"package-variable-finder": "1.0.7",
194194
"packages": "^0"

composer.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)