prepare("
SELECT name, slug, country, avatar_url
FROM ac_artists
WHERE is_active = 1
ORDER BY created_at DESC, id DESC
LIMIT :limit
");
$stmt->bindValue(':limit', $limit, \PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC) ?: [];
} catch (\Throwable $e) {
return '';
}
if (!$rows) {
return '
No artists available yet.
';
}
$cards = '';
foreach ($rows as $row) {
$name = htmlspecialchars((string)($row['name'] ?? ''), ENT_QUOTES, 'UTF-8');
$slug = rawurlencode((string)($row['slug'] ?? ''));
$country = htmlspecialchars(trim((string)($row['country'] ?? '')), ENT_QUOTES, 'UTF-8');
$avatar = trim((string)($row['avatar_url'] ?? ''));
$avatarHtml = $avatar !== ''
? '
'
: 'AC
';
$cards .= ''
. '' . $avatarHtml . '
'
. ''
. '';
}
return '';
});
return function (Router $router): void {
$controller = new ArtistsController();
$router->get('/artists', [$controller, 'index']);
$router->get('/artist', [$controller, 'show']);
$router->get('/admin/artists', [$controller, 'adminIndex']);
$router->post('/admin/artists/install', [$controller, 'adminInstall']);
$router->get('/admin/artists/new', [$controller, 'adminNew']);
$router->get('/admin/artists/edit', function () use ($controller): Core\Http\Response {
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
return $controller->adminEdit($id);
});
$router->post('/admin/artists/upload', [$controller, 'adminUpload']);
$router->post('/admin/artists/save', [$controller, 'adminSave']);
$router->post('/admin/artists/delete', [$controller, 'adminDelete']);
};