type fixes

This commit is contained in:
Yuri Kuznetsov
2022-03-11 18:53:21 +02:00
parent 21cbf390fd
commit 2383194f07
28 changed files with 167 additions and 38 deletions

View File

@@ -69,7 +69,7 @@ class AccessChecker
}
if (
$e->getEntityType() === 'User' &&
$e instanceof User &&
$e->isPortal() &&
$excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->getEntityType()

View File

@@ -70,7 +70,7 @@ class AccessChecker
}
if (
$e->getEntityType() === 'User' &&
$e instanceof User &&
$e->isPortal() &&
$excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->getId()

View File

@@ -1679,6 +1679,7 @@ class Service implements Crud,
/**
* @param TEntity $entity
* @param TEntity $duplicatingEntity
*/
protected function duplicateLinks(Entity $entity, Entity $duplicatingEntity): void
{

View File

@@ -57,5 +57,4 @@ class Call extends Entity
{
$this->setValueObject('dateEnd', $dateEnd);
}
}

View File

@@ -211,7 +211,7 @@ class CampaignUrl implements EntryPoint
foreach ($entityList as $target) {
$this->hookManager->process('CampaignTrackingUrl', 'afterClick', $trackingUrl, [], [
'targetId' => $target->id,
'targetId' => $target->getId(),
'targetType' => $target->getEntityType(),
]);
}

View File

@@ -29,7 +29,12 @@
namespace Espo\Modules\Crm\Services;
class Account extends \Espo\Services\Record
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\Account>
*/
class Account extends Record
{
protected $linkMandatorySelectAttributeList = [
'contacts' => ['accountIsInactive'],

View File

@@ -39,9 +39,14 @@ use Espo\Core\Exceptions\Error;
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Exceptions\BadRequest;
use \Espo\Services\Record;
use Espo\Core\Di;
class Campaign extends \Espo\Services\Record implements
/**
* @extends Record<\Espo\Modules\Crm\Entities\Campaign>
*/
class Campaign extends Record implements
Di\DefaultLanguageAware
{

View File

@@ -29,7 +29,12 @@
namespace Espo\Modules\Crm\Services;
class CampaignLogRecord extends \Espo\Services\Record
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\CampaignLogRecord>
*/
class CampaignLogRecord extends Record
{
protected $forceSelectAllAttributes = true;
}

View File

@@ -32,13 +32,19 @@ namespace Espo\Modules\Crm\Services;
use Espo\Core\Exceptions\Forbidden;
use Espo\ORM\Entity;
class CampaignTrackingUrl extends \Espo\Services\Record
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\CampaignTrackingUrl>
*/
class CampaignTrackingUrl extends Record
{
protected $mandatorySelectAttributeList = ['campaignId'];
protected function beforeCreateEntity(Entity $entity, $data)
{
parent::beforeCreateEntity($entity, $data);
if (!$this->getAcl()->check($entity, 'edit')) {
throw new Forbidden();
}

View File

@@ -37,6 +37,9 @@ use Espo\{
use stdClass;
/**
* @extends Record<\Espo\Modules\Crm\Entities\CaseObj>
*/
class CaseObj extends Record
{
protected $noEditAccessRequiredLinkList = [

View File

@@ -33,6 +33,9 @@ use Espo\ORM\Entity;
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\Contact>
*/
class Contact extends Record
{
protected $readOnlyAttributeList = [

View File

@@ -34,7 +34,12 @@ use Espo\Core\Exceptions\NotFound;
use Espo\Repositories\Attachment as AttachmentRepository;
use Espo\Entities\Attachment;
class Document extends \Espo\Services\Record
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\Document>
*/
class Document extends Record
{
/**
* @return \Espo\ORM\Collection<Attachment>

View File

@@ -29,6 +29,9 @@
namespace Espo\Modules\Crm\Services;
/**
* @extends \Espo\Services\RecordTree<\Espo\Modules\Crm\Entities\DocumentFolder>
*/
class DocumentFolder extends \Espo\Services\RecordTree
{
protected $subjectEntityType = 'Document';

View File

@@ -34,6 +34,8 @@ use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Exceptions\NotFound;
use Espo\Core\Exceptions\Error;
use Espo\Services\Record;
use Espo\Entities\Attachment;
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle as KnowledgeBaseArticleEntity;
@@ -45,7 +47,10 @@ use Espo\Core\{
use stdClass;
class KnowledgeBaseArticle extends \Espo\Services\Record implements
/**
* @extends Record<\Espo\Modules\Crm\Entities\KnowledgeBaseArticle>
*/
class KnowledgeBaseArticle extends Record implements
Di\FileStorageManagerAware
{

View File

@@ -29,8 +29,9 @@
namespace Espo\Modules\Crm\Services;
use Espo\ORM\Entity;
/**
* @extends \Espo\Services\RecordTree<\Espo\Modules\Crm\Entities\KnowledgeBaseCategory>
*/
class KnowledgeBaseCategory extends \Espo\Services\RecordTree
{
protected $subjectEntityType = 'KnowledgeBaseArticle';

View File

@@ -48,6 +48,9 @@ use Espo\Core\Di;
use stdClass;
/**
* @extends Record<\Espo\Modules\Crm\Entities\Lead>
*/
class Lead extends Record implements
Di\FieldUtilAware

View File

@@ -40,12 +40,15 @@ use Espo\Core\{
use Espo\{
ORM\Entity,
Services\Record as RecordService,
Services\Record,
Modules\Crm\Tools\MassEmail\Processor,
Modules\Crm\Tools\MassEmail\Queue,
};
class MassEmail extends RecordService
/**
* @extends Record<\Espo\Modules\Crm\Entities\MassEmail>
*/
class MassEmail extends Record
{
protected $mandatorySelectAttributeList = [
'campaignId',

View File

@@ -41,18 +41,34 @@ use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Di;
/**
* @extends Record<CoreEntity>
*/
class Meeting extends Record implements
Di\HookManagerAware
{
use Di\HookManagerSetter;
/**
* @var string[]
*/
protected $validateRequiredSkipFieldList = [
'dateEnd',
];
/**
* @var string[]
*/
protected $exportSkipFieldList = ['duration'];
protected $duplicateIgnoreAttributeList = ['usersColumns', 'contactsColumns', 'leadsColumns'];
/**
* @var string[]
*/
protected $duplicateIgnoreAttributeList = [
'usersColumns',
'contactsColumns',
'leadsColumns',
];
public function checkAssignment(Entity $entity): bool
{
@@ -102,7 +118,7 @@ class Meeting extends Record implements
return true;
}
protected function getInvitationManager(bool $useUserSmtp = true)
protected function getInvitationManager(bool $useUserSmtp = true): Invitations
{
$smtpParams = null;
@@ -115,7 +131,7 @@ class Meeting extends Record implements
]);
}
public function sendInvitations(CoreEntity $entity, bool $useUserSmtp = true)
public function sendInvitations(CoreEntity $entity, bool $useUserSmtp = true): bool
{
$invitationManager = $this->getInvitationManager($useUserSmtp);
@@ -188,7 +204,10 @@ class Meeting extends Record implements
return true;
}
public function massSetHeld(array $ids)
/**
* @param string[] $ids
*/
public function massSetHeld(array $ids): bool
{
foreach ($ids as $id) {
$entity = $this->getEntityManager()->getEntity($this->entityType, $id);
@@ -202,7 +221,10 @@ class Meeting extends Record implements
return true;
}
public function massSetNotHeld(array $ids)
/**
* @param string[] $ids
*/
public function massSetNotHeld(array $ids): bool
{
foreach ($ids as $id) {
$entity = $this->getEntityManager()->getEntity($this->entityType, $id);
@@ -217,7 +239,7 @@ class Meeting extends Record implements
return true;
}
public function setAcceptanceStatus(string $id, string $status, ?string $userId = null)
public function setAcceptanceStatus(string $id, string $status, ?string $userId = null): bool
{
$userId = $userId ?? $this->getUser()->getId();
@@ -237,7 +259,7 @@ class Meeting extends Record implements
assert($entity instanceof CoreEntity);
if (!$entity->hasLinkMultipleId('users', $userId)) {
return;
return false;
}
$this->getEntityManager()

View File

@@ -31,12 +31,15 @@ namespace Espo\Modules\Crm\Services;
use Espo\Core\Exceptions\Forbidden;
use Espo\ORM\Entity;
/**
* @deprecated
* @extends \Espo\Services\Record<\Espo\Modules\Crm\Entities\Target>
*/
class Target extends \Espo\Services\Record
{
public function convert($id)
public function convert(string $id): Entity
{
$entityManager = $this->getEntityManager();
$target = $this->getEntity($id);

View File

@@ -41,6 +41,8 @@ use Espo\Core\Exceptions\Error;
use Espo\Modules\Crm\Entities\TargetList as TargetListEntity;
use Espo\Core\Record\Collection as RecordCollection;
use Espo\Services\Record;
use Espo\Core\Select\SearchParams;
use Espo\Core\Utils\Metadata;
@@ -49,7 +51,10 @@ use PDO;
use Espo\Core\Di;
class TargetList extends \Espo\Services\Record implements
/**
* @extends Record<\Espo\Modules\Crm\Entities\TargetList>
*/
class TargetList extends Record implements
Di\HookManagerAware
{
@@ -109,7 +114,7 @@ class TargetList extends \Espo\Services\Record implements
}
protected function populateFromCampaignLog(
Entity $entity,
TargetListEntity $entity,
string $sourceCampaignId,
array $includingActionList,
array $excludingActionList

View File

@@ -31,4 +31,7 @@ namespace Espo\Modules\Crm\Services;
use Espo\Services\Record;
/**
* @extends Record<\Espo\Modules\Crm\Entities\Task>
*/
class Task extends Record {}

View File

@@ -50,6 +50,7 @@ use Espo\{
Modules\Crm\Entities\EmailQueueItem,
Modules\Crm\Entities\Campaign,
Modules\Crm\Entities\MassEmail,
Modules\Crm\Entities\CampaignTrackingUrl,
Modules\Crm\Services\Campaign as CampaignService,
Services\EmailTemplate as EmailTemplateService,
ORM\Entity,
@@ -75,11 +76,11 @@ class Processor
protected const MAX_PER_HOUR_COUNT = 10000;
private $campaignService = null;
private ?CampaignService $campaignService = null;
private $emailTemplateService = null;
private ?EmailTemplateService $emailTemplateService = null;
protected $log;
protected Log $log;
public function __construct(
Config $config,
@@ -228,6 +229,9 @@ class Processor
}
}
/**
* @param iterable<CampaignTrackingUrl> $trackingUrlList
*/
protected function getPreparedEmail(
EmailQueueItem $queueItem,
MassEmail $massEmail,
@@ -311,6 +315,9 @@ class Processor
return $email;
}
/**
* @param array<string,mixed> $params
*/
protected function prepareQueueItemMessage(
EmailQueueItem $queueItem,
Sender $sender,
@@ -369,6 +376,7 @@ class Processor
/**
* @param iterable<\Espo\Entities\Attachment> $attachmentList
* @param ?array<string,mixed> $smtpParams
*/
protected function sendQueueItem(
EmailQueueItem $queueItem,
@@ -425,9 +433,11 @@ class Processor
}
}
/** @var CampaignTrackingUrl[] */
$trackingUrlList = [];
if ($campaign) {
/** @var \Espo\ORM\Collection<CampaignTrackingUrl> */
$trackingUrlList = $this->entityManager
->getRDBRepository('Campaign')
->getRelation($campaign, 'trackingUrls')

View File

@@ -79,6 +79,10 @@ class Queue
$this->entityManager->getQueryExecutor()->execute($delete);
}
/**
* @param iterable<TargetList> $additionalTargetList
* @throws Error
*/
public function create(MassEmail $massEmail, bool $isTest = false, iterable $additionalTargetList = []): void
{
if (!$isTest && $massEmail->get('status') !== EmailQueueItem::STATUS_PENDING) {

View File

@@ -49,6 +49,9 @@ class Attachment extends Database implements
use Di\FileStorageManagerSetter;
use Di\ConfigSetter;
/**
* @var string[]
*/
protected $imageTypeList = [
'image/jpeg',
'image/png',
@@ -56,6 +59,9 @@ class Attachment extends Database implements
'image/webp',
];
/**
* @var string[]
*/
protected $imageThumbList = [
'xxx-small',
'xx-small',
@@ -124,7 +130,7 @@ class Attachment extends Database implements
}
}
public function removeImageThumbs(AttachmentEntity $entity)
public function removeImageThumbs(AttachmentEntity $entity): void
{
foreach ($this->imageThumbList as $suffix) {
$filePath = "data/upload/thumbs/" . $entity->getSourceId() . "_{$suffix}";
@@ -135,7 +141,7 @@ class Attachment extends Database implements
}
}
public function getCopiedAttachment(AttachmentEntity $entity, $role = null): AttachmentEntity
public function getCopiedAttachment(AttachmentEntity $entity, ?string $role = null): AttachmentEntity
{
$attachment = $this->get();

View File

@@ -193,6 +193,9 @@ class Email extends Database implements
}
}
/**
* @param string[] $fieldList
*/
public function loadNameHash(EmailEntity $entity, array $fieldList = ['from', 'to', 'cc', 'bcc', 'replyTo']): void
{
$addressList = [];
@@ -425,7 +428,7 @@ class Email extends Database implements
}
}
$filter = $this->getEmailFilterManager()->getMatchingFilter($entity, $userId);
$filter = $this->emailFilterManager->getMatchingFilter($entity, $userId);
if ($filter) {
$action = $filter->get('action');
@@ -491,11 +494,6 @@ class Email extends Database implements
}
}
protected function getEmailFilterManager()
{
return $this->emailFilterManager;
}
private function getEmailAddressRepository(): EmailAddressRepository
{
/** @var EmailAddressRepository */

View File

@@ -47,6 +47,10 @@ class EmailAddress extends \Espo\Core\Repositories\Database implements
protected $hooksDisabled = true;
/**
* @param string[] $addressList
* @return string[]
*/
public function getIdListFormAddressList(array $addressList = []): array
{
return $this->getIds($addressList);
@@ -54,6 +58,8 @@ class EmailAddress extends \Espo\Core\Repositories\Database implements
/**
* @deprecated Use `getIdListFormAddressList`.
* @param string[] $addressList
* @return string[]
*/
public function getIds(array $addressList = []): array
{
@@ -104,6 +110,9 @@ class EmailAddress extends \Espo\Core\Repositories\Database implements
return $ids;
}
/**
* @return \stdClass[]
*/
public function getEmailAddressData(Entity $entity): array
{
$dataList = [];
@@ -146,6 +155,9 @@ class EmailAddress extends \Espo\Core\Repositories\Database implements
return $this->where(['lower' => strtolower($address)])->findOne();
}
/**
* @return Entity[]
*/
public function getEntityListByAddressId(
string $emailAddressId,
?Entity $exceptionEntity = null,
@@ -293,6 +305,9 @@ class EmailAddress extends \Espo\Core\Repositories\Database implements
return null;
}
/**
* @param string[] $order
*/
public function getEntityByAddress(
string $address,
?string $entityType = null,

View File

@@ -52,6 +52,10 @@ class PhoneNumber extends Database implements
const ERASED_PREFIX = 'ERASED:';
/**
* @param string [] $numberList
* @return string[]
*/
public function getIds($numberList = []): array
{
$ids = [];
@@ -96,6 +100,9 @@ class PhoneNumber extends Database implements
return $ids;
}
/**
* @return array<int,\stdClass>
*/
public function getPhoneNumberData(Entity $entity): array
{
$dataList = [];
@@ -138,6 +145,9 @@ class PhoneNumber extends Database implements
return $this->where(['name' => $number])->findOne();
}
/**
* @return Entity[]
*/
public function getEntityListByPhoneNumberId(string $phoneNumberId, ?Entity $exceptionEntity = null): array
{
$entityList = [];

View File

@@ -68,6 +68,9 @@ class Preferences implements Repository,
$this->entityManager = $entityManager;
}
/**
* @var string[]
*/
protected $defaultAttributeListFromSettings = [
'decimalMark',
'thousandSeparator',
@@ -75,6 +78,9 @@ class Preferences implements Repository,
'followCreatedEntities',
];
/**
* @var array<string,array<string,mixed>>
*/
private $data = [];
public function getNew(): Entity
@@ -112,7 +118,7 @@ class Preferences implements Repository,
return $this->getById($id);
}
protected function loadData(string $id)
protected function loadData(string $id): void
{
$data = null;
@@ -171,7 +177,7 @@ class Preferences implements Repository,
$this->data[$id] = $defaults;
}
protected function fetchAutoFollowEntityTypeList(PreferencesEntity $entity)
protected function fetchAutoFollowEntityTypeList(PreferencesEntity $entity): void
{
$id = $entity->getId();
@@ -194,7 +200,7 @@ class Preferences implements Repository,
$entity->set('autoFollowEntityTypeList', $autoFollowEntityTypeList);
}
protected function storeAutoFollowEntityTypeList(Entity $entity)
protected function storeAutoFollowEntityTypeList(Entity $entity): void
{
$id = $entity->getId();