diff --git a/application/Espo/Tools/Pdf/Builder.php b/application/Espo/Tools/Pdf/Builder.php index 736123e4fc..3d9c73d854 100644 --- a/application/Espo/Tools/Pdf/Builder.php +++ b/application/Espo/Tools/Pdf/Builder.php @@ -36,11 +36,11 @@ use Espo\Core\{ class Builder { - private $template; + private ?Template $template = null; - private $engine; + private ?string $engine = null; - private $injectableFactory; + private InjectableFactory $injectableFactory; public function __construct(InjectableFactory $injectableFactory) { diff --git a/application/Espo/Tools/Pdf/CollectionPrinter.php b/application/Espo/Tools/Pdf/CollectionPrinter.php index 59f9e5c5ab..4d7786ec61 100644 --- a/application/Espo/Tools/Pdf/CollectionPrinter.php +++ b/application/Espo/Tools/Pdf/CollectionPrinter.php @@ -33,5 +33,8 @@ use Espo\ORM\Collection; interface CollectionPrinter { + /** + * @param Collection<\Espo\ORM\Entity> $collection + */ public function print(Template $template, Collection $collection, Params $params, IdDataMap $idDataMap): Contents; } diff --git a/application/Espo/Tools/Pdf/Data.php b/application/Espo/Tools/Pdf/Data.php index 177c5a52a2..95c46f5cdf 100644 --- a/application/Espo/Tools/Pdf/Data.php +++ b/application/Espo/Tools/Pdf/Data.php @@ -33,6 +33,9 @@ use stdClass; class Data { + /** + * @var array + */ private $additionalTemplateData = []; public function getAdditionalTemplateData(): stdClass diff --git a/application/Espo/Tools/Pdf/Data/DataLoaderManager.php b/application/Espo/Tools/Pdf/Data/DataLoaderManager.php index 8acfd6aeff..291cb29d02 100644 --- a/application/Espo/Tools/Pdf/Data/DataLoaderManager.php +++ b/application/Espo/Tools/Pdf/Data/DataLoaderManager.php @@ -39,9 +39,9 @@ use Espo\Tools\Pdf\Params; class DataLoaderManager { - private $metadata; + private Metadata $metadata; - private $injectableFactory; + private InjectableFactory $injectableFactory; public function __construct(Metadata $metadata, InjectableFactory $injectableFactory) { @@ -59,6 +59,7 @@ class DataLoaderManager $data = Data::create(); } + /** @var class-string[] */ $classNameList = $this->metadata->get(['pdfDefs', $entity->getEntityType(), 'dataLoaderClassNameList']) ?? []; foreach ($classNameList as $className) { @@ -72,6 +73,9 @@ class DataLoaderManager return $data; } + /** + * @param class-string $className + */ private function createLoader(string $className): DataLoader { return $this->injectableFactory->create($className); diff --git a/application/Espo/Tools/Pdf/IdDataMap.php b/application/Espo/Tools/Pdf/IdDataMap.php index 7f0ce0f724..c6a6f0f2c3 100644 --- a/application/Espo/Tools/Pdf/IdDataMap.php +++ b/application/Espo/Tools/Pdf/IdDataMap.php @@ -31,6 +31,9 @@ namespace Espo\Tools\Pdf; class IdDataMap { + /** + * @var array + */ private $map = []; public function set(string $id, Data $data): void diff --git a/application/Espo/Tools/Pdf/Params.php b/application/Espo/Tools/Pdf/Params.php index 36162e2669..98b56606b7 100644 --- a/application/Espo/Tools/Pdf/Params.php +++ b/application/Espo/Tools/Pdf/Params.php @@ -31,7 +31,7 @@ namespace Espo\Tools\Pdf; class Params { - private $applyAcl = false; + private bool $applyAcl = false; public function applyAcl(): bool { diff --git a/application/Espo/Tools/Pdf/PrinterController.php b/application/Espo/Tools/Pdf/PrinterController.php index 1a0ac2a59a..1a9b3ad1ba 100644 --- a/application/Espo/Tools/Pdf/PrinterController.php +++ b/application/Espo/Tools/Pdf/PrinterController.php @@ -42,13 +42,13 @@ use Espo\{ class PrinterController { - private $template; + private Metadata $metadata; - private $metadata; + private InjectableFactory $injectableFactory; - private $injectableFactory; + private Template $template; - private $engine; + private string $engine; public function __construct( Metadata $metadata, @@ -71,6 +71,9 @@ class PrinterController return $this->createPrinter('entity')->print($this->template, $entity, $params, $data); } + /** + * @param Collection $collection + */ public function printCollection(Collection $collection, ?Params $params, ?IdDataMap $IdDataMap = null): Contents { $params = $params ?? new Params(); @@ -81,6 +84,7 @@ class PrinterController private function createPrinter(string $type): object { + /** @var ?class-string */ $className = $this->metadata ->get(['app', 'pdfEngines', $this->engine, 'implementationClassNameMap', $type]) ?? null; diff --git a/application/Espo/Tools/Pdf/Tcpdf/EntityProcessor.php b/application/Espo/Tools/Pdf/Tcpdf/EntityProcessor.php index 0e53db3849..da80b9f880 100644 --- a/application/Espo/Tools/Pdf/Tcpdf/EntityProcessor.php +++ b/application/Espo/Tools/Pdf/Tcpdf/EntityProcessor.php @@ -42,13 +42,13 @@ use Espo\Tools\Pdf\Tcpdf\Tcpdf; class EntityProcessor { - private $fontFace = 'freesans'; + private string $fontFace = 'freesans'; - private $fontSize = 12; + private int $fontSize = 12; - private $config; + private Config $config; - private $templateRendererFactory; + private TemplateRendererFactory $templateRendererFactory; public function __construct(Config $config, TemplateRendererFactory $templateRendererFactory) { @@ -152,6 +152,11 @@ class EntityProcessor ); } + /** + * + * @param array $data + * @return string + */ private function composeBarcodeTag(array $data): string { $value = $data['value'] ?? null; diff --git a/application/Espo/Tools/Pdf/Tcpdf/Tcpdf.php b/application/Espo/Tools/Pdf/Tcpdf/Tcpdf.php index 238242a430..0ab077805c 100644 --- a/application/Espo/Tools/Pdf/Tcpdf/Tcpdf.php +++ b/application/Espo/Tools/Pdf/Tcpdf/Tcpdf.php @@ -37,51 +37,89 @@ use TCPDF_STATIC; class Tcpdf extends TcpdfOriginal { + /** + * @var string + */ protected $footerHtml = ''; + /** + * @var string + */ protected $headerHtml = ''; + /** + * @var float|int + */ protected $footerPosition = 15; + /** + * @var float|int + */ protected $headerPosition = 10; + /** + * @var bool + */ protected $useGroupNumbers = false; - public function serializeTCPDFtagParameters($data) + public function serializeTCPDFtagParameters($data) /** @phpstan-ignore-line */ { return urlencode(json_encode($data)); } - protected function unserializeTCPDFtagParameters($data) + protected function unserializeTCPDFtagParameters($data) /** @phpstan-ignore-line */ { return json_decode(urldecode($data), true); } + /** + * @param bool $value + * @return void + */ public function setUseGroupNumbers($value) { $this->useGroupNumbers = $value; } + /** + * @param string $html + * @return void + */ public function setHeaderHtml($html) { $this->headerHtml = $html; } + /** + * @param string $html + * @return void + */ public function setFooterHtml($html) { $this->footerHtml = $html; } + /** + * @param float $position + * @return void + */ public function setFooterPosition($position) { $this->footerPosition = $position; } + /** + * @param float $position + * @return void + */ public function setHeaderPosition($position) { $this->headerPosition = $position; } + /** + * @return void + */ public function Header() { $this->SetY($this->headerPosition); @@ -106,6 +144,9 @@ class Tcpdf extends TcpdfOriginal $this->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, '', 0, false); } + /** + * @return void + */ public function Footer() { $breakMargin = $this->getBreakMargin(); @@ -137,6 +178,11 @@ class Tcpdf extends TcpdfOriginal $this->SetAutoPageBreak($autoPageBreak, $breakMargin); } + /** + * @param string $name + * @param string $dest + * @return string + */ public function Output($name = 'doc.pdf', $dest = 'I') { if ($dest === 'I' && !$this->sign && php_sapi_name() != 'cli') { diff --git a/application/Espo/Tools/Pdf/Tcpdf/TcpdfCollectionPrinter.php b/application/Espo/Tools/Pdf/Tcpdf/TcpdfCollectionPrinter.php index 789bedb492..cf591493ab 100644 --- a/application/Espo/Tools/Pdf/Tcpdf/TcpdfCollectionPrinter.php +++ b/application/Espo/Tools/Pdf/Tcpdf/TcpdfCollectionPrinter.php @@ -40,17 +40,18 @@ use Espo\Tools\Pdf\Tcpdf\Tcpdf; class TcpdfCollectionPrinter implements CollectionPrinter { - private $entityProcessor; + private EntityProcessor $entityProcessor; public function __construct(EntityProcessor $entityProcessor) { $this->entityProcessor = $entityProcessor; } + /** + * @param Collection<\Espo\ORM\Entity> $collection + */ public function print(Template $template, Collection $collection, Params $params, IdDataMap $dataMap): Contents { - /** @var iterable<\Espo\ORM\Entity> $collection */ - $pdf = new Tcpdf(); $pdf->setUseGroupNumbers(true); diff --git a/application/Espo/Tools/Pdf/TemplateWrapper.php b/application/Espo/Tools/Pdf/TemplateWrapper.php index fa11eed71d..c905adc56f 100644 --- a/application/Espo/Tools/Pdf/TemplateWrapper.php +++ b/application/Espo/Tools/Pdf/TemplateWrapper.php @@ -33,7 +33,7 @@ use Espo\Entities\Template as TemplateEntity; class TemplateWrapper implements Template { - protected $template; + protected TemplateEntity $template; public function __construct(TemplateEntity $template) { diff --git a/application/Espo/Tools/Stream/HookProcessor.php b/application/Espo/Tools/Stream/HookProcessor.php index f36ac18757..f688f1f80f 100644 --- a/application/Espo/Tools/Stream/HookProcessor.php +++ b/application/Espo/Tools/Stream/HookProcessor.php @@ -53,23 +53,32 @@ use Espo\Core\ORM\Entity as CoreEntity; */ class HookProcessor { + /** + * @var array + */ private $hasStreamCache = []; + /** + * @var array + */ private $isLinkObservableInStreamCache = []; + /** + * @var ?array + */ private $statusFields = null; - private $metadata; + private Metadata $metadata; - private $entityManager; + private EntityManager $entityManager; - private $service; + private Service $service; - private $user; + private User $user; - private $preferences; + private Preferences $preferences; - private $jobSchedulerFactory; + private JobSchedulerFactory $jobSchedulerFactory; public function __construct( Metadata $metadata, @@ -87,6 +96,9 @@ class HookProcessor $this->jobSchedulerFactory = $jobSchedulerFactory; } + /** + * @param array $options + */ public function afterSave(Entity $entity, array $options): void { if ($this->checkHasStream($entity->getEntityType())) { @@ -148,6 +160,9 @@ class HookProcessor return $this->isLinkObservableInStreamCache[$key]; } + /** + * @param array $options + */ private function handleCreateRelated(Entity $entity, array $options = []): void { $notifiedEntityTypeList = []; @@ -180,6 +195,9 @@ class HookProcessor } } + /** + * @param string[] $notifiedEntityTypeList + */ private function handleCreateRelatedBelongsTo( Entity $entity, RelationDefs $defs, @@ -216,6 +234,10 @@ class HookProcessor $notifiedEntityTypeList[] = $foreignEntityType; } + /** + * @param string[] $notifiedEntityTypeList + * @param array $options + */ private function handleCreateRelatedBelongsToParent( Entity $entity, RelationDefs $defs, @@ -250,6 +272,10 @@ class HookProcessor $notifiedEntityTypeList[] = $foreignEntityType; } + /** + * @param string[] $notifiedEntityTypeList + * @param array $options + */ private function handleCreateRelatedHasMany( Entity $entity, RelationDefs $defs, @@ -294,6 +320,7 @@ class HookProcessor } /** + * @param string[] $ignoreUserIdList * @return string[] */ private function getAutofollowUserIdList(string $entityType, array $ignoreUserIdList = []): array @@ -321,7 +348,9 @@ class HookProcessor return $userIdList; } - + /** + * @param array $options + */ private function afterSaveStream(Entity $entity, array $options): void { if (!$entity instanceof CoreEntity) { @@ -337,6 +366,9 @@ class HookProcessor $this->afterSaveStreamNotNew($entity, $options); } + /** + * @param array $options + */ private function afterSaveStreamNew(CoreEntity $entity, array $options): void { $entityType = $entity->getEntityType(); @@ -401,12 +433,18 @@ class HookProcessor } } + /** + * @param array $options + */ private function afterSaveStreamNotNew(CoreEntity $entity, array $options): void { $this->afterSaveStreamNotNew1($entity, $options); $this->afterSaveStreamNotNew2($entity); } + /** + * @param array $options + */ private function afterSaveStreamNotNew1(CoreEntity $entity, array $options): void { if (!empty($options['noStream']) || !empty($options['silent'])) { @@ -449,6 +487,9 @@ class HookProcessor } } + /** + * @param array $options + */ private function afterSaveStreamNotNewAssignedUserIdChanged(Entity $entity, array $options): void { $assignedUserId = $entity->get('assignedUserId'); @@ -501,6 +542,9 @@ class HookProcessor return $this->getStatusFields()[$entityType] ?? null; } + /** + * @return array + */ private function getStatusFields(): array { if (is_null($this->statusFields)) { @@ -520,6 +564,9 @@ class HookProcessor return $this->statusFields; } + /** + * @param array $options + */ public function afterRelate(Entity $entity, Entity $foreignEntity, string $link, array $options): void { if (!$entity instanceof CoreEntity) { @@ -550,6 +597,9 @@ class HookProcessor } } + /** + * @param array $options + */ public function afterUnrelate(Entity $entity, Entity $foreignEntity, string $link, array $options): void { if (!$entity instanceof CoreEntity) {