diff --git a/ProcessMaker/Enums/ExporterMap.php b/ProcessMaker/Enums/ExporterMap.php index 831f5ad0bc..c3ada1f033 100644 --- a/ProcessMaker/Enums/ExporterMap.php +++ b/ProcessMaker/Enums/ExporterMap.php @@ -24,6 +24,7 @@ enum ExporterMap ], 'screen_translation' => [\ProcessMaker\Package\Translations\Models\Translatable::class, \ProcessMaker\Package\Translations\ImportExport\TranslatableExporter::class], 'pm_block' => [\ProcessMaker\Package\PackagePmBlocks\Models\PmBlock::class, \ProcessMaker\Package\PackagePmBlocks\ImportExport\PmBlockExporter::class], + 'service_task_resource' => [\ProcessMaker\Package\PackageServiceTask\Models\ServiceTaskResource::class, \ProcessMaker\Package\PackageServiceTask\ImportExport\Exporters\ServiceTaskResourceExporter::class], ]; public static function getModelClass(string $type): ?string diff --git a/ProcessMaker/ImportExport/Exporters/ProcessExporter.php b/ProcessMaker/ImportExport/Exporters/ProcessExporter.php index d5a88927df..eff7d491b1 100644 --- a/ProcessMaker/ImportExport/Exporters/ProcessExporter.php +++ b/ProcessMaker/ImportExport/Exporters/ProcessExporter.php @@ -46,6 +46,8 @@ public function export() : void $this->exportScripts(); + $this->exportServiceTaskResources(); + $this->exportCategories(); $this->exportSignals(); @@ -435,6 +437,40 @@ private function exportScripts() } } + private function exportServiceTaskResources() + { + $tags = [ + 'bpmn:serviceTask', + ]; + + foreach (Utils::getElementByMultipleTags($this->model->getDefinitions(true), $tags) as $element) { + $path = $element->getNodePath(); + $meta = [ + 'path' => $path, + ]; + + // Check if it's a package-service-task implementation + $implementation = $element->getAttribute('implementation'); + if ($implementation === 'package-service-task/service-task') { + // Get the resource ID from pm:config + $config = json_decode($element->getAttribute('pm:config'), true); + $resourceId = $config['resource']['id'] ?? null; + + if (is_numeric($resourceId)) { + // Try to load the ServiceTaskResource class + if (class_exists('ProcessMaker\Package\PackageServiceTask\Models\ServiceTaskResource')) { + $resource = \ProcessMaker\Package\PackageServiceTask\Models\ServiceTaskResource::find($resourceId); + if ($resource) { + $this->addDependent('service_task_resource', $resource, 'ProcessMaker\Package\PackageServiceTask\ImportExport\Exporters\ServiceTaskResourceExporter', $meta); + } else { + Log::debug("ServiceTaskResourceId: {$resourceId} not exists"); + } + } + } + } + } + } + private function importScripts() { foreach ($this->getDependents(DependentType::SCRIPTS) as $dependent) { @@ -443,6 +479,22 @@ private function importScripts() } } + private function importServiceTaskResources() + { + foreach ($this->getDependents('service_task_resource') as $dependent) { + $path = $dependent->meta['path']; + + // Get current config + $config = json_decode(Utils::getAttributeAtXPath($this->model, $path, 'pm:config'), true); + + // Update resource ID in config + $config['resource']['id'] = $dependent->model->id; + + // Set updated config back to BPMN + Utils::setAttributeAtXPath($this->model, $path, 'pm:config', json_encode($config)); + } + } + /** * Imports assets according to the `saveAssetsMode` option of the manifest. * @@ -471,6 +523,7 @@ private function importAssetsByMode(): void if ($saveAssetsMode === null || $saveAssetsMode === 'saveAllAssets') { $this->importScreens(); $this->importScripts(); + $this->importServiceTaskResources(); $this->importSubprocesses(); $this->importAssignments(); $this->importProcessLaunchpad(); diff --git a/resources/js/admin/devlink/components/assetTypes.js b/resources/js/admin/devlink/components/assetTypes.js index ae39525c6a..579ad4378d 100644 --- a/resources/js/admin/devlink/components/assetTypes.js +++ b/resources/js/admin/devlink/components/assetTypes.js @@ -71,4 +71,13 @@ export default [ icon: 'fp-flowgenie-outline', nameField: 'name', }, + { + type: 'service_task_resource', + name: 'Service Task Resources', + url: 'package.service-task.resources.fetch', + listingUrl: '/designer/service-tasks', + class: 'ProcessMaker\\Package\\PackageServiceTask\\Models\\ServiceTaskResource', + icon: 'fp-script-outline', + nameField: 'name', + }, ];