diff --git a/lib/Artwork.php b/lib/Artwork.php
index 68eea602..63bbc9c3 100644
--- a/lib/Artwork.php
+++ b/lib/Artwork.php
@@ -309,6 +309,15 @@ class Artwork extends PropertiesBase{
$error->Add(new Exceptions\InvalidMimeTypeException());
}
+ // Check the ebook www filesystem path.
+ // We don't check if it exists, because the book might not be published yet.
+ // But we do a basic check that the string includes one _. It might not include a dash, for example anonymous_poetry
+ if($this->EbookWwwFilesystemPath !== null){
+ if(mb_stripos($this->EbookWwwFilesystemPath, '_') === false){
+ $error->Add(new Exceptions\InvalidEbookException('Invalid ebook. Expected file system slug like “c-s-lewis_poetry”.'));
+ }
+ }
+
// Check for existing Artwork objects with the same URL but different Artwork IDs.
try{
$existingArtwork = Artwork::GetByUrl($this->Artist->UrlName, $this->UrlName);
diff --git a/lib/Library.php b/lib/Library.php
index f617afa3..a89c0520 100644
--- a/lib/Library.php
+++ b/lib/Library.php
@@ -273,21 +273,27 @@ class Library{
try{
$results = apcu_fetch($variable);
}
- catch(Safe\Exceptions\ApcuException){
- Library::RebuildCache();
+ catch(Safe\Exceptions\ApcuException $ex){
try{
- $results = apcu_fetch($variable);
+ // If we can't fetch this variable, rebuild the whole cache.
+ apcu_fetch('is-cache-fresh');
}
- catch(Safe\Exceptions\ApcuException){
- // We can get here if the cache is currently rebuilding from a different process.
- // Nothing we can do but wait, so wait 20 seconds before retrying
- sleep(20);
-
+ catch(Safe\Exceptions\ApcuException $ex){
+ Library::RebuildCache();
try{
$results = apcu_fetch($variable);
}
catch(Safe\Exceptions\ApcuException){
- // Cache STILL rebuilding... give up silently for now
+ // We can get here if the cache is currently rebuilding from a different process.
+ // Nothing we can do but wait, so wait 20 seconds before retrying
+ sleep(20);
+
+ try{
+ $results = apcu_fetch($variable);
+ }
+ catch(Safe\Exceptions\ApcuException){
+ // Cache STILL rebuilding... give up silently for now
+ }
}
}
}
@@ -686,6 +692,8 @@ class Library{
}
apcu_delete($lockVar);
+
+ apcu_store('is-cache-fresh', true);
}
/**
diff --git a/templates/ArtworkStatus.php b/templates/ArtworkStatus.php
index d2989e46..478c5f88 100644
--- a/templates/ArtworkStatus.php
+++ b/templates/ArtworkStatus.php
@@ -5,5 +5,5 @@ $artwork = $artwork ?? null;
if($artwork->Status === COVER_ARTWORK_STATUS_APPROVED){ ?>Approved } ?>
if($artwork->Status === COVER_ARTWORK_STATUS_DECLINED){ ?>Declined } ?>
if($artwork->Status === COVER_ARTWORK_STATUS_UNVERIFIED){ ?>Unverified } ?>
- if($artwork->Status === COVER_ARTWORK_STATUS_IN_USE){ ?>In use if($artwork->Ebook !== null && $artwork->Ebook->Url !== null){ ?> for = Formatter::ToPlainText($artwork->Ebook->Title) ?> } ?> } ?>
+ if($artwork->Status === COVER_ARTWORK_STATUS_IN_USE){ ?>In use if($artwork->EbookWwwFilesystemPath !== null){ ?> for if($artwork->Ebook !== null && $artwork->Ebook->Url !== null){ ?>= Formatter::ToPlainText($artwork->Ebook->Title) ?> }else{ ?>= Formatter::ToPlainText($artwork->EbookWwwFilesystemPath) ?> } ?> } ?> } ?>
} ?>
diff --git a/www/artworks/new.php b/www/artworks/new.php
index 4903dced..c69576c7 100644
--- a/www/artworks/new.php
+++ b/www/artworks/new.php
@@ -173,6 +173,15 @@ catch(Exceptions\InvalidPermissionsException){
value="= $artwork->PublicationYear ?>"
/>
+
-