*/ class StreamersController extends AbstractScheduledEntityController { protected string $entityClass = Entity\StationStreamer::class; protected string $resourceRouteName = 'api:stations:streamer'; public function scheduleAction(ServerRequest $request, Response $response): ResponseInterface { $station = $request->getStation(); $scheduleItems = $this->em->createQuery( <<<'DQL' SELECT ssc, sst FROM App\Entity\StationSchedule ssc LEFT JOIN ssc.streamer sst WHERE sst.station = :station AND sst.is_active = 1 DQL )->setParameter('station', $station) ->execute(); return $this->renderEvents( $request, $response, $scheduleItems, function ( Entity\StationSchedule $scheduleItem, CarbonInterface $start, CarbonInterface $end ) use ( $request, $station ) { /** @var Entity\StationStreamer $streamer */ $streamer = $scheduleItem->getStreamer(); return [ 'id' => $streamer->getId(), 'title' => $streamer->getDisplayName(), 'start' => $start->toIso8601String(), 'end' => $end->toIso8601String(), 'edit_url' => (string)$request->getRouter()->named( 'api:stations:streamer', ['station_id' => $station->getId(), 'id' => $streamer->getId()] ), ]; } ); } /** * @param Entity\StationStreamer $record * @param ServerRequest $request * * @return mixed[] */ protected function viewRecord(object $record, ServerRequest $request): array { $return = parent::viewRecord($record, $request); $isInternal = ('true' === $request->getParam('internal', 'false')); $return['links']['broadcasts'] = (string)$request->getRouter()->fromHere( route_name: 'api:stations:streamer:broadcasts', route_params: ['id' => $record->getId()], absolute: !$isInternal ); return $return; } /** * @inheritDoc */ protected function getStation(ServerRequest $request): Entity\Station { $station = parent::getStation($request); $backend = $request->getStationBackend(); if (!$backend->supportsStreamers()) { throw new StationUnsupportedException(); } return $station; } }