From b7ca858506b9925dc7813bd0aa8268ac432d2a8d Mon Sep 17 00:00:00 2001 From: James Date: Mon, 9 Jul 2012 16:50:51 -0400 Subject: [PATCH 01/20] CC-3921: Add mobile phone number field to user record - added a line to upgrade.sql which takes care of db upgrade --- install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql index 0ff1f826c..2f413bf0c 100644 --- a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql @@ -1,4 +1,5 @@ DELETE FROM cc_pref WHERE keystr = 'system_version'; INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.1.3'); -UPDATE cc_show_instances SET time_filled='00:00:00' WHERE time_filled IS NULL; +UPDATE cc_show_instances SET time_filled='00:00:00' WHERE time_filled IS NULL;\ +ALTER TABLE cc_subjs ADD COLUMN cell_phone VARCHAR(255); From aecee0574d538e49781356bd8c7fbf38e0b62f5c Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 9 Jul 2012 18:58:22 -0400 Subject: [PATCH 02/20] Random commits gathered and put into one -since we had an accidental merge between devel and 2.1.x, I'm rounding up these changes that need to be in 2.1.x and putting them here. --- install_minimal/airtime-install | 22 ++++++++++++++++--- .../upgrades/airtime-2.1.3/data/upgrade.sql | 2 +- .../airtimefilemonitor/airtimemetadata.py | 16 +++++++++----- python_apps/pypo/airtime-playout-init-d | 2 +- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/install_minimal/airtime-install b/install_minimal/airtime-install index 86691c427..4a9ff3a25 100755 --- a/install_minimal/airtime-install +++ b/install_minimal/airtime-install @@ -107,12 +107,28 @@ echo "* Making sure /etc/default/locale is set properly" set +e update-locale cat /etc/default/locale | grep -i "LANG=.*UTF-\?8" -set -e if [ "$?" != "0" ]; then - echo "non UTF-8 default locale found in /etc/default/locale." + echo -e " * Fail\n" + echo "A non UTF-8 default locale found in /etc/default/locale. Airtime requires +a UTF-8 locale to run. To fix this please do the following: + +Ubuntu: +Put line 'en_US.UTF-8 UTF-8' (or similar) without quotes to '/var/lib/locales/supported.d/local', +replacing any existing lines. +A list of supported locales is available in '/usr/share/i18n/SUPPORTED' +Then run 'sudo dpkg-reconfigure locales' + +Debian: +Run 'sudo dpkg-reconfigure locales' and use the interface to select 'en_US.UTF-8 UTF-8' (or similar). +On the second page select this new locale as the default. + +After these changes have been made simply run install again. + +Now exiting install... +" exit 1 fi - +set -e # Check if airtime exists already set +e diff --git a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql index 2f413bf0c..4e11ea91c 100644 --- a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql @@ -1,5 +1,5 @@ DELETE FROM cc_pref WHERE keystr = 'system_version'; INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.1.3'); -UPDATE cc_show_instances SET time_filled='00:00:00' WHERE time_filled IS NULL;\ +UPDATE cc_show_instances SET time_filled='00:00:00' WHERE time_filled IS NULL; ALTER TABLE cc_subjs ADD COLUMN cell_phone VARCHAR(255); diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py index 35c1830e6..35b5135ab 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py @@ -221,11 +221,17 @@ class AirtimeMetadata: md['MDATA_KEY_COPYRIGHT'] = self.truncate_to_length(md['MDATA_KEY_COPYRIGHT'], 512) #end of db truncation checks. - - md['MDATA_KEY_BITRATE'] = file_info.info.bitrate - md['MDATA_KEY_SAMPLERATE'] = file_info.info.sample_rate - md['MDATA_KEY_DURATION'] = self.format_length(file_info.info.length) - md['MDATA_KEY_MIME'] = file_info.mime[0] + try: + md['MDATA_KEY_BITRATE'] = getattr(file_info.info, "bitrate", 0) + md['MDATA_KEY_SAMPLERATE'] = getattr(file_info.info, "sample_rate", 0) + + #TODO: WHATS A GOOD DEFAULT VALUE??? + md['MDATA_KEY_DURATION'] = self.format_length(file_info.info.length) + + #TODO: WHATS A GOOD DEFAULT VALUE??? + md['MDATA_KEY_MIME'] = file_info.mime[0] + except Exception as e: + self.logger.warn(e) if "mp3" in md['MDATA_KEY_MIME']: md['MDATA_KEY_FTYPE'] = "audioclip" diff --git a/python_apps/pypo/airtime-playout-init-d b/python_apps/pypo/airtime-playout-init-d index 0723a657d..c2e27f320 100755 --- a/python_apps/pypo/airtime-playout-init-d +++ b/python_apps/pypo/airtime-playout-init-d @@ -73,7 +73,7 @@ monit_restart() { start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE1 rm -f $PIDFILE1 - start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID --make-pidfile --pidfile $PIDFILE0 --startas $DAEMON0 + start-stop-daemon --start --background --quiet --chuid $ROOTUSERID:$ROOTUSERID --make-pidfile --pidfile $PIDFILE0 --startas $DAEMON0 start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ --nicelevel -15 --make-pidfile --pidfile $PIDFILE1 --startas $DAEMON1 From 2e5b1d9ca8778e7a38aca10a193c629a62ea82ef Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 10 Jul 2012 10:48:44 -0400 Subject: [PATCH 03/20] CC-4092: Not checking for return type "None" on some function calls in media-monitor -fixed --- .../airtimefilemonitor/airtimemediamonitorbootstrap.py | 7 +++---- .../media-monitor/airtimefilemonitor/mediamonitorcommon.py | 5 ++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py index 54c0a6170..67574df63 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py @@ -117,10 +117,9 @@ class AirtimeMediaMonitorBootstrap(): stdout = self.mmc.exec_command(command) if stdout is None: - self.logger.error("Unrecoverable error when syncing db to filesystem.") - return - - new_files = stdout.splitlines() + new_files = [] + else: + new_files = stdout.splitlines() new_and_modified_files = set() for file_path in new_files: diff --git a/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py b/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py index 92d0d4ceb..2351c4b25 100644 --- a/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py +++ b/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py @@ -291,7 +291,10 @@ class MediaMonitorCommon: self.logger.debug(command) stdout = self.exec_command(command) - return stdout.splitlines() + if stdout is None: + return [] + else: + return stdout.splitlines() def touch_index_file(self): dirname = os.path.dirname(self.timestamp_file) From 78acd4f805d423ec3dccad6375f4e03fa83e8b42 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 10 Jul 2012 13:08:36 -0400 Subject: [PATCH 04/20] CC-4093: Timeline -> Alert for deleting track(s) appears twice by clicking context menu - fixed --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index b1834ec4f..0b45f0c65 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -1136,13 +1136,11 @@ var AIRTIME = (function(AIRTIME){ if (oItems.del !== undefined) { callback = function() { - if (confirm("Delete selected item?")) { - AIRTIME.showbuilder.fnRemove([{ - id: data.id, - timestamp: data.timestamp, - instance: data.instance - }]); - } + AIRTIME.showbuilder.fnRemove([{ + id: data.id, + timestamp: data.timestamp, + instance: data.instance + }]); }; oItems.del.callback = callback; From 81eb751c9f5db6fd11ee4b1a4a4c2be6b20cad2c Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 10 Jul 2012 13:19:03 -0400 Subject: [PATCH 05/20] - shortened height on Add/Remove content dialog window --- airtime_mvc/public/js/airtime/schedule/schedule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/schedule/schedule.js b/airtime_mvc/public/js/airtime/schedule/schedule.js index 75e881bfd..94ca5702c 100644 --- a/airtime_mvc/public/js/airtime/schedule/schedule.js +++ b/airtime_mvc/public/js/airtime/schedule/schedule.js @@ -132,7 +132,7 @@ function findViewportDimensions() { return { width: viewportwidth, - height: viewportheight + height: viewportheight-45 }; } From 69bbc53b983212b04dc347c5cb28163f9a02fc69 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 10 Jul 2012 15:09:28 -0400 Subject: [PATCH 06/20] CC-4037: Remove SaaS specific code from Airtime codebase -removed live chat popup --- airtime_mvc/application/Bootstrap.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 8e9f875e8..1dfc60eee 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -90,12 +90,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $userType = ""; } $view->headScript()->appendScript("var userType = '$userType';"); - if (Application_Model_Preference::GetPlanLevel() != "disabled" - && !($_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'); - } + if(isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1){ $view->headScript()->appendFile($baseUrl.'/js/libs/google-analytics.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); } From 62b0fec5955687018537efed11c8bf1caf73024b Mon Sep 17 00:00:00 2001 From: James Date: Tue, 10 Jul 2012 15:11:59 -0400 Subject: [PATCH 07/20] CC-4095: Media Library -> Playlist: dj user can delete the playlist owned by others on some situation. - fixed --- .../application/controllers/PlaylistController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index f53a99754..c23f95840 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -138,7 +138,13 @@ class PlaylistController extends Zend_Controller_Action try { if (isset($this->pl_sess->id)) { $pl = new Application_Model_Playlist($this->pl_sess->id); - $this->view->pl = $pl; + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + + if($isAdminOrPM || $pl->getCreatorId() == $userInfo->id){ + $this->view->pl = $pl; + } $formatter = new LengthFormatter($pl->getLength()); $this->view->length = $formatter->format(); From 6d98cca9c3cdd39f1739d8a1abfddfe91afb0ac9 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 10 Jul 2012 16:41:30 -0400 Subject: [PATCH 08/20] SAAS-270: Apache2 errors on SaaS -no reason to pass $pl since it is not even used. Fixed --- .../controllers/PlaylistController.php | 20 +++++++++---------- airtime_mvc/application/models/Playlist.php | 10 ++++++---- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index f53a99754..3d0df47ec 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -83,7 +83,7 @@ class PlaylistController extends Zend_Controller_Action } } - private function playlistOutdated($pl, $e) + private function playlistOutdated($e) { $this->view->error = $e->getMessage(); } @@ -228,7 +228,7 @@ class PlaylistController extends Zend_Controller_Action $this->createUpdateResponse($pl); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -251,7 +251,7 @@ class PlaylistController extends Zend_Controller_Action $this->createUpdateResponse($pl); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -273,7 +273,7 @@ class PlaylistController extends Zend_Controller_Action $this->createUpdateResponse($pl); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -302,7 +302,7 @@ class PlaylistController extends Zend_Controller_Action } } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -331,7 +331,7 @@ class PlaylistController extends Zend_Controller_Action } } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -352,7 +352,7 @@ class PlaylistController extends Zend_Controller_Action $this->view->fadeOut = $fades[1]; } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -378,7 +378,7 @@ class PlaylistController extends Zend_Controller_Action $this->view->modified = $pl->getLastModified("U"); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -399,7 +399,7 @@ class PlaylistController extends Zend_Controller_Action $this->view->modified = $pl->getLastModified("U"); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); @@ -420,7 +420,7 @@ class PlaylistController extends Zend_Controller_Action $this->view->modified = $pl->getLastModified("U"); } catch (PlaylistOutDatedException $e) { - $this->playlistOutdated($pl, $e); + $this->playlistOutdated($e); } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 70710f567..66c0d85ef 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -461,11 +461,13 @@ class Application_Model_Playlist { ->filterByDbPlaylistId($this->id) ->filterByDbPosition($pos) ->findOne(); + + - #Propel returns values in form 00.000000 format which is for only seconds. - $fadeIn = $row->getDbFadein(); - $fadeOut = $row->getDbFadeout(); - return array($fadeIn, $fadeOut); + #Propel returns values in form 00.000000 format which is for only seconds. + $fadeIn = $row->getDbFadein(); + $fadeOut = $row->getDbFadeout(); + return array($fadeIn, $fadeOut); } /** From 39506740ebb703ccc472653ec370c6733a4a9610 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 10 Jul 2012 17:09:21 -0400 Subject: [PATCH 09/20] CC-4095: Media Library -> Playlist: dj user can delete the playlist owned by others on some situation. - fixed --- .../controllers/LibraryController.php | 22 +++------------- .../controllers/PlaylistController.php | 12 ++++++++- airtime_mvc/application/models/Playlist.php | 25 +++++++++++++++++-- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 99fdd923f..7c24c0da8 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -129,27 +129,11 @@ class LibraryController extends Zend_Controller_Action } } - $hasPermission = true; - if (count($playlists)) { - // make sure use has permission to delete all playslists in the list - if(!$isAdminOrPM){ - foreach($playlists as $pid){ - $pl = new Application_Model_Playlist($pid); - if($pl->getCreatorId() != $user->getId()){ - $hasPermission = false; - } - } - } - } - - if (!$isAdminOrPM && count($files)) { - $hasPermission = false; - } - if(!$hasPermission){ + try{ + Application_Model_Playlist::DeletePlaylists($playlists, $user->getId()); + }catch (PlaylistNoPermissionException $e){ $this->view->message = "You don't have a permission to delete all playlists/files that are selected."; return; - }else{ - Application_Model_Playlist::DeletePlaylists($playlists); } foreach ($files as $id) { diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index c23f95840..74c1500b7 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -96,6 +96,10 @@ class PlaylistController extends Zend_Controller_Action $this->changePlaylist(null); $this->createFullResponse(null); } + + private function playlistNoPermission(){ + $this->view->error = "You don't have permission to deleted playlist(s)"; + } private function playlistUnknownError($e) { @@ -197,6 +201,9 @@ class PlaylistController extends Zend_Controller_Action $ids = $this->_getParam('ids'); $ids = (!is_array($ids)) ? array($ids) : $ids; $pl = null; + + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); try { @@ -210,9 +217,12 @@ class PlaylistController extends Zend_Controller_Action $pl = new Application_Model_Playlist($this->pl_sess->id); } - Application_Model_Playlist::DeletePlaylists($ids); + Application_Model_Playlist::DeletePlaylists($ids, $userInfo->id); $this->createFullResponse($pl); } + catch (PlaylistNoPermissionException $e){ + $this->playlistNoPermission(); + } catch (PlaylistNotFoundException $e) { $this->playlistNotFound(); } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 70710f567..c50e41269 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -802,12 +802,33 @@ class Application_Model_Playlist { * Delete playlists that match the ids.. * @param array $p_ids */ - public static function DeletePlaylists($p_ids) + public static function DeletePlaylists($p_ids, $p_userId) { - CcPlaylistQuery::create()->findPKs($p_ids)->delete(); + $leftOver = self::playlistsNotOwnedByUser($p_ids, $p_userId); + if(count($leftOver) == 0){ + CcPlaylistQuery::create()->findPKs($p_ids)->delete(); + }else{ + throw new PlaylistNoPermissionException; + } + } + + // This function returns that are not owen by $p_user_id among $p_ids + private static function playlistsNotOwnedByUser($p_ids, $p_userId){ + $ownedByUser = CcPlaylistQuery::create()->filterByDbCreatorId($p_userId)->find()->getData(); + $selectedPls = $p_ids; + $ownedPls = array(); + foreach($ownedByUser as $pl){ + if( in_array($pl->getDbId(), $selectedPls) ){ + $ownedPls[] = $pl->getDbId(); + } + } + + $leftOvers = array_diff($selectedPls, $ownedPls); + return $leftOvers; } } // class Playlist class PlaylistNotFoundException extends Exception {} +class PlaylistNoPermissionException extends Exception {} class PlaylistOutDatedException extends Exception {} From 24a90700a1e168f3f99b12b7c4623bb66463aef6 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 10 Jul 2012 17:24:57 -0400 Subject: [PATCH 10/20] CC-4095: Media Library -> Playlist: dj user can delete the playlist owned by others on some situation. --- .../application/controllers/LibraryController.php | 8 ++++---- .../application/controllers/PlaylistController.php | 6 +++--- airtime_mvc/application/models/Playlist.php | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 7c24c0da8..6495b2fae 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -129,10 +129,10 @@ class LibraryController extends Zend_Controller_Action } } - try{ - Application_Model_Playlist::DeletePlaylists($playlists, $user->getId()); - }catch (PlaylistNoPermissionException $e){ - $this->view->message = "You don't have a permission to delete all playlists/files that are selected."; + try { + Application_Model_Playlist::deletePlaylists($playlists, $user->getId()); + } catch (PlaylistNoPermissionException $e) { + $this->view->message = "You don't have permission to delete selected playlists/files."; return; } diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index d9662a9c6..67829c147 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -98,7 +98,7 @@ class PlaylistController extends Zend_Controller_Action } private function playlistNoPermission(){ - $this->view->error = "You don't have permission to deleted playlist(s)"; + $this->view->error = "You don't have permission to delete selected playlist(s)."; } private function playlistUnknownError($e) @@ -217,10 +217,10 @@ class PlaylistController extends Zend_Controller_Action $pl = new Application_Model_Playlist($this->pl_sess->id); } - Application_Model_Playlist::DeletePlaylists($ids, $userInfo->id); + Application_Model_Playlist::deletePlaylists($ids, $userInfo->id); $this->createFullResponse($pl); } - catch (PlaylistNoPermissionException $e){ + catch (PlaylistNoPermissionException $e) { $this->playlistNoPermission(); } catch (PlaylistNotFoundException $e) { diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 9945aa430..ccb3cac8f 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -804,12 +804,12 @@ class Application_Model_Playlist { * Delete playlists that match the ids.. * @param array $p_ids */ - public static function DeletePlaylists($p_ids, $p_userId) + public static function deletePlaylists($p_ids, $p_userId) { $leftOver = self::playlistsNotOwnedByUser($p_ids, $p_userId); - if(count($leftOver) == 0){ + if (count($leftOver) == 0) { CcPlaylistQuery::create()->findPKs($p_ids)->delete(); - }else{ + } else { throw new PlaylistNoPermissionException; } } @@ -819,8 +819,8 @@ class Application_Model_Playlist { $ownedByUser = CcPlaylistQuery::create()->filterByDbCreatorId($p_userId)->find()->getData(); $selectedPls = $p_ids; $ownedPls = array(); - foreach($ownedByUser as $pl){ - if( in_array($pl->getDbId(), $selectedPls) ){ + foreach ($ownedByUser as $pl) { + if (in_array($pl->getDbId(), $selectedPls)) { $ownedPls[] = $pl->getDbId(); } } From 35655f94626fc3f90dadc13fdb7ab97a432935ef Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 10 Jul 2012 19:05:27 -0400 Subject: [PATCH 11/20] -no longer require "cell_phone" column for 2.1.3 upgrade --- install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql index 4e11ea91c..0ff1f826c 100644 --- a/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.1.3/data/upgrade.sql @@ -2,4 +2,3 @@ DELETE FROM cc_pref WHERE keystr = 'system_version'; INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.1.3'); UPDATE cc_show_instances SET time_filled='00:00:00' WHERE time_filled IS NULL; -ALTER TABLE cc_subjs ADD COLUMN cell_phone VARCHAR(255); From 82d4ee09ae01925ea0f1847bfd250f87a8f05bb8 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 10 Jul 2012 23:25:35 -0400 Subject: [PATCH 12/20] CC-4059: airtime-test-stream -h option not shown in help text -fixed --- utils/airtime-test-stream.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/airtime-test-stream.py b/utils/airtime-test-stream.py index a71075850..df8bd500c 100644 --- a/utils/airtime-test-stream.py +++ b/utils/airtime-test-stream.py @@ -25,6 +25,8 @@ def printUsage(): print " -u user (default: source) " print " -p password (default: hackme) " print " -m mount (default: test) " + print " -h show help menu" + def find_liquidsoap_binary(): """ From bed2a0731bd7b83a468a51538cc11c1d0d13d46e Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 10:39:23 -0400 Subject: [PATCH 13/20] fix potential exception --- python_apps/api_clients/api_client.py | 2 +- .../media-monitor/airtimefilemonitor/airtimenotifier.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 9f8f48d77..2cf8a8c4c 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -452,7 +452,7 @@ class AirTimeApiClient(ApiClientInterface): response = self.get_response_from_server(url) response = json.loads(response) except Exception, e: - response = None + response = {} logger.error("Exception: %s", e) return response diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimenotifier.py b/python_apps/media-monitor/airtimefilemonitor/airtimenotifier.py index be301c958..4487f1b3e 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimenotifier.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimenotifier.py @@ -38,6 +38,11 @@ class AirtimeNotifier(Notifier): time.sleep(5) def init_rabbit_mq(self): + """ + This function will attempt to connect to RabbitMQ Server and if successful + return 'True'. Returns 'False' otherwise. + """ + self.logger.info("Initializing RabbitMQ stuff") try: schedule_exchange = Exchange("airtime-media-monitor", "direct", durable=True, auto_delete=True) From ba5a7490730dcbf9d050adba9deef1038d91e308 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 16:48:46 -0400 Subject: [PATCH 14/20] CC-4092: Not checking for return type "None" on some function calls in media-monitor -more fixes --- python_apps/api_clients/api_client.py | 16 +++-- .../airtimemediamonitorbootstrap.py | 22 +++++-- .../airtimefilemonitor/airtimemetadata.py | 60 ++++++++++++------- 3 files changed, 65 insertions(+), 33 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 2cf8a8c4c..97d054ed5 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -437,10 +437,10 @@ class AirTimeApiClient(ApiClientInterface): return response - #returns a list of all db files for a given directory in JSON format: - #{"files":["path/to/file1", "path/to/file2"]} - #Note that these are relative paths to the given directory. The full - #path is not returned. + # returns a list of all db files for a given directory in JSON format: + # ["path/to/file1", "path/to/file2"] + # Note that these are relative paths to the given directory. The full + # path is not returned. def list_all_db_files(self, dir_id): logger = self.logger try: @@ -454,8 +454,12 @@ class AirTimeApiClient(ApiClientInterface): except Exception, e: response = {} logger.error("Exception: %s", e) - - return response + + try: + return getattr(response, "files") + except AttributeError: + self.logger.error("Could not find index 'files' in dictionary: %s", str(response)) + return [] def list_all_watched_dirs(self): logger = self.logger diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py index 67574df63..5f0b9c5b8 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py @@ -43,8 +43,7 @@ class AirtimeMediaMonitorBootstrap(): went offline. """ def scan(self): - directories = self.get_list_of_watched_dirs(); - + directories = self.get_list_of_watched_dirs() self.logger.info("watched directories found: %s", directories) for id, dir in directories.iteritems(): @@ -60,12 +59,22 @@ class AirtimeMediaMonitorBootstrap(): return self.api_client.list_all_db_files(dir_id) """ - returns the path and the database row id for this path for all watched directories. Also + returns the path and its corresponding database row idfor all watched directories. Also returns the Stor directory, which can be identified by its row id (always has value of "1") + + Return type is a dictionary similar to: + {"1":"/srv/airtime/stor/"} """ def get_list_of_watched_dirs(self): json = self.api_client.list_all_watched_dirs() - return json["dirs"] + + try: + dirs = getattr(json, "dirs") + except AttributeError: + self.logger.error("Could not find index 'dirs' in dictionary: %s", str(dirs)) + return {} + + return dirs """ This function takes in a path name provided by the database (and its corresponding row id) @@ -91,8 +100,9 @@ class AirtimeMediaMonitorBootstrap(): db_known_files_set = set() files = self.list_db_files(dir_id) - for file in files['files']: - db_known_files_set.add(file) + + for f in files: + db_known_files_set.add(f) all_files = self.mmc.scan_dir_for_new_files(dir) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py index 35b5135ab..01022034d 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py @@ -11,8 +11,17 @@ from api_clients import api_client """ list of supported easy tags in mutagen version 1.20 -['albumartistsort', 'musicbrainz_albumstatus', 'lyricist', 'releasecountry', 'date', 'performer', 'musicbrainz_albumartistid', 'composer', 'encodedby', 'tracknumber', 'musicbrainz_albumid', 'album', 'asin', 'musicbrainz_artistid', 'mood', 'copyright', 'author', 'media', 'length', 'version', 'artistsort', 'titlesort', 'discsubtitle', 'website', 'musicip_fingerprint', 'conductor', 'compilation', 'barcode', 'performer:*', 'composersort', 'musicbrainz_discid', 'musicbrainz_albumtype', 'genre', 'isrc', 'discnumber', 'musicbrainz_trmid', 'replaygain_*_gain', 'musicip_puid', 'artist', 'title', 'bpm', 'musicbrainz_trackid', 'arranger', 'albumsort', 'replaygain_*_peak', 'organization'] +['albumartistsort', 'musicbrainz_albumstatus', 'lyricist', 'releasecountry', +'date', 'performer', 'musicbrainz_albumartistid', 'composer', 'encodedby', +'tracknumber', 'musicbrainz_albumid', 'album', 'asin', 'musicbrainz_artistid', +'mood', 'copyright', 'author', 'media', 'length', 'version', 'artistsort', +'titlesort', 'discsubtitle', 'website', 'musicip_fingerprint', 'conductor', +'compilation', 'barcode', 'performer:*', 'composersort', 'musicbrainz_discid', +'musicbrainz_albumtype', 'genre', 'isrc', 'discnumber', 'musicbrainz_trmid', +'replaygain_*_gain', 'musicip_puid', 'artist', 'title', 'bpm', 'musicbrainz_trackid', +'arranger', 'albumsort', 'replaygain_*_peak', 'organization'] """ + class AirtimeMetadata: def __init__(self): @@ -56,10 +65,17 @@ class AirtimeMetadata: self.logger = logging.getLogger() def get_md5(self, filepath): - f = open(filepath, 'rb') - m = hashlib.md5() - m.update(f.read()) - md5 = m.hexdigest() + """ + Returns an md5 of the file located at filepath. Returns an empty string + if there was an error reading the file. + """ + try: + f = open(filepath, 'rb') + m = hashlib.md5() + m.update(f.read()) + md5 = m.hexdigest() + except Exception, e: + return "" return md5 @@ -120,6 +136,10 @@ class AirtimeMetadata: return item def get_md_from_file(self, filepath): + """ + Returns None if error retrieving metadata. Otherwise returns a dictionary + representing the file's metadata + """ self.logger.info("getting info from filepath %s", filepath) @@ -129,7 +149,6 @@ class AirtimeMetadata: md['MDATA_KEY_MD5'] = md5 file_info = mutagen.File(filepath, easy=True) - except Exception, e: self.logger.error("failed getting metadata from %s", filepath) self.logger.error("Exception %s", e) @@ -138,17 +157,16 @@ class AirtimeMetadata: #check if file has any metadata if file_info is None: return None - #check if file has any metadata - if file_info is not None: - for key in file_info.keys() : - if key in self.mutagen2airtime: - val = file_info[key] - try: - if val is not None and len(val) > 0 and val[0] is not None and len(val[0]) > 0: - md[self.mutagen2airtime[key]] = val[0] - except Exception, e: - self.logger.error('Exception: %s', e) - self.logger.error("traceback: %s", traceback.format_exc()) + + for key in file_info.keys() : + if key in self.mutagen2airtime: + val = file_info[key] + try: + if val is not None and len(val) > 0 and val[0] is not None and len(val[0]) > 0: + md[self.mutagen2airtime[key]] = val[0] + except Exception, e: + self.logger.error('Exception: %s', e) + self.logger.error("traceback: %s", traceback.format_exc()) if 'MDATA_KEY_TITLE' not in md: #get rid of file extension from original name, name might have more than 1 '.' in it. original_name = os.path.basename(filepath) @@ -225,11 +243,11 @@ class AirtimeMetadata: md['MDATA_KEY_BITRATE'] = getattr(file_info.info, "bitrate", 0) md['MDATA_KEY_SAMPLERATE'] = getattr(file_info.info, "sample_rate", 0) - #TODO: WHATS A GOOD DEFAULT VALUE??? - md['MDATA_KEY_DURATION'] = self.format_length(file_info.info.length) + md['MDATA_KEY_DURATION'] = self.format_length(getattr(file_info.info, "length", 0.0)) - #TODO: WHATS A GOOD DEFAULT VALUE??? - md['MDATA_KEY_MIME'] = file_info.mime[0] + md['MDATA_KEY_MIME'] = "" + if len(file_info.mime) > 0: + md['MDATA_KEY_MIME'] = file_info.mime[0] except Exception as e: self.logger.warn(e) From fc1b69e1d12d60dd8ca8acec66dafe0fb35e72de Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 17:09:17 -0400 Subject: [PATCH 15/20] CC-4092: Not checking for return type "None" on some function calls in media-monitor -more fixes --- python_apps/api_clients/api_client.py | 4 ++-- .../airtimefilemonitor/airtimemediamonitorbootstrap.py | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 97d054ed5..ea9ea993f 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -456,8 +456,8 @@ class AirTimeApiClient(ApiClientInterface): logger.error("Exception: %s", e) try: - return getattr(response, "files") - except AttributeError: + return response["files"] + except KeyError: self.logger.error("Could not find index 'files' in dictionary: %s", str(response)) return [] diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py index 5f0b9c5b8..3dd7fc9bb 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py @@ -69,12 +69,11 @@ class AirtimeMediaMonitorBootstrap(): json = self.api_client.list_all_watched_dirs() try: - dirs = getattr(json, "dirs") - except AttributeError: - self.logger.error("Could not find index 'dirs' in dictionary: %s", str(dirs)) + return json["dirs"] + except KeyError as e: + self.logger.error("Could not find index 'dirs' in dictionary: %s", str(json)) + self.logger.error(e) return {} - - return dirs """ This function takes in a path name provided by the database (and its corresponding row id) From b782b9a9b6c7cb3c9e9d1f354c87e584bdfbbfa6 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 18:14:03 -0400 Subject: [PATCH 16/20] CC-4099: More stricter checking on ogg file types -fixed --- .../media-monitor/airtimefilemonitor/airtimemetadata.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py index 01022034d..e6dfe03d2 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemetadata.py @@ -255,5 +255,8 @@ class AirtimeMetadata: md['MDATA_KEY_FTYPE'] = "audioclip" elif "vorbis" in md['MDATA_KEY_MIME']: md['MDATA_KEY_FTYPE'] = "audioclip" + else: + self.logger.error("File %s of mime type %s does not appear to be a valid vorbis or mp3 file." % (filepath, md['MDATA_KEY_MIME'])) + return None return md From bd51b4db023a10d76c13f0a375f991289924ba55 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 19:31:24 -0400 Subject: [PATCH 17/20] CC-4100: Make number of shows displayed in widget customizable -fixed --- airtime_mvc/application/configs/constants.php | 2 +- .../application/controllers/ApiController.php | 24 +++++++++---------- airtime_mvc/application/models/Schedule.php | 2 +- airtime_mvc/application/models/Show.php | 6 ++--- widgets/js/jquery.showinfo.js | 7 +++--- widgets/sample_page.html | 3 ++- 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/airtime_mvc/application/configs/constants.php b/airtime_mvc/application/configs/constants.php index 1a39ddb43..39e17c131 100644 --- a/airtime_mvc/application/configs/constants.php +++ b/airtime_mvc/application/configs/constants.php @@ -2,7 +2,7 @@ define('AIRTIME_COPYRIGHT_DATE', '2010-2012'); define('AIRTIME_REST_VERSION', '1.1'); -define('AIRTIME_API_VERSION', '1.0'); +define('AIRTIME_API_VERSION', '1.1'); // Metadata Keys for files define('MDATA_KEY_FILEPATH', 'filepath'); diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index ad7ef5378..d399ace9f 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -271,31 +271,31 @@ class ApiController extends Zend_Controller_Action $request = $this->getRequest(); $type = $request->getParam('type'); - if($type == "endofday") { + if ($type == "endofday") { + + $limit = $request->getParam('limit'); + Logging::log($limit); + if($limit == "" || !is_numeric($limit)) { + $limit = "5"; + } + // make GetNextShows use end of day $utcTimeEnd = Application_Common_DateHelper::GetDayEndTimestampInUtc(); $result = array("env"=>APPLICATION_ENV, "schedulerTime"=>gmdate("Y-m-d H:i:s"), - "nextShow"=>Application_Model_Show::GetNextShows($utcTimeNow, 5, $utcTimeEnd)); + "nextShow"=>Application_Model_Show::GetNextShows($utcTimeNow, $limit, $utcTimeEnd)); Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); - }else{ - - $limit = $request->getParam('limit'); - if($limit == "" || !is_numeric($limit)) { - $limit = "5"; - } - + } else { $result = Application_Model_Schedule::GetPlayOrderRange(); - - //Convert from UTC to localtime for user. + + //Convert from UTC to localtime for Web Browser. Application_Model_Show::ConvertToLocalTimeZone($result["currentShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); } $result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION; //used by caller to determine if the airtime they are running or widgets in use is out of date. - //echo json_encode($result); header("Content-type: text/javascript"); echo $_GET['callback'].'('.json_encode($result).')'; } else { diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 5c80013ef..caed912ab 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -32,6 +32,7 @@ class Application_Model_Schedule { { if (!is_int($p_prev) || !is_int($p_next)){ //must enter integers to specify ranges + Logging::log("Invalid range parameters: $p_prev or $p_next"); return array(); } @@ -49,7 +50,6 @@ class Application_Model_Schedule { "schedulerTime"=>$timeNow, "previous"=>$results['previous'] !=null?$results['previous']:(count($shows['previousShow'])>0?$shows['previousShow'][0]:null), "current"=>$results['current'] !=null?$results['current']:((count($shows['currentShow'])>0 && $shows['currentShow'][0]['record'] == 1)?$shows['currentShow'][0]:null), - //"current"=>$results['current'] !=null?$results['current']:(count($shows['currentShow'])>0?$shows['currentShow'][0]:null), "next"=> $results['next'] !=null?$results['next']:(count($shows['nextShow'])>0?$shows['nextShow'][0]:null), "currentShow"=>$shows['currentShow'], "nextShow"=>$shows['nextShow'], diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index e7cf6967b..156f14861 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1845,9 +1845,9 @@ class Application_Model_Show { /** * Given a start time $timeStart and end time $timeEnd, returns the next $limit - * number of shows within the time interval; - * If $timeEnd not given, shows within next 48 hours from $timeStart are returned; - * If $limit not given, all shows within the intervals are returns; + * number of shows within the time interval + * If $timeEnd not given, shows within next 48 hours from $timeStart are returned + * If $limit not given, all shows within the intervals are returned * Times are all in UTC time. * * @param String $timeStart - interval start time (in UTC) diff --git a/widgets/js/jquery.showinfo.js b/widgets/js/jquery.showinfo.js index 873f5b64f..e594b3c0b 100644 --- a/widgets/js/jquery.showinfo.js +++ b/widgets/js/jquery.showinfo.js @@ -1,4 +1,4 @@ - var AIRTIME_API_VERSION = "1.0"; + var AIRTIME_API_VERSION = "1.1"; (function($){ $.fn.airtimeShowSchedule = function(options) { @@ -6,7 +6,8 @@ var defaults = { updatePeriod: 20, //seconds sourceDomain: "http://localhost/", //where to get show status from - text: {onAirToday:"On air today"} + text: {onAirToday:"On air today"}, + showLimit: 5 }; options = $.extend(true, defaults, options); options.sourceDomain = addEndingBackslash(options.sourceDomain); @@ -56,7 +57,7 @@ function getServerData(){ $.ajax({url: options.sourceDomain + "api/live-info/", - data: {type:"endofday",limit:"5"}, + data: {type:"endofday",limit: options.showLimit}, dataType: "jsonp", success:function(data) { processData(data); diff --git a/widgets/sample_page.html b/widgets/sample_page.html index 706755b30..94cc51396 100644 --- a/widgets/sample_page.html +++ b/widgets/sample_page.html @@ -17,7 +17,8 @@ $(document).ready(function() { $("#onAirToday").airtimeShowSchedule({ sourceDomain: "http://localhost", text: {onAirToday:"On air today"}, - updatePeriod: 5 //seconds + updatePeriod: 5, //seconds + showLimit: 10 }); $("#scheduleTabs").airtimeWeekSchedule({ sourceDomain:"http://localhost", From 8f6d6058a2aa9e31c173309e5c740463995b5c86 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Jul 2012 19:33:19 -0400 Subject: [PATCH 18/20] CC-4100: Make number of shows displayed in widget customizable -removed Logging message --- airtime_mvc/application/controllers/ApiController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index d399ace9f..739285e64 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -274,7 +274,6 @@ class ApiController extends Zend_Controller_Action if ($type == "endofday") { $limit = $request->getParam('limit'); - Logging::log($limit); if($limit == "" || !is_numeric($limit)) { $limit = "5"; } From 8dcb1f8f3dd5a1171eb4656e41ec076911bbf5e9 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 13 Jul 2012 10:28:50 -0400 Subject: [PATCH 19/20] CC-4101Calendar displays white on white for certain show names, making shows invisible --- airtime_mvc/public/js/airtime/schedule/add-show.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/airtime_mvc/public/js/airtime/schedule/add-show.js b/airtime_mvc/public/js/airtime/schedule/add-show.js index d85742e4b..9e1d8e704 100644 --- a/airtime_mvc/public/js/airtime/schedule/add-show.js +++ b/airtime_mvc/public/js/airtime/schedule/add-show.js @@ -118,6 +118,14 @@ function stringToColor(s) return intToRGB(hashCode(s)); } +function getContrastYIQ(hexcolor){ + var r = parseInt(hexcolor.substr(0,2),16); + var g = parseInt(hexcolor.substr(2,2),16); + var b = parseInt(hexcolor.substr(4,2),16); + var yiq = ((r*299)+(g*587)+(b*114))/1000; + return (yiq >= 128) ? '000000' : 'ffffff'; +} + function setAddShowEvents() { @@ -578,9 +586,11 @@ function setAddShowEvents() { } var bgColorEle = $("#add_show_background_color"); + var textColorEle = $("#add_show_color"); $('#add_show_name').bind('input', 'change', function(){ var colorCode = stringToColor($(this).val()); bgColorEle.val(colorCode); + textColorEle.val(getContrastYIQ(colorCode)); }); } From 6a4fd4973e0eca40fe4eb0168cbb7c8270d4ed4b Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 16 Jul 2012 14:18:40 -0400 Subject: [PATCH 20/20] CC-4104: airtime-uninstall should not purge airtime database be default -done --- install_minimal/airtime-uninstall | 22 +++++++++++++++++++ .../include/airtime-uninitialize.sh | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/install_minimal/airtime-uninstall b/install_minimal/airtime-uninstall index b99f04246..78e9b03e4 100755 --- a/install_minimal/airtime-uninstall +++ b/install_minimal/airtime-uninstall @@ -6,6 +6,28 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi + +options=$(getopt -o p -l purge -- "$@") +if [ $? -ne 0 ]; then + echo "only -p or --purge parameter allowed" + exit 1 +fi +eval set -- "$options" + +purge='f' + +while true +do + case "$1" in + -p|--purge) purge='t'; shift;; + --) shift 1; break ;; + *) break ;; + esac +done + +#Make 'purge' env variable available to sub bash script +export purge + echo -e "\n******************************* Uninstall Begin ********************************" # Absolute path to this script, e.g. /home/user/bin/foo.sh diff --git a/install_minimal/include/airtime-uninitialize.sh b/install_minimal/include/airtime-uninitialize.sh index 1713ae7f2..b5460285a 100755 --- a/install_minimal/include/airtime-uninitialize.sh +++ b/install_minimal/include/airtime-uninitialize.sh @@ -19,7 +19,6 @@ set +e monit unmonitor airtime-media-monitor >/dev/null 2>&1 monit unmonitor airtime-liquidsoap >/dev/null 2>&1 monit unmonitor airtime-playout >/dev/null 2>&1 -#monit unmonitor airtime-show-recorder >/dev/null 2>&1 monit unmonitor rabbitmq-server set -e @@ -31,5 +30,7 @@ python $AIRTIMEROOT/python_apps/pypo/install/pypo-uninitialize.py python $AIRTIMEROOT/python_apps/media-monitor/install/media-monitor-uninitialize.py #python $AIRTIMEROOT/python_apps/show-recorder/install/recorder-uninitialize.py +if [ "$purge" = "t" ]; then #call Airtime uninstall script php --php-ini ${SCRIPTPATH}/../airtime-php.ini ${SCRIPTPATH}/airtime-uninstall.php +fi