From 54452b89a8bf917133b6eccba963641fec3f1928 Mon Sep 17 00:00:00 2001 From: Eleazar Resendez Date: Tue, 28 Nov 2023 15:24:46 -0600 Subject: [PATCH 1/4] Add WizardTemplateController and related files --- .../Api/WizardTemplateController.php | 28 +++++++++++++++ ProcessMaker/Models/WizardTemplate.php | 21 +++++++++++ .../Models/WizardTemplateFactory.php | 21 +++++++++++ routes/api.php | 6 ++-- tests/Feature/Api/WizardTemplatesTest.php | 35 +++++++++++++++++++ 5 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 ProcessMaker/Http/Controllers/Api/WizardTemplateController.php create mode 100644 ProcessMaker/Models/WizardTemplate.php create mode 100644 database/factories/ProcessMaker/Models/WizardTemplateFactory.php create mode 100644 tests/Feature/Api/WizardTemplatesTest.php diff --git a/ProcessMaker/Http/Controllers/Api/WizardTemplateController.php b/ProcessMaker/Http/Controllers/Api/WizardTemplateController.php new file mode 100644 index 0000000000..a77a9cf062 --- /dev/null +++ b/ProcessMaker/Http/Controllers/Api/WizardTemplateController.php @@ -0,0 +1,28 @@ +input('per_page', 10); + $column = $request->input('order_by', 'id'); + $direction = $request->input('order_direction', 'asc'); + + $query = WizardTemplate::query() + ->orderBy($column, $direction); + + $data = $query->paginate($perPage); + + return new ApiCollection($data); + } +} diff --git a/ProcessMaker/Models/WizardTemplate.php b/ProcessMaker/Models/WizardTemplate.php new file mode 100644 index 0000000000..abb4a23eb7 --- /dev/null +++ b/ProcessMaker/Models/WizardTemplate.php @@ -0,0 +1,21 @@ + $this->faker->uuid, + 'process_template_id' => $this->faker->numberBetween(1, 100), + 'process_id' => Process::factory()->create()->id, + ]; + } +} diff --git a/routes/api.php b/routes/api.php index 471c5ac146..422d04af56 100644 --- a/routes/api.php +++ b/routes/api.php @@ -32,9 +32,8 @@ use ProcessMaker\Http\Controllers\Api\TemplateController; use ProcessMaker\Http\Controllers\Api\UserController; use ProcessMaker\Http\Controllers\Api\UserTokenController; -use ProcessMaker\Http\Controllers\Process\ModelerController; +use ProcessMaker\Http\Controllers\Api\WizardTemplateController; use ProcessMaker\Http\Controllers\TestStatusController; -use ProcessMaker\Http\Middleware\ValidateEditUserAndPasswordPermission; Route::middleware('auth:api', 'setlocale', 'bindings', 'sanitize')->prefix('api/1.0')->name('api.')->group(function () { // Users @@ -255,6 +254,9 @@ Route::get('modeler/templates/{type}/{id}', [TemplateController::class, 'show'])->name('modeler.template.show')->middleware('template-authorization'); Route::post('templates/{type}/import/validation', [TemplateController::class, 'preImportValidation'])->name('template.preImportValidation')->middleware('template-authorization'); + // Wizard Templates + Route::get('wizard-templates', [WizardTemplateController::class, 'index'])->name('wizard-templates.index'); + // Process Translations Route::get('process/translations', [ProcessTranslationController::class, 'index'])->name('process-translation.index')->middleware('can:view-process-translations'); Route::get('process/translations/pending', [ProcessTranslationController::class, 'pending'])->name('process-translation.pending')->middleware('can:view-process-translations'); diff --git a/tests/Feature/Api/WizardTemplatesTest.php b/tests/Feature/Api/WizardTemplatesTest.php new file mode 100644 index 0000000000..0980b32998 --- /dev/null +++ b/tests/Feature/Api/WizardTemplatesTest.php @@ -0,0 +1,35 @@ +count($total)->create(); + + $params = [ + 'order_by' => 'id', + 'order_direction' => 'asc', + 'per_page' => 10, + ]; + $route = route('api.wizard-templates.index', $params); + $response = $this->apiCall('GET', $route); + + $response->assertStatus(200); + $response->assertJsonCount(10, 'data'); + $response->assertJson([ + 'meta' => [ + 'per_page' => $params['per_page'], + 'total' => $total, + ], + ]); + } +} From cc6f7613b67534f87dda0a7632653d215b109c14 Mon Sep 17 00:00:00 2001 From: Esteban Gallego Date: Wed, 29 Nov 2023 17:04:14 -0500 Subject: [PATCH 2/4] Update Category on WizardSync --- ProcessMaker/Jobs/SyncWizardTemplates.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ProcessMaker/Jobs/SyncWizardTemplates.php b/ProcessMaker/Jobs/SyncWizardTemplates.php index 23cbe3ad52..2f6c33bd3b 100644 --- a/ProcessMaker/Jobs/SyncWizardTemplates.php +++ b/ProcessMaker/Jobs/SyncWizardTemplates.php @@ -11,8 +11,8 @@ use Illuminate\Support\Facades\Http; use ProcessMaker\ImportExport\Importer; use ProcessMaker\ImportExport\Options; +use ProcessMaker\Models\ProcessCategory; use ProcessMaker\Models\WizardTemplate; -use ProcessMaker\Models\WizardTemplateCategory; class SyncWizardTemplates implements ShouldQueue { @@ -46,10 +46,10 @@ public function handle() ? explode(',', $config['wizard_categories']) : [$config['wizard_categories']]; - $wizardTemplateCategoryId = WizardTemplateCategory::firstOrCreate( - ['name' => 'Default Wizard Templates'], + $wizardTemplateCategoryId = ProcessCategory::firstOrCreate( + ['name' => 'Wizard Templates'], [ - 'name' => 'Default Wizard Templates', + 'name' => 'Wizard Templates', 'status' => 'ACTIVE', 'is_system' => 0, ] @@ -86,7 +86,7 @@ public function handle() throw new Exception("Unable to fetch wizard template {$template['name']}."); } $payload = $response->json(); - $dataKey = "export.{$payload['root']}.attributes.wizard_template_category_id"; + $dataKey = "export.{$payload['root']}.attributes.process_category_id"; data_set($payload, $dataKey, $wizardTemplateCategoryId); $options = new Options([ From 52f87094fcec03a0b29bbc28296e90e0074ff9b0 Mon Sep 17 00:00:00 2001 From: Esteban Gallego Date: Fri, 1 Dec 2023 09:46:56 -0500 Subject: [PATCH 3/4] Add WizardTemplate when sync --- ProcessMaker/Jobs/SyncWizardTemplates.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ProcessMaker/Jobs/SyncWizardTemplates.php b/ProcessMaker/Jobs/SyncWizardTemplates.php index 2f6c33bd3b..821a64bec0 100644 --- a/ProcessMaker/Jobs/SyncWizardTemplates.php +++ b/ProcessMaker/Jobs/SyncWizardTemplates.php @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Http; use ProcessMaker\ImportExport\Importer; use ProcessMaker\ImportExport\Options; +use ProcessMaker\Models\Process; use ProcessMaker\Models\ProcessCategory; use ProcessMaker\Models\WizardTemplate; @@ -64,11 +65,11 @@ public function handle() // Extract the json data from the response and iterate over the categories and templates to retrieve them. $data = $response->json(); - foreach ($data as $templateCategory => $templates) { + foreach ($data as $templateCategory => $wizardTemplates) { if (!in_array($templateCategory, $categories) && !in_array('all', $categories)) { continue; } - foreach ($templates as $template) { + foreach ($wizardTemplates as $template) { $existingTemplate = WizardTemplate::where('uuid', $template['uuid'])->first(); // If the template already exists in the database with a user then skip it, // since we don't want to overwrite their changes. @@ -91,12 +92,19 @@ public function handle() $options = new Options([ 'mode' => 'update', - 'isTemplate' => true, + 'asset_type' => 'WIZARD_TEMPLATE', 'saveAssetsMode' => 'saveAllAssets', ]); - + dd($payload); + dd($options); $importer = new Importer($payload, $options); $importer->doImport(); + + $template = Process::where('uuid', $template['uuid'])->first(); + + WizardTemplate::create([ + 'process_id' => $template->id, + ]); } } } From de83d7fd34fac1912a16ce5c11b47eaf123817ea Mon Sep 17 00:00:00 2001 From: Eleazar Resendez Date: Mon, 4 Dec 2023 10:39:49 -0600 Subject: [PATCH 4/4] Remove debug statements --- ProcessMaker/Jobs/SyncWizardTemplates.php | 2 -- ProcessMaker/Models/WizardTemplate.php | 17 +++++++++++++++++ .../Models/WizardTemplateFactory.php | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ProcessMaker/Jobs/SyncWizardTemplates.php b/ProcessMaker/Jobs/SyncWizardTemplates.php index 821a64bec0..c0b49c78b6 100644 --- a/ProcessMaker/Jobs/SyncWizardTemplates.php +++ b/ProcessMaker/Jobs/SyncWizardTemplates.php @@ -95,8 +95,6 @@ public function handle() 'asset_type' => 'WIZARD_TEMPLATE', 'saveAssetsMode' => 'saveAllAssets', ]); - dd($payload); - dd($options); $importer = new Importer($payload, $options); $importer->doImport(); diff --git a/ProcessMaker/Models/WizardTemplate.php b/ProcessMaker/Models/WizardTemplate.php index abb4a23eb7..73e099e7a7 100644 --- a/ProcessMaker/Models/WizardTemplate.php +++ b/ProcessMaker/Models/WizardTemplate.php @@ -3,6 +3,7 @@ namespace ProcessMaker\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use ProcessMaker\Traits\HasUuids; class WizardTemplate extends ProcessMakerModel @@ -18,4 +19,20 @@ class WizardTemplate extends ProcessMakerModel 'process_id', 'media_collection', ]; + + /** + * Get the process associated with the wizard template. + */ + public function process(): BelongsTo + { + return $this->belongsTo(Process::class, 'process_id'); + } + + /** + * Get the process template associated with the wizard template. + */ + public function process_template(): BelongsTo + { + return $this->belongsTo(ProcessTemplates::class, 'process_template_id'); + } } diff --git a/database/factories/ProcessMaker/Models/WizardTemplateFactory.php b/database/factories/ProcessMaker/Models/WizardTemplateFactory.php index 13b10196a4..2412eb901f 100644 --- a/database/factories/ProcessMaker/Models/WizardTemplateFactory.php +++ b/database/factories/ProcessMaker/Models/WizardTemplateFactory.php @@ -14,7 +14,7 @@ public function definition() { return [ 'uuid' => $this->faker->uuid, - 'process_template_id' => $this->faker->numberBetween(1, 100), + 'process_template_id' => null, 'process_id' => Process::factory()->create()->id, ]; }