mirror of
https://github.com/standardebooks/web.git
synced 2025-07-13 10:02:02 -04:00
Library::FilterArtwork(): Move sort logic to SQL, condense status condition (#321)
Move artwork sort logic to SQL
This commit is contained in:
parent
4d5e0c59b0
commit
67fcdedd08
1 changed files with 35 additions and 83 deletions
118
lib/Library.php
118
lib/Library.php
|
@ -170,58 +170,57 @@ class Library{
|
||||||
// "unverified-submitter": Show unverified artwork from the submitter
|
// "unverified-submitter": Show unverified artwork from the submitter
|
||||||
// "in-use": Show only in-use artwork
|
// "in-use": Show only in-use artwork
|
||||||
|
|
||||||
$artworks = [];
|
$statusCondition = '';
|
||||||
|
$params = [];
|
||||||
|
|
||||||
if($status === null || $status == 'all'){
|
if($status === null || $status == 'all'){
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'Status = ?';
|
||||||
SELECT *
|
$params[] = ArtworkStatus::Approved->value;
|
||||||
from Artworks
|
|
||||||
where Status in (?)', [ArtworkStatus::Approved->value], 'Artwork');
|
|
||||||
}
|
}
|
||||||
elseif($status == 'all-admin'){
|
elseif($status == 'all-admin'){
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'true';
|
||||||
SELECT *
|
|
||||||
from Artworks', [], 'Artwork');
|
|
||||||
}
|
|
||||||
elseif($status == 'in-use'){
|
|
||||||
$artworks = Db::Query('
|
|
||||||
SELECT *
|
|
||||||
from Artworks
|
|
||||||
where EbookWwwFilesystemPath is not null
|
|
||||||
', [], 'Artwork');
|
|
||||||
}
|
}
|
||||||
elseif($status == 'all-submitter' && $submitterUserId !== null){
|
elseif($status == 'all-submitter' && $submitterUserId !== null){
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'Status = ? or (Status = ? and SubmitterUserId = ?)';
|
||||||
SELECT *
|
$params[] = ArtworkStatus::Approved->value;
|
||||||
from Artworks
|
$params[] = ArtworkStatus::Unverified->value;
|
||||||
where Status = ?
|
$params[] = $submitterUserId;
|
||||||
or (Status = ? and SubmitterUserId = ?)', [ArtworkStatus::Approved->value, ArtworkStatus::Unverified->value, $submitterUserId], 'Artwork');
|
|
||||||
}
|
}
|
||||||
elseif($status == 'unverified-submitter' && $submitterUserId !== null){
|
elseif($status == 'unverified-submitter' && $submitterUserId !== null){
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'Status = ? and SubmitterUserId = ?';
|
||||||
SELECT *
|
$params[] = ArtworkStatus::Unverified->value;
|
||||||
from Artworks
|
$params[] = $submitterUserId;
|
||||||
where Status = ? and SubmitterUserId = ?', [ArtworkStatus::Unverified->value, $submitterUserId], 'Artwork');
|
}
|
||||||
|
elseif($status == 'in-use'){
|
||||||
|
$statusCondition = 'Status = ? and EbookWwwFilesystemPath is not null';
|
||||||
|
$params[] = ArtworkStatus::Approved->value;
|
||||||
}
|
}
|
||||||
elseif($status == ArtworkStatus::Approved->value){
|
elseif($status == ArtworkStatus::Approved->value){
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'Status = ? and EbookWwwFilesystemPath is null';
|
||||||
SELECT *
|
$params[] = ArtworkStatus::Approved->value;
|
||||||
from Artworks
|
|
||||||
where Status = ? and EbookWwwFilesystemPath is null', [ArtworkStatus::Approved->value], 'Artwork');
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$artworks = Db::Query('
|
$statusCondition = 'Status = ?';
|
||||||
SELECT *
|
$params[] = $status;
|
||||||
from Artworks
|
|
||||||
where Status = ?', [$status], 'Artwork');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$orderBy = 'art.Created desc';
|
||||||
|
if($sort == SORT_COVER_ARTIST_ALPHA){
|
||||||
|
$orderBy = 'a.Name';
|
||||||
|
}
|
||||||
|
elseif($sort == SORT_COVER_ARTWORK_COMPLETED_NEWEST){
|
||||||
|
$orderBy = 'art.CompletedYear desc';
|
||||||
|
}
|
||||||
|
|
||||||
|
$artworks = Db::Query('
|
||||||
|
SELECT art.*
|
||||||
|
from Artworks art
|
||||||
|
inner join Artists a using (ArtistId)
|
||||||
|
where ' . $statusCondition .
|
||||||
|
' order by ' . $orderBy, $params, 'Artwork');
|
||||||
|
|
||||||
$matches = $artworks;
|
$matches = $artworks;
|
||||||
|
|
||||||
if($sort === null){
|
|
||||||
$sort = SORT_COVER_ARTWORK_CREATED_NEWEST;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($query !== null){
|
if($query !== null){
|
||||||
$filteredMatches = [];
|
$filteredMatches = [];
|
||||||
|
|
||||||
|
@ -234,53 +233,6 @@ class Library{
|
||||||
$matches = $filteredMatches;
|
$matches = $filteredMatches;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch($sort){
|
|
||||||
case SORT_COVER_ARTIST_ALPHA:
|
|
||||||
$collator = Collator::create('en_US'); // Used for sorting letters with diacritics like in artist names
|
|
||||||
if($collator === null){
|
|
||||||
usort($matches, function($a, $b){
|
|
||||||
return strcmp(mb_strtolower($a->Artist->Name), mb_strtolower($b->Artist->Name));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
usort($matches, function($a, $b) use($collator){
|
|
||||||
return $collator->compare($a->Artist->Name, $b->Artist->Name);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_COVER_ARTWORK_CREATED_NEWEST:
|
|
||||||
usort($matches, function($a, $b){
|
|
||||||
if($a->Created > $b->Created){
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
elseif($a->Created == $b->Created){
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_COVER_ARTWORK_COMPLETED_NEWEST:
|
|
||||||
usort($matches, function($a, $b){
|
|
||||||
if($a->CompletedYear > $b->CompletedYear){
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
elseif($a->CompletedYear == $b->CompletedYear){
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue