Fixed a cloud file download bug where it was downloading the wrong track. Working on amazon s3 signed urls for private objects. Added cloud storage configuration to install script.
313 lines
12 KiB
PHP
313 lines
12 KiB
PHP
<?php
|
|
|
|
class AudiopreviewController extends Zend_Controller_Action
|
|
{
|
|
public function init()
|
|
{
|
|
$ajaxContext = $this->_helper->getHelper('AjaxContext');
|
|
$ajaxContext->addActionContext('show-preview', 'json')
|
|
->addActionContext('audio-preview', 'json')
|
|
->addActionContext('get-show', 'json')
|
|
->addActionContext('playlist-preview', 'json')
|
|
->addActionContext('get-playlist', 'json')
|
|
->initContext();
|
|
}
|
|
|
|
/**
|
|
* Simply sets up the view to play the required audio track.
|
|
* Gets the parameters from the request and sets them to the view.
|
|
*/
|
|
public function audioPreviewAction()
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
|
|
$audioFileID = $this->_getParam('audioFileID');
|
|
$audioFileArtist = $this->_getParam('audioFileArtist');
|
|
$audioFileTitle = $this->_getParam('audioFileTitle');
|
|
$type = $this->_getParam('type');
|
|
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
|
|
$this->view->headScript()->appendFile(
|
|
$baseUrl.'js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],
|
|
'text/javascript');
|
|
$this->view->headScript()->appendFile(
|
|
$baseUrl.'js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],
|
|
'text/javascript');
|
|
$this->view->headLink()->appendStylesheet(
|
|
$baseUrl.'js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
|
|
$this->_helper->layout->setLayout('audioPlayer');
|
|
|
|
$logo = Application_Model_Preference::GetStationLogo();
|
|
if ($logo) {
|
|
$this->view->logo = "data:image/png;base64,$logo";
|
|
} else {
|
|
$this->view->logo = $baseUrl."css/images/airtime_logo_jp.png";
|
|
}
|
|
|
|
if ($type == "audioclip") {
|
|
$media = Application_Model_StoredFile::RecallById($audioFileID);
|
|
$uri = $baseUrl."api/get-media/file/".$audioFileID;
|
|
//$uri = $media->getPropelOrm()->downloadFile();
|
|
$mime = $media->getPropelOrm()->getDbMime();
|
|
} elseif ($type == "stream") {
|
|
$webstream = CcWebstreamQuery::create()->findPk($audioFileID);
|
|
$uri = $webstream->getDbUrl();
|
|
$mime = $webstream->getDbMime();
|
|
} else {
|
|
throw new Exception("Unknown type for audio preview!.Type=$type");
|
|
}
|
|
|
|
$this->view->uri = $uri;
|
|
$this->view->mime = $mime;
|
|
$this->view->audioFileID = $audioFileID;
|
|
// We need to decode artist and title because it gets
|
|
// encoded twice in js
|
|
$this->view->audioFileArtist = htmlspecialchars(urldecode($audioFileArtist));
|
|
$this->view->audioFileTitle = htmlspecialchars(urldecode($audioFileTitle));
|
|
$this->view->type = $type;
|
|
|
|
$this->_helper->viewRenderer->setRender('audio-preview');
|
|
}
|
|
|
|
/**
|
|
* Simply sets up the view to play the required playlist track.
|
|
* Gets the parameters from the request and sets them to the view.
|
|
*/
|
|
public function playlistPreviewAction()
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
|
|
$playlistIndex = $this->_getParam('playlistIndex');
|
|
$playlistID = $this->_getParam('playlistID');
|
|
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
|
|
$this->_helper->layout->setLayout('audioPlayer');
|
|
|
|
$logo = Application_Model_Preference::GetStationLogo();
|
|
if ($logo) {
|
|
$this->view->logo = "data:image/png;base64,$logo";
|
|
} else {
|
|
$this->view->logo = $baseUrl."css/images/airtime_logo_jp.png";
|
|
}
|
|
$this->view->playlistIndex= $playlistIndex;
|
|
$this->view->playlistID = $playlistID;
|
|
|
|
$this->_helper->viewRenderer->setRender('audio-preview');
|
|
}
|
|
|
|
public function blockPreviewAction()
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
|
|
$blockIndex = $this->_getParam('blockIndex');
|
|
$blockId = $this->_getParam('blockId');
|
|
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
|
|
$this->_helper->layout->setLayout('audioPlayer');
|
|
|
|
$logo = Application_Model_Preference::GetStationLogo();
|
|
if ($logo) {
|
|
$this->view->logo = "data:image/png;base64,$logo";
|
|
} else {
|
|
$this->view->logo = $baseUrl."css/images/airtime_logo_jp.png";
|
|
}
|
|
$this->view->blockIndex= $blockIndex;
|
|
$this->view->blockId = $blockId;
|
|
|
|
$this->_helper->viewRenderer->setRender('audio-preview');
|
|
}
|
|
public function getBlockAction()
|
|
{
|
|
// disable the view and the layout
|
|
$this->view->layout()->disableLayout();
|
|
$this->_helper->viewRenderer->setNoRender(true);
|
|
|
|
$blockId = $this->_getParam('blockId');
|
|
|
|
if (!isset($blockId)) {
|
|
return;
|
|
}
|
|
|
|
$bl = new Application_Model_Block($blockId);
|
|
$result = array();
|
|
foreach ($bl->getContents(true) as $ele) {
|
|
$result[] = $this->createElementMap($ele);
|
|
}
|
|
$this->_helper->json($result);
|
|
}
|
|
/**
|
|
*Function will load and return the contents of the requested playlist.
|
|
*/
|
|
public function getPlaylistAction()
|
|
{
|
|
// disable the view and the layout
|
|
$this->view->layout()->disableLayout();
|
|
$this->_helper->viewRenderer->setNoRender(true);
|
|
|
|
$playlistID = $this->_getParam('playlistID');
|
|
|
|
if (!isset($playlistID)) {
|
|
return;
|
|
}
|
|
|
|
$pl = new Application_Model_Playlist($playlistID);
|
|
$result = Array();
|
|
|
|
foreach ($pl->getContents(true) as $ele) {
|
|
if ($ele['type'] == 2) {
|
|
// if element is a block expand and add
|
|
$bl = new Application_Model_Block($ele['item_id']);
|
|
if ($bl->isStatic()) {
|
|
foreach ($bl->getContents(true) as $track) {
|
|
$result[] = $this->createElementMap($track);
|
|
}
|
|
}
|
|
} else {
|
|
$result[] = $this->createElementMap($ele);
|
|
}
|
|
}
|
|
$this->_helper->json($result);
|
|
}
|
|
|
|
private function createElementMap($track)
|
|
{
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
|
|
$elementMap = array( 'element_title' => isset($track['track_title'])?$track['track_title']:"",
|
|
'element_artist' => isset($track['artist_name'])?$track['artist_name']:"",
|
|
'element_id' => isset($track['id'])?$track['id']:"",
|
|
'element_position' => isset($track['position'])?$track['position']:"",
|
|
'mime' => isset($track['mime'])?$track['mime']:""
|
|
);
|
|
|
|
/* If the track type is static we know it must be
|
|
* a track because static blocks can only contain
|
|
* tracks
|
|
*/
|
|
if ($track['type'] == 'static') {
|
|
$track['type'] = 0;
|
|
}
|
|
$elementMap['type'] = $track['type'];
|
|
|
|
if ($track['type'] == 0) {
|
|
$mime = $track['mime'];
|
|
//type is file
|
|
if (strtolower($mime) === 'audio/mp3') {
|
|
$elementMap['element_mp3'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/ogg') {
|
|
$elementMap['element_oga'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/mp4') {
|
|
$elementMap['element_m4a'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/wav') {
|
|
$elementMap['element_wav'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/x-flac') {
|
|
$elementMap['element_flac'] = $track['item_id'];
|
|
} else {
|
|
throw new Exception("Unknown file type: $mime");
|
|
}
|
|
|
|
$elementMap['uri'] = $baseUrl."api/get-media/file/".$track['item_id'];
|
|
} else {
|
|
$elementMap['uri'] = $track['path'];
|
|
}
|
|
|
|
return $elementMap;
|
|
}
|
|
|
|
/**
|
|
* Simply sets up the view to play the required show track.
|
|
* Gets the parameters from the request and sets them to the view.
|
|
*/
|
|
public function showPreviewAction()
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
|
|
$showID = $this->_getParam('showID');
|
|
$showIndex = $this->_getParam('showIndex');
|
|
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
|
|
$this->_helper->layout->setLayout('audioPlayer');
|
|
|
|
$logo = Application_Model_Preference::GetStationLogo();
|
|
if ($logo) {
|
|
$this->view->logo = "data:image/png;base64,$logo";
|
|
} else {
|
|
$this->view->logo = $baseUrl."css/images/airtime_logo_jp.png";
|
|
}
|
|
|
|
$this->view->showID = $showID;
|
|
$this->view->showIndex = $showIndex;
|
|
|
|
$this->_helper->viewRenderer->setRender('audio-preview');
|
|
}
|
|
|
|
/**
|
|
*Function will load and return the contents of the requested show.
|
|
*/
|
|
public function getShowAction()
|
|
{
|
|
$baseUrl = Application_Common_OsPath::getBaseDir();
|
|
// disable the view and the layout
|
|
$this->view->layout()->disableLayout();
|
|
$this->_helper->viewRenderer->setNoRender(true);
|
|
|
|
$showID = $this->_getParam('showID');
|
|
|
|
if (!isset($showID)) {
|
|
return;
|
|
}
|
|
|
|
$showInstance = new Application_Model_ShowInstance($showID);
|
|
$result = array();
|
|
$position = 0;
|
|
foreach ($showInstance->getShowListContent() as $track) {
|
|
|
|
$elementMap = array(
|
|
'element_title' => isset($track['track_title']) ? $track['track_title'] : "",
|
|
'element_artist' => isset($track['creator']) ? $track['creator'] : "",
|
|
'element_position' => $position,
|
|
'element_id' => ++$position,
|
|
'mime' => isset($track['mime'])?$track['mime']:""
|
|
);
|
|
|
|
$elementMap['type'] = $track['type'];
|
|
if ($track['type'] == 0) {
|
|
$mime = $track['mime'];
|
|
if (strtolower($mime) === 'audio/mp3') {
|
|
$elementMap['element_mp3'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/ogg') {
|
|
$elementMap['element_oga'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/mp4') {
|
|
$elementMap['element_m4a'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/wav') {
|
|
$elementMap['element_wav'] = $track['item_id'];
|
|
} elseif (strtolower($mime) === 'audio/x-flac') {
|
|
$elementMap['element_flac'] = $track['item_id'];
|
|
} else {
|
|
throw new Exception("Unknown file type: $mime");
|
|
}
|
|
|
|
$elementMap['uri'] = $baseUrl."api/get-media/file/".$track['item_id'];
|
|
} else {
|
|
$elementMap['uri'] = $track['filepath'];
|
|
}
|
|
$result[] = $elementMap;
|
|
}
|
|
|
|
$this->_helper->json($result);
|
|
|
|
}
|
|
}
|