diff --git a/application/Espo/Classes/Acl/Email/AccessChecker.php b/application/Espo/Classes/Acl/Email/AccessChecker.php index 0e0e63fbe5..82c2c7fec1 100644 --- a/application/Espo/Classes/Acl/Email/AccessChecker.php +++ b/application/Espo/Classes/Acl/Email/AccessChecker.php @@ -30,6 +30,7 @@ namespace Espo\Classes\Acl\Email; use Espo\Entities\User; +use Espo\Entities\Email; use Espo\ORM\Entity; @@ -52,6 +53,8 @@ class AccessChecker implements AccessEntityCREDSChecker public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool { + /** @var Email $entity */ + if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) { return true; } @@ -79,6 +82,8 @@ class AccessChecker implements AccessEntityCREDSChecker public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool { + /** @var Email $entity */ + if ($user->isAdmin()) { return true; } diff --git a/application/Espo/Classes/Acl/Email/OwnershipChecker.php b/application/Espo/Classes/Acl/Email/OwnershipChecker.php index 6291232604..0659d57ed1 100644 --- a/application/Espo/Classes/Acl/Email/OwnershipChecker.php +++ b/application/Espo/Classes/Acl/Email/OwnershipChecker.php @@ -30,6 +30,7 @@ namespace Espo\Classes\Acl\Email; use Espo\Entities\User; +use Espo\Entities\Email; use Espo\ORM\Entity; @@ -50,6 +51,8 @@ class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker public function checkOwn(User $user, Entity $entity): bool { + /** @var Email $entity */ + if ($user->getId() === $entity->get('assignedUserId')) { return true; } diff --git a/application/Espo/Classes/Acl/User/AccessChecker.php b/application/Espo/Classes/Acl/User/AccessChecker.php index 246e7560bf..e56338b37a 100644 --- a/application/Espo/Classes/Acl/User/AccessChecker.php +++ b/application/Espo/Classes/Acl/User/AccessChecker.php @@ -62,6 +62,8 @@ class AccessChecker implements AccessEntityCREDSChecker return false; } + /** @var User $entity */ + if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) { return false; } @@ -71,6 +73,8 @@ class AccessChecker implements AccessEntityCREDSChecker public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool { + /** @var User $entity */ + if ($entity->isPortal()) { if ($this->aclManager->getPermissionLevel($user, 'portal') === Table::LEVEL_YES) { return true; @@ -88,6 +92,8 @@ class AccessChecker implements AccessEntityCREDSChecker public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool { + /** @var User $entity */ + if ($entity->isSystem()) { return false; } @@ -107,6 +113,8 @@ class AccessChecker implements AccessEntityCREDSChecker public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool { + /** @var User $entity */ + if (!$user->isAdmin()) { return false; } diff --git a/application/Espo/Classes/Acl/User/OwnershipChecker.php b/application/Espo/Classes/Acl/User/OwnershipChecker.php index 8560bbfd7c..16546cd6a8 100644 --- a/application/Espo/Classes/Acl/User/OwnershipChecker.php +++ b/application/Espo/Classes/Acl/User/OwnershipChecker.php @@ -30,8 +30,8 @@ namespace Espo\Classes\Acl\User; use Espo\Entities\User; - use Espo\ORM\Entity; +use Espo\Core\ORM\Entity as CoreEntity; use Espo\Core\{ Acl\OwnershipOwnChecker, @@ -47,6 +47,8 @@ class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker public function checkTeam(User $user, Entity $entity): bool { + assert($entity instanceof CoreEntity); + $intersect = array_intersect( $user->getLinkMultipleIdList('teams'), $entity->getLinkMultipleIdList('teams') diff --git a/application/Espo/Classes/AclPortal/Email/AccessChecker.php b/application/Espo/Classes/AclPortal/Email/AccessChecker.php index 37ab239675..211bcea45a 100644 --- a/application/Espo/Classes/AclPortal/Email/AccessChecker.php +++ b/application/Espo/Classes/AclPortal/Email/AccessChecker.php @@ -33,6 +33,8 @@ use Espo\Entities\User; use Espo\ORM\Entity; +use Espo\Core\ORM\Entity as CoreEntity; + use Espo\Core\{ Portal\AclManager, Acl\Table, @@ -72,6 +74,8 @@ class AccessChecker implements AccessEntityCREDSChecker return false; } + assert($entity instanceof CoreEntity); + $userIdList = $entity->getLinkMultipleIdLIst('users'); if (is_array($userIdList) && in_array($user->getId(), $userIdList)) { diff --git a/application/Espo/Classes/AssignmentNotificators/Email.php b/application/Espo/Classes/AssignmentNotificators/Email.php index acdaa8c766..d5f93983e9 100644 --- a/application/Espo/Classes/AssignmentNotificators/Email.php +++ b/application/Espo/Classes/AssignmentNotificators/Email.php @@ -43,6 +43,10 @@ use Espo\ORM\Entity; use Espo\Entities\User; use Espo\Entities\Notification; +use Espo\Entities\Email as EmailEntity; + +use Espo\Repositories\Email as EmailRepository; +use Espo\Repositories\EmailAddress as EmailAddressRepository; use DateTime; use Exception; @@ -79,6 +83,8 @@ class Email implements AssignmentNotificator public function process(Entity $entity, Params $params): void { + /** @var EmailEntity $entity */ + if (!in_array($entity->get('status'), ['Archived', 'Sent', 'Being Imported'])) { return; } @@ -138,12 +144,17 @@ class Email implements AssignmentNotificator 'emailName' => $entity->get('name'), ]; + /** @var EmailRepository $emailRepository */ + $emailRepository = $this->entityManager->getRepository('Email'); + /** @var EmailAddressRepository $emailAddressRepository */ + $emailAddressRepository = $this->entityManager->getRepository('EmailAddress'); + if (!$entity->has('from')) { - $this->entityManager->getRepository('Email')->loadFromField($entity); + $emailRepository->loadFromField($entity); } if (!$entity->has('to')) { - $this->entityManager->getRepository('Email')->loadToField($entity); + $emailRepository->loadToField($entity); } $person = null; @@ -151,9 +162,7 @@ class Email implements AssignmentNotificator $from = $entity->get('from'); if ($from) { - $person = $this->entityManager - ->getRepository('EmailAddress') - ->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']); + $person = $emailAddressRepository->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']); if ($person) { $data['personEntityType'] = $person->getEntityType(); @@ -165,7 +174,7 @@ class Email implements AssignmentNotificator $userIdFrom = null; if ($person && $person->getEntityType() === 'User') { - $userIdFrom = $person->id; + $userIdFrom = $person->getId(); } if (empty($data['personEntityId'])) { @@ -214,7 +223,7 @@ class Email implements AssignmentNotificator if ($folderId) { if ( $this->entityManager - ->getRepository('EmailFolder') + ->getRDBRepository('EmailFolder') ->where([ 'id' => $folderId, 'skipNotifications' => true, @@ -226,6 +235,7 @@ class Email implements AssignmentNotificator } } + /** @var User $user */ $user = $this->entityManager->getEntity('User', $userId); if (!$user) { @@ -261,7 +271,7 @@ class Email implements AssignmentNotificator } $existing = $this->entityManager - ->getRepository(Notification::ENTITY_TYPE) + ->getRDBRepository(Notification::ENTITY_TYPE) ->where([ 'type' => Notification::TYPE_EMAIL_RECEIVED, 'userId' => $userId, diff --git a/application/Espo/Classes/DuplicateWhereBuilders/Company.php b/application/Espo/Classes/DuplicateWhereBuilders/Company.php index a9515c5daf..65075e7c38 100644 --- a/application/Espo/Classes/DuplicateWhereBuilders/Company.php +++ b/application/Espo/Classes/DuplicateWhereBuilders/Company.php @@ -30,6 +30,8 @@ namespace Espo\Classes\DuplicateWhereBuilders; use Espo\Core\Duplicate\WhereBuilder; +use Espo\Core\Field\EmailAddressGroup; +use Espo\Core\ORM\Entity as CoreEntity; use Espo\ORM\{ Query\Part\Condition as Cond, @@ -84,10 +86,10 @@ class Company implements WhereBuilder return $orBuilder->build(); } - private function getEmailAddressList(Entity $entity): array + private function getEmailAddressList(CoreEntity $entity): array { if ($entity->get('emailAddressData')) { - /* @var $eaGroup EmailAddressGroup */ + /** @var EmailAddressGroup $eaGroup */ $eaGroup = $entity->getValueObject('emailAddress'); return $eaGroup->getAddressList(); diff --git a/application/Espo/Classes/DuplicateWhereBuilders/Person.php b/application/Espo/Classes/DuplicateWhereBuilders/Person.php index 57c4504645..c2d4818b7e 100644 --- a/application/Espo/Classes/DuplicateWhereBuilders/Person.php +++ b/application/Espo/Classes/DuplicateWhereBuilders/Person.php @@ -29,6 +29,8 @@ namespace Espo\Classes\DuplicateWhereBuilders; +use Espo\Core\ORM\Entity as CoreEntity; + use Espo\Core\{ Duplicate\WhereBuilder, Field\EmailAddressGroup, @@ -93,10 +95,10 @@ class Person implements WhereBuilder return $orBuilder->build(); } - private function getEmailAddressList(Entity $entity): array + private function getEmailAddressList(CoreEntity $entity): array { if ($entity->get('emailAddressData')) { - /* @var $eaGroup EmailAddressGroup */ + /** @var EmailAddressGroup $eaGroup */ $eaGroup = $entity->getValueObject('emailAddress'); return $eaGroup->getAddressList(); diff --git a/application/Espo/Classes/FieldProcessing/Email/AddressDataLoader.php b/application/Espo/Classes/FieldProcessing/Email/AddressDataLoader.php index ebf8781b1c..cfaec19838 100644 --- a/application/Espo/Classes/FieldProcessing/Email/AddressDataLoader.php +++ b/application/Espo/Classes/FieldProcessing/Email/AddressDataLoader.php @@ -50,7 +50,7 @@ class AddressDataLoader implements Loader public function process(Entity $entity, Params $params): void { - /* @var $repository EmailRepository */ + /** @var EmailRepository $repository */ $repository = $this->entityManager->getRepository('Email'); $repository->loadFromField($entity); diff --git a/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php b/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php index 9be4a19b29..5fca2327ba 100644 --- a/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php +++ b/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php @@ -114,7 +114,7 @@ class IcsDataLoader implements Loader return; } - /* @var $emailAddressRepository EmailAddressRepository */ + /** @var EmailAddressRepository $emailAddressRepository */ $emailAddressRepository = $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE); $attendeeEmailAddressList = $espoEvent->getAttendeeEmailAddressList(); diff --git a/application/Espo/Classes/FieldProcessing/Email/StringDataLoader.php b/application/Espo/Classes/FieldProcessing/Email/StringDataLoader.php index 6d4382b730..29489980e3 100644 --- a/application/Espo/Classes/FieldProcessing/Email/StringDataLoader.php +++ b/application/Espo/Classes/FieldProcessing/Email/StringDataLoader.php @@ -31,6 +31,8 @@ namespace Espo\Classes\FieldProcessing\Email; use Espo\ORM\Entity; +use Espo\Repositories\EmailAddress as EmailAddressRepository; + use Espo\Core\{ FieldProcessing\Loader, FieldProcessing\Loader\Params, @@ -56,6 +58,8 @@ class StringDataLoader implements Loader public function process(Entity $entity, Params $params): void { + /** @var Email $entity */ + $userEmailAdddressIdList = []; $emailAddressCollection = $this->entityManager @@ -84,9 +88,7 @@ class StringDataLoader implements Loader $list = []; foreach ($idList as $emailAddressId) { - $person = $this->entityManager - ->getRepository('EmailAddress') - ->getEntityByAddressId($emailAddressId, null, true); + $person = $this->getEmailAddressRepository()->getEntityByAddressId($emailAddressId, null, true); $list[] = $person ? $person->get('name') : $names->$emailAddressId; } @@ -103,9 +105,7 @@ class StringDataLoader implements Loader } if (!array_key_exists($fromEmailAddressId, $this->fromEmailAddressNameCache)) { - $person = $this->entityManager - ->getRepository('EmailAddress') - ->getEntityByAddressId($fromEmailAddressId, null, true); + $person = $this->getEmailAddressRepository()->getEntityByAddressId($fromEmailAddressId, null, true); $fromName = $person ? $person->get('name') : null; @@ -119,4 +119,9 @@ class StringDataLoader implements Loader $entity->set('personStringData', $fromName); } + + private function getEmailAddressRepository(): EmailAddressRepository + { + return $this->entityManager->getRepository('EmailAddress'); + } } diff --git a/application/Espo/Classes/FieldProcessing/Email/UserColumnsLoader.php b/application/Espo/Classes/FieldProcessing/Email/UserColumnsLoader.php index c279172e1f..4ce8c3c34e 100644 --- a/application/Espo/Classes/FieldProcessing/Email/UserColumnsLoader.php +++ b/application/Espo/Classes/FieldProcessing/Email/UserColumnsLoader.php @@ -54,7 +54,7 @@ class UserColumnsLoader implements Loader public function process(Entity $entity, Params $params): void { $emailUser = $this->entityManager - ->getRepository('EmailUser') + ->getRDBRepository('EmailUser') ->select(['isRead', 'isImportant', 'inTrash']) ->where([ 'deleted' => false, diff --git a/application/Espo/Classes/FieldProcessing/Import/CountsLoader.php b/application/Espo/Classes/FieldProcessing/Import/CountsLoader.php index fe2497e720..f4084d7baa 100644 --- a/application/Espo/Classes/FieldProcessing/Import/CountsLoader.php +++ b/application/Espo/Classes/FieldProcessing/Import/CountsLoader.php @@ -50,7 +50,7 @@ class CountsLoader implements Loader public function process(Entity $entity, Params $params): void { - /* @var $repository ImportRepository */ + /** @var ImportRepository $repository */ $repository = $this->entityManager->getRepository('Import'); $importedCount = $repository->countResultRecords($entity, 'imported'); diff --git a/application/Espo/Classes/FieldProcessing/Note/AttachmentsLoader.php b/application/Espo/Classes/FieldProcessing/Note/AttachmentsLoader.php index 272078d571..ee5849e2a5 100644 --- a/application/Espo/Classes/FieldProcessing/Note/AttachmentsLoader.php +++ b/application/Espo/Classes/FieldProcessing/Note/AttachmentsLoader.php @@ -42,7 +42,7 @@ class AttachmentsLoader implements Loader { public function process(Entity $entity, Params $params): void { - /* @var $entity Note */ + /** @var Note $entity */ $entity->loadAttachments(); } } diff --git a/application/Espo/Classes/FieldProcessing/Portal/UrlLoader.php b/application/Espo/Classes/FieldProcessing/Portal/UrlLoader.php index 6480fb6852..9b434a1ece 100644 --- a/application/Espo/Classes/FieldProcessing/Portal/UrlLoader.php +++ b/application/Espo/Classes/FieldProcessing/Portal/UrlLoader.php @@ -31,6 +31,8 @@ namespace Espo\Classes\FieldProcessing\Portal; use Espo\ORM\Entity; +use Espo\Repositories\Portal as PortalRepository; + use Espo\Core\{ FieldProcessing\Loader, FieldProcessing\Loader\Params, @@ -48,8 +50,11 @@ class UrlLoader implements Loader public function process(Entity $entity, Params $params): void { - $this->entityManager - ->getRepository('Portal') - ->loadUrlField($entity); + $this->getPortalRepository()->loadUrlField($entity); + } + + private function getPortalRepository(): PortalRepository + { + return $this->entityManager->getRepository('Portal'); } } diff --git a/application/Espo/Classes/FieldValidators/LinkMultipleType.php b/application/Espo/Classes/FieldValidators/LinkMultipleType.php index 8c94debe86..70a9a02a11 100644 --- a/application/Espo/Classes/FieldValidators/LinkMultipleType.php +++ b/application/Espo/Classes/FieldValidators/LinkMultipleType.php @@ -30,11 +30,16 @@ namespace Espo\Classes\FieldValidators; use Espo\ORM\Entity; +use Espo\Core\ORM\Entity as CoreEntity; class LinkMultipleType { public function checkRequired(Entity $entity, string $field): bool { + if (!$entity instanceof CoreEntity) { + return false; + } + return count($entity->getLinkMultipleIdList($field)) > 0; } } diff --git a/application/Espo/Classes/Jobs/AuthTokenControl.php b/application/Espo/Classes/Jobs/AuthTokenControl.php index fb98d69896..f32d087614 100644 --- a/application/Espo/Classes/Jobs/AuthTokenControl.php +++ b/application/Espo/Classes/Jobs/AuthTokenControl.php @@ -83,7 +83,7 @@ class AuthTokenControl implements JobDataLess } $tokenList = $this->entityManager - ->getRepository('AuthToken') + ->getRDBRepository('AuthToken') ->where($whereClause) ->limit(0, 500) ->find();