#553 -- Bring full field selection back to request list

This commit is contained in:
Buster "Silver Eagle" Neece 2018-04-17 17:51:43 -05:00
parent 5d73956f58
commit 7ac98a56c5
3 changed files with 23 additions and 35 deletions

View File

@ -162,7 +162,8 @@ return function (\Slim\Container $di, array $app_settings) {
return new \Controller\Api\RequestsController(
$di[\Doctrine\ORM\EntityManager::class],
$di[\AzuraCast\Radio\Adapters::class],
$di[\App\Url::class]
$di[\App\Url::class],
$di[\AzuraCast\ApiUtilities::class]
);
};

View File

@ -3,6 +3,7 @@ namespace Controller\Api;
use App\Url;
use App\Utilities;
use AzuraCast\ApiUtilities;
use AzuraCast\Radio\Adapters;
use Doctrine\ORM\EntityManager;
use Entity;
@ -14,11 +15,14 @@ class RequestsController
/** @var EntityManager */
protected $em;
/** @var Adapters */
protected $adapters;
/** @var Url */
protected $url;
/** @var Adapters */
protected $adapters;
/** @var ApiUtilities */
protected $api_utils;
/**
* RequestsController constructor.
@ -26,11 +30,12 @@ class RequestsController
* @param Adapters $adapters
* @param Url $url
*/
public function __construct(EntityManager $em, Adapters $adapters, Url $url)
public function __construct(EntityManager $em, Adapters $adapters, Url $url, ApiUtilities $api_utils)
{
$this->em = $em;
$this->adapters = $adapters;
$this->url = $url;
$this->api_utils = $api_utils;
}
/**
@ -61,25 +66,26 @@ class RequestsController
return $response->withJson('This station does not accept requests currently.', 403);
}
/** @var Entity\Repository\StationRequestRepository $request_repo */
$request_repo = $this->em->getRepository(Entity\StationRequest::class);
$requestable_media = $request_repo->getRequestableMedia($station);
$requestable_media = $this->em->createQuery('SELECT sm, s, sp
FROM Entity\StationMedia sm JOIN sm.song s LEFT JOIN sm.playlists sp
WHERE sm.station_id = :station_id
AND sp.id IS NOT NULL
AND sp.is_enabled = 1
AND sp.include_in_requests = 1')
->setParameter('station_id', $station_id)
->useResultCache(true, 60)
->execute();
$result = [];
foreach ($requestable_media as $media_row) {
$song = new Entity\Api\Song;
$song->id = $media_row['song_id'];
$song->text = $media_row['artist'].' - '.$media_row['title'];
$song->artist = $media_row['artist'];
$song->title = $media_row['title'];
/** @var Entity\StationMedia $media_row */
$row = new Entity\Api\StationRequest;
$row->song = $song;
$row->request_id = (int)$media_row['id'];
$row->song = $media_row->api($this->api_utils);
$row->request_id = (int)$media_row->getId();
$row->request_url = (string)$this->url->named('api:requests:submit', [
'station' => $station_id,
'media_id' => $media_row['unique_id']
'media_id' => $media_row->getUniqueId(),
]);
$result[] = $row;
}

View File

@ -71,25 +71,6 @@ class StationRequestRepository extends BaseRepository
return $record->getId();
}
/**
* Returns an array of all media that can be requested for this station.
*
* @param Entity\Station $station
* @return array
*/
public function getRequestableMedia(Entity\Station $station)
{
return $this->_em->createQuery('SELECT sm, s, sp
FROM Entity\StationMedia sm JOIN sm.song s LEFT JOIN sm.playlists sp
WHERE sm.station_id = :station_id
AND sp.id IS NOT NULL
AND sp.is_enabled = 1
AND sp.include_in_requests = 1')
->setParameter('station_id', $station->getId())
->useResultCache(true, 60)
->getArrayResult();
}
/**
* Check if the song is already enqueued as a request.
*