From 279946490fc227c07d5ddfa6acd147e671e1683f Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Mon, 18 Aug 2025 15:09:58 +0200 Subject: [PATCH 1/4] Set conditions for syncs --- lib/Service/OrganizationSyncService.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/Service/OrganizationSyncService.php b/lib/Service/OrganizationSyncService.php index 62fca143..55820311 100644 --- a/lib/Service/OrganizationSyncService.php +++ b/lib/Service/OrganizationSyncService.php @@ -23,6 +23,7 @@ use OCA\SoftwareCatalog\Service\ContactpersoonService; use OCA\SoftwareCatalog\Service\SoftwareCatalogue\ContactPersonHandler; use OCA\SoftwareCatalog\Service\SymfonyEmailService; +use OCP\AppFramework\Db\DoesNotExistException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IAppConfig; use OCP\IDBConnection; @@ -143,12 +144,14 @@ public function performOrganizationsSync(): array ->andWhere($qb->expr()->orX( $qb->expr()->neq('o2.active', $qb->createFunction('(json_unquote(json_extract(o.object, \'$.status\')) = \'actief\')')), $qb->expr()->isNull('o2.uuid') - )); + )) + ->andWhere($qb->expr()->neq($qb->createFunction('json_unquote(json_extract(o.object, \'$.status\'))'), $qb->createNamedParameter('concept'))); $sql = $qb->getSQL(); $objects = $qb->execute()->fetchAll(); $orgs = []; + foreach($objects as $object) { $objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService'); if($objectService instanceOf ObjectService === false) { @@ -204,7 +207,6 @@ public function performContactSync() :array ->andWhere($qb->expr()->eq('o.schema', $qb->createNamedParameter($contactSchema))) ->andWhere($qb->expr()->isNull($qb->createFunction('json_unquote(json_extract(o.object, \'$.username\'))'))); -// var_dump($qb->getSQL()); $contacts = $qb->execute()->fetchAll(); foreach ($contacts as $contact) { @@ -212,6 +214,13 @@ public function performContactSync() :array $contactEntity = $objectService->find($contact['uuid']); $contactEntityObject = $contactEntity->getObject(); + $organisationMapper = \OC::$server->get('OCA\OpenRegister\Db\OrganisationMapper'); + try{ + $organisationMapper->findByUuid($contactEntityObject['organisatie']); + } catch (DoesNotExistException $e) { + continue; + } + $contactEntityObject['username'] = $contact['uid']; if ($contact['uid'] === null) { @@ -1084,7 +1093,8 @@ public function performManualSync(int $minutesBack = 0): array return [ 'success' => false, - 'message' => 'Synchronization failed: ' . $e->getMessage() + 'message' => 'Synchronization failed: ' . $e->getMessage(), + 'trace' => $e->getTraceAsString() ]; } } From 57655374b3353dccd63482dd212fc2cc3198a110 Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Mon, 18 Aug 2025 15:10:17 +0200 Subject: [PATCH 2/4] Set registers and schemas hard --- lib/Service/OrganizationSyncService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Service/OrganizationSyncService.php b/lib/Service/OrganizationSyncService.php index 55820311..ad4fdcee 100644 --- a/lib/Service/OrganizationSyncService.php +++ b/lib/Service/OrganizationSyncService.php @@ -158,7 +158,7 @@ public function performOrganizationsSync(): array return []; } - $object = $objectService->find($object['uuid']); + $object = $objectService->find(id: $object['uuid'], register: $register, schema: $organizationSchema); $org = $this->ensureOrganisationEntity($object,$stats); @@ -211,7 +211,7 @@ public function performContactSync() :array foreach ($contacts as $contact) { $objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService'); - $contactEntity = $objectService->find($contact['uuid']); + $contactEntity = $objectService->find(id: $contact['uuid'], register: $register, schema: $contactSchema); $contactEntityObject = $contactEntity->getObject(); $organisationMapper = \OC::$server->get('OCA\OpenRegister\Db\OrganisationMapper'); From 293b195d5b2d7b34f85e7747c35fa0f65fbc4837 Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Mon, 18 Aug 2025 15:22:45 +0200 Subject: [PATCH 3/4] A bit more efficient org checking --- lib/Service/OrganizationSyncService.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/Service/OrganizationSyncService.php b/lib/Service/OrganizationSyncService.php index ad4fdcee..803e4f86 100644 --- a/lib/Service/OrganizationSyncService.php +++ b/lib/Service/OrganizationSyncService.php @@ -195,7 +195,8 @@ public function performContactSync() :array 'o.uuid', 'a.uid', $qb->createFunction('json_unquote(json_extract(o.object, \'$.e-mailadres\')) as email'), - $qb->createFunction('json_unquote(json_extract(o.object, \'$.username\')) as username') + $qb->createFunction('json_unquote(json_extract(o.object, \'$.username\')) as username'), + 'oo.uuid as organisation' ) ->from('openregister_objects', 'o') ->leftJoin( @@ -203,21 +204,26 @@ public function performContactSync() :array join: 'accounts_data', alias: 'a', condition: 'json_unquote(json_extract(o.object, \'$.e-mailadres\')) = a.value') + ->leftJoin( + fromAlias: 'o', + join: 'openregister_organisations', + alias: 'oo', + condition: 'oo.uuid = json_unquote(json_extract(o.object, \'$.organisatie\'))' + ) ->where($qb->expr()->eq('o.register', $qb->createNamedParameter($register))) ->andWhere($qb->expr()->eq('o.schema', $qb->createNamedParameter($contactSchema))) ->andWhere($qb->expr()->isNull($qb->createFunction('json_unquote(json_extract(o.object, \'$.username\'))'))); $contacts = $qb->execute()->fetchAll(); + var_dump($contacts); + foreach ($contacts as $contact) { $objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService'); $contactEntity = $objectService->find(id: $contact['uuid'], register: $register, schema: $contactSchema); $contactEntityObject = $contactEntity->getObject(); - $organisationMapper = \OC::$server->get('OCA\OpenRegister\Db\OrganisationMapper'); - try{ - $organisationMapper->findByUuid($contactEntityObject['organisatie']); - } catch (DoesNotExistException $e) { + if ($contact['organisation'] === null) { continue; } From 0e147b5a3dc5bdfea90eb0bf8d6eb9778cf1da31 Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Mon, 18 Aug 2025 15:46:41 +0200 Subject: [PATCH 4/4] Remove 'ambtenaar' and 'vng-raadpleger' from default generic usergroups --- lib/Service/OrganizationSyncService.php | 2 -- lib/Service/SettingsService.php | 5 +---- lib/Service/SoftwareCatalogue/ContactPersonHandler.php | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/Service/OrganizationSyncService.php b/lib/Service/OrganizationSyncService.php index 803e4f86..f88b1f23 100644 --- a/lib/Service/OrganizationSyncService.php +++ b/lib/Service/OrganizationSyncService.php @@ -216,8 +216,6 @@ public function performContactSync() :array $contacts = $qb->execute()->fetchAll(); - var_dump($contacts); - foreach ($contacts as $contact) { $objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService'); $contactEntity = $objectService->find(id: $contact['uuid'], register: $register, schema: $contactSchema); diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index dd2b0c86..b213c90c 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -958,7 +958,6 @@ public function getGenericUserGroups(): array return [ 'beheerder', 'inkoper', - 'ambtenaar', 'software-catalog-users' ]; } @@ -1176,9 +1175,7 @@ public function createAndConfigureUserGroups(): array 'gebruik-beheerder', 'gebruik-raadpleger', 'functioneel-beheerder', - 'vng-raadpleger', 'organisatie-beheerder', - 'ambtenaar', 'software-catalog-users' ]); @@ -4418,4 +4415,4 @@ public function setCatalogLocation(string $location): void $this->config->setValueString($this->_appName, 'catalog_location', $location); } -} \ No newline at end of file +} diff --git a/lib/Service/SoftwareCatalogue/ContactPersonHandler.php b/lib/Service/SoftwareCatalogue/ContactPersonHandler.php index e6213c44..d5be7dcd 100644 --- a/lib/Service/SoftwareCatalogue/ContactPersonHandler.php +++ b/lib/Service/SoftwareCatalogue/ContactPersonHandler.php @@ -1137,7 +1137,7 @@ private function getOrganizationType(string $organizationId): string if ($organizationObject) { $organizationData = $organizationObject->getObject(); - return $organizationData['type'] ?? ''; + return strtolower($organizationData['type'] ?? ''); } return '';