Add status and user filtering to GetArtworksByArtist

This commit is contained in:
Mike Colagrosso 2024-01-23 17:59:35 -07:00 committed by Alex Cabal
parent 770c010025
commit 91ac96d784
2 changed files with 44 additions and 5 deletions

View file

@ -182,7 +182,7 @@ class Library{
$statusCondition = 'true'; $statusCondition = 'true';
} }
elseif($status == 'all-submitter' && $submitterUserId !== null){ elseif($status == 'all-submitter' && $submitterUserId !== null){
$statusCondition = 'Status = ? or (Status = ? and SubmitterUserId = ?)'; $statusCondition = '(Status = ? or (Status = ? and SubmitterUserId = ?))';
$params[] = ArtworkStatus::Approved->value; $params[] = ArtworkStatus::Approved->value;
$params[] = ArtworkStatus::Unverified->value; $params[] = ArtworkStatus::Unverified->value;
$params[] = $submitterUserId; $params[] = $submitterUserId;
@ -250,17 +250,42 @@ class Library{
/** /**
* @return array<Artwork> * @return array<Artwork>
*/ */
public static function GetArtworksByArtist(?string $artistUrlName): array{ public static function GetArtworksByArtist(?string $artistUrlName, ?string $status, ?int $submitterUserId): array{
if($artistUrlName === null){ if($artistUrlName === null){
throw new Exceptions\ArtistNotFoundException(); throw new Exceptions\ArtistNotFoundException();
} }
// $status is only one of three special statuses, which are a subset of FilterArtwork() above:
// null: same as "all"
// "all": Show all approved and in use artwork
// "all-admin": Show all artwork regardless of status
// "all-submitter": Show all approved and in use artwork, plus unverified artwork from the submitter
$statusCondition = '';
$params = [];
if($status == 'all-admin'){
$statusCondition = 'true';
}
elseif($status == 'all-submitter' && $submitterUserId !== null){
$statusCondition = '(Status = ? or (Status = ? and SubmitterUserId = ?))';
$params[] = ArtworkStatus::Approved->value;
$params[] = ArtworkStatus::Unverified->value;
$params[] = $submitterUserId;
}
else{
$statusCondition = 'Status = ?';
$params[] = ArtworkStatus::Approved->value;
}
$params[] = $artistUrlName; // a.UrlName
$artworks = Db::Query(' $artworks = Db::Query('
SELECT art.* SELECT art.*
from Artworks art from Artworks art
inner join Artists a using (ArtistId) inner join Artists a using (ArtistId)
where a.UrlName = ? where ' . $statusCondition . '
order by art.Created desc', [$artistUrlName], 'Artwork'); and a.UrlName = ?
order by art.Created desc', $params, 'Artwork');
return $artworks; return $artworks;
} }

View file

@ -1,6 +1,20 @@
<? <?
$isReviewerView = $GLOBALS['User']?->Benefits?->CanReviewArtwork ?? false;
$submitterUserId = $GLOBALS['User']?->Benefits?->CanUploadArtwork ? $GLOBALS['User']->UserId : null;
$isSubmitterView = !$isReviewerView && $submitterUserId !== null;
$filterArtworkStatus = 'all';
if($isReviewerView){
$filterArtworkStatus = 'all-admin';
}
if($isSubmitterView){
$filterArtworkStatus = 'all-submitter';
}
try{ try{
$artworks = Library::GetArtworksByArtist(HttpInput::Str(GET, 'artist-url-name')); $artworks = Library::GetArtworksByArtist(HttpInput::Str(GET, 'artist-url-name'), $filterArtworkStatus, $submitterUserId);
if(sizeof($artworks) == 0){ if(sizeof($artworks) == 0){
throw new Exceptions\ArtistNotFoundException(); throw new Exceptions\ArtistNotFoundException();