diff --git a/airtime_mvc/application/modules/rest/Bootstrap.php b/airtime_mvc/application/modules/rest/Bootstrap.php index b8575a2cf..3ac5a1891 100644 --- a/airtime_mvc/application/modules/rest/Bootstrap.php +++ b/airtime_mvc/application/modules/rest/Bootstrap.php @@ -21,6 +21,17 @@ class Rest_Bootstrap extends Zend_Application_Module_Bootstrap ); $router->addRoute('podcast-bulk', $podcastBulkRoute); + + $smartblockPodcastRoute = new Zend_Controller_Router_Route( + 'rest/podcast/smartblock', + array( + 'controller' => 'podcast', + 'action' => 'smartblock', + 'module' => 'rest' + ) + ); + $router->addRoute('podcast-smartblock', $smartblockPodcastRoute); + $stationPodcastRoute = new Zend_Controller_Router_Route( 'rest/podcast/station', array( diff --git a/airtime_mvc/application/modules/rest/controllers/PodcastController.php b/airtime_mvc/application/modules/rest/controllers/PodcastController.php index f80b16c34..eb454cb94 100644 --- a/airtime_mvc/application/modules/rest/controllers/PodcastController.php +++ b/airtime_mvc/application/modules/rest/controllers/PodcastController.php @@ -191,6 +191,26 @@ class Rest_PodcastController extends Zend_Rest_Controller $this->_helper->json->sendJson($responseBody); } + + /** + * Endpoint for triggering the generation of a smartblock and playlist to match the podcast name + */ + + public function smartblockAction() { + + $title = $this->_getParam('title', []); + $id = $this->_getParam('id', []); + if (!$id) { + return; + } + $podcast = Application_Service_PodcastService::getPodcastById($id); + + // logging::info($podcast); + Application_Service_PodcastService::createPodcastSmartblockAndPlaylist($podcast, $title); + } + + + /** * @throws PodcastNotFoundException * diff --git a/airtime_mvc/application/services/PodcastService.php b/airtime_mvc/application/services/PodcastService.php index b9aecb389..8ea319772 100644 --- a/airtime_mvc/application/services/PodcastService.php +++ b/airtime_mvc/application/services/PodcastService.php @@ -162,49 +162,59 @@ class Application_Service_PodcastService /** * @param $podcast + * @param $title passed in directly from web UI input * This will automatically create a smartblock and playlist for this podcast. */ - public static function createPodcastSmartblockAndPlaylist($podcast) + public static function createPodcastSmartblockAndPlaylist($podcast, $title = null) { - $newBl = new Application_Model_Block(); - $newBl->setCreator(Application_Model_User::getCurrentUser()->getId()); - $newBl->setName($podcast->getDbTitle()); - $newBl->setDescription('Auto-generated smartblock for podcast'); - $newBl->saveType('dynamic'); - // limit the smartblock to 1 item - $row = new CcBlockcriteria(); - $row->setDbCriteria('limit'); - $row->setDbModifier('items'); - $row->setDbValue(1); - $row->setDbBlockId($newBl->getId()); - $row->save(); - - // sort so that it is the newest item - $row = new CcBlockcriteria(); - $row->setDbCriteria('sort'); - $row->setDbModifier('N/A'); - $row->setDbValue('newest'); - $row->setDbBlockId($newBl->getId()); - $row->save(); - - // match the track by ensuring the album title matches the podcast - $row = new CcBlockcriteria(); - $row->setDbCriteria('album_title'); - $row->setDbModifier('is'); - $row->setDbValue($newBl->getName()); - $row->setDbBlockId($newBl->getId()); - $row->save(); - - $newPl = new Application_Model_Playlist(); - $newPl->setName($podcast->getDbTitle()); - $newPl->setCreator(Application_Model_User::getCurrentUser()->getId()); - $row = new CcPlaylistcontents(); - $row->setDbBlockId($newBl->getId()); - $row->setDbPlaylistId($newPl->getId()); - $row->setDbType(2); - $row->save(); + if (is_array($podcast)) { + $newpodcast = new Podcast(); + $newpodcast->fromArray($podcast, BasePeer::TYPE_FIELDNAME); + $podcast = $newpodcast; } + if ($title == null) { + $title = $podcast->getDbTitle(); + } + // Base class + $newBl = new Application_Model_Block(); + $newBl->setCreator(Application_Model_User::getCurrentUser()->getId()); + $newBl->setName($title); + $newBl->setDescription('Auto-generated smartblock for podcast'); + $newBl->saveType('dynamic'); + // limit the smartblock to 1 item + $row = new CcBlockcriteria(); + $row->setDbCriteria('limit'); + $row->setDbModifier('items'); + $row->setDbValue(1); + $row->setDbBlockId($newBl->getId()); + $row->save(); + + // sort so that it is the newest item + $row = new CcBlockcriteria(); + $row->setDbCriteria('sort'); + $row->setDbModifier('N/A'); + $row->setDbValue('newest'); + $row->setDbBlockId($newBl->getId()); + $row->save(); + + // match the track by ensuring the album title matches the podcast + $row = new CcBlockcriteria(); + $row->setDbCriteria('album_title'); + $row->setDbModifier('is'); + $row->setDbValue($title); + $row->setDbBlockId($newBl->getId()); + $row->save(); + + $newPl = new Application_Model_Playlist(); + $newPl->setName($title); + $newPl->setCreator(Application_Model_User::getCurrentUser()->getId()); + $row = new CcPlaylistcontents(); + $row->setDbBlockId($newBl->getId()); + $row->setDbPlaylistId($newPl->getId()); + $row->setDbType(2); + $row->save(); + } public static function createStationPodcast() diff --git a/airtime_mvc/application/views/scripts/podcast/podcast.phtml b/airtime_mvc/application/views/scripts/podcast/podcast.phtml index 1472bc78b..2a2c8122e 100644 --- a/airtime_mvc/application/views/scripts/podcast/podcast.phtml +++ b/airtime_mvc/application/views/scripts/podcast/podcast.phtml @@ -7,23 +7,36 @@