From 5c9db945d5a8fe07433e960c20a4fa497a5300a5 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 28 Nov 2023 10:01:38 -0400 Subject: [PATCH 1/5] Migration to add request title --- ...0308_add_case_title_to_processes_table.php | 28 +++++++++++++++++++ ...title_number_to_process_requests_table.php | 28 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 database/migrations/2023_11_27_170308_add_case_title_to_processes_table.php create mode 100644 database/migrations/2023_11_27_180941_add_case_title_number_to_process_requests_table.php 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..c88f20550e --- /dev/null +++ b/database/migrations/2023_11_27_170308_add_case_title_to_processes_table.php @@ -0,0 +1,28 @@ +string('case_title', 200)->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('processes', 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'); + }); + } +}; From 3c1123c722c752226474fbdc17aa3f841841c7d6 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Nov 2023 18:21:32 -0400 Subject: [PATCH 2/5] Add case title to configuration --- .../Http/Controllers/Api/ProcessController.php | 1 + .../Models/MustacheExpressionEvaluator.php | 2 +- ProcessMaker/Models/Process.php | 2 ++ ProcessMaker/Models/ProcessRequest.php | 16 +++++++++++++++- .../Nayra/Repositories/PersistenceTokenTrait.php | 12 ++++++++++-- .../Observers/ProcessRequestObserver.php | 9 +++++++++ .../js/requests/components/RequestsListing.vue | 10 +++++++--- resources/views/processes/edit.blade.php | 12 ++++++++++++ 8 files changed, 57 insertions(+), 7 deletions(-) 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/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..d076e79e99 100644 --- a/resources/views/processes/edit.blade.php +++ b/resources/views/processes/edit.blade.php @@ -97,6 +97,18 @@ +
+ {!! Form::label('case_title', __('Case Title')) !!} + {!!Form::text('case_title', null, + [ 'id'=> 'case_title', + 'class'=> 'form-control', + 'v-model'=> 'formData.case_title', + 'v-bind:class' => '{\'form-control\':true, \'is-invalid\':errors.case_title}' + ]) + !!} + {{ __('This field has a limit of 200 characters when calculated') }} +
{!! Form::label('cancelRequest', __('Cancel Request')) !!} Date: Wed, 29 Nov 2023 10:14:42 -0400 Subject: [PATCH 3/5] Keep process version logic to have the fields as process --- .../2023_11_27_170308_add_case_title_to_processes_table.php | 6 ++++++ 1 file changed, 6 insertions(+) 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 index c88f20550e..0b75970e93 100644 --- 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 @@ -14,6 +14,9 @@ public function up(): void Schema::table('processes', function (Blueprint $table) { $table->string('case_title', 200)->nullable(); }); + Schema::table('process_versions', function (Blueprint $table) { + $table->string('case_title', 200)->nullable(); + }); } /** @@ -24,5 +27,8 @@ 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'); + }); } }; From 30e807b30a13d2001b4671ced99a2cdcd279f742 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Nov 2023 18:30:30 -0400 Subject: [PATCH 4/5] Fix wrong data type in test --- tests/Feature/Api/ProcessRequestsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Feature/Api/ProcessRequestsTest.php b/tests/Feature/Api/ProcessRequestsTest.php index 2cf775951f..5f194eed01 100644 --- a/tests/Feature/Api/ProcessRequestsTest.php +++ b/tests/Feature/Api/ProcessRequestsTest.php @@ -340,7 +340,7 @@ public function testUpdateProcessRequest() //Post saved success $response = $this->apiCall('PUT', $url, [ 'name' => $faker->unique()->name(), - 'data' => '{"test":1}', + 'data' => ['test' => 1], 'process_id' => json_decode($verify->getContent())->process_id, ]); From a7576b55f1f43a28e7558a115ddbc40e8f0f1709 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Nov 2023 18:35:54 -0400 Subject: [PATCH 5/5] Fix code smell --- resources/views/processes/edit.blade.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/views/processes/edit.blade.php b/resources/views/processes/edit.blade.php index d076e79e99..e8135047b8 100644 --- a/resources/views/processes/edit.blade.php +++ b/resources/views/processes/edit.blade.php @@ -106,8 +106,9 @@ 'v-bind:class' => '{\'form-control\':true, \'is-invalid\':errors.case_title}' ]) !!} - {{ __('This field has a limit of 200 characters when calculated') }} + + {{ __('This field has a limit of 200 characters when calculated') }} +
{!! Form::label('cancelRequest', __('Cancel Request')) !!}