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();