From 388dbab1f1c1eb7af54cfee813fdf938ed118110 Mon Sep 17 00:00:00 2001 From: Alex Cabal Date: Thu, 13 Feb 2025 22:52:12 -0600 Subject: [PATCH] Change indexable properties to private class properties instead of public getters/setters --- lib/Ebook.php | 139 +++++++++++++++++++++----------------------------- 1 file changed, 58 insertions(+), 81 deletions(-) diff --git a/lib/Ebook.php b/lib/Ebook.php index 328b2727..192c34d5 100644 --- a/lib/Ebook.php +++ b/lib/Ebook.php @@ -43,9 +43,6 @@ use function Safe\shell_exec; * @property string $TextUrl * @property string $TextSinglePageUrl * @property string $TextSinglePageSizeFormatted - * @property ?string $IndexableText - * @property string $IndexableAuthors - * @property ?string $IndexableCollections * @property ?EbookPlaceholder $EbookPlaceholder * @property array $Projects * @property array $PastProjects @@ -129,9 +126,6 @@ final class Ebook{ protected string $_TextUrl; protected string $_TextSinglePageUrl; protected string $_TextSinglePageSizeFormatted; - protected ?string $_IndexableText = null; - protected string $_IndexableAuthors; - protected ?string $_IndexableCollections = null; protected ?EbookPlaceholder $_EbookPlaceholder = null; /** @var array $_Projects */ protected array $_Projects; @@ -140,6 +134,10 @@ final class Ebook{ protected ?Project $_ProjectInProgress; protected ?Artwork $_Artwork; + private ?string $IndexableText = null; + private string $IndexableAuthors; + private ?string $IndexableCollections = null; + // ******* // GETTERS // ******* @@ -708,64 +706,6 @@ final class Ebook{ return $this->_TextSinglePageSizeFormatted; } - protected function GetIndexableText(): ?string{ - if(!isset($this->_IndexableText)){ - $this->_IndexableText = $this->FullTitle ?? ''; - - $this->_IndexableText .= ' ' . $this->AlternateTitle; - - foreach($this->Tags as $tag){ - $this->_IndexableText .= ' ' . $tag->Name; - } - - foreach($this->LocSubjects as $subject){ - $this->_IndexableText .= ' ' . $subject->Name; - } - - if($this->TocEntries !== null){ - foreach($this->TocEntries as $item){ - $this->_IndexableText .= ' ' . $item; - } - } - - $this->_IndexableText = Formatter::RemoveDiacriticsAndNonalphanumerics($this->_IndexableText); - - if($this->_IndexableText == ''){ - $this->_IndexableText = null; - } - } - - return $this->_IndexableText; - } - - protected function GetIndexableAuthors(): string{ - if(!isset($this->_IndexableAuthors)){ - $this->_IndexableAuthors = ''; - - foreach($this->Authors as $author){ - $this->_IndexableAuthors .= ' ' . $author->Name; - } - - $this->_IndexableAuthors = Formatter::RemoveDiacriticsAndNonalphanumerics($this->_IndexableAuthors); - } - - return $this->_IndexableAuthors; - } - - protected function GetIndexableCollections(): ?string{ - if(!isset($this->_IndexableCollections)){ - foreach($this->CollectionMemberships as $collectionMembership){ - $this->_IndexableCollections .= ' ' . $collectionMembership->Collection->Name; - } - - if(isset($this->_IndexableCollections)){ - $this->_IndexableCollections = Formatter::RemoveDiacriticsAndNonalphanumerics($this->_IndexableCollections); - } - } - - return $this->_IndexableCollections; - } - protected function GetEbookPlaceholder(): ?EbookPlaceholder{ if(!isset($this->_EbookPlaceholder)){ if(!isset($this->EbookId)){ @@ -1577,27 +1517,12 @@ final class Ebook{ } } - $this->IndexableText = trim($this->IndexableText ?? ''); - if($this->IndexableText == ''){ - $this->IndexableText = null; - } + $this->InitializeIndexableProperties(); - if(isset($this->IndexableAuthors)){ - $this->IndexableAuthors = trim($this->IndexableAuthors); - - if($this->IndexableAuthors == ''){ - $error->Add(new Exceptions\EbookIndexableAuthorsRequiredException()); - } - } - else{ + if($this->IndexableAuthors == ''){ $error->Add(new Exceptions\EbookIndexableAuthorsRequiredException()); } - $this->IndexableCollections = trim($this->IndexableCollections ?? ''); - if($this->IndexableCollections == ''){ - $this->IndexableCollections = null; - } - if(isset($this->EbookPlaceholder)){ try{ $this->EbookPlaceholder->Validate(); @@ -1884,6 +1809,58 @@ final class Ebook{ return $this->WwwFilesystemPath === null; } + /** + * Initialize the various indexable properties that are used to search against. + */ + protected function InitializeIndexableProperties(): void{ + // Initialize `IndexableText`. + $this->IndexableText = $this->FullTitle ?? ''; + + $this->IndexableText .= ' ' . $this->AlternateTitle; + + foreach($this->Tags as $tag){ + $this->IndexableText .= ' ' . $tag->Name; + } + + foreach($this->LocSubjects as $subject){ + $this->IndexableText .= ' ' . $subject->Name; + } + + if($this->TocEntries !== null){ + foreach($this->TocEntries as $item){ + $this->IndexableText .= ' ' . $item; + } + } + + $this->IndexableText = Formatter::RemoveDiacriticsAndNonalphanumerics($this->IndexableText); + + if($this->IndexableText == ''){ + $this->IndexableText = null; + } + + // Initialize `IndexableAuthors`. + $this->IndexableAuthors = ''; + + foreach($this->Authors as $author){ + $this->IndexableAuthors .= ' ' . $author->Name; + } + + $this->IndexableAuthors = Formatter::RemoveDiacriticsAndNonalphanumerics($this->IndexableAuthors); + + // Initialize `IndexableCollections`. + $this->IndexableCollections = ''; + + foreach($this->CollectionMemberships as $collectionMembership){ + $this->IndexableCollections .= ' ' . $collectionMembership->Collection->Name; + } + + $this->IndexableCollections = Formatter::RemoveDiacriticsAndNonalphanumerics($this->IndexableCollections); + + if($this->IndexableCollections == ''){ + $this->IndexableCollections = null; + } + } + /** * If the given list of elements has an element that is not `''`, return that value; otherwise, return `null`. *