diff --git a/ProcessMaker/ImportExport/Exporters/ExporterBase.php b/ProcessMaker/ImportExport/Exporters/ExporterBase.php index cbf7fe869b..9fbe9cc196 100644 --- a/ProcessMaker/ImportExport/Exporters/ExporterBase.php +++ b/ProcessMaker/ImportExport/Exporters/ExporterBase.php @@ -213,12 +213,12 @@ public function runExport() } } - public function runImport($existingAssetInDatabase = null) + public function runImport($existingAssetInDatabase = null, $importingFromTemplate = false) { $extensions = app()->make(Extension::class); $extensions->runExtensions($this, 'preImport', $this->logger); $this->logger->log('Running Import ' . static::class); - $this->import($existingAssetInDatabase); + $this->import($existingAssetInDatabase, $importingFromTemplate); $extensions->runExtensions($this, 'postImport', $this->logger); } diff --git a/ProcessMaker/ImportExport/Exporters/ProcessExporter.php b/ProcessMaker/ImportExport/Exporters/ProcessExporter.php index 1f56793719..56cc9f86f1 100644 --- a/ProcessMaker/ImportExport/Exporters/ProcessExporter.php +++ b/ProcessMaker/ImportExport/Exporters/ProcessExporter.php @@ -75,7 +75,7 @@ public function export() : void $this->exportSubprocesses(); } - public function import($existingAssetInDatabase = null) : bool + public function import($existingAssetInDatabase = null, $importingFromTemplate = false) : bool { if ($existingAssetInDatabase) { $this->model = Process::where('id', $existingAssetInDatabase)->first(); @@ -90,7 +90,11 @@ public function import($existingAssetInDatabase = null) : bool $process->manager_id = $dependent->model->id; } - $this->associateCategories(ProcessCategory::class, 'process_category_id'); + // Avoid associating the category from the manifest with processes imported from templates. + // Use the user-selected category instead. + if (!$importingFromTemplate) { + $this->associateCategories(ProcessCategory::class, 'process_category_id'); + } $this->importSignals(); diff --git a/ProcessMaker/ImportExport/Importer.php b/ProcessMaker/ImportExport/Importer.php index 22595195f0..3e46a8c548 100644 --- a/ProcessMaker/ImportExport/Importer.php +++ b/ProcessMaker/ImportExport/Importer.php @@ -39,10 +39,10 @@ public function loadManifest() return Manifest::fromArray($this->payload['export'], $this->options, $this->logger); } - public function doImport($existingAssetInDatabase = null) + public function doImport($existingAssetInDatabase = null, $importingFromTemplate = false) { $this->logger->log('Starting Transaction'); - DB::transaction(function () use ($existingAssetInDatabase) { + DB::transaction(function () use ($existingAssetInDatabase, $importingFromTemplate) { // First, we save the model so we have IDs set for all assets Schema::disableForeignKeyConstraints(); @@ -90,7 +90,7 @@ public function doImport($existingAssetInDatabase = null) foreach ($this->manifest->all() as $exporter) { if ($exporter->mode !== 'discard') { $this->logger->log('Associating ' . get_class($exporter->model)); - $exporter->runImport($existingAssetInDatabase); + $exporter->runImport($existingAssetInDatabase, $importingFromTemplate); } } diff --git a/ProcessMaker/Templates/ProcessTemplate.php b/ProcessMaker/Templates/ProcessTemplate.php index a094bc8fcc..09e480a1c4 100644 --- a/ProcessMaker/Templates/ProcessTemplate.php +++ b/ProcessMaker/Templates/ProcessTemplate.php @@ -270,7 +270,9 @@ public function create($request) : JsonResponse $options = new Options($postOptions); $importer = new Importer($payload, $options); - $manifest = $importer->doImport(); + $existingAssetsInDatabase = null; + $importingFromTemplate = true; + $manifest = $importer->doImport($existingAssetsInDatabase, $importingFromTemplate); $rootLog = $manifest[$payload['root']]->log; $processId = $rootLog['newId'];