getArg('id'); /** @var AbstractUser $currentUser */ $currentUser = $this->container->get('logged.in.user'); if (!$this->getContainer()->getPermissionsService()->currentUserCanWrite(Entities::EMPLOYEES) || ( !$this->getContainer()->getPermissionsService()->currentUserCanWriteOthers(Entities::EMPLOYEES) && $currentUser->getId()->getValue() !== $userId ) ) { throw new AccessDeniedException('You are not allowed to update employee.'); } /** @var ProviderRepository $providerRepository */ $providerRepository = $this->container->get('domain.users.providers.repository'); /** @var ProviderApplicationService $providerAS */ $providerAS = $this->container->get('application.user.provider.service'); $result = new CommandResult(); $this->checkMandatoryFields($command); /** @var Provider $oldUser */ $oldUser = $providerAS->getProviderWithServicesAndSchedule($userId); $command->setField('id', $userId); $newUser = UserFactory::create($command->getFields()); if (!$newUser instanceof AbstractUser) { $result->setResult(CommandResult::RESULT_ERROR); $result->setMessage('Could not update user.'); return $result; } $providerRepository->beginTransaction(); if ($providerRepository->getByEmail($newUser->getEmail()->getValue()) && $oldUser->getEmail()->getValue() !== $newUser->getEmail()->getValue()) { $result->setResult(CommandResult::RESULT_ERROR); $result->setMessage('Email already exist.'); return $result; } try { if (!$providerAS->update($oldUser, $newUser)) { $providerRepository->rollback(); return $result; } if ($command->getField('externalId') === 0) { /** @var UserApplicationService $userAS */ $userAS = $this->getContainer()->get('application.user.service'); $userAS->setWpUserIdForNewUser($userId, $newUser); } } catch (QueryExecutionException $e) { $providerRepository->rollback(); throw $e; } $result->setResult(CommandResult::RESULT_SUCCESS); $result->setMessage('Successfully updated user'); $result->setData([ Entities::USER => $newUser->toArray() ]); $providerRepository->commit(); return $result; } }