diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index f1d14a489..6c9b0bfd9 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -46,6 +46,7 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetDefaultFadeIn($values["stationDefaultFadeIn"]); Application_Model_Preference::SetDefaultFadeOut($values["stationDefaultFadeOut"]); Application_Model_Preference::SetPodcastAlbumOverride($values["podcastAlbumOverride"]); + Application_Model_Preference::SetPodcastAutoSmartblock($values["podcastAutoSmartblock"]); Application_Model_Preference::SetAllow3rdPartyApi($values["thirdPartyApi"]); Application_Model_Preference::SetAllowedCorsUrls($values["allowedCorsUrls"]); Application_Model_Preference::SetDefaultLocale($values["locale"]); diff --git a/airtime_mvc/application/forms/GeneralPreferences.php b/airtime_mvc/application/forms/GeneralPreferences.php index d7ac46f37..924264751 100644 --- a/airtime_mvc/application/forms/GeneralPreferences.php +++ b/airtime_mvc/application/forms/GeneralPreferences.php @@ -110,13 +110,29 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm $podcast_album_override->setValue(Application_Model_Preference::GetPodcastAlbumOverride()); $podcast_album_override->setDescription(_('Enabling this means that podcast tracks will always contain the podcast name in their album field.')); $podcast_album_override->setSeparator(' '); //No
between radio buttons - //$third_party_api->addDecorator(new Zend_Form_Decorator_Label(array('tag' => 'dd', 'class' => 'radio-inline-list'))); $podcast_album_override->addDecorator('HtmlTag', array('tag' => 'dd', 'id'=>"podcastAlbumOverride-element", 'class' => 'radio-inline-list', )); $this->addElement($podcast_album_override); + $podcast_auto_smartblock = new Zend_Form_Element_Radio('podcastAutoSmartblock'); + $podcast_auto_smartblock->setLabel(_('Podcast Automatic Smartblock and Playlist')); + $podcast_auto_smartblock->setMultiOptions(array( + _("Disabled"), + _("Enabled"), + )); + $podcast_auto_smartblock->setValue(Application_Model_Preference::GetPodcastAutoSmartblock()); + $podcast_auto_smartblock->setDescription(_('Enabling this means that a smartblock and playlist matching the newest track of a + podcast will be created when a new podcast is added. This depends upon the Podcast Album Override to work.')); + $podcast_auto_smartblock->setSeparator(' '); //No
between radio buttons + $podcast_auto_smartblock->addDecorator('HtmlTag', array('tag' => 'dd', + 'id'=>"podcastAutoSmartblock-element", + 'class' => 'radio-inline-list', + )); + $this->addElement($podcast_auto_smartblock); + + //TODO add and insert Podcast Smartblock and Playlist autogenerate options $third_party_api = new Zend_Form_Element_Radio('thirdPartyApi'); $third_party_api->setLabel(_('Public Airtime API')); diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 296915956..4dee92700 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -376,6 +376,18 @@ class Application_Model_Preference return $val === '1' ? true : false; } + public static function SetPodcastAutoSmartblock($bool) + { + self::setValue("podcast_auto_smartblock", $bool); + } + + public static function GetPodcastAutoSmartblock() + { + $val = self::getValue("podcast_auto_smartblock"); + return $val === '1' ? true : false; + } + + public static function SetPhone($phone) { self::setValue("phone", $phone); diff --git a/airtime_mvc/application/services/PodcastService.php b/airtime_mvc/application/services/PodcastService.php index 73039f863..1a57e6515 100644 --- a/airtime_mvc/application/services/PodcastService.php +++ b/airtime_mvc/application/services/PodcastService.php @@ -147,6 +147,12 @@ class Application_Service_PodcastService $importedPodcast->setDbAutoIngest(true); $importedPodcast->save(); + // if the autosmartblock and album override are enabled then create a smartblock and playlist matching this podcast via the album name + if (Application_Model_Preference::GetPodcastAutoSmartblock() && Application_Model_Preference::GetPodcastAlbumOverride()) { + self::createPodcastSmartblockAndPlaylist($podcast); + } + + return $podcast->toArray(BasePeer::TYPE_FIELDNAME); } catch(Exception $e) { $podcast->delete(); @@ -154,6 +160,53 @@ class Application_Service_PodcastService } } + /** + * @param $podcast + * This will automatically create a smartblock and playlist for this podcast. + */ + + public static function createPodcastSmartblockAndPlaylist($podcast) + { + $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(); + } + + public static function createStationPodcast() { $podcast = new Podcast(); diff --git a/airtime_mvc/application/views/scripts/form/preferences_general.phtml b/airtime_mvc/application/views/scripts/form/preferences_general.phtml index 61dbfeabe..8e9c63562 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_general.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_general.phtml @@ -33,6 +33,8 @@ element->getElement('podcastAlbumOverride')->render() ?> + element->getElement('podcastAutoSmartblock')->render() ?> + element->getElement('thirdPartyApi')->render() ?> element->getElement('allowedCorsUrls')->render() ?> diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index 8850caa32..b54932658 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -29,6 +29,19 @@ function setEnableSystemEmailsListener() { }); } +function setPodcastAutoSmartblockReadonly() { + var disablePodcastAutomSmartblock = $("#podcastAutoSmartblock-0"); + var enablePodcastAutomSmartblock = $("#podcastAutoSmartblock-1"); + var podcastOverride = $("#podcastAlbumOverride-1"); + if ($(podcastOverride).is(':checked')) { + enablePodcastAutomSmartblock.removeAttr("readonly"); + } else { + disablePodcastAutomSmartblock.prop("checked", true); + disablePodcastAutomSmartblock.attr("readonly","readonly"); + enablePodcastAutomSmartblock.attr("readonly","readonly"); + } +} + function setSystemFromEmailReadonly() { var enableSystemEmails = $("#enableSystemEmail"); var systemFromEmail = $("#systemEmail"); @@ -189,6 +202,7 @@ $(document).ready(function() { showErrorSections(); setMailServerInputReadonly(); + setPodcastAutoSmartblockReadonly(); setSystemFromEmailReadonly(); setConfigureMailServerListener(); setEnableSystemEmailsListener();