From ae0d3c560cbdefd6dc86f9d5a90c640c93ece150 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 15 Mar 2012 17:56:51 -0400 Subject: [PATCH] CC-3394: Add play button to timeline table. - added image information to row in ShowBuilder.php to enable audio preview of shows. - moved around code so the audio preview functionaly is standalone - fixed the firefox bug for issue CC-3429 --- airtime_mvc/application/Bootstrap.php | 2 +- airtime_mvc/application/configs/ACL.php | 6 +- .../controllers/AudiopreviewController.php | 192 +++ .../controllers/PlaylistController.php | 69 - .../application/models/ShowBuilder.php | 9 +- .../audio-preview.phtml} | 12 +- .../public/js/airtime/common/common.js | 65 +- .../public/js/airtime/library/library.js | 63 +- .../public/js/airtime/showbuilder/builder.js | 1158 +++++++++-------- .../public/js/jplayer/preview_jplayer.js | 153 ++- .../jplayer.audio-preview.blue.monday.css | 7 +- 11 files changed, 977 insertions(+), 759 deletions(-) create mode 100644 airtime_mvc/application/controllers/AudiopreviewController.php rename airtime_mvc/application/views/scripts/{playlist/playlist-preview.phtml => audiopreview/audio-preview.phtml} (89%) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index a473e4628..4ed8cb979 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -88,7 +88,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->headScript()->appendFile($baseUrl.'/js/airtime/common/common.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); if (Application_Model_Preference::GetPlanLevel() != "disabled" - && ($_SERVER['REQUEST_URI'] != '/Dashboard/stream-player' || $_SERVER['REQUEST_URI'] != '/Playlist/audio-preview-player')) { + && ($_SERVER['REQUEST_URI'] != '/Dashboard/stream-player' || $_SERVER['REQUEST_URI'] != '/audiopreview/audio-preview-player')) { $client_id = Application_Model_Preference::GetClientId(); $view->headScript()->appendScript("var livechat_client_id = '$client_id';"); $view->headScript()->appendFile($baseUrl . '/js/airtime/common/livechat.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index d2ce2e23a..8aec515da 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -27,7 +27,8 @@ $ccAcl->add(new Zend_Acl_Resource('library')) ->add(new Zend_Acl_Resource('showbuilder')) ->add(new Zend_Acl_Resource('auth')) ->add(new Zend_Acl_Resource('playouthistory')) - ->add(new Zend_Acl_Resource('usersettings')); + ->add(new Zend_Acl_Resource('usersettings')) + ->add(new Zend_Acl_Resource('audiopreview')); /** Creating permissions */ $ccAcl->allow('G', 'index') @@ -48,7 +49,8 @@ $ccAcl->allow('G', 'index') ->allow('A', 'playouthistory') ->allow('A', 'user') ->allow('A', 'systemstatus') - ->allow('A', 'preference'); + ->allow('A', 'preference') + ->allow('A', 'audiopreview'); $aclPlugin = new Zend_Controller_Plugin_Acl($ccAcl); diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php new file mode 100644 index 000000000..4bed2ff35 --- /dev/null +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -0,0 +1,192 @@ +_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() + { + $audioFileID = $this->_getParam('audioFileID'); + $audioFileArtist = $this->_getParam('audioFileArtist'); + $audioFileTitle = $this->_getParam('audioFileTitle'); + + $request = $this->getRequest(); + $baseUrl = $request->getBaseUrl(); + + $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); + + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/preview_jplayer.js?'.filemtime($baseDir.'/js/jplayer/preview_jplayer.js'),'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.filemtime($baseDir.'/js/jplayer/jplayer.playlist.min.js'),'text/javascript'); + $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css?'.filemtime($baseDir.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css')); + $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->audioFileID = $audioFileID; + $this->view->audioFileArtist = $audioFileArtist; + $this->view->audioFileTitle = $audioFileTitle; + + $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() + { + $playlistIndex = $this->_getParam('playlistIndex'); + $playlistID = $this->_getParam('playlistID'); + + $request = $this->getRequest(); + $baseUrl = $request->getBaseUrl(); + + $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); + + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/preview_jplayer.js?'.filemtime($baseDir.'/js/jplayer/preview_jplayer.js'),'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.filemtime($baseDir.'/js/jplayer/jplayer.playlist.min.js'),'text/javascript'); + $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css?'.filemtime($baseDir.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css')); + $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'); + } + + /** + *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() as $track ){ + + $elementMap = array( 'element_title' => isset($track['CcFiles']['track_title'])?$track['CcFiles']['track_title']:"", + 'element_artist' => isset($track['CcFiles']['artist_name'])?$track['CcFiles']['artist_name']:"", + 'element_id' => isset($track['id'])?$track['id']:"", + 'element_position' => isset($track['position'])?$track['position']:"", + ); + $fileExtension = pathinfo($track['CcFiles']['filepath'], PATHINFO_EXTENSION); + if ($fileExtension === 'mp3'){ + $elementMap['element_mp3'] = $track['CcFiles']['gunid'].'.'.$fileExtension; + } else if( $fileExtension === 'ogg') { + $elementMap['element_oga'] = $track['CcFiles']['gunid'].'.'.$fileExtension; + } else { + //the media was neither mp3 or ogg + } + $result[] = $elementMap; + } + + $this->_helper->json($result); + } + + /** + * 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() + { + $showID = $this->_getParam('showID'); + $showIndex = $this->_getParam('showIndex'); + + $request = $this->getRequest(); + $baseUrl = $request->getBaseUrl(); + + $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); + + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/preview_jplayer.js?'.filemtime($baseDir.'/js/jplayer/preview_jplayer.js'),'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.filemtime($baseDir.'/js/jplayer/jplayer.playlist.min.js'),'text/javascript'); + $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css?'.filemtime($baseDir.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css')); + $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() + { + Logging::log("in audio previews getShowAction"); + + // 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['artist_name'])?$track['artist_name']:"", + 'element_position' => $position, + 'element_id' => ++$position, + ); + + $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); + if ($fileExtension === 'mp3'){ + $elementMap['element_mp3'] = $track['gunid'].'.'.$fileExtension; + } else if( $fileExtension === 'ogg') { + $elementMap['element_oga'] = $track['gunid'].'.'.$fileExtension; + } else { + //the media was neither mp3 or ogg + } + $result[] = $elementMap; + } + + $this->_helper->json($result); + + } +} \ No newline at end of file diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index dc67546f6..a3715a6f5 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -198,75 +198,6 @@ class PlaylistController extends Zend_Controller_Action } } - public function playlistPreviewAction() - { - $audioFileID = $this->_getParam('audioFileID'); - $audioFileArtist = $this->_getParam('audioFileArtist'); - $audioFileTitle = $this->_getParam('audioFileTitle'); - $playlistIndex = $this->_getParam('playlistIndex'); - $playlistID = $this->_getParam('playlistID'); - - $request = $this->getRequest(); - $baseUrl = $request->getBaseUrl(); - - $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); - - $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/preview_jplayer.js?'.filemtime($baseDir.'/js/jplayer/preview_jplayer.js'),'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.filemtime($baseDir.'/js/jplayer/jplayer.playlist.min.js'),'text/javascript'); - $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css?'.filemtime($baseDir.'/js/jplayer/skin/jplayer.audio-preview.blue.monday.css')); - $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->audioFileID = $audioFileID; - $this->view->audioFileArtist = $audioFileArtist; - $this->view->audioFileTitle = $audioFileTitle; - $this->view->playlistIndex= $playlistIndex; - $this->view->playlistID = $playlistID; - - } - - 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() as $track ){ - - $trackMap = array( 'title' => isset($track['CcFiles']['track_title'])?$track['CcFiles']['track_title']:"", - 'artist' => isset($track['CcFiles']['artist_name'])?$track['CcFiles']['artist_name']:"", - 'id' => isset($track['id'])?$track['id']:"", - 'position' => isset($track['position'])?$track['position']:"", - ); - $fileExtension = pathinfo($track['CcFiles']['filepath'], PATHINFO_EXTENSION); - if ($fileExtension === 'mp3'){ - $trackMap['mp3'] = $track['CcFiles']['gunid'].'.'.$fileExtension; - } else if( $fileExtension === 'ogg') { - $trackMap['oga'] = $track['CcFiles']['gunid'].'.'.$fileExtension; - } else { - //the media was neither mp3 or ogg - } - $result[] = $trackMap; - } - - $this->_helper->json($result); - } - public function addItemsAction() { $ids = $this->_getParam('ids', array()); diff --git a/airtime_mvc/application/models/ShowBuilder.php b/airtime_mvc/application/models/ShowBuilder.php index bb87c9e6a..07d4fb684 100644 --- a/airtime_mvc/application/models/ShowBuilder.php +++ b/airtime_mvc/application/models/ShowBuilder.php @@ -126,6 +126,7 @@ class Application_Model_ShowBuilder { $row["duration"] = $showEndDT->format("U") - $showStartDT->format("U"); $row["title"] = $p_item["show_name"]; $row["instance"] = intval($p_item["si_id"]); + $row["image"] = ''; $this->contentDT = $showStartDT; @@ -156,10 +157,11 @@ class Application_Model_ShowBuilder { $this->isCurrent($startsEpoch, min($endsEpoch, $showEndEpoch), $row); $row["id"] = intval($p_item["sched_id"]); + $row["image"] = ''; $row["instance"] = intval($p_item["si_id"]); $row["starts"] = $schedStartDT->format("H:i:s"); $row["ends"] = $schedEndDT->format("H:i:s"); - + $formatter = new LengthFormatter($p_item['file_length']); $row['runtime'] = $formatter->format(); @@ -177,12 +179,14 @@ class Application_Model_ShowBuilder { //show is empty or is a special kind of show (recording etc) else if (intval($p_item["si_record"]) === 1) { $row["record"] = true; + $row["image"] = ''; } else { $row["empty"] = true; $row["id"] = 0 ; $row["instance"] = intval($p_item["si_id"]); + $row["image"] = ''; } return $row; @@ -201,7 +205,7 @@ class Application_Model_ShowBuilder { $timeFilled = new TimeFilledFormatter($runtime); $row["fRuntime"] = $timeFilled->format(); - + $row["image"] = ''; return $row; } @@ -293,7 +297,6 @@ class Application_Model_ShowBuilder { } if (!$this->hasCurrent) { - } return $display_items; diff --git a/airtime_mvc/application/views/scripts/playlist/playlist-preview.phtml b/airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml similarity index 89% rename from airtime_mvc/application/views/scripts/playlist/playlist-preview.phtml rename to airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml index fd5ba3c0a..0ec94a16a 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist-preview.phtml +++ b/airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml @@ -1,11 +1,17 @@
+ +playlistID)) { ?> + playlistID" ?> + playlistIndex" ?> +audioFileID)) { ?> audioFileID" ?> audioFileTitle" ?> audioFileArtist" ?> - playlistID" ?> - playlistIndex" ?> - +showID)) { ?> + showID" ?> + showIndex" ?> +