From e674654cb140745d10ce3f05835689877bc1bf6f Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 17:23:52 -0400 Subject: [PATCH 01/14] CC-4192: Smart Playlist Builder: make save button save title, description, and criteria -done --- .../controllers/PlaylistController.php | 23 +++++-- .../scripts/form/smart-block-criteria.phtml | 6 -- .../views/scripts/playlist/playlist.phtml | 8 +-- .../views/scripts/playlist/smart-block.phtml | 7 +- airtime_mvc/public/js/airtime/library/spl.js | 68 +++++++++---------- .../airtime/playlist/smart_playlistbuilder.js | 16 +++-- 6 files changed, 65 insertions(+), 63 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index b8468af6b..9e1b32dcb 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -24,7 +24,7 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('set-playlist-description', 'json') ->addActionContext('playlist-preview', 'json') ->addActionContext('get-playlist', 'json') - ->addActionContext('smart-block-criteria-save', 'json') + ->addActionContext('save', 'json') ->addActionContext('smart-block-generate', 'json') ->addActionContext('smart-block-shuffle', 'json') ->addActionContext('get-block-info', 'json') @@ -478,14 +478,17 @@ class PlaylistController extends Zend_Controller_Action } } - public function setPlaylistNameAction() + public function setPlaylistNameDescAction() { $name = $this->_getParam('name', 'Unknown Playlist'); + $description = $this->_getParam('description', ""); $type = $this->_getParam('type'); try { $obj = $this->getPlaylist($type); $obj->setName($name); + $obj->setDescription($description); + $this->view->description = $obj->getDescription(); $this->view->playlistName = $name; $this->view->modified = $obj->getLastModified("U"); } catch (PlaylistOutDatedException $e) { @@ -497,6 +500,7 @@ class PlaylistController extends Zend_Controller_Action } } + /* public function setPlaylistDescriptionAction() { $description = $this->_getParam('description', ""); @@ -515,13 +519,22 @@ class PlaylistController extends Zend_Controller_Action $this->playlistUnknownError($e); } } + */ - public function smartBlockCriteriaSaveAction() + public function saveAction() { $request = $this->getRequest(); $params = $request->getPost(); - $bl = new Application_Model_Block($params['obj_id']); - $result = $bl->saveSmartBlockCriteria($params['data']); + $result = array(); + + $this->setPlaylistNameDescAction(); + + if ($params['type'] == 'block') { + $bl = new Application_Model_Block($params['obj_id']); + $result = $bl->saveSmartBlockCriteria($params['criteria']); + } + + $result["modified"] = $this->view->modified; die(json_encode($result)); } diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index 509457d67..37b798813 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -18,7 +18,6 @@ - element->getElement('save_button') ?> element->getElement('generate_button') ?> element->getElement('shuffle_button') ?> @@ -96,10 +95,5 @@ - numOfSubForm; $i++){ - echo $this->parent_form->getSubform('sp_set_'.$i); - }*/ - ?> diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index 7d1a77021..4fb181457 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -12,6 +12,8 @@ if (isset($this->obj)) { + + obj)) : ?> @@ -22,6 +24,7 @@ if (isset($this->obj)) {

length; ?>

+
View / edit description @@ -30,11 +33,6 @@ if (isset($this->obj)) {
- -
- - -
diff --git a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml index 4351057e3..1ffff0c02 100644 --- a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml +++ b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml @@ -12,6 +12,8 @@ if (isset($this->obj)) { +form->getElement('save_button');?> + obj)) : ?> @@ -30,11 +32,6 @@ if (isset($this->obj)) {
- -
- - -
diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index f0a5354eb..0a03df91a 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -590,41 +590,39 @@ var AIRTIME = (function(AIRTIME){ }); - } - - - ) - $pl.on("click", "#description_save", function(){ - var textarea = $pl.find("#fieldset-metadate_change textarea"), - description = textarea.val(), - url, - lastMod = getModified(), - type = $('#obj_type').val(); - - url = '/Playlist/set-playlist-description'; - - $.post(url, - {format: "json", description: description, modified: lastMod, type: type}, - function(json){ - if (json.error !== undefined){ - playlistError(json); - } - else{ - setModified(json.modified); - textarea.val(json.description); - $pl.find("#fieldset-metadate_change").addClass("closed"); - redrawLib(); - } - }); - }); - - $pl.on("click", "#description_cancel", function(){ - var textarea = $pl.find("#fieldset-metadate_change textarea"); - - textarea.val(cachedDescription); - $pl.find("#fieldset-metadate_change").addClass("closed"); - }); - //end edit playlist description events. + }); + + $('#save_button').live("click", function(event){ + /* Smart blocks: get name, description, and criteria + * Playlists: get name, description + */ + var criteria = $('form').serializeArray(), + block_name = $('#playlist_name_display').text(), + block_desc = $('textarea[name="description"]').val(), + save_action = 'Playlist/save', + obj_id = $('input[id="obj_id"]').val(), + obj_type = $('#obj_type').val(), + lastMod = getModified(), + dt = $('table[id="library_display"]').dataTable(); + enableLoadingIcon(); + $.post(save_action, + {format: "json", criteria: criteria, name: block_name, description: block_desc, obj_id: obj_id, type: obj_type, modified: lastMod}, + function(data){ + var json = $.parseJSON(data); + setModified(json.modified); + if (obj_type == "block") { + callback(data, "save"); + } else { + $('.success').text('Playlist saved'); + $('.success').show(); + setTimeout(removeSuccessMsg, 5000); + dt.fnStandingRedraw(); + } + setFadeIcon(); + disableLoadingIcon(); + } + ); + }); } function setUpPlaylist() { diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index ae7ea76c5..aaffed559 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -186,17 +186,21 @@ function setSmartPlaylistEvents() { }); /********** SAVE ACTION **********/ - form.find('button[id="save_button"]').live("click", function(event){ - var data = $('form').serializeArray(), - save_action = 'Playlist/smart-block-criteria-save', + /* moved to spl.js + $('#save_button').live("click", function(event){ + var criteria = $('form').serializeArray(), + block_name = $('#playlist_name_display').text(), + block_desc = $('textarea[name="description"]').val(), + save_action = 'Playlist/save', obj_id = $('input[id="obj_id"]').val(); enableLoadingIcon(); - $.post(save_action, {format: "json", data: data, obj_id: obj_id}, function(data){ + $.post(save_action, {format: "json", criteria: criteria, name: block_name, desc: block_desc, obj_id: obj_id}, function(data){ callback(data, "save"); setFadeIcon(); disableLoadingIcon(); }); }); + */ /********** GENERATE ACTION **********/ form.find('button[id="generate_button"]').live("click", function(event){ @@ -482,8 +486,6 @@ function callback(data, type) { } else { form.find('.success').text('Criteria saved'); form.find('.success').show(); - //redraw library table incase block changed from static to dynamic or vice versa - dt.fnStandingRedraw(); /* Update number of files that meet criteria and change icon to success/warning * as appropriate. This is also done in the form but we do not pass the form @@ -515,7 +517,7 @@ function callback(data, type) { } function removeSuccessMsg() { - var $status = $('#smart-playlist-form').find('.success'); + var $status = $('.success'); $status.fadeOut("slow", function(){$status.empty()}); } From e6ee29f57c7f0fb6f24967254109edf70de81f66 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 17:28:35 -0400 Subject: [PATCH 02/14] Smart Playlist Options: changed width of fieldset --- airtime_mvc/public/css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index 41d230e8a..e12df0030 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -502,7 +502,7 @@ table.library-get-file-md.table-small{ /***** SMART PLAYLIST SPECIFIC STYLES BEGIN *****/ .sp-scrollable{ overflow-x: auto; - width: 781px; + width: 765px; } .sp-invisible{ From ac295243d484dc3fc4551bc6f526f9dda3bf5bbb Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 17:34:47 -0400 Subject: [PATCH 03/14] Smart Playlists: changed success message for 'Save' button --- airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index aaffed559..058f51060 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -484,7 +484,7 @@ function callback(data, type) { form.find('.success').show(); form.find('#smart_playlist_options').removeClass("closed"); } else { - form.find('.success').text('Criteria saved'); + form.find('.success').text('Smart Playlist saved'); form.find('.success').show(); /* Update number of files that meet criteria and change icon to success/warning From 4129900858e81cf776475db9489ffe4ec064d360 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 9 Aug 2012 17:42:25 -0400 Subject: [PATCH 04/14] CC-1665: Scheduled stream rebroadcasting and recording -step 1 of getting stream preview on show builder working --- .../controllers/AudiopreviewController.php | 20 ++- airtime_mvc/application/models/Playlist.php | 115 +++++++++--------- .../application/models/ShowInstance.php | 3 +- .../airtime/audiopreview/preview_jplayer.js | 12 +- 4 files changed, 81 insertions(+), 69 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index 7e8150914..c0aafd4e2 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -272,13 +272,21 @@ class AudiopreviewController extends Zend_Controller_Action 'element_id' => ++$position, ); - $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); - if (strtolower($fileExtension) === 'mp3') { - $elementMap['element_mp3'] = $track['item_id']; - } elseif (strtolower($fileExtension) === 'ogg') { - $elementMap['element_oga'] = $track['item_id']; + $elementMap['type'] = $track['type']; + if ($track['type'] == 0) { + $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); + if (strtolower($fileExtension) === 'mp3') { + $elementMap['element_mp3'] = $track['item_id']; + } elseif (strtolower($fileExtension) === 'ogg') { + $elementMap['element_oga'] = $track['item_id']; + } else { + //the media was neither mp3 or ogg + throw new Exception("Unknown file type"); + } + + $elementMap['uri'] = "/api/get-media/file/".$track['item_id']; } else { - //the media was neither mp3 or ogg + $elementMap['uri'] = $track['path']; } $result[] = $elementMap; } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index a6d540784..23ca9d2c2 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -154,40 +154,67 @@ class Application_Model_Playlist public function getContents($filterFiles=false) { Logging::log("Getting contents for playlist {$this->id}"); - $files = array(); - /* - $query = CcPlaylistcontentsQuery::create() - ->filterByDbPlaylistId($this->id); - if ($filterFiles) { - $query->useCcFilesQuery() - ->filterByDbFileExists(true) - ->endUse(); - } - $query->orderByDbPosition() - ->filterByDbType(0) - ->leftJoinWith('CcFiles'); - $rows = $query->find($this->con); - */ - $sql = <<<"EOT" -(SELECT * FROM -((SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, - f.id as item_id, f.track_title, f.artist_name as creator, f.file_exists as exists, f.filepath as path FROM cc_playlistcontents AS pc - JOIN cc_files AS f ON pc.file_id=f.id WHERE pc.playlist_id = {$this->id} AND type = 0) -UNION ALL -(SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, -ws.id as item_id, (ws.name || ': ' || ws.url) as title, sub.login as creator, 't'::boolean as exists, ws.url as path FROM cc_playlistcontents AS pc -JOIN cc_webstream AS ws on pc.stream_id=ws.id -LEFT JOIN cc_subjs as sub on sub.id = ws.creator_id -WHERE pc.playlist_id = {$this->id} AND pc.type = 1) -UNION ALL -(SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, -bl.id as item_id, bl.name as title, sbj.login as creator, 't'::boolean as exists, NULL::text as path FROM cc_playlistcontents AS pc -JOIN cc_block AS bl on pc.block_id=bl.id -JOIN cc_subjs as sbj ON bl.creator_id=sbj.id WHERE pc.playlist_id = {$this->id} AND pc.type = 2)) as temp -ORDER BY temp.position); -EOT; + $sql = <<id} + AND TYPE = 0) + UNION ALL + (SELECT pc.id AS id, + pc.TYPE, pc.position, + pc.cliplength AS LENGTH, + pc.cuein, + pc.cueout, + pc.fadein, + pc.fadeout, + ws.id AS item_id, + (ws.name || ': ' || ws.url) AS title, + sub.login AS creator, + 't'::boolean AS EXISTS, + ws.url AS path + FROM cc_playlistcontents AS pc + JOIN cc_webstream AS ws ON pc.stream_id=ws.id + LEFT JOIN cc_subjs AS sub ON sub.id = ws.creator_id + WHERE pc.playlist_id = {$this->id} + AND pc.TYPE = 1) + UNION ALL + (SELECT pc.id AS id, + pc.TYPE, pc.position, + pc.cliplength AS LENGTH, + pc.cuein, + pc.cueout, + pc.fadein, + pc.fadeout, + bl.id AS item_id, + bl.name AS title, + sbj.login AS creator, + 't'::boolean AS EXISTS, + NULL::text AS path + FROM cc_playlistcontents AS pc + JOIN cc_block AS bl ON pc.block_id=bl.id + JOIN cc_subjs AS sbj ON bl.creator_id=sbj.id + WHERE pc.playlist_id = {$this->id} + AND pc.TYPE = 2)) AS temp + ORDER BY temp.position); +SQL; + $con = Propel::getConnection(); $rows = $con->query($sql)->fetchAll(); @@ -198,7 +225,7 @@ EOT; $offset_cliplength = Application_Common_DateHelper::secondsToPlaylistTime($offset); //format the length for UI. - if ($row['type'] == 2){ + if ($row['type'] == 2) { $bl = new Application_Model_Block($row['item_id']); $formatter = new LengthFormatter($bl->getFormattedLength()); } else { @@ -210,28 +237,6 @@ EOT; $row['offset'] = $formatter->format(); } - /* - $i = 0; - $offset = 0; - foreach ($rows as $row) { - Logging::log($row); - $files[$i] = $row->toArray(BasePeer::TYPE_FIELDNAME, true, true); - - $clipSec = Application_Common_DateHelper::playlistTimeToSeconds($files[$i]['cliplength']); - $offset += $clipSec; - $offset_cliplength = Application_Common_DateHelper::secondsToPlaylistTime($offset); - - //format the length for UI. - $formatter = new LengthFormatter($files[$i]['cliplength']); - $files[$i]['cliplength'] = $formatter->format(); - - $formatter = new LengthFormatter($offset_cliplength); - $files[$i]['offset'] = $formatter->format(); - - $i++; - } - */ - return $rows; } diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index f0955313a..d6b9e0538 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -653,9 +653,8 @@ class Application_Model_ShowInstance WHERE s.instance_id = '{$this->_instanceId}' AND s.playout_status >= 0 ORDER BY starts"; - //Logging::log($sql); - $results = $con->query($sql)->fetchAll(); + $results = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC); foreach ($results as &$row) { diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js index 6e0538ada..a20f7421a 100644 --- a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js @@ -111,8 +111,9 @@ function playAllShow(p_showID, p_index) { } /** - * This function will call the AudiopreviewController to get the contents of either a show or playlist - * Looping throught the returned contents and creating media for each track. + * This function will call the AudiopreviewController to get the contents of + * either a show or playlist Looping throught the returned contents and + * creating media for each track. * * Then trigger the jplayer to play the list. */ @@ -123,8 +124,7 @@ function buildplaylist(p_url, p_playIndex) { var media; var index; var total = 0; - for(index in data){ - + for(index in data) { if (data[index]['type'] == 0) { if (data[index]['element_mp3'] != undefined){ media = {title: data[index]['element_title'], @@ -146,8 +146,8 @@ function buildplaylist(p_url, p_playIndex) { if (media) { myPlaylist[index] = media; } - // we should create a map according to the new position in the player itself - // total is the index on the player + // we should create a map according to the new position in the + // player itself total is the index on the player _idToPostionLookUp[data[index]['element_id']] = total; total++; } From 23683ccccb70f838288582d8a1ce9cca2bfc1ddd Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 17:43:12 -0400 Subject: [PATCH 05/14] Smart Playlists: changed positioning of error message on click 'Save' --- .../application/views/scripts/playlist/smart-block.phtml | 1 + .../public/js/airtime/playlist/smart_playlistbuilder.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml index 35e581858..d720ae7a0 100644 --- a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml +++ b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml @@ -24,6 +24,7 @@ if (isset($this->obj)) {

length; ?>

+
View / edit description diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index 058f51060..0a4637b24 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -475,7 +475,7 @@ function callback(data, type) { AIRTIME.playlist.fnOpenPlaylist(json); form = $('#smart-playlist-form'); if (type == 'shuffle') { - form.find('.success').text('Playlist shuffled'); + form.find('.success').text('Smart playlist shuffled'); } else if (type == 'generate') { form.find('.success').text('Smart playlist generated and saved'); //redraw library table so the length gets updated @@ -484,8 +484,8 @@ function callback(data, type) { form.find('.success').show(); form.find('#smart_playlist_options').removeClass("closed"); } else { - form.find('.success').text('Smart Playlist saved'); - form.find('.success').show(); + $('#sp-success-saved').text('Smart playlist saved'); + $('#sp-success-saved').show(); /* Update number of files that meet criteria and change icon to success/warning * as appropriate. This is also done in the form but we do not pass the form From 321e6c65242e8a889e509526b1190e946a49cafc Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 17:55:08 -0400 Subject: [PATCH 06/14] CC-4197: Media Library -> Regular Playlist: Some character get cut off in context view -fixed --- .../views/scripts/library/get-file-metadata.ajax.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml b/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml index 468bcf57c..82c74b2ec 100644 --- a/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml +++ b/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml @@ -53,7 +53,7 @@ contents as $row) : ?> $titleMaxStrLen) { + if (mb_strlen($row["track_title"], 'UTF-8') > $titleMaxStrLen) { $row["track_title"] = substr($row["track_title"], 0, 34)."..."; } $artistMaxStrLen = 22; From 65cb34db4af011cdad7f2e2a6e01eca13ccf8a2f Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 9 Aug 2012 18:14:53 -0400 Subject: [PATCH 07/14] CC-1665: Scheduled stream rebroadcasting and recording -webstream preview on show builder working --- .../controllers/AudiopreviewController.php | 2 +- .../application/models/ShowInstance.php | 38 ++++++++++++++++--- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index c0aafd4e2..d667363df 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -286,7 +286,7 @@ class AudiopreviewController extends Zend_Controller_Action $elementMap['uri'] = "/api/get-media/file/".$track['item_id']; } else { - $elementMap['uri'] = $track['path']; + $elementMap['uri'] = $track['filepath']; } $result[] = $elementMap; } diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index d6b9e0538..6d3f988c0 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -648,11 +648,37 @@ class Application_Model_ShowInstance { $con = Propel::getConnection(); - $sql = "SELECT * - FROM (cc_schedule AS s LEFT JOIN cc_files AS f ON f.id = s.file_id) - WHERE s.instance_id = '{$this->_instanceId}' AND s.playout_status >= 0 - ORDER BY starts"; - + $sql = <<= 0 + AND s.file_id IS NOT NULL) + UNION + (SELECT s.starts, + 1::INTEGER as type, + ws.id AS item_id, + (ws.name || ': ' || ws.url) AS title, + sub.login AS creator, + 't'::boolean AS EXISTS, + ws.url AS filepath + FROM cc_schedule AS s + LEFT JOIN cc_webstream AS ws ON ws.id = s.stream_id + LEFT JOIN cc_subjs AS sub ON ws.creator_id = sub.id + WHERE s.instance_id = '{$this->_instanceId}' + AND s.playout_status >= 0 + AND s.stream_id IS NOT NULL)) AS temp +ORDER BY starts; +SQL; $results = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC); @@ -681,7 +707,7 @@ class Application_Model_ShowInstance $query = $con->query($sql)->fetchColumn(0); - return ($query !== false) ? $query : NULL; + return ($query !== false) ? $query : null; } public function getShowEndGapTime() From 10ea825536adf3c7ad082eacd651ff83979ca5c6 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 9 Aug 2012 18:24:22 -0400 Subject: [PATCH 08/14] CC-4201: Playlist Builder -> Smart Playlist: DJ user can edit SP created by others in particular situation -fixed --- airtime_mvc/application/controllers/PlaylistController.php | 2 +- .../application/views/scripts/playlist/playlist.phtml | 3 +-- .../application/views/scripts/playlist/smart-block.phtml | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 8738a4d21..07f1eee21 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -195,9 +195,9 @@ class PlaylistController extends Zend_Controller_Action $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - $this->view->obj = $obj; if($isAdminOrPM || $obj->getCreatorId() == $userInfo->id){ + $this->view->obj = $obj; if($this->obj_sess->type == "block"){ $form = new Application_Form_SmartBlockCriteria(); $form->startForm($this->obj_sess->id); diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index 35593e06e..8b18580b2 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -12,9 +12,8 @@ if (isset($this->obj)) { - - obj)) : ?> + diff --git a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml index d720ae7a0..a7a26b661 100644 --- a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml +++ b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml @@ -12,7 +12,11 @@ if (isset($this->obj)) { -form->getElement('save_button');?> +form)) { + echo $this->form->getElement('save_button'); +} +?> obj)) : ?> From 037e78730be1f6c3eeb56ed79f0f3b655e2a3340 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 9 Aug 2012 18:27:46 -0400 Subject: [PATCH 09/14] CC-4203: Smart Playlist: Please support limit as 0.5 hour -fixed --- airtime_mvc/application/models/Block.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 63bbb0bc0..005a170a9 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -944,7 +944,7 @@ EOT; if ($data['etc']['sp_limit_value'] == "" || floatval($data['etc']['sp_limit_value']) <= 0) { $error[] = "Limit cannot be empty or smaller than 0"; } else { - $mins = $data['etc']['sp_limit_value'] * $multiplier; + $mins = floatval($data['etc']['sp_limit_value']) * $multiplier; if ($mins > 1440) { $error[] = "Limit cannot be more than 24 hrs"; } @@ -1332,7 +1332,7 @@ EOT; $limits['time'] = 1440 * 60; $limits['items'] = $storedCrit['limit']['value']; } else { - $limits['time'] = $storedCrit['limit']['modifier'] == "hours" ? intval($storedCrit['limit']['value']) * 60 * 60 : intval($storedCrit['limit']['value'] * 60); + $limits['time'] = $storedCrit['limit']['modifier'] == "hours" ? intval(floatval($storedCrit['limit']['value']) * 60 * 60) : intval($storedCrit['limit']['value'] * 60); $limits['items'] = null; } } From c774e3b9bd5907e58ce924e5a8e6f6e8439b1a5a Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 10 Aug 2012 10:42:01 -0400 Subject: [PATCH 10/14] Smart Playlists: got rid of horitzontal scrolling --- .../views/scripts/form/smart-block-criteria.phtml | 2 +- airtime_mvc/public/css/styles.css | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index 37b798813..3ee4baa83 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -1,5 +1,5 @@
-
+
Smart Playlist Options
diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index e12df0030..3e7d53362 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -500,11 +500,6 @@ table.library-get-file-md.table-small{ /***** SMART PLAYLIST SPECIFIC STYLES BEGIN *****/ -.sp-scrollable{ - overflow-x: auto; - width: 765px; -} - .sp-invisible{ visibility: hidden; } From 7d73f0996cc064d375b7e1a1e888bc16fb2e1ff9 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 10 Aug 2012 10:54:13 -0400 Subject: [PATCH 11/14] CC-4205: Smart Playlist Builder: Change text on button mouseovers -done --- airtime_mvc/application/forms/SmartBlockCriteria.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 8fb007aef..b71d83e9a 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -277,7 +277,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $save = new Zend_Form_Element_Button('save_button'); $save->setAttrib('class', 'ui-button ui-state-default sp-button'); - $save->setAttrib('title', 'Save criteria only'); + $save->setAttrib('title', 'Save playlist'); $save->setIgnore(true); $save->setLabel('Save'); $save->setDecorators(array('viewHelper')); @@ -285,7 +285,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $generate = new Zend_Form_Element_Button('generate_button'); $generate->setAttrib('class', 'ui-button ui-state-default sp-button'); - $generate->setAttrib('title', 'Save criteria and generate block content'); + $generate->setAttrib('title', 'Generate playlist content'); $generate->setIgnore(true); $generate->setLabel('Generate'); $generate->setDecorators(array('viewHelper')); @@ -293,7 +293,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $shuffle = new Zend_Form_Element_Button('shuffle_button'); $shuffle->setAttrib('class', 'ui-button ui-state-default sp-button'); - $shuffle->setAttrib('title', 'Shuffle block content'); + $shuffle->setAttrib('title', 'Shuffle playlist content'); $shuffle->setIgnore(true); $shuffle->setLabel('Shuffle'); $shuffle->setDecorators(array('viewHelper')); From bd966915eefffb4f5d8c4597a74037ec0e84532c Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 10 Aug 2012 11:56:01 -0400 Subject: [PATCH 12/14] CC-4207: Smart Playlists: Criteria is lost on 'Shuffle' click -fixed --- .../application/controllers/PlaylistController.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 07f1eee21..424f13883 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -565,8 +565,15 @@ class PlaylistController extends Zend_Controller_Action { $request = $this->getRequest(); $params = $request->getPost(); - $bl = new Application_Model_Block($params['obj_id']); - $result = $bl->shuffleSmartBlock(); + $bl = new Application_Model_Block($params['obj_id']); + + //we need to save criteria in case user hasn't clicked Save or Generate yet + $result = $bl->saveSmartBlockCriteria($params['data']); + + //only shuffle if there are no criteria errors + if ($result['result'] == 0) { + $result = $bl->shuffleSmartBlock(); + } if ($result['result'] == 0) { try { die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); From 7911761017ff959b1cf5178561f808145350f692 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 10 Aug 2012 12:22:59 -0400 Subject: [PATCH 13/14] CC-4208: Smart Playlists: Cannot see error messages sometimes after clicking 'Save' -fixed --- .../js/airtime/playlist/smart_playlistbuilder.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index 0a4637b24..1a9a5b85b 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -23,9 +23,7 @@ function setSmartPlaylistEvents() { /********** ADD MODIFIER ROW **********/ form.find('a[id^="modifier_add"]').live('click', function(){ - var id = $(this).attr('id'), - row_index = id.charAt(id.length-1), - criteria_value = $(this).siblings('select[name^="sp_criteria_field"]').val(); + var criteria_value = $(this).siblings('select[name^="sp_criteria_field"]').val(); //make new modifier row var newRow = $(this).parent().clone(), @@ -244,11 +242,7 @@ function setSmartPlaylistEvents() { /********** MODIFIER CHANGE **********/ form.find('select[id^="sp_criteria_modifier"]').live("change", function(){ var criteria_value = $(this).next(), - index_name = criteria_value.attr('id'), - delimiter = '_', - start = 3, - tokens = index_name.split(delimiter).slice(start), - index_num = tokens.join(delimiter); + index_num = getRowIndex($(this).parent()); if ($(this).val() == 'is in the range') { enableAndShowExtraField(criteria_value, index_num); @@ -264,7 +258,7 @@ function setSmartPlaylistEvents() { } function getRowIndex(ele) { - var id = ele.find('[name^="sp_criteria"]').attr('id'), + var id = ele.find('[name^="sp_criteria_field"]').attr('id'), delimiter = '_', start = 3, tokens = id.split(delimiter).slice(start), @@ -465,6 +459,9 @@ function callback(data, type) { if (json.result == "1") { form.find('.success').hide(); + if ($('#smart_playlist_options').hasClass('closed')) { + $('#smart_playlist_options').removeClass('closed'); + } $.each(json.errors, function(index, error){ $.each(error.msg, function(index, message){ $('#'+error.element).parent().append(""+message+""); From 5e1d8eabb37aef436876bfdfcedd7a2057b5bf97 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 10 Aug 2012 12:34:45 -0400 Subject: [PATCH 14/14] Smart Playlists: moved Save button from right side to left side --- airtime_mvc/application/forms/SmartBlockCriteria.php | 2 +- airtime_mvc/application/views/scripts/playlist/playlist.phtml | 2 +- airtime_mvc/public/css/styles.css | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index b71d83e9a..55abc296a 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -276,7 +276,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $files = $bl->getListofFilesMeetCriteria(); $save = new Zend_Form_Element_Button('save_button'); - $save->setAttrib('class', 'ui-button ui-state-default sp-button'); + $save->setAttrib('class', 'ui-button ui-state-default sp-save'); $save->setAttrib('title', 'Save playlist'); $save->setIgnore(true); $save->setLabel('Save'); diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index 8b18580b2..218ca0cc3 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -13,7 +13,7 @@ if (isset($this->obj)) { obj)) : ?> - + diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index 3e7d53362..06c3c4da2 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -554,6 +554,10 @@ input.input_text.sp_extra_input_text{ margin-left: 10px !important; } +.sp-save{ + margin-left: 7px !important; +} + .sp-checked-icon{ width: 16px !important; display: inline-block !important;