Add endpoint to get collections for an ebook or placeholder

This commit is contained in:
Alex Cabal 2025-01-15 14:32:50 -06:00
parent ed5540c177
commit bdeebc8291
3 changed files with 32 additions and 1 deletions

View file

@ -10,6 +10,9 @@ RewriteRule ^/images/covers/(.+?)\-[a-z0-9]{8}\-(cover|hero)(@2x)?\.(jpg|avif)$
# Rewrite ebook downloads. # Rewrite ebook downloads.
RewriteRule ^/ebooks/(.+?)/download$ /ebooks/download.php?url-path=$1 [QSA] RewriteRule ^/ebooks/(.+?)/download$ /ebooks/download.php?url-path=$1 [QSA]
# Rewrite ebook collections.
RewriteRule ^/ebooks/(.+?)/collections$ /ebooks/collections.php?url-path=$1 [QSA]
# Misc ebook rewrites. # Misc ebook rewrites.
RewriteRule ^/subjects/([^\./]+?)$ /ebooks/index.php?tags[]=$1 [B,QSA] RewriteRule ^/subjects/([^\./]+?)$ /ebooks/index.php?tags[]=$1 [B,QSA]
RewriteRule ^/ebooks/([^\./]+?)$ /authors/get.php?url-path=$1 [B,QSA] RewriteRule ^/ebooks/([^\./]+?)$ /authors/get.php?url-path=$1 [B,QSA]

View file

@ -1,5 +1,4 @@
<? <?
use function Safe\preg_replace;
use function Safe\session_unset; use function Safe\session_unset;
session_start(); session_start();

View file

@ -0,0 +1,29 @@
<?
$identifier = EBOOKS_IDENTIFIER_PREFIX . trim(str_replace('.', '', HttpInput::Str(GET, 'url-path') ?? ''), '/'); // Contains the portion of the URL (without query string) that comes after `https://standardebooks.org/ebooks/`.
$ebook = null;
try{
$ebook = Ebook::GetByIdentifier($identifier);
}
catch(Exceptions\EbookNotFoundException){
Template::ExitWithCode(Enums\HttpCode::NotFound);
}
header('content-type: application/xml; charset=utf-8');
print('<?xml version="1.0" encoding="utf-8"?>');
print("\n");
?>
<collections>
<? foreach($ebook->CollectionMemberships as $collectionMembership){ ?>
<collection>
<meta id="collection-<?= $collectionMembership->SortOrder + 1 ?>" property="belongs-to-collection"><?= Formatter::EscapeXml($collectionMembership->Collection->Name) ?></meta>
<? if($collectionMembership->Collection->Type !== null){ ?>
<meta property="collection-type" refines="#collection-<?= $collectionMembership->SortOrder + 1 ?>"><?= $collectionMembership->Collection->Type->value ?></meta>
<? } ?>
<? if($collectionMembership->SequenceNumber !== null){ ?>
<meta property="group-position" refines="#collection-<?= $collectionMembership->SortOrder + 1 ?>"><?= $collectionMembership->SequenceNumber ?></meta>
<? } ?>
</collection>
<? } ?>
</collections>