From 68c401b2964c686a1a955191bdbdbc2e6b379bf7 Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Mon, 13 Aug 2012 11:04:21 -0400
Subject: [PATCH 01/10] airtime-check-system not using user define port in all
 cases

---
 utils/airtime-check-system.php | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/utils/airtime-check-system.php b/utils/airtime-check-system.php
index 22ff7362c..fa244f3b3 100644
--- a/utils/airtime-check-system.php
+++ b/utils/airtime-check-system.php
@@ -17,7 +17,7 @@ if (substr($sapi_type, 0, 3) == 'cli') {
 
 
     $status = AirtimeCheck::GetStatus($baseUrl, $base_port, $apiKey);
-    AirtimeCheck::PrintStatus($baseUrl, $status);
+    AirtimeCheck::PrintStatus($baseUrl, $base_port, $status);
 }
 
 class AirtimeCheck {
@@ -92,8 +92,9 @@ class AirtimeCheck {
         return $os_string." ".$machine;
     }
     
-    public static function GetServerType($p_baseUrl){
-        $headerInfo = get_headers("http://$p_baseUrl",1);
+    public static function GetServerType($p_baseUrl, $p_basePort)
+    {
+        $headerInfo = get_headers("http://$p_baseUrl:$p_basePort",1);
         
         if (!isset($headerInfo['Server'][0]))
             return self::UNKNOWN;
@@ -120,7 +121,7 @@ class AirtimeCheck {
         return $data;
     }
 
-    public static function PrintStatus($p_baseUrl, $p_status){
+    public static function PrintStatus($p_baseUrl, $p_basePort, $p_status){
         
         if ($p_status === false){
             self::output_status("AIRTIME_SERVER_RESPONDING", "FAILED");
@@ -150,7 +151,7 @@ class AirtimeCheck {
             }
             self::output_status("OS", self::CheckOsTypeVersion());
             self::output_status("CPU", self::GetCpuInfo());
-            self::output_status("WEB_SERVER", self::GetServerType($p_baseUrl));
+            self::output_status("WEB_SERVER", self::GetServerType($p_baseUrl, $p_basePort));
             
             if (isset($data->services)) {
                 $services = $data->services;

From 831a1b192315ef7a957849cd4a03eab702a8c7ed Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Thu, 16 Aug 2012 23:49:37 -0400
Subject: [PATCH 02/10] CC-4242: MP3 streams have the artist name duplicated

-fixed
---
 python_apps/pypo/liquidsoap_scripts/ls_lib.liq    | 6 +++---
 python_apps/pypo/liquidsoap_scripts/ls_script.liq | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq
index 83ab39322..78854f07d 100644
--- a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq
+++ b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq
@@ -7,11 +7,11 @@ end
 def append_title(m) =  
   log("Using stream_format #{!stream_metadata_type}")
   if !stream_metadata_type == 1 then
-    [("artist","#{!show_name} - #{m['artist']}")]
+    [("title", "#{!show_name} - #{m['artist']}")]
   elsif !stream_metadata_type == 2 then
-    [("artist",!station_name), ("title", !show_name)]
+    [("title", "#{!station_name} - #{!show_name}")]
   else
-    []
+    [("title", "#{m['artist']} - #{m['title']}")]
   end
 end
 
diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq
index 482a60a5e..dabd164a7 100644
--- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq
+++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq
@@ -29,7 +29,7 @@ just_switched = ref false
 %include "ls_lib.liq"
 
 queue = on_metadata(notify, queue)
-queue = map_metadata(append_title, queue)
+queue = map_metadata(update=false, append_title, queue)
 # the crossfade function controls fade in/out
 queue = crossfade(queue)
 ignore(output.dummy(queue, fallible=true))

From 025656be1cec94db54d501cffedf0f7752a29e1d Mon Sep 17 00:00:00 2001
From: denise <denise@denise-DX4860.(none)>
Date: Tue, 21 Aug 2012 10:46:25 -0400
Subject: [PATCH 03/10] CC-4205: Smart Playlist Builder: Change text on button
 mouseovers

-changed generate success msg
---
 airtime_mvc/application/forms/SmartBlockCriteria.php         | 2 +-
 airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php
index f23885414..0e68f957a 100644
--- a/airtime_mvc/application/forms/SmartBlockCriteria.php
+++ b/airtime_mvc/application/forms/SmartBlockCriteria.php
@@ -240,7 +240,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', 'Generate playlist content');
+        $generate->setAttrib('title', 'Generate playlist content and save criteria');
         $generate->setIgnore(true);
         $generate->setLabel('Generate');
         $generate->setDecorators(array('viewHelper'));
diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
index 00b55e7df..05c0422ce 100644
--- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
+++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
@@ -458,7 +458,7 @@ function callback(data, type) {
             if (type == 'shuffle') {
                 form.find('.success').text('Smart block shuffled');
             } else if (type == 'generate') {
-            	form.find('.success').text('Smart block generated and saved');
+            	form.find('.success').text('Smart block generated and criteria saved');
             	//redraw library table so the length gets updated
                 dt.fnStandingRedraw();
             }

From 179aa3d7390d1859b2c5d2a8b8ea8473e055324d Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 21 Aug 2012 10:50:18 -0400
Subject: [PATCH 04/10] CC-1665: Scheduled stream rebroadcasting and recording

-Show meaningful page after webstream is deleted
---
 airtime_mvc/application/controllers/WebstreamController.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/airtime_mvc/application/controllers/WebstreamController.php b/airtime_mvc/application/controllers/WebstreamController.php
index bf67e13bd..c195b23c7 100644
--- a/airtime_mvc/application/controllers/WebstreamController.php
+++ b/airtime_mvc/application/controllers/WebstreamController.php
@@ -54,6 +54,10 @@ class WebstreamController extends Zend_Controller_Action
 
         $webstream = CcWebstreamQuery::create()->findPK($id)->delete();
 
+        $this->view->ws = null;
+        $this->view->action = "delete";
+        $this->view->html = $this->view->render('webstream/webstream.phtml');
+
     }
 
     public function saveAction()

From 47852bce2a69a3bb93a1aff93aabbf31c69176b8 Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 21 Aug 2012 10:50:24 -0400
Subject: [PATCH 05/10] indentation fixes

---
 .../controllers/PlaylistController.php        | 74 +++++++++----------
 1 file changed, 35 insertions(+), 39 deletions(-)

diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php
index 91ad684d7..b60bcdaaf 100644
--- a/airtime_mvc/application/controllers/PlaylistController.php
+++ b/airtime_mvc/application/controllers/PlaylistController.php
@@ -106,14 +106,13 @@ class PlaylistController extends Zend_Controller_Action
                 } else {
                     $this->view->html = $this->view->render($viewPath);
                 }
-            }else{
+            } else {
                 $this->view->obj = $obj;
                 $this->view->id = $obj->getId();
                 $this->view->html = $this->view->render($viewPath);
                 unset($this->view->obj);
             }
-        }
-        else {
+        } else {
             $this->view->html = $this->view->render($viewPath);
         }
     }
@@ -138,7 +137,8 @@ class PlaylistController extends Zend_Controller_Action
         $this->createFullResponse(null);
     }
     
-    private function playlistNoPermission($p_type){
+    private function playlistNoPermission($p_type)
+    {
         $this->view->error = "You don't have permission to delete selected {$p_type}(s).";
     }
 
@@ -151,12 +151,14 @@ class PlaylistController extends Zend_Controller_Action
         Logging::log("{$e->getMessage()}");
     }
     
-    private function wrongTypeToBlock($obj) {
+    private function wrongTypeToBlock($obj)
+    {
         $this->view->error = "You can only add tracks to smart block.";
         $this->createFullResponse($obj);
     }
     
-    private function wrongTypeToPlaylist($obj) {
+    private function wrongTypeToPlaylist($obj)
+    {
         $this->view->error = "You can only add tracks and smart blocks to playlists.";
         $this->createFullResponse($obj);
     }
@@ -168,27 +170,27 @@ class PlaylistController extends Zend_Controller_Action
         $request = $this->getRequest();
         $baseUrl = $request->getBaseUrl();
 
-        $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
         $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
 
-        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'),'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'), 'text/javascript');
 
         $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']);
         $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']);
         $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']);
         $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']);
 
-        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
-        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
         $this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']);
 
         try {
@@ -199,9 +201,9 @@ class PlaylistController extends Zend_Controller_Action
                 $user = new Application_Model_User($userInfo->id);
                 $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
                 
-                if($isAdminOrPM || $obj->getCreatorId() == $userInfo->id){
+                if ($isAdminOrPM || $obj->getCreatorId() == $userInfo->id) {
                     $this->view->obj = $obj;
-                    if($this->obj_sess->type == "block"){
+                    if ($this->obj_sess->type == "block") {
                         $form = new Application_Form_SmartBlockCriteria();
                         $form->startForm($this->obj_sess->id);
                         $this->view->form = $form;
@@ -283,6 +285,7 @@ class PlaylistController extends Zend_Controller_Action
                 Logging::log("Not deleting currently active {$type}");
                 $obj = new $objInfo['className']($this->obj_sess->id);
             }
+
             if (strcmp($objInfo['className'], 'Application_Model_Playlist')==0) {
                 Application_Model_Playlist::deletePlaylists($ids, $userInfo->id);
             } else {
@@ -310,7 +313,7 @@ class PlaylistController extends Zend_Controller_Action
         try {
             $obj = $this->getPlaylist($obj_type);
             if ($obj_type == 'playlist') {
-                foreach($ids as $id) {
+                foreach ($ids as $id) {
                     if (is_array($id) && isset($id[1])) {
                         if ($id[1] == 'playlist') {
                             throw new WrongTypeToPlaylistException;
@@ -321,7 +324,7 @@ class PlaylistController extends Zend_Controller_Action
             } else if ($obj->isStatic()) {
                 // if the dest is a block object
                 //check if any items are playlists
-                foreach($ids as $id) {
+                foreach ($ids as $id) {
                     if (is_array($id) && isset($id[1])) {
                         if ($id[1] != 'audioclip') {
                             throw new WrongTypeToBlockException;
@@ -333,11 +336,9 @@ class PlaylistController extends Zend_Controller_Action
                 throw new BlockDynamicException;
             }
             $this->createUpdateResponse($obj);
-        }
-        catch (PlaylistOutDatedException $e) {
+        } catch (PlaylistOutDatedException $e) {
             $this->playlistOutdated($e);
-        }
-        catch (PlaylistNotFoundException $e) {
+        } catch (PlaylistNotFoundException $e) {
             $this->playlistNotFound($obj_type);
         }
         catch (WrongTypeToBlockException $e) {
@@ -553,14 +554,12 @@ class PlaylistController extends Zend_Controller_Action
             $result = $bl->generateSmartBlock($params['data']);
             try {
                 die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true))));
-            }
-            catch (PlaylistNotFoundException $e) {
+            } catch (PlaylistNotFoundException $e) {
                 $this->playlistNotFound('block');
-            }
-            catch (Exception $e) {
+            } catch (Exception $e) {
                 $this->playlistUnknownError($e);
             }
-        }else{
+        } else {
             $this->view->obj = $bl;
             $this->view->id = $bl->getId();
             $this->view->form = $form;
@@ -581,14 +580,10 @@ class PlaylistController extends Zend_Controller_Action
         if ($result['result'] == 0) {
             try {
                 die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true))));
-            }
-            catch (PlaylistNotFoundException $e) {
+            } catch (PlaylistNotFoundException $e) {
                 $this->playlistNotFound('block');
             }
-            catch (Exception $e) {
-                $this->playlistUnknownError($e);
-            }
-        }else{
+        } else {
             die(json_encode($result));
         }
     }
@@ -606,7 +601,8 @@ class PlaylistController extends Zend_Controller_Action
         return $info;
     }
     
-    public function getBlockInfoAction(){
+    public function getBlockInfoAction()
+    {
         $request = $this->getRequest();
         $params = $request->getPost();
         $bl = new Application_Model_Block($params['id']);

From 51ebae3de92a859860fa2052f567b5881abf6541 Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 21 Aug 2012 11:12:33 -0400
Subject: [PATCH 06/10] Make sure we are using the Library controller for the
 Library page

---
 .../application/configs/navigation.php        |  2 +-
 .../controllers/LibraryController.php         | 61 ++++++++++++++++++-
 .../controllers/PlaylistController.php        | 23 ++-----
 airtime_mvc/application/models/Playlist.php   | 13 ++++
 .../scripts/{playlist => library}/index.phtml |  0
 5 files changed, 79 insertions(+), 20 deletions(-)
 rename airtime_mvc/application/views/scripts/{playlist => library}/index.phtml (100%)

diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php
index 4d63196fa..5874aa8e2 100644
--- a/airtime_mvc/application/configs/navigation.php
+++ b/airtime_mvc/application/configs/navigation.php
@@ -25,7 +25,7 @@ $pages = array(
 	array(
 		'label'      => 'Library',
 		'module'     => 'default',
-		'controller' => 'Playlist',
+		'controller' => 'Library',
 		'action'     => 'index',
 		'resource'	=>	'playlist'
 	),
diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php
index 79f95ba4f..3ba5738bd 100644
--- a/airtime_mvc/application/controllers/LibraryController.php
+++ b/airtime_mvc/application/controllers/LibraryController.php
@@ -27,6 +27,65 @@ class LibraryController extends Zend_Controller_Action
         $this->search_sess = new Zend_Session_Namespace("search");
     }
 
+    public function indexAction()
+    {
+        global $CC_CONFIG;
+
+        $request = $this->getRequest();
+        $baseUrl = $request->getBaseUrl();
+
+        $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'), 'text/javascript');
+
+        $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']);
+        $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']);
+        $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']);
+        $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']);
+
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
+        $this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']);
+
+        try {
+            if (isset($this->obj_sess->id)) {
+                $objInfo = Application_Model_Playlist::getObjInfo($this->obj_sess->type);
+                $obj = new $objInfo['className']($this->obj_sess->id);
+                $userInfo = Zend_Auth::getInstance()->getStorage()->read();
+                $user = new Application_Model_User($userInfo->id);
+                $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
+                
+                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);
+                        $this->view->form = $form;
+                    }
+                }
+                
+                $formatter = new LengthFormatter($obj->getLength());
+                $this->view->length = $formatter->format();
+                $this->view->type = $this->obj_sess->type;
+            }
+        } catch (PlaylistNotFoundException $e) {
+            $this->playlistNotFound($this->obj_sess->type);
+        } catch (Exception $e) {
+            $this->playlistUnknownError($e);
+        }
+    }
+
+
     public function contextMenuAction()
     {
         $id = $this->_getParam('id');
@@ -270,7 +329,7 @@ class LibraryController extends Zend_Controller_Action
                 Logging::log($data['MDATA_KEY_FILEPATH']);
                 Application_Model_RabbitMq::SendMessageToMediaMonitor("md_update", $data);
 
-                $this->_redirect('Playlist');
+                $this->_redirect('Library');
             }
         }
 
diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php
index b60bcdaaf..28ea6b5f6 100644
--- a/airtime_mvc/application/controllers/PlaylistController.php
+++ b/airtime_mvc/application/controllers/PlaylistController.php
@@ -39,7 +39,7 @@ class PlaylistController extends Zend_Controller_Action
     {
         $obj = null;
         
-        $objInfo = $this->getObjInfo($p_type);
+        $objInfo = Application_Model_Playlist::getObjInfo($p_type);
 
         if (isset($this->obj_sess->id)) {
             $obj = new $objInfo['className']($this->obj_sess->id);
@@ -195,7 +195,7 @@ class PlaylistController extends Zend_Controller_Action
 
         try {
             if (isset($this->obj_sess->id)) {
-                $objInfo = $this->getObjInfo($this->obj_sess->type);
+                $objInfo = Application_Model_Playlist::getObjInfo($this->obj_sess->type);
                 $obj = new $objInfo['className']($this->obj_sess->id);
                 $userInfo = Zend_Auth::getInstance()->getStorage()->read();
                 $user = new Application_Model_User($userInfo->id);
@@ -227,7 +227,7 @@ class PlaylistController extends Zend_Controller_Action
         $userInfo = Zend_Auth::getInstance()->getStorage()->read();
         $type = $this->_getParam('type');
         
-        $objInfo = $this->getObjInfo($type);
+        $objInfo = Application_Model_Playlist::getObjInfo($type);
         
         $name = 'Untitled Playlist';
         if ($type == 'block') {
@@ -246,7 +246,7 @@ class PlaylistController extends Zend_Controller_Action
     {
         $id = $this->_getParam('id', null);
         $type = $this->_getParam('type');
-        $objInfo = $this->getObjInfo($type);
+        $objInfo = Application_Model_Playlist::getObjInfo($type);
         Logging::log("editing {$type} {$id}");
 
         if (!is_null($id)) {
@@ -271,7 +271,7 @@ class PlaylistController extends Zend_Controller_Action
         
         $obj = null;
      
-        $objInfo = $this->getObjInfo($type);
+        $objInfo = Application_Model_Playlist::getObjInfo($type);
         
         $userInfo = Zend_Auth::getInstance()->getStorage()->read();
         $user = new Application_Model_User($userInfo->id);
@@ -588,19 +588,6 @@ class PlaylistController extends Zend_Controller_Action
         }
     }
     
-    public function getObjInfo($p_type)
-    {
-        $info = array();
-        
-        if (strcmp($p_type, 'playlist')==0) {
-            $info['className'] = 'Application_Model_Playlist';
-        } else {
-            $info['className'] = 'Application_Model_Block';
-        }
-        
-        return $info;
-    }
-    
     public function getBlockInfoAction()
     {
         $request = $this->getRequest();
diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php
index 19023fc8d..29dcd03f8 100644
--- a/airtime_mvc/application/models/Playlist.php
+++ b/airtime_mvc/application/models/Playlist.php
@@ -899,6 +899,19 @@ SQL;
         CcPlaylistcontentsQuery::create()->findByDbPlaylistId($this->id)->delete();
     }
 
+    public static function getObjInfo($p_type)
+    {
+        $info = array();
+        
+        if (strcmp($p_type, 'playlist')==0) {
+            $info['className'] = 'Application_Model_Playlist';
+        } else {
+            $info['className'] = 'Application_Model_Block';
+        }
+        
+        return $info;
+    }
+
 } // class Playlist
 
 class PlaylistNotFoundException extends Exception {}
diff --git a/airtime_mvc/application/views/scripts/playlist/index.phtml b/airtime_mvc/application/views/scripts/library/index.phtml
similarity index 100%
rename from airtime_mvc/application/views/scripts/playlist/index.phtml
rename to airtime_mvc/application/views/scripts/library/index.phtml

From 0ce4c1000be977fbf57cc06af0cfba3d100960ce Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 21 Aug 2012 11:13:27 -0400
Subject: [PATCH 07/10] replace tabs with spaces

-also remove \r characters
---
 .../application/configs/navigation.php        | 78 +++++++++----------
 1 file changed, 39 insertions(+), 39 deletions(-)

diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php
index 5874aa8e2..724fa4c40 100644
--- a/airtime_mvc/application/configs/navigation.php
+++ b/airtime_mvc/application/configs/navigation.php
@@ -8,38 +8,38 @@
 * the navigation container below.
 */
 $pages = array(
-	array(
+    array(
         'label'      => 'Now Playing',
         'module'     => 'default',
         'controller' => 'Showbuilder',
         'action'     => 'index',
-        'resource'	=>	'showbuilder'
-	),
-	array(
-		'label'      => 'Add Media',
-		'module'     => 'default',
-		'controller' => 'Plupload',
-		'action'     => 'index',
-		'resource'	=>	'plupload'
-	),
-	array(
-		'label'      => 'Library',
-		'module'     => 'default',
-		'controller' => 'Library',
-		'action'     => 'index',
-		'resource'	=>	'playlist'
-	),
-	array(
+        'resource'   =>    'showbuilder'
+    ),
+    array(
+        'label'      => 'Add Media',
+        'module'     => 'default',
+        'controller' => 'Plupload',
+        'action'     => 'index',
+        'resource'   =>    'plupload'
+    ),
+    array(
+        'label'      => 'Library',
+        'module'     => 'default',
+        'controller' => 'Library',
+        'action'     => 'index',
+        'resource'   =>    'playlist'
+    ),
+    array(
         'label'      => 'Calendar',
         'module'     => 'default',
         'controller' => 'Schedule',
         'action'     => 'index',
-        'resource'	=>	'schedule'
-	),
+        'resource'   =>    'schedule'
+    ),
     array(
         'label'      => 'System',
-        'uri' => '#',
-        'resource' => 'preference',
+        'uri'        => '#',
+        'resource'   => 'preference',
         'pages'      => array(
             array(
                 'label'      => 'Preferences',
@@ -51,14 +51,14 @@ $pages = array(
                 'module'     => 'default',
                 'controller' => 'user',
                 'action'     => 'add-user',
-                'resource'	=>	'user'
+                'resource'   =>    'user'
             ),
             array(
                 'label'      => 'Media Folders',
                 'module'     => 'default',
                 'controller' => 'Preference',
                 'action'     => 'directory-config',
-                'id'		 => 'manage_folder'
+                'id'         => 'manage_folder'
             ),
             array(
                 'label'      => 'Streams',
@@ -77,28 +77,28 @@ $pages = array(
                 'module'     => 'default',
                 'controller' => 'systemstatus',
                 'action'     => 'index',
-                'resource'	=>	'systemstatus'
+                'resource'   =>    'systemstatus'
             ),
-        	array(
-        		'label'      => 'Playout History',
-        		'module'     => 'default',
-        		'controller' => 'playouthistory',
-        		'action'     => 'index',
-        		'resource'	=>	'playouthistory'
-        	)
+            array(
+                'label'      => 'Playout History',
+                'module'     => 'default',
+                'controller' => 'playouthistory',
+                'action'     => 'index',
+                'resource'   => 'playouthistory'
+            )
         )
     ),
-	array(
-		'label'      => 'Help',
-		'uri'     => '#',
-		'resource'	=>	'dashboard',
+    array(
+        'label'      => 'Help',
+        'uri'     => '#',
+        'resource'    =>    'dashboard',
         'pages'      => array(
             array(
                 'label'      => 'Getting Started',
                 'module'     => 'default',
                 'controller' => 'dashboard',
                 'action'     => 'help',
-                'resource'   =>	'dashboard'
+                'resource'   =>    'dashboard'
             ),
             array(
                 'label'      => 'User Manual',
@@ -110,10 +110,10 @@ $pages = array(
                 'module'     => 'default',
                 'controller' => 'dashboard',
                 'action'     => 'about',
-                'resource'   =>	'dashboard'
+                'resource'   =>    'dashboard'
             )
         )
-	)
+    )
 );
 
 

From 0c381d4692490d2ea3f5dbcaea5fdee4869514bb Mon Sep 17 00:00:00 2001
From: denise <denise@denise-DX4860.(none)>
Date: Tue, 21 Aug 2012 11:58:39 -0400
Subject: [PATCH 08/10] CC-4253: Smart Playlist: Please support filter tracks
 by date

-fixed
---
 airtime_mvc/application/models/Block.php | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php
index fbd429d1e..00cdf1c04 100644
--- a/airtime_mvc/application/models/Block.php
+++ b/airtime_mvc/application/models/Block.php
@@ -1140,7 +1140,17 @@ EOT;
                     $column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$spCriteria]);
                     // if the column is timestamp, convert it into UTC
                     if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
-                        $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
+                        /* Check if only a date was supplied and trim
+                         * the time after it is converted to UTC time
+                         */
+                        if (strlen($criteria['value']) <= 10) {
+                            //extract date only from timestamp in db
+                            $spCriteria = 'date('.$spCriteria.')';
+                            $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
+                            $spCriteriaValue = substr($spCriteriaValue, 0, 10);
+                        } else {
+                            $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
+                        }
                     } else if($spCriteria == "bit_rate") {
                         // multiply 1000 because we store only number value
                         // e.g 192kps is stored as 192000

From 167881c903c613b4ac786d5e700ffb79f7afe834 Mon Sep 17 00:00:00 2001
From: denise <denise@denise-DX4860.(none)>
Date: Tue, 21 Aug 2012 12:01:48 -0400
Subject: [PATCH 09/10] CC-4253: Smart Playlist: Please support filter tracks
 by date

-code refactor
---
 airtime_mvc/application/models/Block.php | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php
index 00cdf1c04..d5816fab5 100644
--- a/airtime_mvc/application/models/Block.php
+++ b/airtime_mvc/application/models/Block.php
@@ -1140,16 +1140,14 @@ EOT;
                     $column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$spCriteria]);
                     // if the column is timestamp, convert it into UTC
                     if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
+                        $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
                         /* Check if only a date was supplied and trim
                          * the time after it is converted to UTC time
                          */
                         if (strlen($criteria['value']) <= 10) {
                             //extract date only from timestamp in db
                             $spCriteria = 'date('.$spCriteria.')';
-                            $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
                             $spCriteriaValue = substr($spCriteriaValue, 0, 10);
-                        } else {
-                            $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
                         }
                     } else if($spCriteria == "bit_rate") {
                         // multiply 1000 because we store only number value

From 2a497bf941ef68ee9c7ee9c712d198b9f82e97fb Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 21 Aug 2012 12:06:07 -0400
Subject: [PATCH 10/10] remove symlink, not actual binary

---
 python_apps/pypo/install/pypo-initialize.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/python_apps/pypo/install/pypo-initialize.py b/python_apps/pypo/install/pypo-initialize.py
index 357aa49c6..01fe004bb 100644
--- a/python_apps/pypo/install/pypo-initialize.py
+++ b/python_apps/pypo/install/pypo-initialize.py
@@ -85,16 +85,16 @@ try:
     
     p = Popen("which liquidsoap", shell=True, stdout=PIPE)
     liq_path = p.communicate()[0].strip()
+    symlink_path = "/usr/bin/airtime-liquidsoap"
     
     if p.returncode == 0:
         try:
-            os.unlink(liq_path)
+            os.remove(symlink_path)
         except Exception:
             #liq_path DNE, which is OK.
             pass
             
-        
-        os.symlink(liq_path, "/usr/bin/airtime-liquidsoap")
+        os.symlink(liq_path, symlink_path)
     else:
         print " * Liquidsoap binary not found!"
         sys.exit(1)