From 2ee0086dd2638d4bd0b4480a0b64bb15e26caabd Mon Sep 17 00:00:00 2001 From: Swikriti Tripathi Date: Fri, 18 Aug 2023 17:16:39 +0545 Subject: [PATCH] Fix link previewd Signed-off-by: Swikriti Tripathi --- lib/Controller/ConfigController.php | 4 ++++ lib/Reference/WorkPackageReferenceProvider.php | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index 7e24e9b77..d1b3e9581 100755 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -200,6 +200,10 @@ private function setIntegrationConfig(array $values): array { } $appPassword = null; + if ($values['openproject_instance_url']) { + $values['openproject_instance_url'] = rtrim($values['openproject_instance_url'], '/'); + } + if (key_exists('setup_project_folder', $values) && $values['setup_project_folder'] === true) { $isSystemReady = $this->openprojectAPIService->isSystemReadyForProjectFolderSetUp(); if ($isSystemReady) { diff --git a/lib/Reference/WorkPackageReferenceProvider.php b/lib/Reference/WorkPackageReferenceProvider.php index 5c8b3959d..b83a576c1 100644 --- a/lib/Reference/WorkPackageReferenceProvider.php +++ b/lib/Reference/WorkPackageReferenceProvider.php @@ -84,14 +84,19 @@ public function getIconUrl(): string { * @return int|null */ private function getWorkPackageIdFromUrl(string $referenceText): ?int { + $patterns = array('\/projects\/[^\/\?]+\/work_packages(?:\/details)?\/([0-9]+)/', + '\/wp\/([0-9]+)/', + '\/(?:work_packages|notifications)\/[^\/\?]+\/([0-9]+)/',); // example links // https://community.openproject.org/projects/nextcloud-integration/work_packages/40070 $openProjectUrl = $this->config->getAppValue(Application::APP_ID, 'openproject_instance_url'); - preg_match('/^' . preg_quote($openProjectUrl, '/') . '\/projects\/[^\/\?]+\/work_packages\/([0-9]+)/', $referenceText, $matches); - if (count($matches) > 1) { - return (int) $matches[1]; + foreach ($patterns as $pattern) { + $string ='/^' . preg_quote($openProjectUrl, '/') . $pattern; + preg_match($string, $referenceText, $patternMatches); + if (count($patternMatches) > 1) { + return (int) $patternMatches[1]; + } } - return null; }