From d3f4131353c4bdaebee3bc28953438a1c4f3a4bc Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Thu, 10 Mar 2022 19:41:27 +0200 Subject: [PATCH] type fixes --- application/Espo/Tools/DataPrivacy/Erasor.php | 5 + .../EmailNotification/AssignmentProcessor.php | 5 +- .../AssignmentProcessorData.php | 8 +- .../Tools/EmailNotification/Processor.php | 17 +++- application/Espo/Tools/EmailTemplate/Data.php | 17 ++-- .../Espo/Tools/EmailTemplate/Params.php | 4 +- .../Tools/EntityManager/EntityManager.php | 96 +++++++++++++++++++ .../EntityManager/Hooks/BasePlusType.php | 7 +- .../EntityManager/Link/HookProcessor.php | 2 + 9 files changed, 137 insertions(+), 24 deletions(-) diff --git a/application/Espo/Tools/DataPrivacy/Erasor.php b/application/Espo/Tools/DataPrivacy/Erasor.php index 499dd1f0c2..e7af6fbc57 100644 --- a/application/Espo/Tools/DataPrivacy/Erasor.php +++ b/application/Espo/Tools/DataPrivacy/Erasor.php @@ -74,6 +74,11 @@ class Erasor implements $this->phoneNumberAccessChecker = $phoneNumberAccessChecker; } + /** + * @param string[] $fieldList + * @throws Forbidden + * @throws NotFound + */ public function erase(string $entityType, string $id, array $fieldList): void { if ($this->acl->get('dataPrivacyPermission') === 'no') { diff --git a/application/Espo/Tools/EmailNotification/AssignmentProcessor.php b/application/Espo/Tools/EmailNotification/AssignmentProcessor.php index c71bca6fd9..890ddc270f 100644 --- a/application/Espo/Tools/EmailNotification/AssignmentProcessor.php +++ b/application/Espo/Tools/EmailNotification/AssignmentProcessor.php @@ -33,8 +33,6 @@ use Espo\Core\ORM\Entity; use Espo\ORM\EntityManager; -use Espo\Entities\User; - use Espo\Core\{ Htmlizer\HtmlizerFactory as HtmlizerFactory, Htmlizer\Htmlizer, @@ -52,7 +50,7 @@ use LogicException; class AssignmentProcessor { - private $htmlizer; + private ?Htmlizer $htmlizer = null; private $entityManager; @@ -106,7 +104,6 @@ class AssignmentProcessor throw new LogicException(); } - /** @var ?User $user */ $user = $this->entityManager->getEntity('User', $userId); if (!$user) { diff --git a/application/Espo/Tools/EmailNotification/AssignmentProcessorData.php b/application/Espo/Tools/EmailNotification/AssignmentProcessorData.php index f1cbd46841..12a2a0e37e 100644 --- a/application/Espo/Tools/EmailNotification/AssignmentProcessorData.php +++ b/application/Espo/Tools/EmailNotification/AssignmentProcessorData.php @@ -31,13 +31,13 @@ namespace Espo\Tools\EmailNotification; class AssignmentProcessorData { - private $userId = null; + private ?string $userId = null; - private $assignerUserId = null; + private ?string $assignerUserId = null; - private $entityId = null; + private ?string $entityId = null; - private $entityType = null; + private ?string $entityType = null; public function getUserId(): ?string { diff --git a/application/Espo/Tools/EmailNotification/Processor.php b/application/Espo/Tools/EmailNotification/Processor.php index f44501765c..b299f99e2d 100644 --- a/application/Espo/Tools/EmailNotification/Processor.php +++ b/application/Espo/Tools/EmailNotification/Processor.php @@ -70,7 +70,17 @@ class Processor private const PROCESS_MAX_COUNT = 200; - private $htmlizer; + private ?Htmlizer $htmlizer = null; + + /** + * @var array + */ + private $emailNotificationEntityHandlerHash = []; + + /** + * @var array + */ + private $userIdPortalCacheMap = []; private $entityManager; @@ -116,10 +126,6 @@ class Processor $this->noteAccessControl = $noteAccessControl; } - private $emailNotificationEntityHandlerHash = []; - - private $userIdPortalCacheMap = []; - public function process(): void { $mentionEmailNotifications = $this->config->get('mentionEmailNotifications'); @@ -457,6 +463,7 @@ class Processor if (!array_key_exists($key, $this->emailNotificationEntityHandlerHash)) { $this->emailNotificationEntityHandlerHash[$key] = null; + /** @var ?class-string */ $className = $this->metadata ->get(['notificationDefs', $entityType, 'emailNotificationHandlerClassNameMap', $type]); diff --git a/application/Espo/Tools/EmailTemplate/Data.php b/application/Espo/Tools/EmailTemplate/Data.php index 585e1b9f17..5748f229b2 100644 --- a/application/Espo/Tools/EmailTemplate/Data.php +++ b/application/Espo/Tools/EmailTemplate/Data.php @@ -35,21 +35,24 @@ use Espo\Entities\User; class Data { + /** + * @var array + */ private $entityHash = []; - private $emailAddress = null; + private ?string $emailAddress = null; - private $parent = null; + private ?Entity $parent = null; - private $parentId = null; + private ?string $parentId = null; - private $parentType = null; + private ?string $parentType = null; - private $relatedId = null; + private ?string $relatedId = null; - private $relatedType = null; + private ?string $relatedType = null; - private $user = null; + private ?User $user = null; /** * @return array $entityHash diff --git a/application/Espo/Tools/EmailTemplate/Params.php b/application/Espo/Tools/EmailTemplate/Params.php index 137e6b061c..dba59e7f09 100644 --- a/application/Espo/Tools/EmailTemplate/Params.php +++ b/application/Espo/Tools/EmailTemplate/Params.php @@ -31,9 +31,9 @@ namespace Espo\Tools\EmailTemplate; class Params { - private $applyAcl = false; + private bool $applyAcl = false; - private $copyAttachments = false; + private bool $copyAttachments = false; public function applyAcl(): bool { diff --git a/application/Espo/Tools/EntityManager/EntityManager.php b/application/Espo/Tools/EntityManager/EntityManager.php index e116dc7419..5d92b3f28e 100644 --- a/application/Espo/Tools/EntityManager/EntityManager.php +++ b/application/Espo/Tools/EntityManager/EntityManager.php @@ -87,6 +87,9 @@ class EntityManager private const MAX_LINK_NAME = 100; + /** + * @var string[] + */ private $reservedWordList = [ '__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', @@ -98,6 +101,9 @@ class EntityManager 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor', 'common', 'fn', 'parent', ]; + /** + * @var string[] + */ private $linkForbiddenNameList = [ 'posts', 'stream', @@ -109,6 +115,9 @@ class EntityManager 'true', ]; + /** + * @var string[] + */ private $forbiddenEntityTypeNameList = [ 'Common', 'PortalUser', @@ -210,6 +219,13 @@ class EntityManager return false; } + /** + * @param array $params + * @param array $replaceData + * @throws BadRequest + * @throws Error + * @throws Conflict + */ public function create(string $name, string $type, array $params = [], array $replaceData = []): void { $name = ucfirst($name); @@ -525,6 +541,26 @@ class EntityManager $this->metadata->set('recordDefs', $name, $data); } + /** + * @param array{ + * stream?: bool, + * disabled?: bool, + * statusField?: ?string, + * labelSingular?: ?string, + * labelPlural?: ?string, + * sortBy?: ?string, + * sortDirection?: ?string, + * textFilterFields?: ?string[], + * fullTextSearch?: bool, + * countDisabled?: bool, + * optimisticConcurrencyControl?: bool, + * kanbanStatusIgnoreList?: ?string[], + * kanbanViewMode?: bool, + * color?: ?string, + * iconClass?: ?string, + * } $data + * @throws Error + */ public function update(string $name, array $data): void { if (!$this->metadata->get('scopes.' . $name)) { @@ -689,6 +725,13 @@ class EntityManager } } + /** + * @param array{ + * forceRemove?: bool + * } $params + * @throws Forbidden + * @throws Error + */ public function delete(string $name, array $params = []): void { if (!$this->isCustom($name)) { @@ -812,6 +855,25 @@ class EntityManager return (bool) $this->metadata->get('scopes.' . $name . '.isCustom'); } + /** + * @param array{ + * linkType: string, + * entity: string, + * link: string, + * entityForeign: string, + * linkForeign: string, + * label: string, + * labelForeign: string, + * relationName?: ?string, + * linkMultipleField?: bool, + * linkMultipleFieldForeign?: bool, + * audited?: bool, + * auditedForeign?: bool, + * } $params + * @throws BadRequest + * @throws Error + * @throws Conflict + */ public function createLink(array $params): void { $linkType = $params['linkType']; @@ -1285,6 +1347,23 @@ class EntityManager $this->dataManager->rebuild(); } + /** + * @param array{ + * entity: string, + * link: string, + * entityForeign?: ?string, + * linkForeign?: ?string, + * label?: string, + * labelForeign?: string, + * linkMultipleField?: bool, + * linkMultipleFieldForeign?: bool, + * audited?: bool, + * auditedForeign?: bool, + * parentEntityTypeList?: string[], + * foreignLinkEntityTypeList?: string[], + * } $params + * @throws BadRequest + */ public function updateLink(array $params): void { $entity = $params['entity']; @@ -1476,6 +1555,14 @@ class EntityManager $this->dataManager->clearCache(); } + /** + * @param array{ + * entity?: string, + * link?: string, + * } $params + * @throws Error + * @throws BadRequest + */ public function deleteLink(array $params): void { $entity = $params['entity']; @@ -1581,6 +1668,9 @@ class EntityManager $this->dataManager->clearCache(); } + /** + * @param array $data + */ public function setFormulaData(string $scope, array $data): void { $this->metadata->set('formula', $scope, $data); @@ -1590,6 +1680,9 @@ class EntityManager $this->dataManager->clearCache(); } + /** + * @param ?array $params + */ protected function processHook(string $methodName, string $type, string $name, &$params = null): void { $hook = $this->getHook($type); @@ -1670,6 +1763,9 @@ class EntityManager $this->dataManager->clearCache(); } + /** + * @param string[] $foreignLinkEntityTypeList + */ protected function updateParentForeignLinks( string $entityType, string $link, diff --git a/application/Espo/Tools/EntityManager/Hooks/BasePlusType.php b/application/Espo/Tools/EntityManager/Hooks/BasePlusType.php index b282d0923f..b4a25d8199 100644 --- a/application/Espo/Tools/EntityManager/Hooks/BasePlusType.php +++ b/application/Espo/Tools/EntityManager/Hooks/BasePlusType.php @@ -36,7 +36,10 @@ class BasePlusType implements Di\ConfigAware, Di\MetadataAware use Di\ConfigSetter; use Di\MetadataSetter; - public function afterCreate($name, $params) + /** + * @param array $params + */ + public function afterCreate(string $name, $params): void { $activitiesEntityTypeList = $this->config->get('activitiesEntityList', []); $historyEntityTypeList = $this->config->get('historyEntityList', []); @@ -66,7 +69,7 @@ class BasePlusType implements Di\ConfigAware, Di\MetadataAware $this->metadata->save(); } - public function afterRemove($name) + public function afterRemove(string $name): void { $activitiesEntityTypeList = $this->config->get('activitiesEntityList', []); $historyEntityTypeList = $this->config->get('historyEntityList', []); diff --git a/application/Espo/Tools/EntityManager/Link/HookProcessor.php b/application/Espo/Tools/EntityManager/Link/HookProcessor.php index cb7960dd23..cfafcca1e3 100644 --- a/application/Espo/Tools/EntityManager/Link/HookProcessor.php +++ b/application/Espo/Tools/EntityManager/Link/HookProcessor.php @@ -63,6 +63,7 @@ class HookProcessor */ private function getCreateHookList(): array { + /** @var class-string[] */ $classNameList = $this->metadata->get(['app', 'linkManager', 'createHookClassNameList']) ?? []; $list = []; @@ -79,6 +80,7 @@ class HookProcessor */ private function getDeleteHookList(): array { + /** @var class-string[] */ $classNameList = $this->metadata->get(['app', 'linkManager', 'deleteHookClassNameList']) ?? []; $list = [];