diff --git a/application/Espo/Classes/MassAction/User/MassUpdate.php b/application/Espo/Classes/MassAction/User/MassUpdate.php index c9175c1c1f..8af89198e3 100644 --- a/application/Espo/Classes/MassAction/User/MassUpdate.php +++ b/application/Espo/Classes/MassAction/User/MassUpdate.php @@ -29,6 +29,7 @@ namespace Espo\Classes\MassAction\User; +use Espo\Core\ApplicationUser; use Espo\Core\MassAction\Actions\MassUpdate as MassUpdateOriginal; use Espo\Core\MassAction\QueryBuilder; use Espo\Core\MassAction\Params; @@ -50,16 +51,7 @@ use Espo\Tools\MassUpdate\Data as MassUpdateData; class MassUpdate implements MassAction { - private MassUpdateOriginal $massUpdateOriginal; - private QueryBuilder $queryBuilder; - private EntityManager $entityManager; - private Acl $acl; - private User $user; - private FileManager $fileManager; - private DataManager $dataManager; - private const PERMISSION = 'massUpdatePermission'; - private const SYSTEM_USER_ID = 'system'; /** @var string[] */ private array $notAllowedAttributeList = [ @@ -72,22 +64,14 @@ class MassUpdate implements MassAction ]; public function __construct( - MassUpdateOriginal $massUpdateOriginal, - QueryBuilder $queryBuilder, - EntityManager $entityManager, - Acl $acl, - User $user, - FileManager $fileManager, - DataManager $dataManager - ) { - $this->massUpdateOriginal = $massUpdateOriginal; - $this->queryBuilder = $queryBuilder; - $this->entityManager = $entityManager; - $this->acl = $acl; - $this->user = $user; - $this->fileManager = $fileManager; - $this->dataManager = $dataManager; - } + private MassUpdateOriginal $massUpdateOriginal, + private QueryBuilder $queryBuilder, + private EntityManager $entityManager, + private Acl $acl, + private User $user, + private FileManager $fileManager, + private DataManager $dataManager + ) {} /** * @throws Forbidden @@ -149,7 +133,7 @@ class MassUpdate implements MassAction */ private function checkEntity(Entity $entity, MassUpdateData $data): void { - if ($entity->getId() === self::SYSTEM_USER_ID) { + if ($entity->getId() === ApplicationUser::SYSTEM_USER_ID) { throw new Forbidden("Can't update 'system' user."); } diff --git a/application/Espo/Classes/Select/User/AccessControlFilters/Mandatory.php b/application/Espo/Classes/Select/User/AccessControlFilters/Mandatory.php index 4b71618165..c91687fb0c 100644 --- a/application/Espo/Classes/Select/User/AccessControlFilters/Mandatory.php +++ b/application/Espo/Classes/Select/User/AccessControlFilters/Mandatory.php @@ -30,40 +30,31 @@ namespace Espo\Classes\Select\User\AccessControlFilters; use Espo\ORM\Query\SelectBuilder; - -use Espo\Core\{ - Select\AccessControl\Filter, - AclManager, - Acl\Table, -}; - +use Espo\Core\Acl\Table; +use Espo\Core\AclManager; +use Espo\Core\Select\AccessControl\Filter; use Espo\Entities\User; class Mandatory implements Filter { - private $user; - - private $aclManager; - - public function __construct(User $user, AclManager $aclManager) - { - $this->user = $user; - $this->aclManager = $aclManager; - } + public function __construct( + private User $user, + private AclManager $aclManager + ) {} public function apply(SelectBuilder $queryBuilder): void { if (!$this->user->isAdmin()) { $queryBuilder->where([ 'isActive' => true, - 'type!=' => 'api', + 'type!=' => User::TYPE_API, ]); } if ($this->aclManager->getPermissionLevel($this->user, 'portalPermission') !== Table::LEVEL_YES) { $queryBuilder->where([ 'OR' => [ - 'type!=' => 'portal', + 'type!=' => User::TYPE_PORTAL, 'id' => $this->user->getId(), ] ]); @@ -71,12 +62,12 @@ class Mandatory implements Filter if (!$this->user->isSuperAdmin()) { $queryBuilder->where([ - 'type!=' => 'super-admin' + 'type!=' => User::TYPE_SUPER_ADMIN, ]); } $queryBuilder->where([ - 'type!=' => 'system' + 'type!=' => User::TYPE_SYSTEM, ]); } } diff --git a/application/Espo/Classes/Select/User/PrimaryFilters/Internal.php b/application/Espo/Classes/Select/User/PrimaryFilters/Internal.php index 4c79a5fab5..2fb9ef00ac 100644 --- a/application/Espo/Classes/Select/User/PrimaryFilters/Internal.php +++ b/application/Espo/Classes/Select/User/PrimaryFilters/Internal.php @@ -30,6 +30,7 @@ namespace Espo\Classes\Select\User\PrimaryFilters; use Espo\Core\Select\Primary\Filter; +use Espo\Entities\User; use Espo\ORM\Query\SelectBuilder; class Internal implements Filter @@ -37,7 +38,11 @@ class Internal implements Filter public function apply(SelectBuilder $queryBuilder): void { $queryBuilder->where([ - 'type!=' => ['portal', 'api', 'system'], + 'type!=' => [ + User::TYPE_PORTAL, + User::TYPE_API, + User::TYPE_SYSTEM, + ], ]); } } diff --git a/application/Espo/Classes/Select/User/Where/ItemConverters/IsOfType.php b/application/Espo/Classes/Select/User/Where/ItemConverters/IsOfType.php index 60d115023f..4e1a2053bc 100644 --- a/application/Espo/Classes/Select/User/Where/ItemConverters/IsOfType.php +++ b/application/Espo/Classes/Select/User/Where/ItemConverters/IsOfType.php @@ -29,16 +29,12 @@ namespace Espo\Classes\Select\User\Where\ItemConverters; -use Espo\Core\{ - Select\Where\ItemConverter, - Select\Where\Item, -}; - -use Espo\{ - ORM\Query\SelectBuilder as QueryBuilder, - ORM\Query\Part\WhereItem as WhereClauseItem, - ORM\Query\Part\WhereClause, -}; +use Espo\Core\Select\Where\Item; +use Espo\Core\Select\Where\ItemConverter; +use Espo\Entities\User; +use Espo\ORM\Query\Part\WhereClause; +use Espo\ORM\Query\Part\WhereItem as WhereClauseItem; +use Espo\ORM\Query\SelectBuilder as QueryBuilder; class IsOfType implements ItemConverter { @@ -46,23 +42,21 @@ class IsOfType implements ItemConverter { $type = $item->getValue(); - switch ($type) { - case 'internal': - return WhereClause::fromRaw([ - 'type!=' => ['portal', 'api', 'system'], - ]); - - case 'api': - return WhereClause::fromRaw([ - 'type' => 'api', - ]); - - case 'portal': - return WhereClause::fromRaw([ - 'type' => 'portal', - ]); - } - - return WhereClause::fromRaw(['id' => null]); + return match ($type) { + 'internal' => WhereClause::fromRaw([ + 'type!=' => [ + User::TYPE_PORTAL, + User::TYPE_API, + User::TYPE_SYSTEM, + ], + ]), + User::TYPE_API => WhereClause::fromRaw([ + 'type' => User::TYPE_API, + ]), + User::TYPE_SYSTEM => WhereClause::fromRaw([ + 'type' => User::TYPE_SYSTEM, + ]), + default => WhereClause::fromRaw(['id' => null]), + }; } } diff --git a/application/Espo/Core/ApplicationUser.php b/application/Espo/Core/ApplicationUser.php index c2859aa090..4421079872 100644 --- a/application/Espo/Core/ApplicationUser.php +++ b/application/Espo/Core/ApplicationUser.php @@ -41,14 +41,10 @@ class ApplicationUser { public const SYSTEM_USER_ID = 'system'; - private Container $container; - private EntityManagerProxy $entityManagerProxy; - - public function __construct(Container $container, EntityManagerProxy $entityManagerProxy) - { - $this->container = $container; - $this->entityManagerProxy = $entityManagerProxy; - } + public function __construct( + private Container $container, + private EntityManagerProxy $entityManagerProxy + ) {} /** * Set up the system user as a current user. The system user is used when no user is logged in. diff --git a/application/Espo/Core/Loaders/Preferences.php b/application/Espo/Core/Loaders/Preferences.php index a180217169..a2313f3eb9 100644 --- a/application/Espo/Core/Loaders/Preferences.php +++ b/application/Espo/Core/Loaders/Preferences.php @@ -29,39 +29,29 @@ namespace Espo\Core\Loaders; -use Espo\Core\{ - Container\Loader, - ORM\EntityManager, - ApplicationState, -}; +use Espo\Core\ApplicationState; +use Espo\Core\ApplicationUser as ApplicationUser; +use Espo\Core\Container\Loader; +use Espo\Core\ORM\EntityManager; -use Espo\Entities\{ - Preferences as PreferencesService, -}; +use Espo\Entities\Preferences as PreferencesEntity; class Preferences implements Loader { - private $entityManager; + public function __construct( + private EntityManager $entityManager, + private ApplicationState $applicationState + ) {} - private $applicationState; - - public function __construct(EntityManager $entityManager, ApplicationState $applicationState) + public function load(): PreferencesEntity { - $this->entityManager = $entityManager; - $this->applicationState = $applicationState; - } - - public function load(): PreferencesService - { - $id = 'system'; + $id = ApplicationUser::SYSTEM_USER_ID; if ($this->applicationState->hasUser()) { $id = $this->applicationState->getUser()->getId(); } - /** @var PreferencesService $entity */ - $entity = $this->entityManager->getEntity('Preferences', $id); - - return $entity; + /** @var PreferencesEntity */ + return $this->entityManager->getEntity(PreferencesEntity::ENTITY_TYPE, $id); } } diff --git a/application/Espo/Core/MassAction/Actions/MassRecalculateFormula.php b/application/Espo/Core/MassAction/Actions/MassRecalculateFormula.php index bc960c98d0..d2db49d7d4 100644 --- a/application/Espo/Core/MassAction/Actions/MassRecalculateFormula.php +++ b/application/Espo/Core/MassAction/Actions/MassRecalculateFormula.php @@ -29,6 +29,7 @@ namespace Espo\Core\MassAction\Actions; +use Espo\Core\ApplicationUser; use Espo\Core\Exceptions\Forbidden; use Espo\Core\MassAction\Data; use Espo\Core\MassAction\MassAction; @@ -40,19 +41,11 @@ use Espo\Entities\User; class MassRecalculateFormula implements MassAction { - private QueryBuilder $queryBuilder; - private EntityManager $entityManager; - private User $user; - public function __construct( - QueryBuilder $queryBuilder, - EntityManager $entityManager, - User $user - ) { - $this->queryBuilder = $queryBuilder; - $this->entityManager = $entityManager; - $this->user = $user; - } + private QueryBuilder $queryBuilder, + private EntityManager $entityManager, + private User $user + ) {} public function process(Params $params, Data $data): Result { @@ -76,7 +69,7 @@ class MassRecalculateFormula implements MassAction foreach ($collection as $entity) { $this->entityManager->saveEntity($entity, [ - 'modifiedById' => 'system', + 'modifiedById' => ApplicationUser::SYSTEM_USER_ID, ]); /** @var string $id */ diff --git a/application/Espo/Core/Rebuild/Actions/AddSystemUser.php b/application/Espo/Core/Rebuild/Actions/AddSystemUser.php index 7b354615eb..20ef813d70 100644 --- a/application/Espo/Core/Rebuild/Actions/AddSystemUser.php +++ b/application/Espo/Core/Rebuild/Actions/AddSystemUser.php @@ -59,6 +59,7 @@ class AddSystemUser implements RebuildAction $user = $repository->getNew(); $user->set($attributes); + $user->set('id', $userId); $repository->save($user); } } diff --git a/application/Espo/Resources/defaults/systemConfig.php b/application/Espo/Resources/defaults/systemConfig.php index 2539dd90ff..95320c2131 100644 --- a/application/Espo/Resources/defaults/systemConfig.php +++ b/application/Espo/Resources/defaults/systemConfig.php @@ -42,7 +42,6 @@ return [ 'delete' => 'delete', ], 'systemUserAttributes' => [ - 'id' => 'system', 'userName' => 'system', 'firstName' => '', 'lastName' => 'System', diff --git a/application/Espo/Tools/MassUpdate/MassUpdate.php b/application/Espo/Tools/MassUpdate/MassUpdate.php index 2dc0fb7f39..6ba0c88ec0 100644 --- a/application/Espo/Tools/MassUpdate/MassUpdate.php +++ b/application/Espo/Tools/MassUpdate/MassUpdate.php @@ -29,6 +29,8 @@ namespace Espo\Tools\MassUpdate; +use Espo\Core\ApplicationUser; +use Espo\Core\Exceptions\NotFound; use Espo\Core\MassAction\Params; use Espo\Core\MassAction\Result; use Espo\Core\MassAction\MassActionFactory; @@ -44,12 +46,10 @@ use RuntimeException; class MassUpdate { private MassActionFactory $massActionFactory; - private EntityManager $entityManager; private const ACTION = 'massUpdate'; - - private const DEFAULT_USER_ID = 'system'; + private const DEFAULT_USER_ID = ApplicationUser::SYSTEM_USER_ID; public function __construct(MassActionFactory $massActionFactory, EntityManager $entityManager) { @@ -59,8 +59,8 @@ class MassUpdate /** * @param ?User $user Under what user to perform mass-update. If not specified, the system user will be used. - * Access control is applied for the user. - * @throws \Espo\Core\Exceptions\NotFound + * Access control is applied for the user. + * @throws NotFound */ public function process(Params $params, Data $data, ?User $user = null): Result {