mirror of
https://github.com/standardebooks/web.git
synced 2025-07-15 10:56:46 -04:00
Additional Ebook validation
This commit is contained in:
parent
3ef1af1237
commit
032032b920
22 changed files with 262 additions and 2 deletions
137
lib/Ebook.php
137
lib/Ebook.php
|
@ -581,16 +581,87 @@ class Ebook{
|
|||
// *******
|
||||
|
||||
public function Validate(): void{
|
||||
$now = new DateTimeImmutable();
|
||||
$error = new Exceptions\ValidationException();
|
||||
|
||||
if($this->Identifier == ''){
|
||||
$error->Add(new Exceptions\EbookIdentifierRequiredException());
|
||||
}
|
||||
|
||||
if(strlen($this->Identifier) > EBOOKS_MAX_STRING_LENGTH){
|
||||
if(strlen($this->Identifier) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook Identifier'));
|
||||
}
|
||||
|
||||
if(!is_readable($this->WwwFilesystemPath)){
|
||||
$error->Add(new Exceptions\InvalidEbookWwwFilesystemPathException($this->WwwFilesystemPath));
|
||||
}
|
||||
|
||||
if(strlen($this->WwwFilesystemPath) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook WwwFilesystemPath'));
|
||||
}
|
||||
|
||||
if(!is_readable($this->RepoFilesystemPath)){
|
||||
$error->Add(new Exceptions\InvalidEbookRepoFilesystemPathException($this->RepoFilesystemPath));
|
||||
}
|
||||
|
||||
if(strlen($this->RepoFilesystemPath) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook RepoFilesystemPath'));
|
||||
}
|
||||
|
||||
if($this->KindleCoverUrl !== null && !preg_match('|/*_EBOK_portrait.jpg|ius', $this->KindleCoverUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookKindleCoverUrlException('Invalid Ebook KindleCoverUrl: ' . $this->KindleCoverUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->KindleCoverUrl !== null && strlen($this->KindleCoverUrl) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook KindleCoverUrl'));
|
||||
}
|
||||
|
||||
if($this->EpubUrl !== null && !preg_match('|/*.epub|ius', $this->EpubUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookEpubUrlException('Invalid Ebook EpubUrl: ' . $this->EpubUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->EpubUrl !== null && strlen($this->EpubUrl) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook EpubUrl'));
|
||||
}
|
||||
|
||||
if($this->AdvancedEpubUrl !== null && !preg_match('|/*_advanced.epub|ius', $this->AdvancedEpubUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookAdvancedEpubUrlException('Invalid Ebook AdvancedEpubUrl: ' . $this->AdvancedEpubUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->AdvancedEpubUrl !== null && strlen($this->AdvancedEpubUrl) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook AdvancedEpubUrl'));
|
||||
}
|
||||
|
||||
if($this->KepubUrl !== null && !preg_match('|/*.kepub.epub|ius', $this->KepubUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookKepubUrlException('Invalid Ebook KepubUrl: ' . $this->KepubUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->KepubUrl !== null && strlen($this->KepubUrl) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook KepubUrl'));
|
||||
}
|
||||
|
||||
if($this->Azw3Url !== null && !preg_match('|/*.azw3|ius', $this->Azw3Url)){
|
||||
$error->Add(new Exceptions\InvalidEbookAzw3UrlException('Invalid Ebook Azw3Url: ' . $this->Azw3Url));
|
||||
|
||||
}
|
||||
|
||||
if($this->Azw3Url !== null && strlen($this->Azw3Url) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook Azw3Url'));
|
||||
}
|
||||
|
||||
if($this->DistCoverUrl !== null && !preg_match('|/*cover.jpg|ius', $this->DistCoverUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookDistCoverUrlException('Invalid Ebook DistCoverUrl: ' . $this->DistCoverUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->DistCoverUrl !== null && strlen($this->DistCoverUrl) > EBOOKS_MAX_LONG_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook DistCoverUrl'));
|
||||
}
|
||||
|
||||
if($this->Title === null || $this->Title == ''){
|
||||
$error->Add(new Exceptions\EbookTitleRequiredException());
|
||||
}
|
||||
|
@ -599,7 +670,69 @@ class Ebook{
|
|||
$error->Add(new Exceptions\StringTooLongException('Ebook Title'));
|
||||
}
|
||||
|
||||
// TODO: Add more validation.
|
||||
if($this->FullTitle !== null && strlen($this->FullTitle) > EBOOKS_MAX_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook FullTitle'));
|
||||
}
|
||||
|
||||
if($this->AlternateTitle !== null && strlen($this->AlternateTitle) > EBOOKS_MAX_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook AlternateTitle'));
|
||||
}
|
||||
|
||||
if($this->Description === null || $this->Description == ''){
|
||||
$error->Add(new Exceptions\EbookDescriptionRequiredException());
|
||||
}
|
||||
|
||||
if($this->LongDescription === null || $this->LongDescription == ''){
|
||||
$error->Add(new Exceptions\EbookLongDescriptionRequiredException());
|
||||
}
|
||||
|
||||
if($this->Language !== null && strlen($this->Language) > 10){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook Language: ' . $this->Language));
|
||||
}
|
||||
|
||||
if($this->WordCount <= 0){
|
||||
$error->Add(new Exceptions\InvalidEbookWordCountException('Invalid Ebook WordCount: ' . $this->WordCount));
|
||||
}
|
||||
|
||||
// In theory, Flesch reading ease can be negative, but in practice it's positive.
|
||||
if($this->ReadingEase <= 0){
|
||||
$error->Add(new Exceptions\InvalidEbookReadingEaseException('Invalid Ebook ReadingEase: ' . $this->ReadingEase));
|
||||
}
|
||||
|
||||
if($this->GitHubUrl !== null && !preg_match('|https://github.com/standardebooks/\w+|ius', $this->GitHubUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookGitHubUrlException('Invalid Ebook GitHubUrl: ' . $this->GitHubUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->GitHubUrl !== null && strlen($this->GitHubUrl) > EBOOKS_MAX_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook GitHubUrl'));
|
||||
}
|
||||
|
||||
if($this->WikipediaUrl !== null && !preg_match('|https://.*wiki.*|ius', $this->WikipediaUrl)){
|
||||
$error->Add(new Exceptions\InvalidEbookWikipediaUrlException('Invalid Ebook WikipediaUrl: ' . $this->WikipediaUrl));
|
||||
|
||||
}
|
||||
|
||||
if($this->WikipediaUrl !== null && strlen($this->WikipediaUrl) > EBOOKS_MAX_STRING_LENGTH){
|
||||
$error->Add(new Exceptions\StringTooLongException('Ebook WikipediaUrl'));
|
||||
}
|
||||
|
||||
if($this->Created > $now || $this->Created < EBOOK_EARLIEST_CREATION_DATE){
|
||||
$error->Add(new Exceptions\InvalidEbookCreatedDatetimeException($this->Created));
|
||||
}
|
||||
|
||||
if($this->Updated > $now || $this->Updated < EBOOK_EARLIEST_CREATION_DATE){
|
||||
$error->Add(new Exceptions\InvalidEbookUpdatedDatetimeException($this->Updated));
|
||||
|
||||
}
|
||||
|
||||
if($this->TextSinglePageByteCount === null || $this->TextSinglePageByteCount <= 0){
|
||||
$error->Add(new Exceptions\InvalidEbookTextSinglePageByteCountException('Invalid Ebook TextSinglePageByteCount: ' . $this->TextSinglePageByteCount));
|
||||
}
|
||||
|
||||
if($this->IndexableText === null || $this->IndexableText == ''){
|
||||
$error->Add(new Exceptions\EbookIndexableTextRequiredException());
|
||||
}
|
||||
|
||||
if($error->HasExceptions){
|
||||
throw $error;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue