diff --git a/ProcessMaker/Http/Controllers/Api/ProcessController.php b/ProcessMaker/Http/Controllers/Api/ProcessController.php index 6a834fef74..7455baebcf 100644 --- a/ProcessMaker/Http/Controllers/Api/ProcessController.php +++ b/ProcessMaker/Http/Controllers/Api/ProcessController.php @@ -47,6 +47,7 @@ class ProcessController extends Controller public $doNotSanitize = [ 'bpmn', 'svg', + 'case_title', ]; /** diff --git a/ProcessMaker/Models/MustacheExpressionEvaluator.php b/ProcessMaker/Models/MustacheExpressionEvaluator.php index 71f298b923..c6ed5748ed 100644 --- a/ProcessMaker/Models/MustacheExpressionEvaluator.php +++ b/ProcessMaker/Models/MustacheExpressionEvaluator.php @@ -23,7 +23,7 @@ public function __construct() * is returned * * @param string $template - * @param string $data + * @param array $data * @return string */ public function render($template, $data) diff --git a/ProcessMaker/Models/Process.php b/ProcessMaker/Models/Process.php index 9bb5270516..ab75718edb 100644 --- a/ProcessMaker/Models/Process.php +++ b/ProcessMaker/Models/Process.php @@ -58,6 +58,7 @@ * @property string $bpmn * @property string $description * @property string $name + * @property string $case_title * @property string $status * @property array $start_events * @property int $manager_id @@ -68,6 +69,7 @@ * schema="ProcessEditable", * @OA\Property(property="process_category_id", type="integer", format="id"), * @OA\Property(property="name", type="string"), + * @OA\Property(property="case_title", type="string"), * @OA\Property(property="description", type="string"), * @OA\Property(property="status", type="string", enum={"ACTIVE", "INACTIVE", "ARCHIVED"}), * @OA\Property(property="pause_timer_start", type="integer"), diff --git a/ProcessMaker/Models/ProcessRequest.php b/ProcessMaker/Models/ProcessRequest.php index 7e3c7866b2..bca964b68e 100644 --- a/ProcessMaker/Models/ProcessRequest.php +++ b/ProcessMaker/Models/ProcessRequest.php @@ -39,8 +39,9 @@ * @property string $process_collaboration_id * @property string $participant_id * @property string $name + * @property string $case_title * @property string $status - * @property string $data + * @property array $data * @property string $collaboration_uuid * @property \Carbon\Carbon $initiated_at * @property \Carbon\Carbon $completed_at @@ -59,6 +60,7 @@ * @OA\Property(property="data", type="object"), * @OA\Property(property="status", type="string", enum={"ACTIVE", "COMPLETED", "ERROR", "CANCELED"}), * @OA\Property(property="name", type="string"), + * @OA\Property(property="case_title", type="string"), * @OA\Property(property="process_id", type="integer"), * @OA\Property(property="process", type="object"), * ), @@ -920,4 +922,16 @@ public function getErrors() ->get() ->toArray(); } + + public function evaluateCaseTitle(array $data): string + { + // check if $this->process relation is loaded + if ($this->process && $this->process instanceof Process) { + $mustacheTitle = $this->process->case_title; + } else { + $mustacheTitle = $this->process()->select('case_title')->first()->case_title; + } + $mustache = new MustacheExpressionEvaluator(); + return $mustache->render($mustacheTitle, $data); + } } diff --git a/ProcessMaker/Nayra/Repositories/PersistenceTokenTrait.php b/ProcessMaker/Nayra/Repositories/PersistenceTokenTrait.php index 25b8cc256d..0d31beab4f 100644 --- a/ProcessMaker/Nayra/Repositories/PersistenceTokenTrait.php +++ b/ProcessMaker/Nayra/Repositories/PersistenceTokenTrait.php @@ -165,9 +165,17 @@ public function persistGatewayTokenConsumed(array $transaction) public function persistGatewayTokenPassed(array $transaction) { $gateway = $this->deserializer->unserializeEntity($transaction['gateway']); - $transition = $this->deserializer->unserializeEntity($transaction['transition']); + if (!is_numeric($transaction['transition'])) { + Log::info('Invalid transition id for gateway token passed. ' . json_encode($transaction)); + return; + } + $transition = $gateway->getTransitions()[$transaction['transition']] ?? null; + if (empty($transition)) { + Log::info('Invalid transition for gateway token passed. ' . json_encode($transaction)); + return; + } $tokens = $this->deserializer->unserializeTokensCollection($transaction['tokens']); - $this->tokenRepository->persistGatewayTokenPassed($gateway, $tokens[0]); + $this->tokenRepository->persistGatewayTokenPassed($gateway, $tokens->item(0)); // Comments $subscriber = new CommentsSubscriber(); diff --git a/ProcessMaker/Observers/ProcessRequestObserver.php b/ProcessMaker/Observers/ProcessRequestObserver.php index 843083884b..b060e1a15e 100644 --- a/ProcessMaker/Observers/ProcessRequestObserver.php +++ b/ProcessMaker/Observers/ProcessRequestObserver.php @@ -58,4 +58,13 @@ public function saved(ProcessRequest $request) $request->scheduledTasks()->delete(); } } + + public function saving(ProcessRequest $request) + { + // When data is updated we update the case_title + if ($request->isDirty('data')) { + $data = $request->data; + $request->case_title = $request->evaluateCaseTitle($data); + } + } } diff --git a/database/migrations/2023_11_27_170308_add_case_title_to_processes_table.php b/database/migrations/2023_11_27_170308_add_case_title_to_processes_table.php new file mode 100644 index 0000000000..0b75970e93 --- /dev/null +++ b/database/migrations/2023_11_27_170308_add_case_title_to_processes_table.php @@ -0,0 +1,34 @@ +string('case_title', 200)->nullable(); + }); + Schema::table('process_versions', function (Blueprint $table) { + $table->string('case_title', 200)->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('processes', function (Blueprint $table) { + $table->dropColumn('case_title'); + }); + Schema::table('process_versions', function (Blueprint $table) { + $table->dropColumn('case_title'); + }); + } +}; diff --git a/database/migrations/2023_11_27_180941_add_case_title_number_to_process_requests_table.php b/database/migrations/2023_11_27_180941_add_case_title_number_to_process_requests_table.php new file mode 100644 index 0000000000..e276baf734 --- /dev/null +++ b/database/migrations/2023_11_27_180941_add_case_title_number_to_process_requests_table.php @@ -0,0 +1,28 @@ +string('case_title', 200)->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('process_requests', function (Blueprint $table) { + $table->dropColumn('case_title'); + }); + } +}; diff --git a/resources/js/requests/components/RequestsListing.vue b/resources/js/requests/components/RequestsListing.vue index 5100cde40e..70756a6fb0 100644 --- a/resources/js/requests/components/RequestsListing.vue +++ b/resources/js/requests/components/RequestsListing.vue @@ -201,7 +201,13 @@ export default { default: true, }, { - label: "Name", + label: "Case Title", + field: "case_title", + sortable: true, + default: true, + }, + { + label: "Process Name", field: "name", sortable: true, default: true, @@ -356,5 +362,3 @@ export default { }, }; - diff --git a/resources/views/processes/edit.blade.php b/resources/views/processes/edit.blade.php index 13ca11a0e0..e8135047b8 100644 --- a/resources/views/processes/edit.blade.php +++ b/resources/views/processes/edit.blade.php @@ -97,6 +97,19 @@