From 6aad59c28af2517dbfaaa1a2b276e352268cb023 Mon Sep 17 00:00:00 2001 From: Eleazar Resendez Date: Wed, 7 Feb 2024 14:58:55 -0600 Subject: [PATCH] Add WebEntryUrlFixer upgrade migration --- .../2024_02_07_113706_web_entry_url_fixer.php | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 upgrades/2024_02_07_113706_web_entry_url_fixer.php diff --git a/upgrades/2024_02_07_113706_web_entry_url_fixer.php b/upgrades/2024_02_07_113706_web_entry_url_fixer.php new file mode 100644 index 0000000000..e74df9a3b1 --- /dev/null +++ b/upgrades/2024_02_07_113706_web_entry_url_fixer.php @@ -0,0 +1,75 @@ +updateWebEntryUrl($process, $appUrl); + } + }); + } + + /** + * Reverse the upgrade migration. + */ + public function down(): void + { + // No down migration needed. + } + + /** + * Updates the web entry URL for a given process. + */ + private function updateWebEntryUrl(Process $process, string $appUrl): void + { + $definitions = $process->getDefinitions(true); + $elements = Utils::getElementByMultipleTags($definitions, [ + 'bpmn:task', + 'bpmn:startEvent', + ]); + foreach ($elements as $element) { + $config = $element->getAttribute('pm:config') ?? '[]'; + $decodedConfig = json_decode($config, true); + $entryUrl = Arr::get($decodedConfig, 'web_entry.webentryRouteConfig.entryUrl'); + + // If the entry URL is not a valid URL, then update it. + if ($entryUrl && !filter_var($entryUrl, FILTER_VALIDATE_URL)) { + $newEntryUrl = rtrim($appUrl, '/') . '/' . ltrim($entryUrl, '/'); + Arr::set($decodedConfig, 'web_entry.webentryRouteConfig.entryUrl', $newEntryUrl); + $element->setAttribute('pm:config', json_encode($decodedConfig)); + } + } + + $process->bpmn = $definitions->saveXml(); + $process->save(); + } +}