Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ function ($container) {
settingsService: $container->get(SettingsService::class),
db: $container->get(IDBConnection::class),
contactpersonHandler: $container->get(ContactPersonHandler::class),
container: $container,
);
}
);
Expand All @@ -289,7 +290,8 @@ function ($container) {
function ($container) {
return new GebruikSyncService(
logger: $container->get('Psr\Log\LoggerInterface'),
settingsService: $container->get(SettingsService::class)
settingsService: $container->get(SettingsService::class),
container: $container
);
}
);
Expand Down
8 changes: 4 additions & 4 deletions lib/Controller/ContactpersonenController.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public function getContactpersonen(string $organisationId): JSONResponse

try {
// Get object service.
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');

// Search for contactpersonen belonging to this organisation.
// Use a more generic search that doesn't require specific register/schema.
Expand Down Expand Up @@ -288,7 +288,7 @@ public function convertToUser(string $contactpersoonId): JSONResponse

try {
// Get object service.
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');

// Find the contactpersoon object — bind to current tenant.
$contactpersoonObject = $objectService->find(
Expand Down Expand Up @@ -880,7 +880,7 @@ public function getUserInfo(string $contactpersoonId): JSONResponse
);

// Get contactpersoon from OpenRegister.
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');

// First try to find the object by UUID.
$contactObject = $objectService->find(
Expand Down Expand Up @@ -1356,7 +1356,7 @@ public function getMe(): JSONResponse

// Try to get contactpersoon data for additional profile info.
try {
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');

// Search for contactpersoon by username (which is the email).
$searchParams = [
Expand Down
29 changes: 16 additions & 13 deletions lib/EventListener/SoftwareCatalogEventListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
use OCA\OpenRegister\Event\ObjectLockedEvent;
use OCA\OpenRegister\Event\ObjectUnlockedEvent;
use OCA\OpenRegister\Event\ObjectRevertedEvent;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

/**
Expand All @@ -55,10 +56,12 @@ class SoftwareCatalogEventListener implements IEventListener
{
/**
* Constructor for SoftwareCatalogEventListener
*
* @param ContainerInterface $container DI container for lazy service resolution.
*/
public function __construct()
{
// Empty constructor - we'll get services from the server container.
public function __construct(
private readonly ContainerInterface $container
) {
}//end __construct()

/**
Expand All @@ -76,9 +79,9 @@ public function __construct()
public function handle(Event $event): void
{
try {
$logger = \OC::$server->get(LoggerInterface::class);
$contactSvc = \OC::$server->get(ContactpersoonService::class);
$settingsService = \OC::$server->get(SettingsService::class);
$logger = $this->container->get(LoggerInterface::class);
$contactSvc = $this->container->get(ContactpersoonService::class);
$settingsService = $this->container->get(SettingsService::class);

$logger->info(
'SoftwareCatalog: Processing event',
Expand Down Expand Up @@ -122,7 +125,7 @@ public function handle(Event $event): void
}//end if
} catch (\Exception $e) {
try {
$logger = \OC::$server->get(LoggerInterface::class);
$logger = $this->container->get(LoggerInterface::class);
$logger->error(
'SoftwareCatalog: Error in event handler',
[
Expand Down Expand Up @@ -229,7 +232,7 @@ private function handleObjectCreated(

try {
// Process organization with OrganizationSyncService.
$orgSyncService = \OC::$server->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');
$orgSyncService = $this->container->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');
$result = $orgSyncService->processSpecificOrganization($object);

$logger->info(
Expand Down Expand Up @@ -274,7 +277,7 @@ private function handleObjectCreated(

try {
// Process gebruik object with GebruikSyncService.
$gebruikSyncService = \OC::$server->get(GebruikSyncService::class);
$gebruikSyncService = $this->container->get(GebruikSyncService::class);
$result = $gebruikSyncService->processSpecificGebruik($object);

$logger->info(
Expand Down Expand Up @@ -428,7 +431,7 @@ private function handleObjectUpdated(
$register = $voorzieningenConfig['register'] ?? '';
$organizationSchema = $voorzieningenConfig['organisatie_schema'] ?? '';

$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');
$orgWithContacts = $objectService->find(
id: $objectId,
register: $register,
Expand All @@ -450,7 +453,7 @@ private function handleObjectUpdated(
);

// Process organization with OrganizationSyncService.
$orgSyncService = \OC::$server->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');
$orgSyncService = $this->container->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');
$result = $orgSyncService->processSpecificOrganization($orgWithContacts);

$logger->info(
Expand Down Expand Up @@ -590,7 +593,7 @@ private function handleObjectUpdated(

try {
// Process gebruik object with GebruikSyncService.
$gebruikSyncService = \OC::$server->get(GebruikSyncService::class);
$gebruikSyncService = $this->container->get(GebruikSyncService::class);
$result = $gebruikSyncService->processSpecificGebruik($object);

$logger->info(
Expand Down Expand Up @@ -689,7 +692,7 @@ private function handleObjectDeleted(
try {
// For deletions, we may need to handle cleanup regardless of status.
// The OrganizationSyncService can determine what cleanup is needed.
$orgSyncService = \OC::$server->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');
$orgSyncService = $this->container->get('OCA\SoftwareCatalog\Service\OrganizationSyncService');

// Note: processSpecificOrganization may handle cleanup for deleted organizations.
// The service can check if the organization exists and handle accordingly.
Expand Down
24 changes: 14 additions & 10 deletions lib/EventListener/UserProfileUpdatedEventListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use OCA\SoftwareCatalog\Service\SettingsService;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

/**
Expand All @@ -49,9 +50,12 @@ class UserProfileUpdatedEventListener implements IEventListener

/**
* Constructor for UserProfileUpdatedEventListener.
*
* @param ContainerInterface $container DI container for lazy service resolution.
*/
public function __construct()
{
public function __construct(
private readonly ContainerInterface $container
) {
}//end __construct()

/**
Expand All @@ -70,7 +74,7 @@ public function handle(Event $event): void
}

try {
$logger = \OC::$server->get(LoggerInterface::class);
$logger = $this->container->get(LoggerInterface::class);
$changes = $event->getChanges();

// Check if any of the mapped fields were changed.
Expand All @@ -97,7 +101,7 @@ public function handle(Event $event): void
$this->syncToContactpersoon(event: $event, logger: $logger);
} catch (\Exception $e) {
try {
$logger = \OC::$server->get(LoggerInterface::class);
$logger = $this->container->get(LoggerInterface::class);
$logger->error(
'[UserProfileUpdatedEventListener] Error syncing profile to contactpersoon',
[
Expand Down Expand Up @@ -129,8 +133,8 @@ public function handle(Event $event): void
*/
private function syncToContactpersoon(UserProfileUpdatedEvent $event, LoggerInterface $logger): void
{
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$settingsService = \OC::$server->get(SettingsService::class);
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');
$settingsService = $this->container->get(SettingsService::class);

// Get the voorzieningen config for register and schema.
$voorzieningenConfig = $settingsService->getVoorzieningenConfig();
Expand Down Expand Up @@ -224,9 +228,9 @@ private function syncToContactpersoon(UserProfileUpdatedEvent $event, LoggerInte
// Regenerate _name metadata from the schema's objectNameField template.
// (e.g. "{{ voornaam }} {{ tussenvoegsel }} {{ achternaam }}").
// Without this, _name stays stale after field updates because we bypass the full saveObject flow.
$schemaMapper = \OC::$server->get('OCA\OpenRegister\Db\SchemaMapper');
$registerMapper = \OC::$server->get('OCA\OpenRegister\Db\RegisterMapper');
$metaHydrationHandler = \OC::$server->get('OCA\OpenRegister\Service\Object\SaveObject\MetadataHydrationHandler');
$schemaMapper = $this->container->get('OCA\OpenRegister\Db\SchemaMapper');
$registerMapper = $this->container->get('OCA\OpenRegister\Db\RegisterMapper');
$metaHydrationHandler = $this->container->get('OCA\OpenRegister\Service\Object\SaveObject\MetadataHydrationHandler');

$schemaEntity = null;
$registerEntity = null;
Expand Down Expand Up @@ -262,7 +266,7 @@ private function syncToContactpersoon(UserProfileUpdatedEvent $event, LoggerInte

// Pass register and schema so the magic mapper route is triggered and the.
// Per-schema magic table is updated (not just the blob table).
$objectMapper = \OC::$server->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper->update(entity: $contactpersoon, register: $registerEntity, schema: $schemaEntity);

$logger->info(
Expand Down
30 changes: 15 additions & 15 deletions lib/Service/ContactpersoonService.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public function processContactpersoon(object $contactpersoonObject, bool $isUpda
$username = $email;

// Check if user already exists.
$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);

if ($user === null) {
Expand All @@ -177,7 +177,7 @@ public function processContactpersoon(object $contactpersoonObject, bool $isUpda
// Look up organization entity, creating backup if missing.
$organisationEntity = null;
try {
$organisationMapper = \OC::$server->get('OCA\OpenRegister\Db\OrganisationMapper');
$organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper');
$organisationEntity = $organisationMapper->findByUuid($organizationUuid);
} catch (\OCP\AppFramework\Db\DoesNotExistException $e) {
// Org entity missing — try backup creation from org object.
Expand All @@ -189,8 +189,8 @@ public function processContactpersoon(object $contactpersoonObject, bool $isUpda
]
);
try {
$objectService = \OC::$server->get('OCA\OpenRegister\Service\ObjectService');
$settingsService = \OC::$server->get('OCA\SoftwareCatalog\Service\SettingsService');
$objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService');
$settingsService = $this->container->get('OCA\SoftwareCatalog\Service\SettingsService');
$voorzieningenConfig = $settingsService->getVoorzieningenConfig();
$orgObject = $objectService->find(
id: $organizationUuid,
Expand All @@ -204,7 +204,7 @@ public function processContactpersoon(object $contactpersoonObject, bool $isUpda
$orgStatus = strtolower(($orgData['status'] ?? ''));
if (in_array(needle: $orgStatus, haystack: ['actief', 'active']) === true) {
$syncServiceClass = 'OCA\SoftwareCatalog\Service\OrganizationSyncService';
$organizationSyncService = \OC::$server->get($syncServiceClass);
$organizationSyncService = $this->container->get($syncServiceClass);
$backupStats = [
'entitiesCreated' => 0,
'entitiesUpdated' => 0,
Expand Down Expand Up @@ -391,7 +391,7 @@ public function processContactpersoon(object $contactpersoonObject, bool $isUpda
public function updateUserGroups(object $contactpersoonObject, string $username): void
{
// Use the new organization type-based logic instead of old role-based logic.
$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);
if ($user === null) {
$this->logger->warning('User not found for group update', ['username' => $username]);
Expand Down Expand Up @@ -486,7 +486,7 @@ private function updateContactpersoonUsername(object $contactpersoonObject, stri
// To avoid validation errors on the organisatie field (stored as UUID string but.
// Schema expects object type) and to avoid triggering ObjectUpdatedEvent cascades.
// That could interfere with the ongoing org activation process.
$objectMapper = \OC::$server->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper->update($contactpersoonObject);

$this->logger->info(
Expand Down Expand Up @@ -612,7 +612,7 @@ private function syncNameFieldsToUser(object $contactpersoonObject, ?object $old
return;
}

$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);

if ($user === null) {
Expand Down Expand Up @@ -735,7 +735,7 @@ public function handleContactDeletion(object $contactObject): void
);

// Get user manager to disable the user.
$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);

if ($user === null) {
Expand Down Expand Up @@ -868,7 +868,7 @@ public function getContactPersonsWithUserDetailsForOrganization(string $organiza
);

// Get user manager to fetch user details.
$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$enhancedContactPersons = [];

// Loop through each contact person and fetch user details.
Expand Down Expand Up @@ -1007,7 +1007,7 @@ public function getBulkUserInfo(array $contactpersoonIds): array
);

$bulkUserInfo = [];
$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');

// Get contact person register and schema from settings.
$contactRegister = null;
Expand Down Expand Up @@ -1086,7 +1086,7 @@ public function getBulkUserInfo(array $contactpersoonIds): array
}

if ($user !== null) {
$groupManager = \OC::$server->get('OCP\IGroupManager');
$groupManager = $this->container->get('OCP\IGroupManager');
$userGroups = $groupManager->getUserGroups($user);
$userInfo['groups'] = array_keys($userGroups);
$userInfo['enabled'] = $user->isEnabled();
Expand Down Expand Up @@ -1233,7 +1233,7 @@ private function updateContactpersoonObjectOwner(object $contactObject, string $
// FIX #434: Use MagicMapper directly instead of ObjectService::saveObject().
// To avoid validation errors on the organisatie field (stored as UUID string but.
// Schema expects object type) and to avoid triggering ObjectUpdatedEvent cascades.
$objectMapper = \OC::$server->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper');
$objectMapper->update($contactObject);

$this->logger->info(
Expand Down Expand Up @@ -1301,7 +1301,7 @@ public function enableUserForContactpersoon(string $contactpersoonId): void
throw new \Exception('No username found for contactpersoon');
}

$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);

if ($user === null) {
Expand Down Expand Up @@ -1373,7 +1373,7 @@ public function disableUserForContactpersoon(string $contactpersoonId): void
throw new \Exception('No username found for contactpersoon');
}

$userManager = \OC::$server->get('OCP\IUserManager');
$userManager = $this->container->get('OCP\IUserManager');
$user = $userManager->get($username);

if ($user === null) {
Expand Down
Loading