From 54bb414500c82f28a14a5208873bfb6f208688d0 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 14:32:33 -0400 Subject: [PATCH 1/7] CC-4318: Widgets: Weekly show cannot show the schedule -fixed --- .../application/controllers/ApiController.php | 15 +++++++++----- airtime_mvc/application/models/Show.php | 20 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 033369802..d95481823 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -5,7 +5,12 @@ class ApiController extends Zend_Controller_Action public function init() { - $this->checkAuth(); + $ignoreAuth = array("live-info", "week-info"); + + $params = $this->getRequest()->getParams(); + if (!in_array($params['action'], $ignoreAuth)) { + $this->checkAuth(); + } /* Initialize action controller here */ $context = $this->_helper->getHelper('contextSwitch'); $context->addActionContext('version' , 'json') @@ -41,7 +46,6 @@ class ApiController extends Zend_Controller_Action public function checkAuth() { global $CC_CONFIG; - $api_key = $this->_getParam('api_key'); if (!in_array($api_key, $CC_CONFIG["apiKey"]) && @@ -298,7 +302,7 @@ class ApiController extends Zend_Controller_Action $result = array(); for ($i=0; $i<7; $i++) { $utcDayEnd = Application_Common_DateHelper::GetDayEndTimestamp($utcDayStart); - $shows = Application_Model_Show::getNextShows($utcDayStart, "0", $utcDayEnd); + $shows = Application_Model_Show::getNextShows($utcDayStart, "ALL", $utcDayEnd); $utcDayStart = $utcDayEnd; Application_Model_Show::convertToLocalTimeZone($shows, @@ -307,9 +311,10 @@ class ApiController extends Zend_Controller_Action $result[$dow[$i]] = $shows; } - $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. + + //used by caller to determine if the airtime they are running or widgets in use is out of date. + $result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION; header("Content-type: text/javascript"); - Logging::info($result); // If a callback is not given, then just provide the raw JSON. echo isset($_GET['callback']) ? $_GET['callback'].'('.json_encode($result).')' : json_encode($result); } else { diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 7f905b687..9a0eaa452 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -2060,8 +2060,6 @@ SQL; // been specified if ($timeEnd == "") { $timeEnd = "'$timeStart' + INTERVAL '2 days'"; - } else { - $timeEnd = "'$timeEnd'"; } //TODO, returning starts + ends twice (once with an alias). Unify this after the 2.0 release. --Martin @@ -2083,12 +2081,24 @@ WHERE si.show_id = s.id AND si.starts < :timeEnd::timestamp AND modified_instance != TRUE ORDER BY si.starts -LIMIT :lim SQL; - return Application_Common_Database::prepareAndExecute( $sql, array( + + //PDO won't accept "ALL" as a limit value (complains it is not an + //integer, and so we must completely remove the limit clause if we + //want to show all results - MK + if ($limit != "ALL") { + $sql .= PHP_EOL."LIMIT :lim"; + $params = array( ':timeStart' => $timeStart, ':timeEnd' => $timeEnd, - ':lim' => $limit), 'all'); + ':lim' => $limit); + } else { + $params = array( + ':timeStart' => $timeStart, + ':timeEnd' => $timeEnd); + } + + return Application_Common_Database::prepareAndExecute( $sql, $params, 'all'); } /** From 1483fb92e5b41e677f029f5410244df4a36fd13c Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 15:55:46 -0400 Subject: [PATCH 2/7] better detection of timezone during install (suppress PHP warnings if timezone is not set in php.ini) --- install_minimal/include/AirtimeInstall.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install_minimal/include/AirtimeInstall.php b/install_minimal/include/AirtimeInstall.php index d0c2ed3f7..cb054b429 100644 --- a/install_minimal/include/AirtimeInstall.php +++ b/install_minimal/include/AirtimeInstall.php @@ -320,7 +320,8 @@ class AirtimeInstall { $con = Propel::getConnection(); // we need to run php as commandline because we want to get the timezone in cli php.ini file - $defaultTimezone = exec("php -r 'echo date_default_timezone_get().PHP_EOL;'"); + //$defaultTimezone = exec("php -r 'echo date_default_timezone_get().PHP_EOL;'"); + $defaultTimezone = exec("cat /etc/timezone"); $defaultTimezone = trim($defaultTimezone); if((!in_array($defaultTimezone, DateTimeZone::listIdentifiers()))){ $defaultTimezone = "UTC"; From f3250ac6160c33c5bd01523a53b55627b768e60e Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 16:06:16 -0400 Subject: [PATCH 3/7] CC-4447: Install minimal -> reinstall uring -r reports ERROR on existing database -fixed --- install_minimal/include/AirtimeInstall.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/install_minimal/include/AirtimeInstall.php b/install_minimal/include/AirtimeInstall.php index cb054b429..02a2b43b2 100644 --- a/install_minimal/include/AirtimeInstall.php +++ b/install_minimal/include/AirtimeInstall.php @@ -215,6 +215,15 @@ class AirtimeInstall $database = $CC_CONFIG['dsn']['database']; $username = $CC_CONFIG['dsn']['username']; #$command = "echo \"CREATE DATABASE $database OWNER $username\" | su postgres -c psql 2>/dev/null"; + + $command = "su postgres -c \"psql -l | cut -f2 -d' ' | grep -w 'airtime'\";"; + exec($command, $output, $rv); + + if ($rv == 0) { + //database already exists + return true; + } + $command = "su postgres -c \"createdb $database --encoding UTF8 --owner $username\""; @exec($command, $output, $results); From 8b445486b10bc152e5c59cc759c0e9dd4713e1f5 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 16:17:53 -0400 Subject: [PATCH 4/7] CC-4427: Listen button does not work fixed --- airtime_mvc/application/models/StreamSetting.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index 61a179d8a..a5740c70f 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -106,12 +106,12 @@ class Application_Model_StreamSetting public static function getStreamData($p_streamId) { $con = Propel::getConnection(); + $streamId = pg_escape_string($p_streamId); $sql = "SELECT * " ."FROM cc_stream_setting " - ."WHERE keyname LIKE :stream_id"; + ."WHERE keyname LIKE '{$streamId}_%'"; $stmt = $con->prepare($sql); - $stmt->bindParam(':stream_id', "${p_streamId}_%"); if ($stmt->execute()) { $rows = $stmt->fetchAll(); From c310cecf406b9d2ab0a4edfb6a5d7df1485e3848 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 16:40:27 -0400 Subject: [PATCH 5/7] CC-4463: do we need getFileExtension()? --- airtime_mvc/application/models/StoredFile.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 3469c75c9..420510953 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -407,11 +407,12 @@ SQL; */ public function getFileExtension() { + return ""; // TODO : what's the point of having this function? Can we not just use // the extension from the file_path column from cc_files? $mime = $this->_file->getDbMime(); - if ($mime == "audio/vorbis" || $mime == "application/ogg") { + if ($mime == "audio/ogg" || $mime == "application/ogg") { return "ogg"; } elseif ($mime == "audio/mp3" || $mime == "audio/mpeg") { return "mp3"; @@ -505,8 +506,6 @@ SQL; */ public function getRelativeFileUrl($baseUrl) { - Logging::info("getting media!"); - return $baseUrl."/api/get-media/file/".$this->getId().".".$this->getFileExtension(); } From d367c0f55c8a6d109ffe6309eecf6bfba4920857 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 16:41:40 -0400 Subject: [PATCH 6/7] remove all newline characters from AirtimeInstall.php --- install_minimal/include/AirtimeInstall.php | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/install_minimal/include/AirtimeInstall.php b/install_minimal/include/AirtimeInstall.php index 02a2b43b2..b2d4bf451 100644 --- a/install_minimal/include/AirtimeInstall.php +++ b/install_minimal/include/AirtimeInstall.php @@ -107,16 +107,16 @@ class AirtimeInstall echo "done.\n"; } } catch (Exception $e) { - echo "Error!\n".$e->getMessage()."\n"; - echo " SQL statement was:\n"; + echo "Error!\n".$e->getMessage()."\n"; + echo " SQL statement was:\n"; echo " ".$sql."\n\n"; } } - public static function DropSequence($p_sequenceName) - { + public static function DropSequence($p_sequenceName) + { AirtimeInstall::InstallQuery("DROP SEQUENCE IF EXISTS $p_sequenceName"); - } + } /** * Try to connect to the database. Return true on success, false on failure. @@ -130,12 +130,12 @@ class AirtimeInstall try { $con = Propel::getConnection(); } catch (Exception $e) { - echo $e->getMessage().PHP_EOL; - echo "Database connection problem.".PHP_EOL; - echo "Check if database '{$CC_CONFIG['dsn']['database']}' exists". - " with corresponding permissions.".PHP_EOL; - if ($p_exitOnError) { - exit(1); + echo $e->getMessage().PHP_EOL; + echo "Database connection problem.".PHP_EOL; + echo "Check if database '{$CC_CONFIG['dsn']['database']}' exists". + " with corresponding permissions.".PHP_EOL; + if ($p_exitOnError) { + exit(1); } return false; } @@ -314,7 +314,7 @@ class AirtimeInstall public static function SetUniqueId() { - $con = Propel::getConnection(); + $con = Propel::getConnection(); $uniqueId = md5(uniqid("", true)); $sql = "INSERT INTO cc_pref (keystr, valstr) VALUES ('uniqueId', '$uniqueId')"; @@ -328,7 +328,7 @@ class AirtimeInstall public static function SetDefaultTimezone() { $con = Propel::getConnection(); - // we need to run php as commandline because we want to get the timezone in cli php.ini file + // we need to run php as commandline because we want to get the timezone in cli php.ini file //$defaultTimezone = exec("php -r 'echo date_default_timezone_get().PHP_EOL;'"); $defaultTimezone = exec("cat /etc/timezone"); $defaultTimezone = trim($defaultTimezone); @@ -345,7 +345,7 @@ class AirtimeInstall public static function SetImportTimestamp() { - $con = Propel::getConnection(); + $con = Propel::getConnection(); $sql = "INSERT INTO cc_pref (keystr, valstr) VALUES ('import_timestamp', '0')"; $result = $con->exec($sql); if ($result < 1) { From 75620be7615f91ec8a0ced8c5bbba2cb72d43120 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 17 Sep 2012 16:46:51 -0400 Subject: [PATCH 7/7] remove all mosty carriage return characters --- airtime_mvc/application/common/DateHelper.php | 100 ++++++------ .../models/airtime/CcBlockcontents.php | 152 +++++++++--------- .../models/airtime/CcShowInstances.php | 54 +++---- .../include/airtime-db-install.php | 2 +- 4 files changed, 154 insertions(+), 154 deletions(-) diff --git a/airtime_mvc/application/common/DateHelper.php b/airtime_mvc/application/common/DateHelper.php index eb32c0393..c13543d8e 100644 --- a/airtime_mvc/application/common/DateHelper.php +++ b/airtime_mvc/application/common/DateHelper.php @@ -366,56 +366,56 @@ class Application_Common_DateHelper return $retVal; } - /** - * This function is used for calculations! Don't modify for display purposes! - * - * Convert playlist time value to float seconds - * - * @param string $plt - * playlist interval value (HH:mm:ss.dddddd) - * @return int - * seconds - */ - public static function playlistTimeToSeconds($plt) - { - $arr = preg_split('/:/', $plt); - if (isset($arr[2])) { - return (intval($arr[0])*60 + intval($arr[1]))*60 + floatval($arr[2]); - } - if (isset($arr[1])) { - return intval($arr[0])*60 + floatval($arr[1]); - } - - return floatval($arr[0]); - } - - - /** - * This function is used for calculations! Don't modify for display purposes! - * - * Convert float seconds value to playlist time format - * - * @param float $seconds - * @return string - * interval in playlist time format (HH:mm:ss.d) - */ - public static function secondsToPlaylistTime($p_seconds) - { - $info = explode('.', $p_seconds); - $seconds = $info[0]; - if (!isset($info[1])) { - $milliStr = 0; - } else { - $milliStr = $info[1]; - } - $hours = floor($seconds / 3600); - $seconds -= $hours * 3600; - $minutes = floor($seconds / 60); - $seconds -= $minutes * 60; - - $res = sprintf("%02d:%02d:%02d.%s", $hours, $minutes, $seconds, $milliStr); - - return $res; + /** + * This function is used for calculations! Don't modify for display purposes! + * + * Convert playlist time value to float seconds + * + * @param string $plt + * playlist interval value (HH:mm:ss.dddddd) + * @return int + * seconds + */ + public static function playlistTimeToSeconds($plt) + { + $arr = preg_split('/:/', $plt); + if (isset($arr[2])) { + return (intval($arr[0])*60 + intval($arr[1]))*60 + floatval($arr[2]); + } + if (isset($arr[1])) { + return intval($arr[0])*60 + floatval($arr[1]); + } + + return floatval($arr[0]); + } + + + /** + * This function is used for calculations! Don't modify for display purposes! + * + * Convert float seconds value to playlist time format + * + * @param float $seconds + * @return string + * interval in playlist time format (HH:mm:ss.d) + */ + public static function secondsToPlaylistTime($p_seconds) + { + $info = explode('.', $p_seconds); + $seconds = $info[0]; + if (!isset($info[1])) { + $milliStr = 0; + } else { + $milliStr = $info[1]; + } + $hours = floor($seconds / 3600); + $seconds -= $hours * 3600; + $minutes = floor($seconds / 60); + $seconds -= $minutes * 60; + + $res = sprintf("%02d:%02d:%02d.%s", $hours, $minutes, $seconds, $milliStr); + + return $res; } } diff --git a/airtime_mvc/application/models/airtime/CcBlockcontents.php b/airtime_mvc/application/models/airtime/CcBlockcontents.php index f6de2dd45..5fcfbbf24 100644 --- a/airtime_mvc/application/models/airtime/CcBlockcontents.php +++ b/airtime_mvc/application/models/airtime/CcBlockcontents.php @@ -14,82 +14,82 @@ * @package propel.generator.airtime */ class CcBlockcontents extends BaseCcBlockcontents { - /** - * Get the [optionally formatted] temporal [fadein] column value. - * - * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL - * @throws PropelException - if unable to parse/validate the date/time value. - */ - public function getDbFadein($format = "s.u") - { - return parent::getDbFadein($format); - } - - /** - * Get the [optionally formatted] temporal [fadein] column value. - * - * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL - * @throws PropelException - if unable to parse/validate the date/time value. - */ - public function getDbFadeout($format = "s.u") - { - return parent::getDbFadeout($format); - } - - /** - * - * @param String in format SS.uuuuuu, Datetime, or DateTime accepted string. - * - * @return CcBlockcontents The current object (for fluent API support) - */ - public function setDbFadein($v) - { - if ($v instanceof DateTime) { - $dt = $v; - } - else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) { - $dt = DateTime::createFromFormat("s.u", $v); - } - else { - try { - $dt = new DateTime($v); - } catch (Exception $x) { - throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); - } - } - - $this->fadein = $dt->format('H:i:s.u'); - $this->modifiedColumns[] = CcBlockcontentsPeer::FADEIN; - - return $this; - } // setDbFadein() - - /** - * - * @param String in format SS.uuuuuu, Datetime, or DateTime accepted string. - * - * @return CcBlockcontents The current object (for fluent API support) - */ - public function setDbFadeout($v) - { - if ($v instanceof DateTime) { - $dt = $v; - } - else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) { - $dt = DateTime::createFromFormat("s.u", $v); - } - else { - try { - $dt = new DateTime($v); - } catch (Exception $x) { - throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); - } - } - - $this->fadeout = $dt->format('H:i:s.u'); - $this->modifiedColumns[] = CcBlockcontentsPeer::FADEOUT; - - return $this; + /** + * Get the [optionally formatted] temporal [fadein] column value. + * + * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL + * @throws PropelException - if unable to parse/validate the date/time value. + */ + public function getDbFadein($format = "s.u") + { + return parent::getDbFadein($format); + } + + /** + * Get the [optionally formatted] temporal [fadein] column value. + * + * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL + * @throws PropelException - if unable to parse/validate the date/time value. + */ + public function getDbFadeout($format = "s.u") + { + return parent::getDbFadeout($format); + } + + /** + * + * @param String in format SS.uuuuuu, Datetime, or DateTime accepted string. + * + * @return CcBlockcontents The current object (for fluent API support) + */ + public function setDbFadein($v) + { + if ($v instanceof DateTime) { + $dt = $v; + } + else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) { + $dt = DateTime::createFromFormat("s.u", $v); + } + else { + try { + $dt = new DateTime($v); + } catch (Exception $x) { + throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); + } + } + + $this->fadein = $dt->format('H:i:s.u'); + $this->modifiedColumns[] = CcBlockcontentsPeer::FADEIN; + + return $this; + } // setDbFadein() + + /** + * + * @param String in format SS.uuuuuu, Datetime, or DateTime accepted string. + * + * @return CcBlockcontents The current object (for fluent API support) + */ + public function setDbFadeout($v) + { + if ($v instanceof DateTime) { + $dt = $v; + } + else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) { + $dt = DateTime::createFromFormat("s.u", $v); + } + else { + try { + $dt = new DateTime($v); + } catch (Exception $x) { + throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); + } + } + + $this->fadeout = $dt->format('H:i:s.u'); + $this->modifiedColumns[] = CcBlockcontentsPeer::FADEOUT; + + return $this; } // setDbFadeout() } // CcBlockcontents diff --git a/airtime_mvc/application/models/airtime/CcShowInstances.php b/airtime_mvc/application/models/airtime/CcShowInstances.php index ed598c5ee..4625d1f91 100644 --- a/airtime_mvc/application/models/airtime/CcShowInstances.php +++ b/airtime_mvc/application/models/airtime/CcShowInstances.php @@ -139,40 +139,40 @@ class CcShowInstances extends BaseCcShowInstances { $this->save($con); } - /** - * Computes the value of the aggregate column time_filled - * - * @param PropelPDO $con A connection object - * - * @return mixed The scalar result from the aggregate query - */ - public function computeDbTimeFilled(PropelPDO $con) - { - $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); - $stmt->bindValue(':p1', $this->getDbId()); - $stmt->execute(); - return $stmt->fetchColumn(); - } - - /** - * Updates the aggregate column time_filled - * - * @param PropelPDO $con A connection object - */ - public function updateDbTimeFilled(PropelPDO $con) + /** + * Computes the value of the aggregate column time_filled + * + * @param PropelPDO $con A connection object + * + * @return mixed The scalar result from the aggregate query + */ + public function computeDbTimeFilled(PropelPDO $con) + { + $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); + $stmt->bindValue(':p1', $this->getDbId()); + $stmt->execute(); + return $stmt->fetchColumn(); + } + + /** + * Updates the aggregate column time_filled + * + * @param PropelPDO $con A connection object + */ + public function updateDbTimeFilled(PropelPDO $con) { $timefilled = $this->computeDbTimeFilled($con); if(is_null($timefilled)){ $timefilled = "00:00:00"; - } - $this->setDbTimeFilled($timefilled); - $this->save($con); + } + $this->setDbTimeFilled($timefilled); + $this->save($con); } public function preInsert(PropelPDO $con = null) { - $now = new DateTime("now", new DateTimeZone("UTC")); - $this->setDbCreated($now); - return true; + $now = new DateTime("now", new DateTimeZone("UTC")); + $this->setDbCreated($now); + return true; } } // CcShowInstances diff --git a/install_minimal/include/airtime-db-install.php b/install_minimal/include/airtime-db-install.php index 862ce3756..3d9a80ed3 100644 --- a/install_minimal/include/airtime-db-install.php +++ b/install_minimal/include/airtime-db-install.php @@ -11,7 +11,7 @@ require_once(__DIR__.'/airtime-constants.php'); require_once(AirtimeInstall::GetAirtimeSrcDir().'/application/configs/conf.php'); require_once 'propel/runtime/lib/Propel.php'; -Propel::init(AirtimeInstall::GetAirtimeSrcDir()."/application/configs/airtime-conf-production.php"); +Propel::init(AirtimeInstall::GetAirtimeSrcDir()."/application/configs/airtime-conf-production.php"); echo PHP_EOL."* Database Installation".PHP_EOL;