Modify ControllerInvoker and all controllers; other code cleanup.
This commit is contained in:
parent
2ffbcba510
commit
4b0139e3cb
|
@ -13,7 +13,7 @@ return static function (RouteCollectorProxy $app) {
|
|||
function (RouteCollectorProxy $group) {
|
||||
$group->options(
|
||||
'/{routes:.+}',
|
||||
function (ServerRequest $request, Response $response) {
|
||||
function (ServerRequest $request, Response $response, ...$params) {
|
||||
return $response
|
||||
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
|
||||
->withHeader(
|
||||
|
@ -26,7 +26,7 @@ return static function (RouteCollectorProxy $app) {
|
|||
|
||||
$group->get(
|
||||
'',
|
||||
function (ServerRequest $request, Response $response): ResponseInterface {
|
||||
function (ServerRequest $request, Response $response, ...$params): ResponseInterface {
|
||||
return $response->withRedirect('/static/api/index.html');
|
||||
}
|
||||
)->setName('api:index:index');
|
||||
|
|
|
@ -55,10 +55,10 @@ return static function (RouteCollectorProxy $group) {
|
|||
}
|
||||
)->add(new Middleware\Permissions(GlobalPermissions::Backups));
|
||||
|
||||
$group->get('/server/stats', Controller\Api\Admin\ServerStatsController::class)
|
||||
$group->get('/server/stats', Controller\Api\Admin\ServerStatsAction::class)
|
||||
->setName('api:admin:server:stats');
|
||||
|
||||
$group->get('/permissions', Controller\Api\Admin\PermissionsController::class)
|
||||
$group->get('/permissions', Controller\Api\Admin\PermissionsAction::class)
|
||||
->add(new Middleware\Permissions(GlobalPermissions::All));
|
||||
|
||||
$group->map(
|
||||
|
|
|
@ -7,8 +7,9 @@ use App\Middleware;
|
|||
use Slim\Routing\RouteCollectorProxy;
|
||||
|
||||
return static function (RouteCollectorProxy $app) {
|
||||
$app->get('/public/sw.js',
|
||||
function (ServerRequest $request, Response $response) {
|
||||
$app->get(
|
||||
'/public/sw.js',
|
||||
function (ServerRequest $request, Response $response, ...$params) {
|
||||
return $response
|
||||
->withHeader('Content-Type', 'text/javascript')
|
||||
->write(
|
||||
|
@ -52,13 +53,19 @@ return static function (RouteCollectorProxy $app) {
|
|||
$group->get('/podcasts', Controller\Frontend\PublicPages\PodcastsController::class)
|
||||
->setName('public:podcasts');
|
||||
|
||||
$group->get('/podcast/{podcast_id}/episodes', Controller\Frontend\PublicPages\PodcastEpisodesController::class)
|
||||
$group->get(
|
||||
'/podcast/{podcast_id}/episodes',
|
||||
Controller\Frontend\PublicPages\PodcastEpisodesAction::class
|
||||
)
|
||||
->setName('public:podcast:episodes');
|
||||
|
||||
$group->get('/podcast/{podcast_id}/episode/{episode_id}', Controller\Frontend\PublicPages\PodcastEpisodeController::class)
|
||||
$group->get(
|
||||
'/podcast/{podcast_id}/episode/{episode_id}',
|
||||
Controller\Frontend\PublicPages\PodcastEpisodeAction::class
|
||||
)
|
||||
->setName('public:podcast:episode');
|
||||
|
||||
$group->get('/podcast/{podcast_id}/feed', Controller\Frontend\PublicPages\PodcastFeedController::class)
|
||||
$group->get('/podcast/{podcast_id}/feed', Controller\Frontend\PublicPages\PodcastFeedAction::class)
|
||||
->setName('public:podcast:feed');
|
||||
}
|
||||
)
|
||||
|
|
|
@ -13,7 +13,7 @@ return static function (RouteCollectorProxy $app) {
|
|||
function (RouteCollectorProxy $group) {
|
||||
$group->get(
|
||||
'',
|
||||
function (ServerRequest $request, Response $response) {
|
||||
function (ServerRequest $request, Response $response, ...$params) {
|
||||
return $response->withRedirect(
|
||||
(string)$request->getRouter()->fromHere('stations:profile:index')
|
||||
);
|
||||
|
|
|
@ -365,7 +365,7 @@ return [
|
|||
|
||||
Symfony\Component\Messenger\MessageBus::class => static function (
|
||||
App\MessageQueue\QueueManager $queueManager,
|
||||
App\LockFactory $lockFactory,
|
||||
\App\Lock\LockFactory $lockFactory,
|
||||
Monolog\Logger $logger,
|
||||
ContainerInterface $di,
|
||||
App\Plugins $plugins,
|
||||
|
@ -530,4 +530,13 @@ return [
|
|||
);
|
||||
},
|
||||
|
||||
App\Assets::class => static fn(Environment $env) => new App\Assets(
|
||||
$env,
|
||||
require __DIR__ . '/assets.php'
|
||||
),
|
||||
|
||||
App\Webhook\ConnectorLocator::class => static fn(ContainerInterface $di) => new App\Webhook\ConnectorLocator(
|
||||
$di,
|
||||
require __DIR__ . '/webhooks.php'
|
||||
),
|
||||
];
|
||||
|
|
|
@ -9,22 +9,13 @@ use App\Enums\SupportedLocales;
|
|||
use App\Http\Factory\ResponseFactory;
|
||||
use App\Http\Factory\ServerRequestFactory;
|
||||
use DI;
|
||||
use Invoker\Invoker;
|
||||
use Invoker\ParameterResolver\AssociativeArrayResolver;
|
||||
use Invoker\ParameterResolver\Container\TypeHintContainerResolver;
|
||||
use Invoker\ParameterResolver\DefaultValueResolver;
|
||||
use Invoker\ParameterResolver\ResolverChain;
|
||||
use Monolog\ErrorHandler;
|
||||
use Monolog\Registry;
|
||||
use Psr\EventDispatcher\EventDispatcherInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Slim\App;
|
||||
use Slim\Factory\ServerRequestCreatorFactory;
|
||||
|
||||
use const E_COMPILE_ERROR;
|
||||
use const E_CORE_ERROR;
|
||||
use const E_ERROR;
|
||||
use const E_PARSE;
|
||||
use const E_USER_ERROR;
|
||||
use Slim\Handlers\Strategies\RequestResponseNamedArgs;
|
||||
|
||||
class AppFactory
|
||||
{
|
||||
|
@ -62,21 +53,7 @@ class AppFactory
|
|||
$container->set(App::class, $app);
|
||||
|
||||
$routeCollector = $app->getRouteCollector();
|
||||
|
||||
// Use the PHP-DI Bridge's action invocation helper.
|
||||
$resolvers = [
|
||||
// Inject parameters by name first
|
||||
new AssociativeArrayResolver(),
|
||||
// Then inject services by type-hints for those that weren't resolved
|
||||
new TypeHintContainerResolver($container),
|
||||
// Then fall back on parameters default values for optional route parameters
|
||||
new DefaultValueResolver(),
|
||||
];
|
||||
|
||||
$invoker = new Invoker(new ResolverChain($resolvers), $container);
|
||||
$controllerInvoker = new ControllerInvoker($invoker);
|
||||
|
||||
$routeCollector->setDefaultInvocationStrategy($controllerInvoker);
|
||||
$routeCollector->setDefaultInvocationStrategy(new RequestResponseNamedArgs());
|
||||
|
||||
$environment = $container->get(Environment::class);
|
||||
if ($environment->isProduction()) {
|
||||
|
@ -123,33 +100,10 @@ class AppFactory
|
|||
|
||||
$di = $containerBuilder->build();
|
||||
|
||||
// Monolog setup
|
||||
$logger = $di->get(LoggerInterface::class);
|
||||
|
||||
register_shutdown_function(
|
||||
static function (LoggerInterface $logger): void {
|
||||
$error = error_get_last();
|
||||
if (null === $error) {
|
||||
return;
|
||||
}
|
||||
|
||||
$errno = $error["type"];
|
||||
$errfile = $error["file"];
|
||||
$errline = $error["line"];
|
||||
$errstr = $error["message"];
|
||||
|
||||
if ($errno &= E_PARSE | E_ERROR | E_USER_ERROR | E_CORE_ERROR | E_COMPILE_ERROR) {
|
||||
$logger->critical(
|
||||
sprintf(
|
||||
'Fatal error: %s in %s on line %d',
|
||||
$errstr,
|
||||
$errfile,
|
||||
$errline
|
||||
)
|
||||
);
|
||||
}
|
||||
},
|
||||
$logger
|
||||
);
|
||||
$errorHandler = new ErrorHandler($logger);
|
||||
$errorHandler->registerFatalHandler();
|
||||
|
||||
Registry::addLogger($logger, 'app', true);
|
||||
|
||||
|
|
|
@ -45,9 +45,9 @@ class Assets
|
|||
|
||||
public function __construct(
|
||||
protected Environment $environment,
|
||||
Config $config
|
||||
array $libraries,
|
||||
) {
|
||||
foreach ($config->get('assets') as $library_name => $library) {
|
||||
foreach ($libraries as $library_name => $library) {
|
||||
$this->addLibrary($library, $library_name);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App;
|
||||
|
||||
use const EXTR_OVERWRITE;
|
||||
|
||||
class Config
|
||||
{
|
||||
protected string $baseFolder;
|
||||
|
||||
public function __construct(Environment $environment)
|
||||
{
|
||||
$this->baseFolder = $environment->getConfigDirectory();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param array $inject_vars Variables to pass into the scope of the configuration.
|
||||
*
|
||||
* @return array<mixed>
|
||||
* @noinspection PhpIncludeInspection
|
||||
* @noinspection UselessUnsetInspection
|
||||
*/
|
||||
public function get(string $name, array $inject_vars = []): array
|
||||
{
|
||||
$path = $this->getPath($name);
|
||||
|
||||
if (is_file($path)) {
|
||||
unset($name);
|
||||
extract($inject_vars, EXTR_OVERWRITE);
|
||||
unset($inject_vars);
|
||||
|
||||
return require $path;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the configuration path resolved by the specified name.
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function getPath(string $name): string
|
||||
{
|
||||
return $this->baseFolder . DIRECTORY_SEPARATOR . str_replace(['.', '..'], ['', ''], $name) . '.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate whether a given configuration file name exists.
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function has(string $name): bool
|
||||
{
|
||||
return file_exists($this->getPath($name));
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ namespace App\Console\Command\Sync;
|
|||
|
||||
use App\Console\Command\CommandAbstract;
|
||||
use App\Environment;
|
||||
use App\LockFactory;
|
||||
use App\Lock\LockFactory;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\Lock\Lock;
|
||||
|
@ -95,7 +95,7 @@ abstract class AbstractSyncCommand extends CommandAbstract
|
|||
|
||||
$this->processes[$processKey] = [
|
||||
'process' => $process,
|
||||
'lock' => $lock,
|
||||
'lock' => $lock,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace App\Console\Command\Sync;
|
|||
|
||||
use App\Entity\Repository\SettingsRepository;
|
||||
use App\Environment;
|
||||
use App\LockFactory;
|
||||
use App\Lock\LockFactory;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace App\Console\Command\Sync;
|
|||
use App\Entity\Repository\SettingsRepository;
|
||||
use App\Environment;
|
||||
use App\Event\GetSyncTasks;
|
||||
use App\LockFactory;
|
||||
use App\Lock\LockFactory;
|
||||
use App\Sync\Task\AbstractTask;
|
||||
use Carbon\CarbonImmutable;
|
||||
use Cron\CronExpression;
|
||||
|
|
|
@ -25,7 +25,7 @@ final class ClearStationQueueAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -30,7 +30,8 @@ final class IndexAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$queues = AbstractQueueManager::getAllQueues();
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ final class NextSongAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -23,7 +23,7 @@ final class NowPlayingAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -22,7 +22,7 @@ final class TelnetAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -49,7 +49,7 @@ final class LogsController extends AbstractLogViewerController
|
|||
/**
|
||||
* @return array<string, array>
|
||||
*/
|
||||
protected function getGlobalLogs(): array
|
||||
private function getGlobalLogs(): array
|
||||
{
|
||||
$tempDir = $this->environment->getTempDirectory();
|
||||
$logPaths = [];
|
||||
|
|
|
@ -19,7 +19,7 @@ final class RelaysAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$relays = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
|
|
|
@ -19,7 +19,7 @@ final class SettingsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ final class StationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ final class UsersAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ namespace App\Controller\Api\Admin;
|
|||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity;
|
||||
use App\Exception;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
@ -17,21 +16,19 @@ use Psr\Http\Message\ResponseInterface;
|
|||
*/
|
||||
abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
||||
{
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$query = $this->em->createQuery('SELECT e FROM ' . $this->entityClass . ' e');
|
||||
|
||||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function createAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$row = $this->createRecord((array)$request->getParsedBody());
|
||||
|
||||
$return = $this->viewRecord($row, $request);
|
||||
|
@ -40,7 +37,6 @@ abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
|||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function createRecord(array $data): object
|
||||
|
@ -48,13 +44,11 @@ abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
|||
return $this->editRecord($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function getAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
|
@ -76,13 +70,11 @@ abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
|||
return $this->em->find($this->entityClass, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function editAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
|
@ -95,13 +87,11 @@ abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
|||
return $response->withJson(Entity\Api\Status::updated());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function deleteAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
|
|
|
@ -28,10 +28,10 @@ final class AuditLogAction
|
|||
): ResponseInterface {
|
||||
$tz = new DateTimeZone('UTC');
|
||||
|
||||
$params = $request->getParams();
|
||||
if (!empty($params['start']) && !empty($params['end'])) {
|
||||
$start = CarbonImmutable::parse($params['start'], $tz)->setSecond(0);
|
||||
$end = CarbonImmutable::parse($params['end'], $tz)->setSecond(59);
|
||||
$allParams = $request->getParams();
|
||||
if (!empty($allParams['start']) && !empty($allParams['end'])) {
|
||||
$start = CarbonImmutable::parse($allParams['start'], $tz)->setSecond(0);
|
||||
$end = CarbonImmutable::parse($allParams['end'], $tz)->setSecond(59);
|
||||
} else {
|
||||
$start = CarbonImmutable::parse('-2 weeks', $tz);
|
||||
$end = CarbonImmutable::now($tz);
|
||||
|
@ -45,7 +45,7 @@ final class AuditLogAction
|
|||
->setParameter('start', $start->getTimestamp())
|
||||
->setParameter('end', $end->getTimestamp());
|
||||
|
||||
$search_phrase = trim($params['searchPhrase'] ?? '');
|
||||
$search_phrase = trim($allParams['searchPhrase'] ?? '');
|
||||
if (!empty($search_phrase)) {
|
||||
$qb->andWhere('(a.user LIKE :query OR a.identifier LIKE :query OR a.target LIKE :query)')
|
||||
->setParameter('query', '%' . $search_phrase . '%');
|
||||
|
|
|
@ -21,7 +21,7 @@ final class GetAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ final class RunAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$data = (array)$request->getParsedBody();
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ final class GetAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$version = GeoLite::getVersion();
|
||||
$settings = $this->settingsRepo->readSettings();
|
||||
|
|
|
@ -21,7 +21,7 @@ final class PostAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$newKey = trim($request->getParsedBodyParam('geolite_license_key', ''));
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class PermissionsController
|
||||
final class PermissionsAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Acl $acl,
|
||||
|
@ -38,7 +38,7 @@ final class PermissionsController
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$permissions = [];
|
||||
foreach ($this->acl->listPermissions() as $group => $actions) {
|
|
@ -154,10 +154,6 @@ final class RolesController extends AbstractAdminApiCrudController
|
|||
$this->superAdminRole = $permissionRepo->ensureSuperAdministratorRole();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
|
|
|
@ -25,7 +25,7 @@ final class SendTestMessageAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$emailAddress = $request->getParam('email', '');
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class ServerStatsController
|
||||
final class ServerStatsAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Environment $environment,
|
||||
|
@ -44,7 +44,7 @@ final class ServerStatsController
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$firstCpuMeasurement = CpuStats::getCurrentLoad();
|
||||
$firstNetworkMeasurement = NetworkStats::getNetworkUsage();
|
|
@ -18,7 +18,7 @@ final class GetAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
return $response->withJson(
|
||||
[
|
||||
|
|
|
@ -14,7 +14,7 @@ final class StorageLocationsAction extends StationsController
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$newStorageLocationMessage = __('Create a new storage location based on the base directory.');
|
||||
|
||||
|
|
|
@ -156,12 +156,10 @@ class StationsController extends AbstractAdminApiCrudController
|
|||
parent::__construct($reloadableEm, $serializer, $validator);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
->from(Entity\Station::class, 'e');
|
||||
|
|
|
@ -144,8 +144,10 @@ final class StorageLocationsController extends AbstractAdminApiCrudController
|
|||
parent::__construct($em, $serializer, $validator);
|
||||
}
|
||||
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder();
|
||||
|
||||
$qb->select('sl')
|
||||
|
|
|
@ -135,12 +135,10 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
protected string $entityClass = Entity\User::class;
|
||||
protected string $resourceRouteName = 'api:admin:user';
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
->from(Entity\User::class, 'e');
|
||||
|
@ -197,8 +195,11 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
return $return;
|
||||
}
|
||||
|
||||
public function editAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
|
@ -217,8 +218,11 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
return $response->withJson(Entity\Api\Status::updated());
|
||||
}
|
||||
|
||||
public function deleteAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
|
|
|
@ -6,7 +6,6 @@ namespace App\Controller\Api\Frontend\Account;
|
|||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity;
|
||||
use App\Exception;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Security\SplitToken;
|
||||
|
@ -22,8 +21,10 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
protected string $entityClass = Entity\ApiKey::class;
|
||||
protected string $resourceRouteName = 'api:frontend:api-key';
|
||||
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$query = $this->em->createQuery(
|
||||
<<<'DQL'
|
||||
SELECT e FROM App\Entity\ApiKey e WHERE e.user = :user
|
||||
|
@ -33,14 +34,10 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function createAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$newKey = SplitToken::generate();
|
||||
|
||||
$record = new Entity\ApiKey(
|
||||
|
@ -57,13 +54,11 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function getAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request->getUser(), $id);
|
||||
|
||||
if (null === $record) {
|
||||
|
@ -75,13 +70,11 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function deleteAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface
|
||||
{
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request->getUser(), $id);
|
||||
|
||||
if (null === $record) {
|
||||
|
@ -99,7 +92,7 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
*
|
||||
* @return TEntity|null
|
||||
*/
|
||||
protected function getRecord(Entity\User $user, string $id): ?object
|
||||
private function getRecord(Entity\User $user, string $id): ?object
|
||||
{
|
||||
/** @var TEntity|null $record */
|
||||
$record = $this->em->getRepository(Entity\ApiKey::class)->findOneBy([
|
||||
|
|
|
@ -18,8 +18,10 @@ final class DeleteTwoFactorAction
|
|||
}
|
||||
|
||||
|
||||
public function __invoke(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
$user = $this->em->refetch($user);
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ final class ChartsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
if (!$this->settingsRepo->readSettings()->isAnalyticsEnabled()) {
|
||||
return $response->withStatus(403, 'Forbidden')
|
||||
|
|
|
@ -19,7 +19,7 @@ final class NotificationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$event = new Event\GetNotifications($request);
|
||||
$this->eventDispatcher->dispatch($event);
|
||||
|
|
|
@ -23,7 +23,7 @@ final class StationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
$acl = $request->getAcl();
|
||||
|
|
|
@ -25,8 +25,10 @@ final class IndexController
|
|||
),
|
||||
]
|
||||
)]
|
||||
public function statusAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function statusAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
return $response->withJson(new Entity\Api\SystemStatus());
|
||||
}
|
||||
|
||||
|
@ -43,8 +45,10 @@ final class IndexController
|
|||
),
|
||||
]
|
||||
)]
|
||||
public function timeAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function timeAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
return $response->withJson(new Entity\Api\Time());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ final class LiquidsoapAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $action
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -23,6 +23,7 @@ final class ListenerAuthAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ final class OpenApiAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$apiBaseUrl = str_replace(
|
||||
'/openapi.yml',
|
||||
|
|
|
@ -6,7 +6,6 @@ namespace App\Controller\Api\Stations;
|
|||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity;
|
||||
use App\Exception;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
@ -18,17 +17,18 @@ use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
|||
*/
|
||||
abstract class AbstractStationApiCrudController extends AbstractApiCrudController
|
||||
{
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
|
||||
$query = $this->em->createQuery('SELECT e
|
||||
$query = $this->em->createQuery(
|
||||
'SELECT e
|
||||
FROM ' . $this->entityClass . ' e
|
||||
WHERE e.station = :station')
|
||||
WHERE e.station = :station'
|
||||
)
|
||||
->setParameter('station', $station);
|
||||
|
||||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
|
@ -45,12 +45,11 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
return $request->getStation();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function createAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
$row = $this->createRecord((array)$request->getParsedBody(), $station);
|
||||
|
||||
|
@ -80,18 +79,10 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param string|int $station_id
|
||||
* @param string|int $id
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $station_id,
|
||||
int|string $station_id,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
|
@ -122,16 +113,10 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param string|int $station_id
|
||||
* @param string|int $id
|
||||
*/
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $station_id,
|
||||
int|string $station_id,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($this->getStation($request), $id);
|
||||
|
@ -146,16 +131,10 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
return $response->withJson(Entity\Api\Status::updated());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
* @param string|int $station_id
|
||||
* @param string|int $id
|
||||
*/
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $station_id,
|
||||
int|string $station_id,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($this->getStation($request), $id);
|
||||
|
|
|
@ -48,6 +48,7 @@ final class DeleteArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $media_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -48,6 +48,7 @@ final class GetArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $media_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -51,6 +51,7 @@ final class PostArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int|string $media_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -12,7 +12,8 @@ final class GetSettingsAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ final class PutSettingsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -37,7 +37,8 @@ final class RunAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ use App\Entity\Repository\CustomFieldRepository;
|
|||
use App\Entity\Repository\StationPlaylistRepository;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Service\CsvWriterTempFile;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use League\Csv\Writer;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DownloadAction
|
||||
|
@ -24,6 +24,7 @@ final class DownloadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
@ -50,8 +51,10 @@ final class DownloadAction
|
|||
|
||||
$filename = $station->getShortName() . '_all_media.csv';
|
||||
|
||||
$tempFile = new CsvWriterTempFile();
|
||||
$csv = $tempFile->getWriter();
|
||||
if (!($tempFile = tmpfile())) {
|
||||
throw new \RuntimeException('Could not create temp file.');
|
||||
}
|
||||
$csv = Writer::createFromStream($tempFile);
|
||||
|
||||
/*
|
||||
* NOTE: These field names should correspond with DB property names when converted into short_names.
|
||||
|
@ -119,6 +122,6 @@ final class DownloadAction
|
|||
$csv->insertOne($bodyRow);
|
||||
}
|
||||
|
||||
return $response->withFileDownload($tempFile->getTempPath(), $filename, 'text/csv');
|
||||
return $response->withFileDownload($tempFile, $filename, 'text/csv');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,13 +15,14 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
||||
use Symfony\Component\Serializer\Serializer;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
use Throwable;
|
||||
|
||||
use function count;
|
||||
use function str_starts_with;
|
||||
|
||||
final class UploadAction
|
||||
{
|
||||
protected const ALLOWED_MEDIA_FIELDS = [
|
||||
private const ALLOWED_MEDIA_FIELDS = [
|
||||
'title',
|
||||
'artist',
|
||||
'album',
|
||||
|
@ -48,7 +49,8 @@ final class UploadAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
@ -138,7 +140,7 @@ final class UploadAction
|
|||
if ($rowResult) {
|
||||
$processed++;
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
} catch (Throwable $e) {
|
||||
$importResult['success'] = false;
|
||||
$importResult['error'] = $e->getMessage();
|
||||
}
|
||||
|
|
|
@ -35,7 +35,8 @@ final class DeleteFallbackAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$this->stationRepo->clearFallback($station);
|
||||
|
|
|
@ -35,6 +35,7 @@ final class GetFallbackAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
|
|
|
@ -36,7 +36,8 @@ final class PostFallbackAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -45,7 +45,8 @@ final class BatchAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$storageLocation = $station->getMediaStorageLocation();
|
||||
|
|
|
@ -14,7 +14,8 @@ final class DownloadAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
|
|
|
@ -27,8 +27,9 @@ final class FlowUploadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$params = $request->getParams();
|
||||
$allParams = $request->getParams();
|
||||
$station = $request->getStation();
|
||||
|
||||
$mediaStorage = $station->getMediaStorageLocation();
|
||||
|
@ -66,8 +67,8 @@ final class FlowUploadAction
|
|||
}
|
||||
|
||||
// If the user is looking at a playlist's contents, add uploaded media to that playlist.
|
||||
if (!empty($params['searchPhrase'])) {
|
||||
$search_phrase = $params['searchPhrase'];
|
||||
if (!empty($allParams['searchPhrase'])) {
|
||||
$search_phrase = $allParams['searchPhrase'];
|
||||
|
||||
if (str_starts_with($search_phrase, 'playlist:')) {
|
||||
$playlist_name = substr($search_phrase, 9);
|
||||
|
|
|
@ -33,6 +33,7 @@ final class ListAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -15,7 +15,8 @@ final class ListDirectoriesAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -15,7 +15,8 @@ final class MakeDirectoryAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$currentDir = $request->getParam('currentDirectory', '');
|
||||
$newDirName = $request->getParam('name', '');
|
||||
|
|
|
@ -20,7 +20,8 @@ final class PlayAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $id,
|
||||
int|string $station_id,
|
||||
int|string $id
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ final class RenameAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$from = $request->getParam('file');
|
||||
if (empty($from)) {
|
||||
|
|
|
@ -163,8 +163,11 @@ final class FilesController extends AbstractStationApiCrudController
|
|||
parent::__construct($em, $serializer, $validator);
|
||||
}
|
||||
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$storageLocation = $this->getStation($request)->getMediaStorageLocation();
|
||||
|
||||
$query = $this->em->createQuery(
|
||||
|
@ -177,8 +180,11 @@ final class FilesController extends AbstractStationApiCrudController
|
|||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
public function createAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
|
||||
$mediaStorage = $station->getMediaStorageLocation();
|
||||
|
@ -214,7 +220,7 @@ final class FilesController extends AbstractStationApiCrudController
|
|||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $station_id,
|
||||
int|string $station_id,
|
||||
mixed $id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
|
|
|
@ -20,6 +20,7 @@ final class GetQuotaAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $type = null
|
||||
): ResponseInterface {
|
||||
$typeEnum = Entity\Enums\StorageLocationTypes::tryFrom($type ?? '')
|
||||
|
|
|
@ -12,7 +12,8 @@ final class GetRestartStatusAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
return $response->withJson([
|
||||
|
|
|
@ -10,11 +10,11 @@ use App\Environment;
|
|||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\OpenApi;
|
||||
use App\Service\CsvWriterTempFile;
|
||||
use Azura\DoctrineBatchUtils\ReadOnlyBatchIteratorAggregate;
|
||||
use Carbon\CarbonImmutable;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query;
|
||||
use League\Csv\Writer;
|
||||
use OpenApi\Attributes as OA;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
|
@ -66,12 +66,11 @@ final class HistoryController
|
|||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function __invoke(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
set_time_limit($this->environment->getSyncLongExecutionTime());
|
||||
|
||||
$station = $request->getStation();
|
||||
|
@ -149,8 +148,10 @@ final class HistoryController
|
|||
Query $query,
|
||||
string $filename
|
||||
): ResponseInterface {
|
||||
$tempFile = new CsvWriterTempFile();
|
||||
$csv = $tempFile->getWriter();
|
||||
if (!($tempFile = tmpfile())) {
|
||||
throw new \RuntimeException('Could not create temp file.');
|
||||
}
|
||||
$csv = Writer::createFromStream($tempFile);
|
||||
|
||||
$csv->insertOne([
|
||||
'Date',
|
||||
|
@ -192,6 +193,6 @@ final class HistoryController
|
|||
]);
|
||||
}
|
||||
|
||||
return $response->withFileDownload($tempFile->getTempPath(), $filename, 'text/csv');
|
||||
return $response->withFileDownload($tempFile, $filename, 'text/csv');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,8 @@ final class IndexController
|
|||
|
||||
public function indexAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -13,7 +13,8 @@ final class GetAction
|
|||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$backendConfig = $request->getStation()->getBackendConfig();
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ final class PutAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$body = (array)$request->getParsedBody();
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ use App\Entity;
|
|||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\OpenApi;
|
||||
use App\Service\CsvWriterTempFile;
|
||||
use Carbon\CarbonImmutable;
|
||||
use Doctrine\ORM\AbstractQuery;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use League\Csv\Writer;
|
||||
use OpenApi\Attributes as OA;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
|
@ -53,13 +53,14 @@ final class ListenersAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$stationTz = $station->getTimezoneObject();
|
||||
|
||||
$params = $request->getQueryParams();
|
||||
$queryParams = $request->getQueryParams();
|
||||
|
||||
$isLive = empty($params['start']);
|
||||
$isLive = empty($queryParams['start']);
|
||||
$now = CarbonImmutable::now($stationTz);
|
||||
|
||||
if ($isLive) {
|
||||
|
@ -69,11 +70,11 @@ final class ListenersAction
|
|||
|
||||
$listenersIterator = $this->listenerRepo->iterateLiveListenersArray($station);
|
||||
} else {
|
||||
$start = CarbonImmutable::parse($params['start'], $stationTz)
|
||||
$start = CarbonImmutable::parse($queryParams['start'], $stationTz)
|
||||
->setSecond(0);
|
||||
$startTimestamp = $start->getTimestamp();
|
||||
|
||||
$end = CarbonImmutable::parse($params['end'] ?? $params['start'], $stationTz)
|
||||
$end = CarbonImmutable::parse($queryParams['end'] ?? $queryParams['start'], $stationTz)
|
||||
->setSecond(59);
|
||||
$endTimestamp = $end->getTimestamp();
|
||||
|
||||
|
@ -101,7 +102,7 @@ final class ListenersAction
|
|||
$listeners = [];
|
||||
$listenersByHash = [];
|
||||
|
||||
$groupByUnique = ('false' !== ($params['unique'] ?? 'true'));
|
||||
$groupByUnique = ('false' !== ($queryParams['unique'] ?? 'true'));
|
||||
$nowTimestamp = $now->getTimestamp();
|
||||
|
||||
foreach ($listenersIterator as $listener) {
|
||||
|
@ -178,7 +179,7 @@ final class ListenersAction
|
|||
}
|
||||
}
|
||||
|
||||
$format = $params['format'] ?? 'json';
|
||||
$format = $queryParams['format'] ?? 'json';
|
||||
|
||||
if ('csv' === $format) {
|
||||
return $this->exportReportAsCsv(
|
||||
|
@ -204,8 +205,10 @@ final class ListenersAction
|
|||
array $listeners,
|
||||
string $filename
|
||||
): ResponseInterface {
|
||||
$tempFile = new CsvWriterTempFile();
|
||||
$csv = $tempFile->getWriter();
|
||||
if (!($tempFile = tmpfile())) {
|
||||
throw new \RuntimeException('Could not create temp file.');
|
||||
}
|
||||
$csv = Writer::createFromStream($tempFile);
|
||||
|
||||
$tz = $station->getTimezoneObject();
|
||||
|
||||
|
@ -262,6 +265,6 @@ final class ListenersAction
|
|||
$csv->insertOne($exportRow);
|
||||
}
|
||||
|
||||
return $response->withFileDownload($tempFile->getTempPath(), $filename, 'text/csv');
|
||||
return $response->withFileDownload($tempFile, $filename, 'text/csv');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ final class DeleteIntroAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -47,6 +47,7 @@ final class GetIntroAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
|
|
@ -44,6 +44,7 @@ final class PostIntroAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
?int $id = null
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -157,12 +157,11 @@ final class MountsController extends AbstractStationApiCrudController
|
|||
parent::__construct($em, $serializer, $validator);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
|
@ -216,7 +215,8 @@ final class MountsController extends AbstractStationApiCrudController
|
|||
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
@ -237,8 +237,8 @@ final class MountsController extends AbstractStationApiCrudController
|
|||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
mixed $station_id,
|
||||
mixed $id
|
||||
int|string $station_id,
|
||||
mixed $id,
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($this->getStation($request), $id);
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@ final class DownloadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $media_id,
|
||||
int|string $station_id,
|
||||
string $media_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ final class ListAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
@ -51,9 +52,9 @@ final class ListAction
|
|||
|
||||
$trackList = new ArrayCollection($trackList);
|
||||
|
||||
$params = $request->getQueryParams();
|
||||
$queryParams = $request->getQueryParams();
|
||||
|
||||
$searchPhrase = trim($params['searchPhrase'] ?? '');
|
||||
$searchPhrase = trim($queryParams['searchPhrase'] ?? '');
|
||||
if (!empty($searchPhrase)) {
|
||||
$searchFields = [
|
||||
'media_title',
|
||||
|
@ -79,9 +80,9 @@ final class ListAction
|
|||
);
|
||||
}
|
||||
|
||||
if (!empty($params['sort'])) {
|
||||
$sortField = $params['sort'];
|
||||
$sortDirection = $params['sortOrder'] ?? Criteria::ASC;
|
||||
if (!empty($queryParams['sort'])) {
|
||||
$sortField = $queryParams['sort'];
|
||||
$sortDirection = $queryParams['sortOrder'] ?? Criteria::ASC;
|
||||
|
||||
$criteria = new Criteria();
|
||||
$criteria->orderBy([$sortField => $sortDirection]);
|
||||
|
|
|
@ -16,6 +16,7 @@ final class CloneAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -7,19 +7,27 @@ namespace App\Controller\Api\Stations\Playlists;
|
|||
use App\Entity;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DeleteQueueAction extends AbstractPlaylistsAction
|
||||
{
|
||||
public function __construct(
|
||||
EntityManagerInterface $em,
|
||||
private readonly Entity\Repository\StationPlaylistMediaRepository $spmRepo,
|
||||
) {
|
||||
parent::__construct($em);
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
Entity\Repository\StationPlaylistMediaRepository $spmRepo,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
||||
$spmRepo->resetQueue($record);
|
||||
$this->spmRepo->resetQueue($record);
|
||||
|
||||
return $response->withJson(
|
||||
new Entity\Api\Status(
|
||||
|
|
|
@ -14,6 +14,7 @@ final class ExportAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id,
|
||||
string $format = 'pls'
|
||||
): ResponseInterface {
|
||||
|
|
|
@ -15,6 +15,7 @@ final class GetOrderAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -24,6 +24,7 @@ final class GetQueueAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -25,6 +25,7 @@ final class ImportAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$playlist = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -23,6 +23,7 @@ final class PutOrderAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -22,6 +22,7 @@ final class ReshuffleAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -14,6 +14,7 @@ final class ToggleAction extends AbstractPlaylistsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
int $id
|
||||
): ResponseInterface {
|
||||
$record = $this->requireRecord($request->getStation(), $id);
|
||||
|
|
|
@ -145,11 +145,11 @@ final class PlaylistsController extends AbstractScheduledEntityController
|
|||
protected string $entityClass = Entity\StationPlaylist::class;
|
||||
protected string $resourceRouteName = 'api:stations:playlist';
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
|
@ -183,8 +183,11 @@ final class PlaylistsController extends AbstractScheduledEntityController
|
|||
* @param ServerRequest $request
|
||||
* @param Response $response
|
||||
*/
|
||||
public function scheduleAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function scheduleAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
$scheduleItems = $this->em->createQuery(
|
||||
|
|
|
@ -198,6 +198,7 @@ final class PodcastEpisodesController extends AbstractApiCrudController
|
|||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
@ -225,6 +226,8 @@ final class PodcastEpisodesController extends AbstractApiCrudController
|
|||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
@ -242,6 +245,7 @@ final class PodcastEpisodesController extends AbstractApiCrudController
|
|||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
@ -285,6 +289,8 @@ final class PodcastEpisodesController extends AbstractApiCrudController
|
|||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$podcast = $this->getRecord($request->getStation(), $episode_id);
|
||||
|
@ -302,6 +308,8 @@ final class PodcastEpisodesController extends AbstractApiCrudController
|
|||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -45,7 +45,8 @@ final class DeleteArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $podcast_id,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -47,7 +47,8 @@ final class GetArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $podcast_id,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -46,7 +46,8 @@ final class PostArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $podcast_id
|
||||
int|string $station_id,
|
||||
?string $podcast_id = null
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -63,6 +63,8 @@ final class DeleteArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -54,8 +54,9 @@ final class GetArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -53,7 +53,9 @@ final class PostArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $episode_id
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
?string $episode_id = null
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -50,6 +50,8 @@ final class DeleteMediaAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -54,6 +54,8 @@ final class GetMediaAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
string $episode_id
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
|
|
@ -52,6 +52,7 @@ final class PostMediaAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
?string $episode_id = null
|
||||
): ResponseInterface {
|
||||
|
|
|
@ -159,8 +159,11 @@ final class PodcastsController extends AbstractApiCrudController
|
|||
parent::__construct($em, $serializer, $validator);
|
||||
}
|
||||
|
||||
public function listAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
$queryBuilder = $this->em->createQueryBuilder()
|
||||
|
@ -183,7 +186,8 @@ final class PodcastsController extends AbstractApiCrudController
|
|||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $podcast_id
|
||||
int|string $station_id,
|
||||
string $podcast_id,
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$record = $this->getRecord($station, $podcast_id);
|
||||
|
@ -197,8 +201,11 @@ final class PodcastsController extends AbstractApiCrudController
|
|||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
public function createAction(ServerRequest $request, Response $response): ResponseInterface
|
||||
{
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
$parsedBody = (array)$request->getParsedBody();
|
||||
|
@ -226,6 +233,7 @@ final class PodcastsController extends AbstractApiCrudController
|
|||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$podcast = $this->getRecord($request->getStation(), $podcast_id);
|
||||
|
@ -243,6 +251,7 @@ final class PodcastsController extends AbstractApiCrudController
|
|||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
int|string $station_id,
|
||||
string $podcast_id
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue