diff --git a/application/Espo/Core/Formula/Functions/RecordGroup/FindRelatedManyType.php b/application/Espo/Core/Formula/Functions/RecordGroup/FindRelatedManyType.php index 041e583f40..5b8b8a59fd 100644 --- a/application/Espo/Core/Formula/Functions/RecordGroup/FindRelatedManyType.php +++ b/application/Espo/Core/Formula/Functions/RecordGroup/FindRelatedManyType.php @@ -176,7 +176,7 @@ class FindRelatedManyType extends BaseFunction implements if ($relationType === 'hasChildren') { $queryBuilder->where([ - $foreignLink . 'Id' => $entity->id, + $foreignLink . 'Id' => $entity->getId(), $foreignLink . 'Type' => $entity->getEntityType(), ]); } @@ -184,7 +184,7 @@ class FindRelatedManyType extends BaseFunction implements $queryBuilder ->join($foreignLink) ->where([ - $foreignLink . '.id' => $entity->id, + $foreignLink . '.id' => $entity->getId(), ]); } @@ -203,7 +203,7 @@ class FindRelatedManyType extends BaseFunction implements $idList = []; foreach ($collection as $e) { - $idList[] = $e->id; + $idList[] = $e->getId(); } return $idList; diff --git a/application/Espo/Core/Job/QueueUtil.php b/application/Espo/Core/Job/QueueUtil.php index 0cadbc0e10..00a88e3356 100644 --- a/application/Espo/Core/Job/QueueUtil.php +++ b/application/Espo/Core/Job/QueueUtil.php @@ -431,7 +431,7 @@ class QueueUtil $jobIdList = []; foreach ($toRemoveJobList as $job) { - $jobIdList[] = $job->id; + $jobIdList[] = $job->getId(); } if (!count($jobIdList)) { diff --git a/application/Espo/Core/MassAction/Actions/MassDelete.php b/application/Espo/Core/MassAction/Actions/MassDelete.php index ebad07f6c0..30bfab825a 100644 --- a/application/Espo/Core/MassAction/Actions/MassDelete.php +++ b/application/Espo/Core/MassAction/Actions/MassDelete.php @@ -100,7 +100,7 @@ class MassDelete implements MassAction $repository->remove($entity); - $ids[] = $entity->id; + $ids[] = $entity->getId(); $count++; diff --git a/application/Espo/Core/MassAction/Actions/MassUpdate.php b/application/Espo/Core/MassAction/Actions/MassUpdate.php index e35298d6d4..660170c32f 100644 --- a/application/Espo/Core/MassAction/Actions/MassUpdate.php +++ b/application/Espo/Core/MassAction/Actions/MassUpdate.php @@ -135,7 +135,7 @@ class MassUpdate implements MassAction 'skipStreamNotesAcl' => true, ]); - $ids[] = $entity->id; + $ids[] = $entity->getId(); $count++; diff --git a/application/Espo/Services/Record.php b/application/Espo/Services/Record.php index bd1db469d9..852114e555 100644 --- a/application/Espo/Services/Record.php +++ b/application/Espo/Services/Record.php @@ -29,6 +29,8 @@ namespace Espo\Services; +use Espo\Core\ORM\Entity as CoreEntity; + use Espo\ORM\{ Entity, Collection, @@ -295,6 +297,10 @@ class Record extends RecordService implements */ public function loadLinkMultipleFieldsForList(Entity $entity, array $selectAttributeList): void { + if (!$entity instanceof CoreEntity) { + return; + } + foreach ($selectAttributeList as $attribute) { if (!$entity->getAttributeParam($attribute, 'isLinkMultipleIdList')) { continue; diff --git a/application/Espo/Services/RecordTree.php b/application/Espo/Services/RecordTree.php index 66a1858069..b4db434024 100644 --- a/application/Espo/Services/RecordTree.php +++ b/application/Espo/Services/RecordTree.php @@ -147,7 +147,7 @@ class RecordTree extends Record } foreach ($collection as $entity) { - $childList = $this->getTreeInternal($entity->id, $params, $maxDepth, $level + 1); + $childList = $this->getTreeInternal($entity->getId(), $params, $maxDepth, $level + 1); $entity->set('childList', $childList ? $childList->getValueMapList() : null); } @@ -183,13 +183,13 @@ class RecordTree extends Record WhereItem::fromRaw([ 'type' => 'inCategory', 'attribute' => $this->categoryField, - 'value' => $entity->id, + 'value' => $entity->getId(), ]) ) ->build(); $one = $this->entityManager - ->getRepository($this->subjectEntityType) + ->getRDBRepository($this->subjectEntityType) ->clone($query) ->findOne(); @@ -246,7 +246,7 @@ class RecordTree extends Record if ($parent) { $parentId = $parent->get('parentId'); - array_unshift($arr, $parent->id); + array_unshift($arr, $parent->getId()); } else { $parentId = null; @@ -347,7 +347,7 @@ class RecordTree extends Record ->withStrictAccessControl() ->buildQueryBuilder() ->where([ - 'parentId' => $entity->id, + 'parentId' => $entity->getId(), ]) ->build(); @@ -356,7 +356,7 @@ class RecordTree extends Record ->count(); if (!$count) { - $idList[] = $entity->id; + $idList[] = $entity->getId(); continue; } @@ -377,7 +377,7 @@ class RecordTree extends Record } if (!$isNotEmpty) { - $idList[] = $entity->id; + $idList[] = $entity->getId(); } } } diff --git a/application/Espo/Services/Settings.php b/application/Espo/Services/Settings.php index 9577ebdb7f..1de03882f5 100644 --- a/application/Espo/Services/Settings.php +++ b/application/Espo/Services/Settings.php @@ -47,6 +47,9 @@ use Espo\Core\Utils\Config; use Espo\Core\Utils\Config\ConfigWriter; use Espo\Core\Utils\Config\Access; +use Espo\Entities\Portal; +use Espo\Repositories\Portal as PortalRepository; + use stdClass; class Settings @@ -167,9 +170,7 @@ class Settings if ($this->applicationState->isPortal()) { $portal = $this->applicationState->getPortal(); - $this->entityManager - ->getRepository('Portal') - ->loadUrlField($portal); + $this->getPortalRepository()->loadUrlField($portal); $data->siteUrl = $portal->get('url'); } @@ -293,4 +294,9 @@ class Settings { $this->fieldValidationManager->process($entity, $data); } + + private function getPortalRepository(): PortalRepository + { + return $this->entityManager->getRepository(Portal::class); + } } diff --git a/application/Espo/Services/Stream.php b/application/Espo/Services/Stream.php index 3c8efe07a5..9da4a619dd 100644 --- a/application/Espo/Services/Stream.php +++ b/application/Espo/Services/Stream.php @@ -32,10 +32,12 @@ namespace Espo\Services; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Exceptions\NotFound; use Espo\Core\Exceptions\Error; +use Espo\Core\Record\ServiceContainer as RecordServiceContainer; +use Espo\Core\ORM\Entity as CoreEntity; use Espo\Tools\Stream\NoteAccessControl; -use Espo\Core\Record\ServiceContainer as RecordServiceContainer; +use Espo\Repositories\EmailAddress as EmailAddressRepository; use Espo\ORM\{ Entity, @@ -46,6 +48,8 @@ use Espo\ORM\{ use Espo\{ Entities\User, Entities\Note as NoteEntity, + Entities\Email, + Entities\EmailAddress, }; use Espo\Core\{ @@ -62,7 +66,7 @@ use Espo\Core\{ Utils\Acl\UserAclManagerProvider, }; -use StdClass; +use stdClass; use DateTime; class Stream @@ -365,7 +369,7 @@ class Stream $this->entityManager->getQueryExecutor()->execute($delete); } - public function findUserStream(string $userId, array $params = []): StdClass + public function findUserStream(string $userId, array $params = []): stdClass { $offset = intval($params['offset']); $maxSize = intval($params['maxSize']); @@ -376,6 +380,7 @@ class Stream $user = $this->user; } else { + /** @var User $user */ $user = $this->entityManager->getEntity('User', $userId); if (!$user) { @@ -878,7 +883,7 @@ class Stream return $whereClause; } - private function loadNoteAdditionalFields(Entity $e): void + private function loadNoteAdditionalFields(NoteEntity $e): void { if ($e->get('type') == 'Post' || $e->get('type') == 'EmailReceived') { $e->loadAttachments(); @@ -910,7 +915,7 @@ class Stream } } - public function find(string $scope, ?string $id, array $params = []): StdClass + public function find(string $scope, ?string $id, array $params = []): stdClass { if ($scope === 'User') { if (empty($id)) { @@ -1132,6 +1137,7 @@ class Stream ->limit($params['offset'], $params['maxSize']) ->order('number', 'DESC'); + /** @var iterable */ $collection = $this->entityManager ->getRDBRepository('Note') ->clone($builder->build()) @@ -1189,8 +1195,12 @@ class Stream * When users or teams of `related` or `parent` record are changed * the note record will be changed too. */ - private function processNoteTeamsUsers(Entity $note, Entity $entity): void + private function processNoteTeamsUsers(NoteEntity $note, Entity $entity): void { + if (!$entity instanceof CoreEntity) { + return; + } + $note->setAclIsProcessed(); $note->set('teamsIds', []); @@ -1210,7 +1220,6 @@ class Stream return; } - /* @var $defs \Espo\ORM\Defs\EntityDefs */ $defs = $this->entityManager->getDefs()->getEntity($entity->getEntityType()); if (!$defs->hasField($ownerUserField)) { @@ -1249,7 +1258,7 @@ class Stream $note->set('usersIds', $userIdList); } - public function noteEmailReceived(Entity $entity, Entity $email, $isInitial = false): void + public function noteEmailReceived(Entity $entity, Email $email, $isInitial = false): void { $entityType = $entity->getEntityType(); @@ -1302,9 +1311,7 @@ class Stream $from = $email->get('from'); if ($from) { - $person = $this->entityManager - ->getRepository('EmailAddress') - ->getEntityByAddress($from); + $person = $this->getEmailAddressRepository()->getEntityByAddress($from); if ($person) { $data['personEntityType'] = $person->getEntityType(); @@ -1318,7 +1325,7 @@ class Stream $this->entityManager->saveEntity($note); } - public function noteEmailSent(Entity $entity, Entity $email): void + public function noteEmailSent(Entity $entity, Email $email): void { $entityType = $entity->getEntityType(); @@ -1363,9 +1370,7 @@ class Stream $from = $email->get('from'); if ($from) { - $person = $this->entityManager - ->getRepository('EmailAddress') - ->getEntityByAddress($from); + $person = $this->getEmailAddressRepository()->getEntityByAddress($from); } } @@ -2029,7 +2034,7 @@ class Stream return $userList; } - public function processNoteAclJob(StdClass $data): void + public function processNoteAclJob(stdClass $data): void { $targetType = $data->targetType; $targetId = $data->targetId; @@ -2054,6 +2059,10 @@ class Stream */ public function processNoteAcl(Entity $entity, bool $forceProcessNoteNotifications = false): void { + if (!$entity instanceof CoreEntity) { + return; + } + $entityType = $entity->getEntityType(); if (in_array($entityType, ['Note', 'User', 'Team', 'Role', 'Portal', 'PortalRole'])) { @@ -2233,4 +2242,9 @@ class Stream $this->noteAccessControl->apply($note, $user); } + + private function getEmailAddressRepository(): EmailAddressRepository + { + return $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE); + } }