diff --git a/application/Bootstrap.php b/application/Bootstrap.php index bf9591e56..19a2cc72c 100644 --- a/application/Bootstrap.php +++ b/application/Bootstrap.php @@ -1,7 +1,7 @@ setFetchMode(DB_FETCHMODE_ASSOC); //Zend_Session::start(); Zend_Validate::setDefaultNamespaces("Zend"); +$front = Zend_Controller_Front::getInstance(); +$front->registerPlugin(new RabbitMqPlugin()); + class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDoctype() @@ -48,9 +51,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap protected function _initHeadLink() { $view = $this->getResource('view'); - $view->headLink()->appendStylesheet('/css/redmond/jquery-ui-1.8.8.custom.css'); - $this->view->headLink()->appendStylesheet('/css/pro_dropdown_3.css'); $this->view->headLink()->appendStylesheet('/css/styles.css'); } @@ -70,14 +71,17 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->headScript()->appendFile('/js/airtime/common/common.js','text/javascript'); } - protected function _initViewHelpers(){ + protected function _initViewHelpers() + { $view = $this->getResource('view'); $view->addHelperPath('../application/views/helpers', 'Airtime_View_Helper'); } - protected function _initTitle(){ + protected function _initTitle() + { $view = $this->getResource('view'); $view->headTitle(Application_Model_Preference::GetHeadTitle()); } + } diff --git a/application/controllers/plugins/RabbitMqPlugin.php b/application/controllers/plugins/RabbitMqPlugin.php new file mode 100644 index 000000000..3316f01b2 --- /dev/null +++ b/application/controllers/plugins/RabbitMqPlugin.php @@ -0,0 +1,9 @@ +addElement($jabber); $select = new Zend_Form_Element_Select('type'); + $select->setLabel('User Type:'); $select->setAttrib('class', 'input_select'); $select->setAttrib('style', 'width: 40%'); $select->setMultiOptions(array( - "A" => "admin", - "H" => "host", "G" => "guest", + "H" => "host", + "A" => "admin" )); $select->setRequired(true); $this->addElement($select); diff --git a/application/models/RabbitMq.php b/application/models/RabbitMq.php index af5bffa02..e2749149c 100644 --- a/application/models/RabbitMq.php +++ b/application/models/RabbitMq.php @@ -3,30 +3,41 @@ require_once 'php-amqplib/amqp.inc'; class RabbitMq { + static private $doPush = FALSE; + + /** + * Sets a flag to push the schedule at the end of the request. + */ + public static function PushSchedule() { + RabbitMq::$doPush = TRUE; + } /** * Push the current schedule to RabbitMQ, to be picked up by Pypo. * Will push the schedule in the range from 24 hours ago to 24 hours * in the future. */ - public static function PushSchedule() { + public static function PushScheduleFinal() + { global $CC_CONFIG; - $conn = new AMQPConnection($CC_CONFIG["rabbitmq"]["host"], - $CC_CONFIG["rabbitmq"]["port"], - $CC_CONFIG["rabbitmq"]["user"], - $CC_CONFIG["rabbitmq"]["password"]); - $channel = $conn->channel(); - $channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false, true, true); + if (RabbitMq::$doPush) { + $conn = new AMQPConnection($CC_CONFIG["rabbitmq"]["host"], + $CC_CONFIG["rabbitmq"]["port"], + $CC_CONFIG["rabbitmq"]["user"], + $CC_CONFIG["rabbitmq"]["password"]); + $channel = $conn->channel(); + $channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false, true, true); - $EXCHANGE = 'airtime-schedule'; - $channel->exchange_declare($EXCHANGE, 'direct', false, true); + $EXCHANGE = 'airtime-schedule'; + $channel->exchange_declare($EXCHANGE, 'direct', false, true); - $data = json_encode(Schedule::ExportRangeAsJson()); - $msg = new AMQPMessage($data, array('content_type' => 'text/plain')); + $data = json_encode(Schedule::ExportRangeAsJson()); + $msg = new AMQPMessage($data, array('content_type' => 'text/plain')); - $channel->basic_publish($msg, $EXCHANGE); - $channel->close(); - $conn->close(); + $channel->basic_publish($msg, $EXCHANGE); + $channel->close(); + $conn->close(); + } } } diff --git a/application/models/Schedule.php b/application/models/Schedule.php index aaff58ef9..ba5b97290 100644 --- a/application/models/Schedule.php +++ b/application/models/Schedule.php @@ -716,7 +716,7 @@ class Schedule { $result['stream_metadata'] = array(); $result['stream_metadata']['format'] = Application_Model_Preference::GetStreamLabelFormat(); $result['stream_metadata']['station_name'] = Application_Model_Preference::GetStationName(); - $result['server_timezone'] = date_default_timezone_get(); + $result['server_timezone'] = date('O'); return $result; } diff --git a/application/views/scripts/partialviews/header.phtml b/application/views/scripts/partialviews/header.phtml index 4905d0d10..a817fc1fd 100644 --- a/application/views/scripts/partialviews/header.phtml +++ b/application/views/scripts/partialviews/header.phtml @@ -43,6 +43,6 @@
diff --git a/pypo/install/pypo-uninstall.py b/pypo/install/pypo-uninstall.py index a9f339be0..6dcc42ce5 100644 --- a/pypo/install/pypo-uninstall.py +++ b/pypo/install/pypo-uninstall.py @@ -38,16 +38,16 @@ try: remove_path(BASE_PATH) print "Removing daemontool script pypo" - remove_path("rm -rf /etc/service/pypo") + remove_path("/etc/service/pypo") if os.path.exists("/etc/service/pypo-fetch"): - remove_path("rm -rf /etc/service/pypo-fetch") + remove_path("/etc/service/pypo-fetch") if os.path.exists("/etc/service/pypo-push"): - remove_path("rm -rf /etc/service/pypo-push") + remove_path("/etc/service/pypo-push") print "Removing daemontool script pypo-liquidsoap" - remove_path("rm -rf /etc/service/pypo-liquidsoap") + remove_path("/etc/service/pypo-liquidsoap") remove_user("pypo") print "Uninstall complete." diff --git a/pypo/pypofetch.py b/pypo/pypofetch.py index 0313e9567..2958c6bd4 100644 --- a/pypo/pypofetch.py +++ b/pypo/pypofetch.py @@ -11,6 +11,7 @@ import json import telnetlib import math from threading import Thread +from subprocess import Popen, PIPE # For RabbitMQ from kombu.connection import BrokerConnection @@ -78,13 +79,14 @@ class PypoFetch(Thread): def check_matching_timezones(self, server_timezone): logger = logging.getLogger('fetch') - f = open('/etc/timezone', 'r') - pypo_timezone = f.readline().strip(' \t\n\r') - f.close() + + process = Popen(["date", "+%z"], stdout=PIPE) + pypo_timezone = (process.communicate()[0]).strip(' \r\n\t') + if server_timezone != pypo_timezone: - logger.error("Server and pypo timezones do not match. Audio playback may not start when expected!") - logger.error("Server timezone: %s", server_timezone) - logger.error("Pypo timezone: %s", pypo_timezone) + logger.error("Server and pypo timezone offsets do not match. Audio playback may not start when expected!") + logger.error("Server timezone offset: %s", server_timezone) + logger.error("Pypo timezone offset: %s", pypo_timezone) """ Process the schedule