Change indexable properties to private class properties instead of public getters/setters

This commit is contained in:
Alex Cabal 2025-02-13 22:52:12 -06:00
parent d05f0ea3c7
commit 388dbab1f1

View file

@ -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<Project> $Projects
* @property array<Project> $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<Project> $_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`.
*