diff --git a/application/Espo/Classes/Acl/Attachment/AccessChecker.php b/application/Espo/Classes/Acl/Attachment/AccessChecker.php index 7ec8877bd7..b37970492a 100644 --- a/application/Espo/Classes/Acl/Attachment/AccessChecker.php +++ b/application/Espo/Classes/Acl/Attachment/AccessChecker.php @@ -78,20 +78,20 @@ class AccessChecker implements AccessEntityCREDChecker $parent = null; - $hasParent = false; + $parentType = $entity->get('parentType'); + $parentId = $entity->get('parentId'); - if ($entity->get('parentId') && $entity->get('parentType')) { - $hasParent = true; + $relatedType = $entity->get('relatedType'); + $relatedId = $entity->get('relatedId'); - $parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId')); + if ($parentId && $parentType) { + $parent = $this->entityManager->getEntityById($parentType, $parentId); } - else if ($entity->get('relatedId') && $entity->get('relatedType')) { - $hasParent = true; - - $parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId')); + else if ($relatedId && $relatedType) { + $parent = $this->entityManager->getEntityById($relatedType, $relatedId); } - if (!$parent || !$hasParent) { + if (!$parent) { if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) { return true; } @@ -132,8 +132,8 @@ class AccessChecker implements AccessEntityCREDChecker { if ($note->getTargetType() === Note::TARGET_TEAMS) { $intersect = array_intersect( - $note->getLinkMultipleIdList('teams'), - $user->getLinkMultipleIdList('teams') + $note->getLinkMultipleIdList('teams') ?? [], + $user->getLinkMultipleIdList('teams') ?? [] ); if (count($intersect)) { diff --git a/application/Espo/Classes/Acl/Email/AccessChecker.php b/application/Espo/Classes/Acl/Email/AccessChecker.php index 27434506d8..3323f84389 100644 --- a/application/Espo/Classes/Acl/Email/AccessChecker.php +++ b/application/Espo/Classes/Acl/Email/AccessChecker.php @@ -104,6 +104,7 @@ class AccessChecker implements AccessEntityCREDSChecker return true; } + /** @var string[] */ $assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers'); if ( diff --git a/application/Espo/Classes/Acl/Team/OwnershipChecker.php b/application/Espo/Classes/Acl/Team/OwnershipChecker.php index 229b54eeba..2b7ba43248 100644 --- a/application/Espo/Classes/Acl/Team/OwnershipChecker.php +++ b/application/Espo/Classes/Acl/Team/OwnershipChecker.php @@ -44,6 +44,7 @@ class OwnershipChecker implements OwnershipOwnChecker { public function checkOwn(User $user, Entity $entity): bool { + /** @var string[] */ $userTeamIdList = $user->getLinkMultipleIdList('teams'); return in_array($entity->getId(), $userTeamIdList); diff --git a/application/Espo/Classes/Acl/User/OwnershipChecker.php b/application/Espo/Classes/Acl/User/OwnershipChecker.php index 943d994e71..8aa0964aef 100644 --- a/application/Espo/Classes/Acl/User/OwnershipChecker.php +++ b/application/Espo/Classes/Acl/User/OwnershipChecker.php @@ -54,8 +54,8 @@ class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker assert($entity instanceof CoreEntity); $intersect = array_intersect( - $user->getLinkMultipleIdList('teams'), - $entity->getLinkMultipleIdList('teams') + $user->getLinkMultipleIdList('teams') ?? [], + $entity->getLinkMultipleIdList('teams') ?? [] ); if (count($intersect)) { diff --git a/application/Espo/Classes/AclPortal/Attachment/AccessChecker.php b/application/Espo/Classes/AclPortal/Attachment/AccessChecker.php index 079c5b88de..0a1dbffc44 100644 --- a/application/Espo/Classes/AclPortal/Attachment/AccessChecker.php +++ b/application/Espo/Classes/AclPortal/Attachment/AccessChecker.php @@ -79,20 +79,21 @@ class AccessChecker implements AccessEntityCREDChecker } $parent = null; - $hasParent = false; - if ($entity->get('parentId') && $entity->get('parentType')) { - $hasParent = true; + $parentType = $entity->get('parentType'); + $parentId = $entity->get('parentId'); - $parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId')); + $relatedType = $entity->get('relatedType'); + $relatedId = $entity->get('relatedId'); + + if ($parentId && $parentType) { + $parent = $this->entityManager->getEntityById($parentType, $parentId); } - else if ($entity->get('relatedId') && $entity->get('relatedType')) { - $hasParent = true; - - $parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId')); + else if ($relatedId && $relatedType) { + $parent = $this->entityManager->getEntityById($relatedType, $relatedId); } - if (!$hasParent) { + if (!$parent) { if ($entity->get('createdById') === $user->getId()) { return true; } @@ -137,8 +138,8 @@ class AccessChecker implements AccessEntityCREDChecker if ($note->getTargetType() === Note::TARGET_PORTALS) { $intersect = array_intersect( - $note->getLinkMultipleIdList('portals'), - $user->getLinkMultipleIdList('portals') + $note->getLinkMultipleIdList('portals') ?? [], + $user->getLinkMultipleIdList('portals') ?? [] ); if (count($intersect)) { diff --git a/application/Espo/Classes/FieldValidators/LinkMultipleType.php b/application/Espo/Classes/FieldValidators/LinkMultipleType.php index 54ff875caf..1059475f87 100644 --- a/application/Espo/Classes/FieldValidators/LinkMultipleType.php +++ b/application/Espo/Classes/FieldValidators/LinkMultipleType.php @@ -40,6 +40,9 @@ class LinkMultipleType return false; } - return count($entity->getLinkMultipleIdList($field)) > 0; + /** @var string[] */ + $idList = $entity->getLinkMultipleIdList($field); + + return count($idList) > 0; } } diff --git a/application/Espo/Classes/JobPreparators/CheckEmailAccounts.php b/application/Espo/Classes/JobPreparators/CheckEmailAccounts.php index 66bd02ecac..7c4d19ce27 100644 --- a/application/Espo/Classes/JobPreparators/CheckEmailAccounts.php +++ b/application/Espo/Classes/JobPreparators/CheckEmailAccounts.php @@ -93,7 +93,7 @@ class CheckEmailAccounts implements Preparator continue; } - $jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE); + $jobEntity = $this->entityManager->getNewEntity(JobEntity::ENTITY_TYPE); $jobEntity->set([ 'name' => $data->getName(), diff --git a/application/Espo/Classes/JobPreparators/CheckInboundEmails.php b/application/Espo/Classes/JobPreparators/CheckInboundEmails.php index 73a3c60d1c..cb3b5da8a0 100644 --- a/application/Espo/Classes/JobPreparators/CheckInboundEmails.php +++ b/application/Espo/Classes/JobPreparators/CheckInboundEmails.php @@ -91,7 +91,7 @@ class CheckInboundEmails implements Preparator continue; } - $jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE); + $jobEntity = $this->entityManager->getNewEntity(JobEntity::ENTITY_TYPE); $jobEntity->set([ 'name' => $data->getName(), diff --git a/application/Espo/Classes/Jobs/CheckNewExtensionVersion.php b/application/Espo/Classes/Jobs/CheckNewExtensionVersion.php index 7053131dd3..6d4ef3bd91 100644 --- a/application/Espo/Classes/Jobs/CheckNewExtensionVersion.php +++ b/application/Espo/Classes/Jobs/CheckNewExtensionVersion.php @@ -40,7 +40,8 @@ class CheckNewExtensionVersion extends CheckNewVersion return; } - $job = $this->entityManager->getEntity('Job'); + $job = $this->entityManager->getNewEntity('Job'); + $job->set([ 'name' => 'Check for new versions of installed extensions (job)', 'serviceName' => 'AdminNotifications', diff --git a/application/Espo/Classes/Jobs/CheckNewVersion.php b/application/Espo/Classes/Jobs/CheckNewVersion.php index 70b02388d3..f581db98a5 100644 --- a/application/Espo/Classes/Jobs/CheckNewVersion.php +++ b/application/Espo/Classes/Jobs/CheckNewVersion.php @@ -62,7 +62,7 @@ class CheckNewVersion implements JobDataLess return; } - $job = $this->entityManager->getEntity('Job'); + $job = $this->entityManager->getNewEntity('Job'); $job->set([ 'name' => 'Check for New Version (job)', diff --git a/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyOwn.php b/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyOwn.php index 32a854e75d..b7129cb845 100644 --- a/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyOwn.php +++ b/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyOwn.php @@ -53,10 +53,10 @@ class OnlyOwn implements Filter public function apply(QueryBuilder $queryBuilder): void { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); $queryBuilder->where([ - 'emailUser.userId' => $this->user->id, + 'emailUser.userId' => $this->user->getId(), ]); } } diff --git a/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyTeam.php b/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyTeam.php index 08f79d9b25..dc2e4d2331 100644 --- a/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyTeam.php +++ b/application/Espo/Classes/Select/Email/AccessControlFilters/OnlyTeam.php @@ -53,16 +53,14 @@ class OnlyTeam implements Filter public function apply(QueryBuilder $queryBuilder): void { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); $queryBuilder->distinct(); - $queryBuilder->leftJoin('teams', 'teamsAccess'); - $queryBuilder->where([ 'OR' => [ 'teamsAccessMiddle.teamId' => $this->user->getLinkMultipleIdList('teams'), - 'emailUser.userId' => $this->user->id, + 'emailUser.userId' => $this->user->getId(), ] ]); } diff --git a/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyAccount.php b/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyAccount.php index f7538d7313..181b0334ad 100644 --- a/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyAccount.php +++ b/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyAccount.php @@ -53,14 +53,15 @@ class PortalOnlyAccount implements Filter public function apply(QueryBuilder $queryBuilder): void { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); $queryBuilder->distinct(); $orGroup = [ - 'emailUser.userId' => $this->user->id, + 'emailUser.userId' => $this->user->getId(), ]; + /** @var string[] */ $accountIdList = $this->user->getLinkMultipleIdList('accounts'); if (count($accountIdList)) { diff --git a/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyContact.php b/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyContact.php index aac5368da3..6ae81497bc 100644 --- a/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyContact.php +++ b/application/Espo/Classes/Select/Email/AccessControlFilters/PortalOnlyContact.php @@ -53,12 +53,12 @@ class PortalOnlyContact implements Filter public function apply(QueryBuilder $queryBuilder): void { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); $queryBuilder->distinct(); $orGroup = [ - 'emailUser.userId' => $this->user->id, + 'emailUser.userId' => $this->user->getId(), ]; $contactId = $this->user->get('contactId'); diff --git a/application/Espo/Classes/Select/Email/AdditionalAppliers/Main.php b/application/Espo/Classes/Select/Email/AdditionalAppliers/Main.php index e2849e0978..5eebbf799e 100644 --- a/application/Espo/Classes/Select/Email/AdditionalAppliers/Main.php +++ b/application/Espo/Classes/Select/Email/AdditionalAppliers/Main.php @@ -70,7 +70,7 @@ class Main implements AdditionalApplier protected function joinEmailUser(SelectBuilder $queryBuilder): void { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); if ($queryBuilder->build()->getSelect() === []) { $queryBuilder->select('*'); diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsFalse.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsFalse.php index 97664fcaca..784744d7df 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsFalse.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsFalse.php @@ -56,7 +56,7 @@ class IsImportantIsFalse implements ItemConverter public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); return WhereClause::fromRaw([ 'emailUser.isImportant' => false, diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsTrue.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsTrue.php index cf42b8376b..03282784f5 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsTrue.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsImportantIsTrue.php @@ -56,7 +56,7 @@ class IsImportantIsTrue implements ItemConverter public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); return WhereClause::fromRaw([ 'emailUser.isImportant' => true, diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsFalse.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsFalse.php index adb582e930..9eb9f519e1 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsFalse.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsFalse.php @@ -56,7 +56,7 @@ class IsNotReadIsFalse implements ItemConverter public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); return WhereClause::fromRaw([ 'emailUser.isRead' => true, diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsTrue.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsTrue.php index 69184a1ecc..b659662a52 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsTrue.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/IsNotReadIsTrue.php @@ -56,13 +56,13 @@ class IsNotReadIsTrue implements ItemConverter public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem { - $this->joinHelper->joinEmailUser($queryBuilder, $this->user->id); + $this->joinHelper->joinEmailUser($queryBuilder, $this->user->getId()); return WhereClause::fromRaw([ 'emailUser.isRead' => false, 'OR' => [ 'sentById' => null, - 'sentById!=' => $this->user->id + 'sentById!=' => $this->user->getId() ], ]); } diff --git a/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php b/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php index 20816827d5..e94d6071a1 100644 --- a/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php +++ b/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php @@ -50,6 +50,7 @@ class OnlyMyTeam implements Filter public function apply(SelectBuilder $queryBuilder, OrGroupBuilder $orGroupBuilder): void { + /** @var string[] */ $teamIdList = $this->user->getLinkMultipleIdList('teams'); if (count($teamIdList) === 0) {