diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 8bf8d58aa..f3bf8f561 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -28,7 +28,6 @@ $CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC); date_default_timezone_set(Application_Model_Preference::GetTimezone()); Logging::setLogPath('/var/log/airtime/zendphp.log'); -Logging::log("bootstrap"); Zend_Validate::setDefaultNamespaces("Zend"); @@ -67,7 +66,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->headScript()->appendFile($baseUrl.'/js/libs/jquery.stickyPanel.js','text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/qtip/jquery.qtip2.min.js','text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/jplayer/jquery.jplayer.min.js'); - + $view->headScript()->appendScript("var baseUrl='$baseUrl/'"); //scripts for now playing bar $view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/helperfunctions.js','text/javascript'); diff --git a/airtime_mvc/application/configs/classmap-airtime-conf.php b/airtime_mvc/application/configs/classmap-airtime-conf.php index 859567e15..ef3b99a4b 100644 --- a/airtime_mvc/application/configs/classmap-airtime-conf.php +++ b/airtime_mvc/application/configs/classmap-airtime-conf.php @@ -134,11 +134,11 @@ return array ( 'BaseCcLoginAttemptsPeer' => 'airtime/om/BaseCcLoginAttemptsPeer.php', 'BaseCcLoginAttempts' => 'airtime/om/BaseCcLoginAttempts.php', 'BaseCcLoginAttemptsQuery' => 'airtime/om/BaseCcLoginAttemptsQuery.php', - 'CcComponentTableMap' => 'airtime/map/CcComponentTableMap.php', - 'CcComponentPeer' => 'airtime/CcComponentPeer.php', - 'CcComponent' => 'airtime/CcComponent.php', - 'CcComponentQuery' => 'airtime/CcComponentQuery.php', - 'BaseCcComponentPeer' => 'airtime/om/BaseCcComponentPeer.php', - 'BaseCcComponent' => 'airtime/om/BaseCcComponent.php', - 'BaseCcComponentQuery' => 'airtime/om/BaseCcComponentQuery.php', + 'CcServiceRegisterTableMap' => 'airtime/map/CcServiceRegisterTableMap.php', + 'CcServiceRegisterPeer' => 'airtime/CcServiceRegisterPeer.php', + 'CcServiceRegister' => 'airtime/CcServiceRegister.php', + 'CcServiceRegisterQuery' => 'airtime/CcServiceRegisterQuery.php', + 'BaseCcServiceRegisterPeer' => 'airtime/om/BaseCcServiceRegisterPeer.php', + 'BaseCcServiceRegister' => 'airtime/om/BaseCcServiceRegister.php', + 'BaseCcServiceRegisterQuery' => 'airtime/om/BaseCcServiceRegisterQuery.php', ); \ No newline at end of file diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 2795ee987..25db6011b 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -78,10 +78,10 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetStationWebSite($values["StationWebSite"]); Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]); Application_Model_Preference::SetPublicise($values["Publicise"]); - + $form->Logo->receive(); $imagePath = $form->Logo->getFileName(); - + Application_Model_Preference::SetStationCountry($values["Country"]); Application_Model_Preference::SetStationCity($values["City"]); Application_Model_Preference::SetStationDescription($values["Description"]); @@ -105,36 +105,36 @@ class PreferenceController extends Zend_Controller_Action $this->view->form = $form; //$form->render($this->view); } - + public function directoryConfigAction() { if(Application_Model_Preference::GetPlanLevel() == 'disabled'){ $request = $this->getRequest(); $baseUrl = $request->getBaseUrl(); - + $this->view->headScript()->appendFile($baseUrl.'/js/serverbrowse/serverbrowser.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/preferences/musicdirs.js','text/javascript'); - + $watched_dirs_pref = new Application_Form_WatchedDirPreferences(); - + $this->view->form = $watched_dirs_pref; } } - + public function streamSettingAction() { $request = $this->getRequest(); $baseUrl = $request->getBaseUrl(); - + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/preferences/streamsetting.js','text/javascript'); - + // get current settings $temp = Application_Model_StreamSetting::getStreamSetting(); $setting = array(); foreach ($temp as $t){ $setting[$t['keyname']] = $t['value']; } - + // get predefined type and bitrate from pref table $temp_types = Application_Model_Preference::GetStreamType(); $stream_types = array(); @@ -146,7 +146,7 @@ class PreferenceController extends Zend_Controller_Action } $stream_types[trim($type)] = $temp; } - + $temp_bitrate = Application_Model_Preference::GetStreamBitrate(); $max_bitrate = intval(Application_Model_Preference::GetMaxBitrate()); $stream_bitrates = array(); @@ -155,7 +155,7 @@ class PreferenceController extends Zend_Controller_Action $stream_bitrates[trim($type)] = strtoupper(trim($type))." Kbit/s"; } } - + $num_of_stream = intval(Application_Model_Preference::GetNumOfStreams()); $form = new Application_Form_StreamSetting(); $form->setSetting($setting); @@ -195,7 +195,7 @@ class PreferenceController extends Zend_Controller_Action } } $this->view->num_stream = $num_of_stream; - $this->view->disable_stream_conf = Application_Model_Preference::GetDisableStreamConf(); + $this->view->enable_stream_conf = Application_Model_Preference::GetEnableStreamConf(); $this->view->form = $form; } @@ -275,7 +275,7 @@ class PreferenceController extends Zend_Controller_Action $watched_dirs_form = new Application_Form_WatchedDirPreferences(); $this->view->subform = $watched_dirs_form->render(); } - + public function isImportInProgressAction(){ $now = time(); $res = false; diff --git a/airtime_mvc/application/forms/StreamSetting.php b/airtime_mvc/application/forms/StreamSetting.php index 746215b11..cb7735cb5 100644 --- a/airtime_mvc/application/forms/StreamSetting.php +++ b/airtime_mvc/application/forms/StreamSetting.php @@ -3,29 +3,29 @@ class Application_Form_StreamSetting extends Zend_Form { private $setting; - + public function init() { - + } - + public function setSetting($setting){ $this->setting = $setting; } - - public function startFrom(){ + + public function startFrom() { $setting = $this->setting; $output_sound_device = new Zend_Form_Element_Checkbox('output_sound_device'); $output_sound_device->setLabel('Enabled') ->setRequired(false) ->setValue(($setting['output_sound_device'] == "true")?1:0) ->setDecorators(array('ViewHelper')); - if(Application_Model_Preference::GetDisableStreamConf() == "true"){ + if (Application_Model_Preference::GetEnableStreamConf() == "false"){ $output_sound_device->setAttrib("readonly", true); } $this->addElement($output_sound_device); } - + public function isValid($data){ $this->populate(array("output_sound_device"=>$data)); return true; diff --git a/airtime_mvc/application/forms/StreamSettingSubForm.php b/airtime_mvc/application/forms/StreamSettingSubForm.php index 5a3e37e65..c8398d806 100644 --- a/airtime_mvc/application/forms/StreamSettingSubForm.php +++ b/airtime_mvc/application/forms/StreamSettingSubForm.php @@ -4,43 +4,43 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ private $setting; private $stream_types; private $stream_bitrates; - + public function init() { - + } - + public function setPrefix($prefix){ $this->prefix = $prefix; } - + public function setSetting($setting){ $this->setting = $setting; } - + public function setStreamTypes($stream_types){ $this->stream_types = $stream_types; } - + public function setStreamBitrates($stream_bitrates){ $this->stream_bitrates = $stream_bitrates; } - + public function startForm(){ $prefix = "s".$this->prefix; $stream_number = $this->prefix; $setting = $this->setting; $stream_types = $this->stream_types; $stream_bitrates = $this->stream_bitrates; - + $this->setIsArray(true); $this->setElementsBelongTo($prefix."_data"); - + $disable_all = false; - if(Application_Model_Preference::GetDisableStreamConf() == "true"){ + if(Application_Model_Preference::GetEnableStreamConf() == "false"){ $disable_all = true; } - + $enable = new Zend_Form_Element_Checkbox('enable'); $enable->setLabel('Enabled:') ->setValue($setting[$prefix.'_output'] != 'disabled'?1:0) @@ -49,7 +49,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $enable->setAttrib("disabled", "disabled"); } $this->addElement($enable); - + $type = new Zend_Form_Element_Select('type'); $type->setLabel("Stream Type:") ->setMultiOptions($stream_types) @@ -59,7 +59,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $type->setAttrib("disabled", "disabled"); } $this->addElement($type); - + $bitrate = new Zend_Form_Element_Select('bitrate'); $bitrate->setLabel("Bit Rate:") ->setMultiOptions($stream_bitrates) @@ -70,7 +70,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ } $this->addElement($type); $this->addElement($bitrate); - + $output = new Zend_Form_Element_Select('output'); $output->setLabel("Service Type:") ->setMultiOptions(array("icecast"=>"Icecast", "shoutcast"=>"Shoutcast")) @@ -80,7 +80,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $output->setAttrib("disabled", "disabled"); } $this->addElement($output); - + $host = new Zend_Form_Element_Text('host'); $host->setLabel("Server") ->setValue(isset($setting[$prefix.'_host'])?$setting[$prefix.'_host']:"") @@ -89,7 +89,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $host->setAttrib("disabled", "disabled"); } $this->addElement($host); - + $port = new Zend_Form_Element_Text('port'); $port->setLabel("Port") ->setValue(isset($setting[$prefix.'_port'])?$setting[$prefix.'_port']:"") @@ -100,7 +100,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $port->setAttrib("disabled", "disabled"); } $this->addElement($port); - + $pass = new Zend_Form_Element_Text('pass'); $pass->setLabel("Password") ->setValue(isset($setting[$prefix.'_pass'])?$setting[$prefix.'_pass']:"") @@ -109,7 +109,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $pass->setAttrib("disabled", "disabled"); } $this->addElement($pass); - + $genre = new Zend_Form_Element_Text('genre'); $genre->setLabel("Genre") ->setValue(isset($setting[$prefix.'_genre'])?$setting[$prefix.'_genre']:"") @@ -118,7 +118,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $genre->setAttrib("disabled", "disabled"); } $this->addElement($genre); - + $url = new Zend_Form_Element_Text('url'); $url->setLabel("URL") ->setValue(isset($setting[$prefix.'_url'])?$setting[$prefix.'_url']:"") @@ -127,7 +127,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $url->setAttrib("disabled", "disabled"); } $this->addElement($url); - + $description = new Zend_Form_Element_Text('description'); $description->setLabel("Name/Description") ->setValue(isset($setting[$prefix.'_description'])?$setting[$prefix.'_description']:"") @@ -136,7 +136,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $description->setAttrib("disabled", "disabled"); } $this->addElement($description); - + $mount = new Zend_Form_Element_Text('mount'); $mount->setLabel("Mount Point") ->setValue(isset($setting[$prefix.'_mount'])?$setting[$prefix.'_mount']:"") @@ -145,7 +145,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $mount->setAttrib("disabled", "disabled"); } $this->addElement($mount); - + $user = new Zend_Form_Element_Text('user'); $user->setLabel("Username") ->setValue(isset($setting[$prefix.'_user'])?$setting[$prefix.'_user']:"") @@ -154,12 +154,12 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $user->setAttrib("disabled", "disabled"); } $this->addElement($user); - + $this->setDecorators(array( array('ViewScript', array('viewScript' => 'form/stream-setting-form.phtml', "stream_number"=>$stream_number)) )); } - + public function isValid ($data){ $isValid = parent::isValid($data); if($data['enable'] == 1){ diff --git a/airtime_mvc/application/models/Component.php b/airtime_mvc/application/models/Component.php index b3df2c00e..2771f79eb 100644 --- a/airtime_mvc/application/models/Component.php +++ b/airtime_mvc/application/models/Component.php @@ -3,10 +3,10 @@ class Application_Model_Component { public static function Register($p_componentName, $p_ipAddress){ - $component = CcComponentQuery::create()->findOneByDbName($p_componentName); + $component = CcServiceRegisterQuery::create()->findOneByDbName($p_componentName); if ($component == NULL){ - $component = new CcComponent(); + $component = new CcServiceRegister(); $component->setDbName($p_componentName); } diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index f96475111..b565cdfb1 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -259,13 +259,13 @@ class Application_Model_Preference public static function GetStationDescription(){ return self::GetValue("description"); } - + public static function SetTimezone($timezone){ self::SetValue("timezone", $timezone); date_default_timezone_set($timezone); $md = array("timezone" => $timezone); } - + public static function GetTimezone(){ return self::GetValue("timezone"); } @@ -328,11 +328,11 @@ class Application_Model_Preference $url = $systemInfoArray["AIRTIME_VERSION_URL"]; $index = strpos($url,'/api/'); $url = substr($url, 0, $index); - + $headerInfo = get_headers(trim($url),1); $outputArray['WEB_SERVER'] = $headerInfo['Server'][0]; } - + $outputArray['NUM_OF_USERS'] = Application_Model_User::getUserCount(); $outputArray['NUM_OF_SONGS'] = Application_Model_StoredFile::getFileCount(); $outputArray['NUM_OF_PLAYLISTS'] = Application_Model_Playlist::getPlaylistCount(); @@ -365,74 +365,74 @@ class Application_Model_Preference public static function GetRemindMeDate(){ return self::GetValue("remindme"); } - + public static function SetImportTimestamp(){ $now = time(); if(self::GetImportTimestamp()+5 < $now){ self::SetValue("import_timestamp", $now); } } - + public static function GetImportTimestamp(){ return self::GetValue("import_timestamp"); } - + public static function GetStreamType(){ $st = self::GetValue("stream_type"); return explode(',', $st); } - + public static function GetStreamBitrate(){ $sb = self::GetValue("stream_bitrate"); return explode(',', $sb); } - + public static function SetPrivacyPolicyCheck($flag){ self::SetValue("privacy_policy", $flag); } - + public static function GetPrivacyPolicyCheck(){ return self::GetValue("privacy_policy"); } - + public static function SetNumOfStreams($num){ self::SetValue("num_of_streams", intval($num)); } - + public static function GetNumOfStreams(){ return self::GetValue("num_of_streams"); } - + public static function SetMaxBitrate($bitrate){ self::SetValue("max_bitrate", intval($bitrate)); } - + public static function GetMaxBitrate(){ return self::GetValue("max_bitrate"); } - + public static function SetPlanLevel($plan){ self::SetValue("plan_level", $plan); } - + public static function GetPlanLevel(){ return self::GetValue("plan_level"); } - + public static function SetTrialEndingDate($date){ self::SetValue("trial_end_date", $date); } - + public static function GetTrialEndingDate(){ return self::GetValue("trial_end_date"); } - - public static function SetDisableStreamConf($bool){ - self::SetValue("disable_stream_conf", $bool); + + public static function SetEnableStreamConf($bool){ + self::SetValue("enable_stream_conf", $bool); } - - public static function GetDisableStreamConf(){ - return self::GetValue("disable_stream_conf"); + + public static function GetEnableStreamConf(){ + return self::GetValue("enable_stream_conf"); } public static function GetAirtimeVersion(){ diff --git a/airtime_mvc/application/models/Systemstatus.php b/airtime_mvc/application/models/Systemstatus.php index be115c56e..202498a80 100644 --- a/airtime_mvc/application/models/Systemstatus.php +++ b/airtime_mvc/application/models/Systemstatus.php @@ -118,7 +118,7 @@ class Application_Model_Systemstatus public static function GetPypoStatus(){ - $component = CcComponentQuery::create()->findOneByDbName("pypo"); + $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); @@ -129,7 +129,7 @@ class Application_Model_Systemstatus public static function GetLiquidsoapStatus(){ - $component = CcComponentQuery::create()->findOneByDbName("pypo"); + $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); @@ -140,7 +140,7 @@ class Application_Model_Systemstatus public static function GetShowRecorderStatus(){ - $component = CcComponentQuery::create()->findOneByDbName("show-recorder"); + $component = CcServiceRegisterQuery::create()->findOneByDbName("show-recorder"); $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); @@ -151,7 +151,7 @@ class Application_Model_Systemstatus public static function GetMediaMonitorStatus(){ - $component = CcComponentQuery::create()->findOneByDbName("media-monitor"); + $component = CcServiceRegisterQuery::create()->findOneByDbName("media-monitor"); $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); diff --git a/airtime_mvc/application/models/airtime/CcServiceRegister.php b/airtime_mvc/application/models/airtime/CcServiceRegister.php new file mode 100644 index 000000000..5a9859305 --- /dev/null +++ b/airtime_mvc/application/models/airtime/CcServiceRegister.php @@ -0,0 +1,18 @@ +<?php + + + +/** + * Skeleton subclass for representing a row from the 'cc_service_register' table. + * + * + * + * You should add additional methods to this class to meet the + * application requirements. This class will only be generated as + * long as it does not already exist in the output directory. + * + * @package propel.generator.airtime + */ +class CcServiceRegister extends BaseCcServiceRegister { + +} // CcServiceRegister diff --git a/airtime_mvc/application/models/airtime/CcServiceRegisterPeer.php b/airtime_mvc/application/models/airtime/CcServiceRegisterPeer.php new file mode 100644 index 000000000..dcbb5feff --- /dev/null +++ b/airtime_mvc/application/models/airtime/CcServiceRegisterPeer.php @@ -0,0 +1,18 @@ +<?php + + + +/** + * Skeleton subclass for performing query and update operations on the 'cc_service_register' table. + * + * + * + * You should add additional methods to this class to meet the + * application requirements. This class will only be generated as + * long as it does not already exist in the output directory. + * + * @package propel.generator.airtime + */ +class CcServiceRegisterPeer extends BaseCcServiceRegisterPeer { + +} // CcServiceRegisterPeer diff --git a/airtime_mvc/application/models/airtime/CcServiceRegisterQuery.php b/airtime_mvc/application/models/airtime/CcServiceRegisterQuery.php new file mode 100644 index 000000000..2a969f887 --- /dev/null +++ b/airtime_mvc/application/models/airtime/CcServiceRegisterQuery.php @@ -0,0 +1,18 @@ +<?php + + + +/** + * Skeleton subclass for performing query and update operations on the 'cc_service_register' table. + * + * + * + * You should add additional methods to this class to meet the + * application requirements. This class will only be generated as + * long as it does not already exist in the output directory. + * + * @package propel.generator.airtime + */ +class CcServiceRegisterQuery extends BaseCcServiceRegisterQuery { + +} // CcServiceRegisterQuery diff --git a/airtime_mvc/application/models/airtime/map/CcComponentTableMap.php b/airtime_mvc/application/models/airtime/map/CcServiceRegisterTableMap.php similarity index 75% rename from airtime_mvc/application/models/airtime/map/CcComponentTableMap.php rename to airtime_mvc/application/models/airtime/map/CcServiceRegisterTableMap.php index f667f7582..f4eae5e60 100644 --- a/airtime_mvc/application/models/airtime/map/CcComponentTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcServiceRegisterTableMap.php @@ -3,7 +3,7 @@ /** - * This class defines the structure of the 'cc_component' table. + * This class defines the structure of the 'cc_service_register' table. * * * @@ -14,12 +14,12 @@ * * @package propel.generator.airtime.map */ -class CcComponentTableMap extends TableMap { +class CcServiceRegisterTableMap extends TableMap { /** * The (dot-path) name of this class */ - const CLASS_NAME = 'airtime.map.CcComponentTableMap'; + const CLASS_NAME = 'airtime.map.CcServiceRegisterTableMap'; /** * Initialize the table attributes, columns and validators @@ -31,9 +31,9 @@ class CcComponentTableMap extends TableMap { public function initialize() { // attributes - $this->setName('cc_component'); - $this->setPhpName('CcComponent'); - $this->setClassname('CcComponent'); + $this->setName('cc_service_register'); + $this->setPhpName('CcServiceRegister'); + $this->setClassname('CcServiceRegister'); $this->setPackage('airtime'); $this->setUseIdGenerator(false); // columns @@ -49,4 +49,4 @@ class CcComponentTableMap extends TableMap { { } // buildRelations() -} // CcComponentTableMap +} // CcServiceRegisterTableMap diff --git a/airtime_mvc/application/models/airtime/om/BaseCcComponent.php b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegister.php similarity index 88% rename from airtime_mvc/application/models/airtime/om/BaseCcComponent.php rename to airtime_mvc/application/models/airtime/om/BaseCcServiceRegister.php index 32101737c..dbb3aa6a2 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcComponent.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegister.php @@ -2,25 +2,25 @@ /** - * Base class that represents a row from the 'cc_component' table. + * Base class that represents a row from the 'cc_service_register' table. * * * * @package propel.generator.airtime.om */ -abstract class BaseCcComponent extends BaseObject implements Persistent +abstract class BaseCcServiceRegister extends BaseObject implements Persistent { /** * Peer class name */ - const PEER = 'CcComponentPeer'; + const PEER = 'CcServiceRegisterPeer'; /** * The Peer class. * Instance provides a convenient way of calling static methods on a class * that calling code may not be able to identify. - * @var CcComponentPeer + * @var CcServiceRegisterPeer */ protected static $peer; @@ -74,7 +74,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent * Set the value of [name] column. * * @param string $v new value - * @return CcComponent The current object (for fluent API support) + * @return CcServiceRegister The current object (for fluent API support) */ public function setDbName($v) { @@ -84,7 +84,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent if ($this->name !== $v) { $this->name = $v; - $this->modifiedColumns[] = CcComponentPeer::NAME; + $this->modifiedColumns[] = CcServiceRegisterPeer::NAME; } return $this; @@ -94,7 +94,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent * Set the value of [ip] column. * * @param string $v new value - * @return CcComponent The current object (for fluent API support) + * @return CcServiceRegister The current object (for fluent API support) */ public function setDbIp($v) { @@ -104,7 +104,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent if ($this->ip !== $v) { $this->ip = $v; - $this->modifiedColumns[] = CcComponentPeer::IP; + $this->modifiedColumns[] = CcServiceRegisterPeer::IP; } return $this; @@ -152,10 +152,10 @@ abstract class BaseCcComponent extends BaseObject implements Persistent $this->ensureConsistency(); } - return $startcol + 2; // 2 = CcComponentPeer::NUM_COLUMNS - CcComponentPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 2; // 2 = CcServiceRegisterPeer::NUM_COLUMNS - CcServiceRegisterPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { - throw new PropelException("Error populating CcComponent object", $e); + throw new PropelException("Error populating CcServiceRegister object", $e); } } @@ -198,13 +198,13 @@ abstract class BaseCcComponent extends BaseObject implements Persistent } if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_READ); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_READ); } // We don't need to alter the object instance pool; we're just modifying this instance // already in the pool. - $stmt = CcComponentPeer::doSelectStmt($this->buildPkeyCriteria(), $con); + $stmt = CcServiceRegisterPeer::doSelectStmt($this->buildPkeyCriteria(), $con); $row = $stmt->fetch(PDO::FETCH_NUM); $stmt->closeCursor(); if (!$row) { @@ -233,14 +233,14 @@ abstract class BaseCcComponent extends BaseObject implements Persistent } if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $con->beginTransaction(); try { $ret = $this->preDelete($con); if ($ret) { - CcComponentQuery::create() + CcServiceRegisterQuery::create() ->filterByPrimaryKey($this->getPrimaryKey()) ->delete($con); $this->postDelete($con); @@ -275,7 +275,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent } if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $con->beginTransaction(); @@ -295,7 +295,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent $this->postUpdate($con); } $this->postSave($con); - CcComponentPeer::addInstanceToPool($this); + CcServiceRegisterPeer::addInstanceToPool($this); } else { $affectedRows = 0; } @@ -333,7 +333,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent $affectedRows = 1; $this->setNew(false); } else { - $affectedRows = CcComponentPeer::doUpdate($this, $con); + $affectedRows = CcServiceRegisterPeer::doUpdate($this, $con); } $this->resetModified(); // [HL] After being saved an object is no longer 'modified' @@ -405,7 +405,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent $failureMap = array(); - if (($retval = CcComponentPeer::doValidate($this, $columns)) !== true) { + if (($retval = CcServiceRegisterPeer::doValidate($this, $columns)) !== true) { $failureMap = array_merge($failureMap, $retval); } @@ -428,7 +428,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function getByName($name, $type = BasePeer::TYPE_PHPNAME) { - $pos = CcComponentPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); + $pos = CcServiceRegisterPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); $field = $this->getByPosition($pos); return $field; } @@ -470,7 +470,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true) { - $keys = CcComponentPeer::getFieldNames($keyType); + $keys = CcServiceRegisterPeer::getFieldNames($keyType); $result = array( $keys[0] => $this->getDbName(), $keys[1] => $this->getDbIp(), @@ -490,7 +490,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function setByName($name, $value, $type = BasePeer::TYPE_PHPNAME) { - $pos = CcComponentPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); + $pos = CcServiceRegisterPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); return $this->setByPosition($pos, $value); } @@ -533,7 +533,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME) { - $keys = CcComponentPeer::getFieldNames($keyType); + $keys = CcServiceRegisterPeer::getFieldNames($keyType); if (array_key_exists($keys[0], $arr)) $this->setDbName($arr[$keys[0]]); if (array_key_exists($keys[1], $arr)) $this->setDbIp($arr[$keys[1]]); @@ -546,10 +546,10 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function buildCriteria() { - $criteria = new Criteria(CcComponentPeer::DATABASE_NAME); + $criteria = new Criteria(CcServiceRegisterPeer::DATABASE_NAME); - if ($this->isColumnModified(CcComponentPeer::NAME)) $criteria->add(CcComponentPeer::NAME, $this->name); - if ($this->isColumnModified(CcComponentPeer::IP)) $criteria->add(CcComponentPeer::IP, $this->ip); + if ($this->isColumnModified(CcServiceRegisterPeer::NAME)) $criteria->add(CcServiceRegisterPeer::NAME, $this->name); + if ($this->isColumnModified(CcServiceRegisterPeer::IP)) $criteria->add(CcServiceRegisterPeer::IP, $this->ip); return $criteria; } @@ -564,8 +564,8 @@ abstract class BaseCcComponent extends BaseObject implements Persistent */ public function buildPkeyCriteria() { - $criteria = new Criteria(CcComponentPeer::DATABASE_NAME); - $criteria->add(CcComponentPeer::NAME, $this->name); + $criteria = new Criteria(CcServiceRegisterPeer::DATABASE_NAME); + $criteria->add(CcServiceRegisterPeer::NAME, $this->name); return $criteria; } @@ -605,7 +605,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent * If desired, this method can also make copies of all associated (fkey referrers) * objects. * - * @param object $copyObj An object of CcComponent (or compatible) type. + * @param object $copyObj An object of CcServiceRegister (or compatible) type. * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. * @throws PropelException */ @@ -626,7 +626,7 @@ abstract class BaseCcComponent extends BaseObject implements Persistent * objects. * * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. - * @return CcComponent Clone of current object. + * @return CcServiceRegister Clone of current object. * @throws PropelException */ public function copy($deepCopy = false) @@ -645,12 +645,12 @@ abstract class BaseCcComponent extends BaseObject implements Persistent * same instance for all member of this class. The method could therefore * be static, but this would prevent one from overriding the behavior. * - * @return CcComponentPeer + * @return CcServiceRegisterPeer */ public function getPeer() { if (self::$peer === null) { - self::$peer = new CcComponentPeer(); + self::$peer = new CcServiceRegisterPeer(); } return self::$peer; } @@ -705,4 +705,4 @@ abstract class BaseCcComponent extends BaseObject implements Persistent throw new PropelException('Call to undefined method: ' . $name); } -} // BaseCcComponent +} // BaseCcServiceRegister diff --git a/airtime_mvc/application/models/airtime/om/BaseCcComponentPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterPeer.php similarity index 77% rename from airtime_mvc/application/models/airtime/om/BaseCcComponentPeer.php rename to airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterPeer.php index 038bf1380..ab7d35634 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcComponentPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterPeer.php @@ -2,28 +2,28 @@ /** - * Base static class for performing query and update operations on the 'cc_component' table. + * Base static class for performing query and update operations on the 'cc_service_register' table. * * * * @package propel.generator.airtime.om */ -abstract class BaseCcComponentPeer { +abstract class BaseCcServiceRegisterPeer { /** the default database name for this class */ const DATABASE_NAME = 'airtime'; /** the table name for this class */ - const TABLE_NAME = 'cc_component'; + const TABLE_NAME = 'cc_service_register'; /** the related Propel class for this table */ - const OM_CLASS = 'CcComponent'; + const OM_CLASS = 'CcServiceRegister'; /** A class that can be returned by this peer. */ - const CLASS_DEFAULT = 'airtime.CcComponent'; + const CLASS_DEFAULT = 'airtime.CcServiceRegister'; /** the related TableMap class for this table */ - const TM_CLASS = 'CcComponentTableMap'; + const TM_CLASS = 'CcServiceRegisterTableMap'; /** The total number of columns. */ const NUM_COLUMNS = 2; @@ -32,16 +32,16 @@ abstract class BaseCcComponentPeer { const NUM_LAZY_LOAD_COLUMNS = 0; /** the column name for the NAME field */ - const NAME = 'cc_component.NAME'; + const NAME = 'cc_service_register.NAME'; /** the column name for the IP field */ - const IP = 'cc_component.IP'; + const IP = 'cc_service_register.IP'; /** - * An identiy map to hold any loaded instances of CcComponent objects. + * An identiy map to hold any loaded instances of CcServiceRegister objects. * This must be public so that other peer classes can access this when hydrating from JOIN * queries. - * @var array CcComponent[] + * @var array CcServiceRegister[] */ public static $instances = array(); @@ -122,12 +122,12 @@ abstract class BaseCcComponentPeer { * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); * </code> * @param string $alias The alias for the current table. - * @param string $column The column name for current table. (i.e. CcComponentPeer::COLUMN_NAME). + * @param string $column The column name for current table. (i.e. CcServiceRegisterPeer::COLUMN_NAME). * @return string */ public static function alias($alias, $column) { - return str_replace(CcComponentPeer::TABLE_NAME.'.', $alias.'.', $column); + return str_replace(CcServiceRegisterPeer::TABLE_NAME.'.', $alias.'.', $column); } /** @@ -145,8 +145,8 @@ abstract class BaseCcComponentPeer { public static function addSelectColumns(Criteria $criteria, $alias = null) { if (null === $alias) { - $criteria->addSelectColumn(CcComponentPeer::NAME); - $criteria->addSelectColumn(CcComponentPeer::IP); + $criteria->addSelectColumn(CcServiceRegisterPeer::NAME); + $criteria->addSelectColumn(CcServiceRegisterPeer::IP); } else { $criteria->addSelectColumn($alias . '.NAME'); $criteria->addSelectColumn($alias . '.IP'); @@ -169,21 +169,21 @@ abstract class BaseCcComponentPeer { // We need to set the primary table name, since in the case that there are no WHERE columns // it will be impossible for the BasePeer::createSelectSql() method to determine which // tables go into the FROM clause. - $criteria->setPrimaryTableName(CcComponentPeer::TABLE_NAME); + $criteria->setPrimaryTableName(CcServiceRegisterPeer::TABLE_NAME); if ($distinct && !in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { $criteria->setDistinct(); } if (!$criteria->hasSelectClause()) { - CcComponentPeer::addSelectColumns($criteria); + CcServiceRegisterPeer::addSelectColumns($criteria); } $criteria->clearOrderByColumns(); // ORDER BY won't ever affect the count $criteria->setDbName(self::DATABASE_NAME); // Set the correct dbName if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_READ); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_READ); } // BasePeer returns a PDOStatement $stmt = BasePeer::doCount($criteria, $con); @@ -201,7 +201,7 @@ abstract class BaseCcComponentPeer { * * @param Criteria $criteria object used to create the SELECT statement. * @param PropelPDO $con - * @return CcComponent + * @return CcServiceRegister * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ @@ -209,7 +209,7 @@ abstract class BaseCcComponentPeer { { $critcopy = clone $criteria; $critcopy->setLimit(1); - $objects = CcComponentPeer::doSelect($critcopy, $con); + $objects = CcServiceRegisterPeer::doSelect($critcopy, $con); if ($objects) { return $objects[0]; } @@ -226,7 +226,7 @@ abstract class BaseCcComponentPeer { */ public static function doSelect(Criteria $criteria, PropelPDO $con = null) { - return CcComponentPeer::populateObjects(CcComponentPeer::doSelectStmt($criteria, $con)); + return CcServiceRegisterPeer::populateObjects(CcServiceRegisterPeer::doSelectStmt($criteria, $con)); } /** * Prepares the Criteria object and uses the parent doSelect() method to execute a PDOStatement. @@ -244,12 +244,12 @@ abstract class BaseCcComponentPeer { public static function doSelectStmt(Criteria $criteria, PropelPDO $con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_READ); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_READ); } if (!$criteria->hasSelectClause()) { $criteria = clone $criteria; - CcComponentPeer::addSelectColumns($criteria); + CcServiceRegisterPeer::addSelectColumns($criteria); } // Set the correct dbName @@ -267,10 +267,10 @@ abstract class BaseCcComponentPeer { * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * - * @param CcComponent $value A CcComponent object. + * @param CcServiceRegister $value A CcServiceRegister object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ - public static function addInstanceToPool(CcComponent $obj, $key = null) + public static function addInstanceToPool(CcServiceRegister $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { @@ -288,18 +288,18 @@ abstract class BaseCcComponentPeer { * methods in your stub classes -- you may need to explicitly remove objects * from the cache in order to prevent returning objects that no longer exist. * - * @param mixed $value A CcComponent object or a primary key value. + * @param mixed $value A CcServiceRegister object or a primary key value. */ public static function removeInstanceFromPool($value) { if (Propel::isInstancePoolingEnabled() && $value !== null) { - if (is_object($value) && $value instanceof CcComponent) { + if (is_object($value) && $value instanceof CcServiceRegister) { $key = (string) $value->getDbName(); } elseif (is_scalar($value)) { // assume we've been passed a primary key $key = (string) $value; } else { - $e = new PropelException("Invalid value passed to removeInstanceFromPool(). Expected primary key or CcComponent object; got " . (is_object($value) ? get_class($value) . ' object.' : var_export($value,true))); + $e = new PropelException("Invalid value passed to removeInstanceFromPool(). Expected primary key or CcServiceRegister object; got " . (is_object($value) ? get_class($value) . ' object.' : var_export($value,true))); throw $e; } @@ -314,7 +314,7 @@ abstract class BaseCcComponentPeer { * a multi-column primary key, a serialize()d version of the primary key will be returned. * * @param string $key The key (@see getPrimaryKeyHash()) for this instance. - * @return CcComponent Found object or NULL if 1) no instance exists for specified key or 2) instance pooling has been disabled. + * @return CcServiceRegister Found object or NULL if 1) no instance exists for specified key or 2) instance pooling has been disabled. * @see getPrimaryKeyHash() */ public static function getInstanceFromPool($key) @@ -338,7 +338,7 @@ abstract class BaseCcComponentPeer { } /** - * Method to invalidate the instance pool of all tables related to cc_component + * Method to invalidate the instance pool of all tables related to cc_service_register * by a foreign key with ON DELETE CASCADE */ public static function clearRelatedInstancePool() @@ -390,11 +390,11 @@ abstract class BaseCcComponentPeer { $results = array(); // set the class once to avoid overhead in the loop - $cls = CcComponentPeer::getOMClass(false); + $cls = CcServiceRegisterPeer::getOMClass(false); // populate the object(s) while ($row = $stmt->fetch(PDO::FETCH_NUM)) { - $key = CcComponentPeer::getPrimaryKeyHashFromRow($row, 0); - if (null !== ($obj = CcComponentPeer::getInstanceFromPool($key))) { + $key = CcServiceRegisterPeer::getPrimaryKeyHashFromRow($row, 0); + if (null !== ($obj = CcServiceRegisterPeer::getInstanceFromPool($key))) { // We no longer rehydrate the object, since this can cause data loss. // See http://www.propelorm.org/ticket/509 // $obj->hydrate($row, 0, true); // rehydrate @@ -403,7 +403,7 @@ abstract class BaseCcComponentPeer { $obj = new $cls(); $obj->hydrate($row); $results[] = $obj; - CcComponentPeer::addInstanceToPool($obj, $key); + CcServiceRegisterPeer::addInstanceToPool($obj, $key); } // if key exists } $stmt->closeCursor(); @@ -416,21 +416,21 @@ abstract class BaseCcComponentPeer { * @param int $startcol The 0-based offset for reading from the resultset row. * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. - * @return array (CcComponent object, last column rank) + * @return array (CcServiceRegister object, last column rank) */ public static function populateObject($row, $startcol = 0) { - $key = CcComponentPeer::getPrimaryKeyHashFromRow($row, $startcol); - if (null !== ($obj = CcComponentPeer::getInstanceFromPool($key))) { + $key = CcServiceRegisterPeer::getPrimaryKeyHashFromRow($row, $startcol); + if (null !== ($obj = CcServiceRegisterPeer::getInstanceFromPool($key))) { // We no longer rehydrate the object, since this can cause data loss. // See http://www.propelorm.org/ticket/509 // $obj->hydrate($row, $startcol, true); // rehydrate - $col = $startcol + CcComponentPeer::NUM_COLUMNS; + $col = $startcol + CcServiceRegisterPeer::NUM_COLUMNS; } else { - $cls = CcComponentPeer::OM_CLASS; + $cls = CcServiceRegisterPeer::OM_CLASS; $obj = new $cls(); $col = $obj->hydrate($row, $startcol); - CcComponentPeer::addInstanceToPool($obj, $key); + CcServiceRegisterPeer::addInstanceToPool($obj, $key); } return array($obj, $col); } @@ -451,10 +451,10 @@ abstract class BaseCcComponentPeer { */ public static function buildTableMap() { - $dbMap = Propel::getDatabaseMap(BaseCcComponentPeer::DATABASE_NAME); - if (!$dbMap->hasTable(BaseCcComponentPeer::TABLE_NAME)) + $dbMap = Propel::getDatabaseMap(BaseCcServiceRegisterPeer::DATABASE_NAME); + if (!$dbMap->hasTable(BaseCcServiceRegisterPeer::TABLE_NAME)) { - $dbMap->addTableObject(new CcComponentTableMap()); + $dbMap->addTableObject(new CcServiceRegisterTableMap()); } } @@ -471,13 +471,13 @@ abstract class BaseCcComponentPeer { */ public static function getOMClass($withPrefix = true) { - return $withPrefix ? CcComponentPeer::CLASS_DEFAULT : CcComponentPeer::OM_CLASS; + return $withPrefix ? CcServiceRegisterPeer::CLASS_DEFAULT : CcServiceRegisterPeer::OM_CLASS; } /** - * Method perform an INSERT on the database, given a CcComponent or Criteria object. + * Method perform an INSERT on the database, given a CcServiceRegister or Criteria object. * - * @param mixed $values Criteria or CcComponent object containing data that is used to create the INSERT statement. + * @param mixed $values Criteria or CcServiceRegister object containing data that is used to create the INSERT statement. * @param PropelPDO $con the PropelPDO connection to use * @return mixed The new primary key. * @throws PropelException Any exceptions caught during processing will be @@ -486,13 +486,13 @@ abstract class BaseCcComponentPeer { public static function doInsert($values, PropelPDO $con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } if ($values instanceof Criteria) { $criteria = clone $values; // rename for clarity } else { - $criteria = $values->buildCriteria(); // build Criteria from CcComponent object + $criteria = $values->buildCriteria(); // build Criteria from CcServiceRegister object } @@ -514,9 +514,9 @@ abstract class BaseCcComponentPeer { } /** - * Method perform an UPDATE on the database, given a CcComponent or Criteria object. + * Method perform an UPDATE on the database, given a CcServiceRegister or Criteria object. * - * @param mixed $values Criteria or CcComponent object containing data that is used to create the UPDATE statement. + * @param mixed $values Criteria or CcServiceRegister object containing data that is used to create the UPDATE statement. * @param PropelPDO $con The connection to use (specify PropelPDO connection object to exert more control over transactions). * @return int The number of affected rows (if supported by underlying database driver). * @throws PropelException Any exceptions caught during processing will be @@ -525,7 +525,7 @@ abstract class BaseCcComponentPeer { public static function doUpdate($values, PropelPDO $con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $selectCriteria = new Criteria(self::DATABASE_NAME); @@ -533,15 +533,15 @@ abstract class BaseCcComponentPeer { if ($values instanceof Criteria) { $criteria = clone $values; // rename for clarity - $comparison = $criteria->getComparison(CcComponentPeer::NAME); - $value = $criteria->remove(CcComponentPeer::NAME); + $comparison = $criteria->getComparison(CcServiceRegisterPeer::NAME); + $value = $criteria->remove(CcServiceRegisterPeer::NAME); if ($value) { - $selectCriteria->add(CcComponentPeer::NAME, $value, $comparison); + $selectCriteria->add(CcServiceRegisterPeer::NAME, $value, $comparison); } else { - $selectCriteria->setPrimaryTableName(CcComponentPeer::TABLE_NAME); + $selectCriteria->setPrimaryTableName(CcServiceRegisterPeer::TABLE_NAME); } - } else { // $values is CcComponent object + } else { // $values is CcServiceRegister object $criteria = $values->buildCriteria(); // gets full criteria $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) } @@ -553,26 +553,26 @@ abstract class BaseCcComponentPeer { } /** - * Method to DELETE all rows from the cc_component table. + * Method to DELETE all rows from the cc_service_register table. * * @return int The number of affected rows (if supported by underlying database driver). */ public static function doDeleteAll($con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $affectedRows = 0; // initialize var to track total num of affected rows try { // use transaction because $criteria could contain info // for more than one table or we could emulating ON DELETE CASCADE, etc. $con->beginTransaction(); - $affectedRows += BasePeer::doDeleteAll(CcComponentPeer::TABLE_NAME, $con, CcComponentPeer::DATABASE_NAME); + $affectedRows += BasePeer::doDeleteAll(CcServiceRegisterPeer::TABLE_NAME, $con, CcServiceRegisterPeer::DATABASE_NAME); // Because this db requires some delete cascade/set null emulation, we have to // clear the cached instance *after* the emulation has happened (since // instances get re-added by the select statement contained therein). - CcComponentPeer::clearInstancePool(); - CcComponentPeer::clearRelatedInstancePool(); + CcServiceRegisterPeer::clearInstancePool(); + CcServiceRegisterPeer::clearRelatedInstancePool(); $con->commit(); return $affectedRows; } catch (PropelException $e) { @@ -582,9 +582,9 @@ abstract class BaseCcComponentPeer { } /** - * Method perform a DELETE on the database, given a CcComponent or Criteria object OR a primary key value. + * Method perform a DELETE on the database, given a CcServiceRegister or Criteria object OR a primary key value. * - * @param mixed $values Criteria or CcComponent object or primary key or array of primary keys + * @param mixed $values Criteria or CcServiceRegister object or primary key or array of primary keys * which is used to create the DELETE statement * @param PropelPDO $con the connection to use * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows @@ -595,27 +595,27 @@ abstract class BaseCcComponentPeer { public static function doDelete($values, PropelPDO $con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } if ($values instanceof Criteria) { // invalidate the cache for all objects of this type, since we have no // way of knowing (without running a query) what objects should be invalidated // from the cache based on this Criteria. - CcComponentPeer::clearInstancePool(); + CcServiceRegisterPeer::clearInstancePool(); // rename for clarity $criteria = clone $values; - } elseif ($values instanceof CcComponent) { // it's a model object + } elseif ($values instanceof CcServiceRegister) { // it's a model object // invalidate the cache for this single object - CcComponentPeer::removeInstanceFromPool($values); + CcServiceRegisterPeer::removeInstanceFromPool($values); // create criteria based on pk values $criteria = $values->buildPkeyCriteria(); } else { // it's a primary key, or an array of pks $criteria = new Criteria(self::DATABASE_NAME); - $criteria->add(CcComponentPeer::NAME, (array) $values, Criteria::IN); + $criteria->add(CcServiceRegisterPeer::NAME, (array) $values, Criteria::IN); // invalidate the cache for this object(s) foreach ((array) $values as $singleval) { - CcComponentPeer::removeInstanceFromPool($singleval); + CcServiceRegisterPeer::removeInstanceFromPool($singleval); } } @@ -630,7 +630,7 @@ abstract class BaseCcComponentPeer { $con->beginTransaction(); $affectedRows += BasePeer::doDelete($criteria, $con); - CcComponentPeer::clearRelatedInstancePool(); + CcServiceRegisterPeer::clearRelatedInstancePool(); $con->commit(); return $affectedRows; } catch (PropelException $e) { @@ -640,24 +640,24 @@ abstract class BaseCcComponentPeer { } /** - * Validates all modified columns of given CcComponent object. + * Validates all modified columns of given CcServiceRegister object. * If parameter $columns is either a single column name or an array of column names * than only those columns are validated. * * NOTICE: This does not apply to primary or foreign keys for now. * - * @param CcComponent $obj The object to validate. + * @param CcServiceRegister $obj The object to validate. * @param mixed $cols Column name or array of column names. * * @return mixed TRUE if all columns are valid or the error message of the first invalid column. */ - public static function doValidate(CcComponent $obj, $cols = null) + public static function doValidate(CcServiceRegister $obj, $cols = null) { $columns = array(); if ($cols) { - $dbMap = Propel::getDatabaseMap(CcComponentPeer::DATABASE_NAME); - $tableMap = $dbMap->getTable(CcComponentPeer::TABLE_NAME); + $dbMap = Propel::getDatabaseMap(CcServiceRegisterPeer::DATABASE_NAME); + $tableMap = $dbMap->getTable(CcServiceRegisterPeer::TABLE_NAME); if (! is_array($cols)) { $cols = array($cols); @@ -673,7 +673,7 @@ abstract class BaseCcComponentPeer { } - return BasePeer::doValidate(CcComponentPeer::DATABASE_NAME, CcComponentPeer::TABLE_NAME, $columns); + return BasePeer::doValidate(CcServiceRegisterPeer::DATABASE_NAME, CcServiceRegisterPeer::TABLE_NAME, $columns); } /** @@ -681,23 +681,23 @@ abstract class BaseCcComponentPeer { * * @param string $pk the primary key. * @param PropelPDO $con the connection to use - * @return CcComponent + * @return CcServiceRegister */ public static function retrieveByPK($pk, PropelPDO $con = null) { - if (null !== ($obj = CcComponentPeer::getInstanceFromPool((string) $pk))) { + if (null !== ($obj = CcServiceRegisterPeer::getInstanceFromPool((string) $pk))) { return $obj; } if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_READ); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_READ); } - $criteria = new Criteria(CcComponentPeer::DATABASE_NAME); - $criteria->add(CcComponentPeer::NAME, $pk); + $criteria = new Criteria(CcServiceRegisterPeer::DATABASE_NAME); + $criteria->add(CcServiceRegisterPeer::NAME, $pk); - $v = CcComponentPeer::doSelect($criteria, $con); + $v = CcServiceRegisterPeer::doSelect($criteria, $con); return !empty($v) > 0 ? $v[0] : null; } @@ -713,23 +713,23 @@ abstract class BaseCcComponentPeer { public static function retrieveByPKs($pks, PropelPDO $con = null) { if ($con === null) { - $con = Propel::getConnection(CcComponentPeer::DATABASE_NAME, Propel::CONNECTION_READ); + $con = Propel::getConnection(CcServiceRegisterPeer::DATABASE_NAME, Propel::CONNECTION_READ); } $objs = null; if (empty($pks)) { $objs = array(); } else { - $criteria = new Criteria(CcComponentPeer::DATABASE_NAME); - $criteria->add(CcComponentPeer::NAME, $pks, Criteria::IN); - $objs = CcComponentPeer::doSelect($criteria, $con); + $criteria = new Criteria(CcServiceRegisterPeer::DATABASE_NAME); + $criteria->add(CcServiceRegisterPeer::NAME, $pks, Criteria::IN); + $objs = CcServiceRegisterPeer::doSelect($criteria, $con); } return $objs; } -} // BaseCcComponentPeer +} // BaseCcServiceRegisterPeer // This is the static code needed to register the TableMap for this table with the main Propel class. // -BaseCcComponentPeer::buildTableMap(); +BaseCcServiceRegisterPeer::buildTableMap(); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcComponentQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterQuery.php similarity index 54% rename from airtime_mvc/application/models/airtime/om/BaseCcComponentQuery.php rename to airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterQuery.php index 0bf1702cf..a8df529a7 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcComponentQuery.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcServiceRegisterQuery.php @@ -2,60 +2,60 @@ /** - * Base class that represents a query for the 'cc_component' table. + * Base class that represents a query for the 'cc_service_register' table. * * * - * @method CcComponentQuery orderByDbName($order = Criteria::ASC) Order by the name column - * @method CcComponentQuery orderByDbIp($order = Criteria::ASC) Order by the ip column + * @method CcServiceRegisterQuery orderByDbName($order = Criteria::ASC) Order by the name column + * @method CcServiceRegisterQuery orderByDbIp($order = Criteria::ASC) Order by the ip column * - * @method CcComponentQuery groupByDbName() Group by the name column - * @method CcComponentQuery groupByDbIp() Group by the ip column + * @method CcServiceRegisterQuery groupByDbName() Group by the name column + * @method CcServiceRegisterQuery groupByDbIp() Group by the ip column * - * @method CcComponentQuery leftJoin($relation) Adds a LEFT JOIN clause to the query - * @method CcComponentQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query - * @method CcComponentQuery innerJoin($relation) Adds a INNER JOIN clause to the query + * @method CcServiceRegisterQuery leftJoin($relation) Adds a LEFT JOIN clause to the query + * @method CcServiceRegisterQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query + * @method CcServiceRegisterQuery innerJoin($relation) Adds a INNER JOIN clause to the query * - * @method CcComponent findOne(PropelPDO $con = null) Return the first CcComponent matching the query - * @method CcComponent findOneOrCreate(PropelPDO $con = null) Return the first CcComponent matching the query, or a new CcComponent object populated from the query conditions when no match is found + * @method CcServiceRegister findOne(PropelPDO $con = null) Return the first CcServiceRegister matching the query + * @method CcServiceRegister findOneOrCreate(PropelPDO $con = null) Return the first CcServiceRegister matching the query, or a new CcServiceRegister object populated from the query conditions when no match is found * - * @method CcComponent findOneByDbName(string $name) Return the first CcComponent filtered by the name column - * @method CcComponent findOneByDbIp(string $ip) Return the first CcComponent filtered by the ip column + * @method CcServiceRegister findOneByDbName(string $name) Return the first CcServiceRegister filtered by the name column + * @method CcServiceRegister findOneByDbIp(string $ip) Return the first CcServiceRegister filtered by the ip column * - * @method array findByDbName(string $name) Return CcComponent objects filtered by the name column - * @method array findByDbIp(string $ip) Return CcComponent objects filtered by the ip column + * @method array findByDbName(string $name) Return CcServiceRegister objects filtered by the name column + * @method array findByDbIp(string $ip) Return CcServiceRegister objects filtered by the ip column * * @package propel.generator.airtime.om */ -abstract class BaseCcComponentQuery extends ModelCriteria +abstract class BaseCcServiceRegisterQuery extends ModelCriteria { /** - * Initializes internal state of BaseCcComponentQuery object. + * Initializes internal state of BaseCcServiceRegisterQuery object. * * @param string $dbName The dabase name * @param string $modelName The phpName of a model, e.g. 'Book' * @param string $modelAlias The alias for the model in this query, e.g. 'b' */ - public function __construct($dbName = 'airtime', $modelName = 'CcComponent', $modelAlias = null) + public function __construct($dbName = 'airtime', $modelName = 'CcServiceRegister', $modelAlias = null) { parent::__construct($dbName, $modelName, $modelAlias); } /** - * Returns a new CcComponentQuery object. + * Returns a new CcServiceRegisterQuery object. * * @param string $modelAlias The alias of a model in the query * @param Criteria $criteria Optional Criteria to build the query from * - * @return CcComponentQuery + * @return CcServiceRegisterQuery */ public static function create($modelAlias = null, $criteria = null) { - if ($criteria instanceof CcComponentQuery) { + if ($criteria instanceof CcServiceRegisterQuery) { return $criteria; } - $query = new CcComponentQuery(); + $query = new CcServiceRegisterQuery(); if (null !== $modelAlias) { $query->setModelAlias($modelAlias); } @@ -74,11 +74,11 @@ abstract class BaseCcComponentQuery extends ModelCriteria * @param mixed $key Primary key to use for the query * @param PropelPDO $con an optional connection object * - * @return CcComponent|array|mixed the result, formatted by the current formatter + * @return CcServiceRegister|array|mixed the result, formatted by the current formatter */ public function findPk($key, $con = null) { - if ((null !== ($obj = CcComponentPeer::getInstanceFromPool((string) $key))) && $this->getFormatter()->isObjectFormatter()) { + if ((null !== ($obj = CcServiceRegisterPeer::getInstanceFromPool((string) $key))) && $this->getFormatter()->isObjectFormatter()) { // the object is alredy in the instance pool return $obj; } else { @@ -114,11 +114,11 @@ abstract class BaseCcComponentQuery extends ModelCriteria * * @param mixed $key Primary key to use for the query * - * @return CcComponentQuery The current query, for fluid interface + * @return CcServiceRegisterQuery The current query, for fluid interface */ public function filterByPrimaryKey($key) { - return $this->addUsingAlias(CcComponentPeer::NAME, $key, Criteria::EQUAL); + return $this->addUsingAlias(CcServiceRegisterPeer::NAME, $key, Criteria::EQUAL); } /** @@ -126,11 +126,11 @@ abstract class BaseCcComponentQuery extends ModelCriteria * * @param array $keys The list of primary key to use for the query * - * @return CcComponentQuery The current query, for fluid interface + * @return CcServiceRegisterQuery The current query, for fluid interface */ public function filterByPrimaryKeys($keys) { - return $this->addUsingAlias(CcComponentPeer::NAME, $keys, Criteria::IN); + return $this->addUsingAlias(CcServiceRegisterPeer::NAME, $keys, Criteria::IN); } /** @@ -140,7 +140,7 @@ abstract class BaseCcComponentQuery extends ModelCriteria * Accepts wildcards (* and % trigger a LIKE) * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL * - * @return CcComponentQuery The current query, for fluid interface + * @return CcServiceRegisterQuery The current query, for fluid interface */ public function filterByDbName($dbName = null, $comparison = null) { @@ -152,7 +152,7 @@ abstract class BaseCcComponentQuery extends ModelCriteria $comparison = Criteria::LIKE; } } - return $this->addUsingAlias(CcComponentPeer::NAME, $dbName, $comparison); + return $this->addUsingAlias(CcServiceRegisterPeer::NAME, $dbName, $comparison); } /** @@ -162,7 +162,7 @@ abstract class BaseCcComponentQuery extends ModelCriteria * Accepts wildcards (* and % trigger a LIKE) * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL * - * @return CcComponentQuery The current query, for fluid interface + * @return CcServiceRegisterQuery The current query, for fluid interface */ public function filterByDbIp($dbIp = null, $comparison = null) { @@ -174,23 +174,23 @@ abstract class BaseCcComponentQuery extends ModelCriteria $comparison = Criteria::LIKE; } } - return $this->addUsingAlias(CcComponentPeer::IP, $dbIp, $comparison); + return $this->addUsingAlias(CcServiceRegisterPeer::IP, $dbIp, $comparison); } /** * Exclude object from result * - * @param CcComponent $ccComponent Object to remove from the list of results + * @param CcServiceRegister $ccServiceRegister Object to remove from the list of results * - * @return CcComponentQuery The current query, for fluid interface + * @return CcServiceRegisterQuery The current query, for fluid interface */ - public function prune($ccComponent = null) + public function prune($ccServiceRegister = null) { - if ($ccComponent) { - $this->addUsingAlias(CcComponentPeer::NAME, $ccComponent->getDbName(), Criteria::NOT_EQUAL); + if ($ccServiceRegister) { + $this->addUsingAlias(CcServiceRegisterPeer::NAME, $ccServiceRegister->getDbName(), Criteria::NOT_EQUAL); } return $this; } -} // BaseCcComponentQuery +} // BaseCcServiceRegisterQuery diff --git a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml index cc78da874..12976ef57 100644 --- a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml +++ b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml @@ -1,4 +1,5 @@ <div id="content" class="jp-container"> +<h1>Live stream</h1> <?php $ids = Application_Model_StreamSetting::getEnabledStreamIds(); ?> <script> function setjPlayer(url, type){ @@ -18,7 +19,7 @@ function setjPlayer(url, type){ wmode: "window" }); } - + $(document).ready(function(){ $("#combo-box").change(function(eventObject){ @@ -55,7 +56,7 @@ $(document).ready(function(){ if ($type == "ogg") $type = "oga"; - $label = "Stream ".substr($id, 1)." (".$streamData["${id}_bitrate"]." Kbit/s)"; + $label = $streamData["${id}_description"]." (".$streamData["${id}_bitrate"]." Kbit/s)"; echo sprintf("<option class='stream' value='%s' data-url='%s' data-type='%s'>%s</option>", $id, $url, $type, $label); } ?> @@ -64,19 +65,20 @@ $(document).ready(function(){ </div> <div id="jquery_jplayer_1" class="jp-jplayer"></div> - <div id="jp_container_1" class="jp-audio"> - <div class="jp-type-single"> - <div id="jp_interface_1" class="jp-gui jp-interface"> - <ul class="jp-controls"> - <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li> - <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li> - <li><a href="javascript:;" class="jp-mute" tabindex="1">mute</a></li> - <li><a href="javascript:;" class="jp-unmute" tabindex="1">unmute</a></li> - </ul> - </div> - <div id="jp_playlist_1" class="jp-playlist"> - </div> - +<div id="jp_container_1" class="jp-audio"> + <div class="jp-type-single"> + <div id="jp_interface_1" class="jp-gui jp-interface"> + <ul class="jp-controls"> + <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li> + <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li> + <li><a title="mute" tabindex="1" class="jp-mute" href="javascript:;">mute</a></li> + <li><a title="unmute" tabindex="1" class="jp-unmute" href="javascript:;">unmute</a></li> + <li><a title="max volume" tabindex="1" class="jp-volume-max" href="javascript:;">max volume</a></li> + </ul> + <div class="jp-volume-bar"> + <div class="jp-volume-bar-value"></div> </div> </div> + <div id="jp_playlist_1" class="jp-playlist"></div> + </div> </div> diff --git a/airtime_mvc/application/views/scripts/preference/stream-setting.phtml b/airtime_mvc/application/views/scripts/preference/stream-setting.phtml index 68436f7b9..aa413857b 100644 --- a/airtime_mvc/application/views/scripts/preference/stream-setting.phtml +++ b/airtime_mvc/application/views/scripts/preference/stream-setting.phtml @@ -1,6 +1,6 @@ <div class="ui-widget ui-widget-content block-shadow simple-formblock clearfix padded-strong stream-config"> <h2 style="float:left">Stream Settings</h2> - <?php if($this->disable_stream_conf != "true"){?> + <?php if($this->enable_stream_conf == "true"){?> <form method="post" action="/Preference/stream-setting" enctype="application/x-www-form-urlencoded"> <div class="button-bar bottom" id="submit-element" style="float:right"> <input type="submit" class="ui-button ui-state-default right-floated" value="Save" id="Save" name="Save" /> @@ -22,11 +22,11 @@ </dl> </fieldset> <?php - for($i=1;$i<=$this->num_stream;$i++){ + for($i=1;$i<=$this->num_stream;$i++){ echo $this->form->getSubform("s".$i."_subform"); } ?> - <?php if($this->disable_stream_conf != "true"){?> + <?php if($this->enable_stream_conf == "true"){?> <div class="button-bar bottom" id="submit-element"> <input type="submit" class="ui-button ui-state-default right-floated" value="Save" id="Save" name="Save" /> </div> diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index e63cdb6b7..0de86e20a 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -327,7 +327,7 @@ <column name="ip" phpName="DbIP" primaryKey="true" type="VARCHAR" size="32" required="true"/> <column name="attempts" phpName="DbAttempts" type="INTEGER" required="false" defaultValue="0"/> </table> - <table name="cc_component" phpName="CcComponent"> + <table name="cc_service_register" phpName="CcServiceRegister"> <column name="name" phpName="DbName" primaryKey="true" type="VARCHAR" size="32" required="true" /> <column name="ip" phpName="DbIp" type="VARCHAR" size="18" required="true"/> </table> diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index 621b904d0..35d5b52e9 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -502,20 +502,20 @@ COMMENT ON TABLE "cc_login_attempts" IS ''; SET search_path TO public; ----------------------------------------------------------------------------- --- cc_component +-- cc_service_register ----------------------------------------------------------------------------- -DROP TABLE "cc_component" CASCADE; +DROP TABLE "cc_service_register" CASCADE; -CREATE TABLE "cc_component" +CREATE TABLE "cc_service_register" ( "name" VARCHAR(32) NOT NULL, "ip" VARCHAR(18) NOT NULL, PRIMARY KEY ("name") ); -COMMENT ON TABLE "cc_component" IS ''; +COMMENT ON TABLE "cc_service_register" IS ''; SET search_path TO public; diff --git a/airtime_mvc/public/js/airtime/dashboard/playlist.js b/airtime_mvc/public/js/airtime/dashboard/playlist.js index be91be286..70203ef81 100644 --- a/airtime_mvc/public/js/airtime/dashboard/playlist.js +++ b/airtime_mvc/public/js/airtime/dashboard/playlist.js @@ -249,6 +249,8 @@ function setupQtip(){ } } +var stream_window = null; + function init() { //begin producer "thread" getScheduleFromServer(); @@ -259,8 +261,9 @@ function init() { setupQtip(); $('#on-air-info').click(function() { - newwindow=window.open("Dashboard/stream-player", 'name', 'width=380,height=168'); - if (window.focus) {newwindow.focus()} + if (stream_window == null || stream_window.closed) + stream_window=window.open(baseUrl+"Dashboard/stream-player", 'name', 'width=400,height=216'); + stream_window.focus(); return false; }); } diff --git a/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css b/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css index 981f3000f..3c880aa63 100644 --- a/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css +++ b/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css @@ -19,9 +19,27 @@ height: 100%; margin: 0; padding: 0; + width:400px; } + +.jp-container h1 { + background: #282828; + font-size:18px; + text-align:center; + color:#CCC; + margin: 0; + padding: 8px 0; + font-weight:normal; + border-bottom:1px solid #000; + background-color:#3D3D3D; + background: linear-gradient(top, #3c3c3c 0, #1a1a1a 100%); + background: -moz-linear-gradient(top, #3c3c3c 0, #1a1a1a 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), color-stop(100%, #1a1a1a)); + text-shadow: 0px -1px 1px #000; +} + .jp-logo { - width:380px; + width:400px; height: 67px; background:#282828 url(../../../css/images/airtime_logo_jp.png) no-repeat 120px 14px; background: url(../../../css/images/airtime_logo_jp.png) no-repeat 120px 14px, -moz-radial-gradient(200px 0px, circle cover, rgba(70,70,70,1) 0%, rgba(40,40,40,1) 90%); @@ -29,7 +47,7 @@ display:block; } .jp-stream { - height: 18px; + height: 27px; display:block; border-top:1px solid #050505; color:#ff5d1a; @@ -41,6 +59,7 @@ box-shadow: rgba(248,248,248,.3) 0px 1px 0px, rgba(0, 0, 0, 0.2) 0 2px 2px inset; -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 0 5px inset; -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 0 5px inset; + line-height:23px; } .jp-stream-text, .jp-stream form { @@ -56,6 +75,23 @@ } .jp-stream label input[type="radio"] { } + +.jp-stream form input[type="text"], .jp-stream form select { + background-color: #212121; + border: 1px solid #1a1a1a; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5) inset; + -moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5) inset; + -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5) inset; + color: #767676; + font-family: Arial,Helvetica,sans-serif; + font-size: 12px; + height: 25px; + margin: 0; + padding: 2px 2px 2px 0; + vertical-align: top; + width:200px; +} + div.jp-audio, div.jp-video { @@ -282,14 +318,15 @@ div.jp-seeking-bg { } a.jp-mute, -a.jp-unmute { - width:30px; - height:30px; +a.jp-unmute, +a.jp-volume-max { + width:20px; + height:20px; } div.jp-audio div.jp-type-single a.jp-mute, div.jp-audio div.jp-type-single a.jp-unmute { - top:22px; - left:300px; + top:30px; + left:227px; } div.jp-audio div.jp-type-playlist a.jp-mute, div.jp-audio div.jp-type-playlist a.jp-unmute { @@ -317,29 +354,45 @@ div.jp-video-360p div.jp-type-playlist a.jp-unmute { left:443px; } a.jp-mute { - background: url("jplayer.png") 0 -110px no-repeat; + background: url("jplayer.png") 0 -90px no-repeat; } a.jp-mute:hover { - background: url("jplayer.png") -30px -80px no-repeat; + background: url("jplayer.png") -30px -90px no-repeat; } a.jp-unmute { - background: url("jplayer.png") 0 -80px no-repeat; + background: url("jplayer.png") -61px -90px no-repeat; display: none; } a.jp-unmute:hover { - background: url("jplayer.png") -30px -110px no-repeat; + background: url("jplayer.png") -91px -90px no-repeat; +} +div.jp-interface ul.jp-controls a.jp-volume-max { + background: url("jplayer.png") no-repeat scroll 0 -110px transparent; +} +div.jp-interface ul.jp-controls a.jp-volume-max:hover { + background: url("jplayer.png") no-repeat scroll -30px -110px transparent; +} +div.jp-audio ul.jp-controls a.jp-volume-max { + left: 340px; + top: 28px; } div.jp-volume-bar { position: absolute; overflow:hidden; - background: url("jplayer.png") 0 -250px repeat-x; - width:46px; - height:5px; + background:#393939; + -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px inset; + -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px inset; + border-bottom:1px solid #5e5e5e; + border-top:1px solid #262526; + border-left:1px solid #262526; + border-right:1px solid #262526; + width:130px; + height:4px; cursor: pointer; } div.jp-audio div.jp-type-single div.jp-volume-bar { - top:37px; - left:302px; + top:48px; + left:225px; } div.jp-audio div.jp-type-playlist div.jp-volume-bar { top:37px; @@ -361,9 +414,11 @@ div.jp-video-360p div.jp-type-playlist div.jp-volume-bar { left:471px; } div.jp-volume-bar-value { - background: url("jplayer.png") 0 -256px repeat-x; + background-color:#fb7018; + background: -moz-linear-gradient(top, #fc9318 0, #e56815 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fc9318), color-stop(100%, #e56815)); width:0px; - height:5px; + height:3px; } div.jp-current-time, div.jp-duration { diff --git a/airtime_mvc/public/js/jplayer/skin/jplayer.png b/airtime_mvc/public/js/jplayer/skin/jplayer.png index 03aef1794..1c57f0143 100644 Binary files a/airtime_mvc/public/js/jplayer/skin/jplayer.png and b/airtime_mvc/public/js/jplayer/skin/jplayer.png differ diff --git a/install_minimal/DoctrineMigrations/Version20110929184401.php b/install_minimal/DoctrineMigrations/Version20110929184401.php new file mode 100644 index 000000000..22828b054 --- /dev/null +++ b/install_minimal/DoctrineMigrations/Version20110929184401.php @@ -0,0 +1,23 @@ +<?php + +namespace DoctrineMigrations; + +use Doctrine\DBAL\Migrations\AbstractMigration, + Doctrine\DBAL\Schema\Schema; + +class Version20110929184401 extends AbstractMigration +{ + public function up(Schema $schema) + { + $cc_component = $schema->createTable('cc_service_register'); + $cc_component->addColumn('name', 'string', array('length' => 32)); + $cc_component->addColumn('ip', 'string', array('length' => 18)); + + $cc_component->setPrimaryKey(array('name')); + } + + public function down(Schema $schema) + { + + } +} diff --git a/install_minimal/airtime-install b/install_minimal/airtime-install index 8f5f61bf6..b395f409b 100755 --- a/install_minimal/airtime-install +++ b/install_minimal/airtime-install @@ -33,11 +33,10 @@ python ${SCRIPTPATH}/../python_apps/create-pypo-user.py set +e php --php-ini ${SCRIPTPATH}/airtime-php.ini ${SCRIPTPATH}/include/airtime-install.php $@ result=$? -if [ "$result" -eq "2" ]; then - #We've just finished an upgrade, so let's exit - exit 0 -elif [ "$result" -ne "0" ]; then + +if [ "$result" -ne "0" ]; then #There was an error, exit with error code. + echo "There was an error during upgrade. Exit code $result" exit 1 fi set -e diff --git a/install_minimal/include/airtime-install.php b/install_minimal/include/airtime-install.php index 6ab5e75cd..683e95293 100644 --- a/install_minimal/include/airtime-install.php +++ b/install_minimal/include/airtime-install.php @@ -64,8 +64,7 @@ if (isset($version) && ($version != false) && ($version < AIRTIME_VERSION) && !i echo "Airtime version $version found.".PHP_EOL; require_once("airtime-upgrade.php"); - - exit(2); + exit(0); } if($version === false){ diff --git a/install_minimal/include/airtime-upgrade.php b/install_minimal/include/airtime-upgrade.php index 6affb2dc0..6281fe890 100644 --- a/install_minimal/include/airtime-upgrade.php +++ b/install_minimal/include/airtime-upgrade.php @@ -19,6 +19,25 @@ if(exec("whoami") != "root"){ exit(1); } + +/* This class is responsible for tasks that need to be executed only *once* + * per upgrade, even if it's upgrading over multiple versions of Airtime. */ +class AirtimeMasterUpgrade{ + const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf"; + + public static function InstallAirtimePhpServerCode($phpDir) + { + $AIRTIME_SRC = realpath(__DIR__.'/../../airtime_mvc'); + + // delete old files + exec("rm -rf \"$phpDir\""); + echo "* Installing PHP code to ".$phpDir.PHP_EOL; + exec("mkdir -p ".$phpDir); + exec("cp -R ".$AIRTIME_SRC."/* ".$phpDir); + } +} + + global $CC_DBC, $CC_CONFIG; $values = parse_ini_file('/etc/airtime/airtime.conf', true); @@ -86,10 +105,18 @@ if (strcmp($version, "2.0.0") < 0){ $sql = "DELETE FROM cc_pref WHERE keystr = 'system_version'"; $CC_DBC->query($sql); +$values = parse_ini_file(AirtimeMasterUpgrade::CONF_FILE_AIRTIME, true); +$phpDir = $values['general']['airtime_dir']; +AirtimeMasterUpgrade::InstallAirtimePhpServerCode($phpDir); +AirtimeInstall::InstallBinaries(); +AirtimeInstall::CreateSymlinksToUtils(); + + $newVersion = AIRTIME_VERSION; $sql = "INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '$newVersion')"; $CC_DBC->query($sql); +/* echo PHP_EOL."*** Updating Api Client ***".PHP_EOL; passthru("python $SCRIPTPATH/../../python_apps/api_clients/install/api_client_install.py"); @@ -108,3 +135,4 @@ sleep(4); passthru("airtime-check-system"); echo "******************************* Update Complete *******************************".PHP_EOL; +*/ diff --git a/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php b/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php new file mode 100644 index 000000000..57ee794cd --- /dev/null +++ b/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php @@ -0,0 +1,206 @@ +<?php + +/* These are helper functions that are common to each upgrade such as + * creating connections to a database, backing up config files etc. + */ +class UpgradeCommon{ + const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf"; + const CONF_FILE_PYPO = "/etc/airtime/pypo.cfg"; + const CONF_FILE_RECORDER = "/etc/airtime/recorder.cfg"; + const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg"; + const CONF_FILE_MEDIAMONITOR = "/etc/airtime/media-monitor.cfg"; + const CONF_FILE_API_CLIENT = "/etc/airtime/api_client.cfg"; + + const CONF_PYPO_GRP = "pypo"; + const CONF_WWW_DATA_GRP = "www-data"; + + public static function DbTableExists($p_name) + { + global $CC_DBC; + $sql = "SELECT * FROM ".$p_name; + $result = $CC_DBC->GetOne($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } + + private static function GetAirtimeSrcDir() + { + return __DIR__."/../../../airtime_mvc"; + } + + public static function MigrateTablesToVersion($dir, $version) + { + $appDir = self::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction migrations:migrate $version"; + system($command); + } + + public static function BypassMigrations($dir, $version) + { + $appDir = self::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction --add migrations:version $version"; + system($command); + } + + public static function upgradeConfigFiles(){ + + $configFiles = array(UpgradeCommon::CONF_FILE_AIRTIME, + UpgradeCommon::CONF_FILE_PYPO, + UpgradeCommon::CONF_FILE_RECORDER, + UpgradeCommon::CONF_FILE_LIQUIDSOAP, + UpgradeCommon::CONF_FILE_MEDIAMONITOR, + UpgradeCommon::CONF_FILE_API_CLIENT); + + // Backup the config files + $suffix = date("Ymdhis")."-".VERSION_NUMBER; + foreach ($configFiles as $conf) { + // do not back up monit cfg + if (file_exists($conf)) { + echo "Backing up $conf to $conf$suffix.bak".PHP_EOL; + //copy($conf, $conf.$suffix.".bak"); + exec("cp -p $conf $conf$suffix.bak"); //use cli version to preserve file attributes + } + } + + $default_suffix = "200"; + self::CreateIniFiles($default_suffix); + self::MergeConfigFiles($configFiles, $suffix); + } + + /** + * This function creates the /etc/airtime configuration folder + * and copies the default config files to it. + */ + public static function CreateIniFiles($suffix) + { + if (!file_exists("/etc/airtime/")){ + if (!mkdir("/etc/airtime/", 0755, true)){ + echo "Could not create /etc/airtime/ directory. Exiting."; + exit(1); + } + } + + if (!copy(__DIR__."/airtime.conf.$suffix", self::CONF_FILE_AIRTIME)){ + echo "Could not copy airtime.conf to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/pypo.cfg.$suffix", self::CONF_FILE_PYPO)){ + echo "Could not copy pypo.cfg to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/recorder.cfg.$suffix", self::CONF_FILE_RECORDER)){ + echo "Could not copy recorder.cfg to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/api_client.cfg.$suffix", self::CONF_FILE_API_CLIENT)){ + echo "Could not copy airtime-monit.cfg to /etc/monit/conf.d/. Exiting."; + exit(1); + } + } + + private static function MergeConfigFiles($configFiles, $suffix) { + foreach ($configFiles as $conf) { + // we want to use new liquidsoap.cfg so don't merge + // also for monit + if( $conf == self::CONF_FILE_LIQUIDSOAP){ + continue; + } + if (file_exists("$conf$suffix.bak")) { + + if($conf === self::CONF_FILE_AIRTIME) { + // Parse with sections + $newSettings = parse_ini_file($conf, true); + $oldSettings = parse_ini_file("$conf$suffix.bak", true); + } + else { + $newSettings = self::ReadPythonConfig($conf); + $oldSettings = self::ReadPythonConfig("$conf$suffix.bak"); + } + + $settings = array_keys($newSettings); + + foreach($settings as $section) { + if(isset($oldSettings[$section])) { + if(is_array($oldSettings[$section])) { + $sectionKeys = array_keys($newSettings[$section]); + foreach($sectionKeys as $sectionKey) { + // skip airtim_dir as we want to use new value + if($sectionKey != "airtime_dir"){ + if(isset($oldSettings[$section][$sectionKey])) { + self::UpdateIniValue($conf, $sectionKey, $oldSettings[$section][$sectionKey]); + } + } + } + } + else { + self::UpdateIniValue($conf, $section, $oldSettings[$section]); + } + } + } + } + } + } + + private static function ReadPythonConfig($p_filename) + { + $values = array(); + + $fh = fopen($p_filename, 'r'); + + while(!feof($fh)){ + $line = fgets($fh); + if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){ + continue; + }else{ + $info = explode('=', $line, 2); + $values[trim($info[0])] = trim($info[1]); + } + } + + return $values; + } + + /** + * This function updates an INI style config file. + * + * A property and the value the property should be changed to are + * supplied. If the property is not found, then no changes are made. + * + * @param string $p_filename + * The path the to the file. + * @param string $p_property + * The property to look for in order to change its value. + * @param string $p_value + * The value the property should be changed to. + * + */ + private static function UpdateIniValue($p_filename, $p_property, $p_value) + { + $lines = file($p_filename); + $n=count($lines); + foreach ($lines as &$line) { + if ($line[0] != "#"){ + $key_value = explode("=", $line); + $key = trim($key_value[0]); + + if ($key == $p_property){ + $line = "$p_property = $p_value".PHP_EOL; + } + } + } + + $fp=fopen($p_filename, 'w'); + for($i=0; $i<$n; $i++){ + fwrite($fp, $lines[$i]); + } + fclose($fp); + } +} diff --git a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade-old.php b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade-old.php new file mode 100644 index 000000000..b540021dc --- /dev/null +++ b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade-old.php @@ -0,0 +1,586 @@ +<?php +/** + * @package Airtime + * @subpackage StorageServer + * @copyright 2010 Sourcefabric O.P.S. + * @license http://www.gnu.org/licenses/gpl.txt + */ + +set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/library/pear' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/application/models' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/application/configs' . PATH_SEPARATOR . get_include_path()); +require_once 'conf.php'; +require_once 'DB.php'; + +require_once 'propel/runtime/lib/Propel.php'; +Propel::init(__DIR__."/../../../airtime_mvc/application/configs/airtime-conf.php"); + +class AirtimeInstall{ + const CONF_DIR_BINARIES = "/usr/lib/airtime"; + + public static function SetDefaultTimezone() + { + global $CC_DBC; + + $defaultTimezone = date_default_timezone_get(); + + $sql = "INSERT INTO cc_pref (keystr, valstr) VALUES ('timezone', '$defaultTimezone')"; + $result = $CC_DBC->query($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } + + public static function GetUtilsSrcDir() + { + return __DIR__."/../../../utils"; + } + + public static function InstallBinaries() + { + echo "* Installing binaries to ".AirtimeInstall::CONF_DIR_BINARIES.PHP_EOL; + exec("mkdir -p ".AirtimeInstall::CONF_DIR_BINARIES); + exec("cp -R ".AirtimeInstall::GetUtilsSrcDir()." ".AirtimeInstall::CONF_DIR_BINARIES); + } + + public static function CreateSymlinksToUtils() + { + echo "* Installing airtime-log".PHP_EOL; + $dir = AirtimeInstall::CONF_DIR_BINARIES."/utils/airtime-log"; + copy(AirtimeInstall::GetUtilsSrcDir()."/airtime-log.php", AirtimeInstall::CONF_DIR_BINARIES."/utils/airtime-log.php"); + + exec("ln -s $dir /usr/bin/airtime-log"); + } + + public static function SetDefaultStreamSetting() + { + global $CC_DBC; + + echo "* Setting up default stream setting".PHP_EOL; + $sql = "INSERT INTO cc_pref(keystr, valstr) VALUES('stream_type', 'ogg, mp3'); + INSERT INTO cc_pref(keystr, valstr) VALUES('stream_bitrate', '24, 32, 48, 64, 96, 128, 160, 192, 224, 256, 320'); + INSERT INTO cc_pref(keystr, valstr) VALUES('num_of_streams', '3'); + INSERT INTO cc_pref(keystr, valstr) VALUES('max_bitrate', '128'); + INSERT INTO cc_pref(keystr, valstr) VALUES('plan_level', 'disabled'); + + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('output_sound_device', 'false', 'boolean'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('icecast_vorbis_metadata', 'false', 'boolean'); + + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_output', 'icecast', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_type', 'ogg', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_bitrate', '128', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_host', '127.0.0.1', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_port', '8000', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_user', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_pass', 'hackme', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_mount', 'airtime_128', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_url', 'http://airtime.sourcefabric.org', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_description', 'Airtime Radio! Stream #1', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_genre', 'genre', 'string'); + + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_output', 'disabled', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_type', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_bitrate', '', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_host', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_port', '', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_user', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_pass', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_mount', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_url', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_description', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_genre', '', 'string'); + + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_output', 'disabled', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_type', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_bitrate', '', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_host', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_port', '', 'integer'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_user', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_pass', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_mount', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_url', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_description', '', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_genre', '', 'string');"; + $result = $CC_DBC->query($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } + + public static function BypassMigrations($dir, $version) + { + $appDir = AirtimeInstall::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction --add migrations:version $version"; + system($command); + } + + public static function MigrateTablesToVersion($dir, $version) + { + $appDir = AirtimeInstall::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction migrations:migrate $version"; + system($command); + } + + public static function GetAirtimeSrcDir() + { + return __DIR__."/../../../airtime_mvc"; + } + + public static function DbTableExists($p_name) + { + global $CC_DBC; + $sql = "SELECT * FROM ".$p_name; + $result = $CC_DBC->GetOne($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } + public static function GetOldLiquidsoapCfgAndUpdate(){ + global $CC_DBC; + echo "* Retrieving old liquidsoap configuration".PHP_EOL; + $map = array(); + $fh = fopen("/etc/airtime/liquidsoap.cfg", 'r'); + $newConfigMap = array(); + + while(!feof($fh)){ + $line = fgets($fh); + if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){ + continue; + }else{ + $info = explode('=', $line, 2); + $map[trim($info[0])] = trim($info[1]); + } + } + $newConfigMap['output_sound_device'] = $map['output_sound_device']; + $newConfigMap['icecast_vorbis_metadata'] = $map['output_icecast_vorbis_metadata']; + $newConfigMap['log_file'] = $map['log_file']; + + $count = 1; + if( $map['output_icecast_vorbis'] == 'true'){ + $newConfigMap['s'.$count.'_output'] = 'icecast'; + $newConfigMap['s'.$count.'_host'] = $map['icecast_host']; + $newConfigMap['s'.$count.'_port'] = $map['icecast_port']; + $newConfigMap['s'.$count.'_pass'] = $map['icecast_pass']; + $newConfigMap['s'.$count.'_mount'] = $map['mount_point_vorbis']; + $newConfigMap['s'.$count.'_url'] = $map['icecast_url']; + $newConfigMap['s'.$count.'_description'] = $map['icecast_description']; + $newConfigMap['s'.$count.'_genre'] = $map['icecast_genre']; + $newConfigMap['s'.$count.'_type'] = "ogg"; + $newConfigMap['s'.$count.'_bitrate'] = "128"; + $count++; + } + if($map['output_icecast_mp3'] == 'true'){ + $newConfigMap['s'.$count.'_output'] = 'icecast'; + $newConfigMap['s'.$count.'_host'] = $map['icecast_host']; + $newConfigMap['s'.$count.'_port'] = $map['icecast_port']; + $newConfigMap['s'.$count.'_pass'] = $map['icecast_pass']; + $newConfigMap['s'.$count.'_mount'] = $map['mount_point_mp3']; + $newConfigMap['s'.$count.'_url'] = $map['icecast_url']; + $newConfigMap['s'.$count.'_description'] = $map['icecast_description']; + $newConfigMap['s'.$count.'_genre'] = $map['icecast_genre']; + $newConfigMap['s'.$count.'_type'] = "mp3"; + $newConfigMap['s'.$count.'_bitrate'] = "128"; + $count++; + } + if($map['output_shoutcast'] == 'true'){ + $newConfigMap['s'.$count.'_output'] = 'shoutcast'; + $newConfigMap['s'.$count.'_host'] = $map['shoutcast_host']; + $newConfigMap['s'.$count.'_port'] = $map['shoutcast_port']; + $newConfigMap['s'.$count.'_pass'] = $map['shoutcast_pass']; + $newConfigMap['s'.$count.'_url'] = $map['shoutcast_url']; + $newConfigMap['s'.$count.'_genre'] = $map['shoutcast_genre']; + $newConfigMap['s'.$count.'_type'] = "mp3"; + $newConfigMap['s'.$count.'_bitrate'] = "128"; + $count++; + } + + $sql = ""; + foreach( $newConfigMap as $key=>$val){ + if(substr($val, 0, 1) == '"' && substr($val, strlen($val)-1,1)){ + $val = ltrim($val, '"'); + $val = rtrim($val, '"'); + } + $sql .= "UPDATE cc_stream_setting SET value='$val' WHERE keyname='$key';"; + } + $result = $CC_DBC->query($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } +} + +class Airtime200Upgrade{ + + public static function connectToDatabase(){ + global $CC_DBC, $CC_CONFIG; + + $values = parse_ini_file('/etc/airtime/airtime.conf', true); + + // Database config + $CC_CONFIG['dsn']['username'] = $values['database']['dbuser']; + $CC_CONFIG['dsn']['password'] = $values['database']['dbpass']; + $CC_CONFIG['dsn']['hostspec'] = $values['database']['host']; + $CC_CONFIG['dsn']['phptype'] = 'pgsql'; + $CC_CONFIG['dsn']['database'] = $values['database']['dbname']; + + $CC_DBC = DB::connect($CC_CONFIG['dsn'], FALSE); + } + + public static function InstallAirtimePhpServerCode($phpDir) + { + + $AIRTIME_SRC = realpath(__DIR__.'/../../../airtime_mvc'); + + // delete old files + exec("rm -rf ".$phpDir); + echo "* Installing PHP code to ".$phpDir.PHP_EOL; + exec("mkdir -p ".$phpDir); + exec("cp -R ".$AIRTIME_SRC."/* ".$phpDir); + } + + public static function RemoveOldMonitFile(){ + unlink("/etc/monit/conf.d/airtime-monit.cfg"); + } +} + +class ConvertToUtc{ + + public static function setPhpDefaultTimeZoneToSystemTimezone(){ + //we can get the default system timezone on debian/ubuntu by reading "/etc/timezone" + $filename = "/etc/timezone"; + $handle = fopen($filename, "r"); + $contents = trim(fread($handle, filesize($filename))); + echo "System timezone detected as: $contents".PHP_EOL; + fclose($handle); + + date_default_timezone_set($contents); + } + + public static function convert_cc_playlist(){ + /* cc_playlist has a field that keeps track of when the playlist was last modified. */ + $playlists = CcPlaylistQuery::create()->find(); + + foreach ($playlists as $pl){ + $dt = new DateTime($pl->getDbMtime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $pl->setDbMtime($dt); + + $pl->save(); + } + } + + public static function convert_cc_schedule(){ + /* cc_schedule has start and end fields that need to be changed to UTC. */ + $schedules = CcScheduleQuery::create()->find(); + + foreach ($schedules as $s){ + $dt = new DateTime($s->getDbStarts(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $s->setDbStarts($dt); + + $dt = new DateTime($s->getDbEnds(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $s->setDbEnds($dt); + + $s->save(); + } + } + + public static function convert_cc_show_days(){ + /* cc_show_days has first_show, last_show and start_time fields that need to be changed to UTC. */ + $showDays = CcShowDaysQuery::create()->find(); + + foreach ($showDays as $sd){ + $dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $sd->setDbFirstShow($dt->format("Y-m-d")); + $sd->setDbStartTime($dt->format("H:i:s")); + + $dt = new DateTime($sd->getDbLastShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $sd->setDbLastShow($dt->format("Y-m-d")); + + $sd->save(); + } + } + + public static function convert_cc_show_instances(){ + /* convert_cc_show_instances has starts and ends fields that need to be changed to UTC. */ + $showInstances = CcShowInstancesQuery::create()->find(); + + foreach ($showInstances as $si){ + $dt = new DateTime($si->getDbStarts(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $si->setDbStarts($dt); + + $dt = new DateTime($si->getDbEnds(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $si->setDbEnds($dt); + + $si->save(); + } + } +} + +class AirtimeIni200{ + + const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf"; + const CONF_FILE_PYPO = "/etc/airtime/pypo.cfg"; + const CONF_FILE_RECORDER = "/etc/airtime/recorder.cfg"; + const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg"; + const CONF_FILE_MEDIAMONITOR = "/etc/airtime/media-monitor.cfg"; + const CONF_FILE_API_CLIENT = "/etc/airtime/api_client.cfg"; + + const CONF_PYPO_GRP = "pypo"; + const CONF_WWW_DATA_GRP = "www-data"; + + /** + * This function updates an INI style config file. + * + * A property and the value the property should be changed to are + * supplied. If the property is not found, then no changes are made. + * + * @param string $p_filename + * The path the to the file. + * @param string $p_property + * The property to look for in order to change its value. + * @param string $p_value + * The value the property should be changed to. + * + */ + public static function UpdateIniValue($p_filename, $p_property, $p_value) + { + $lines = file($p_filename); + $n=count($lines); + foreach ($lines as &$line) { + if ($line[0] != "#"){ + $key_value = explode("=", $line); + $key = trim($key_value[0]); + + if ($key == $p_property){ + $line = "$p_property = $p_value".PHP_EOL; + } + } + } + + $fp=fopen($p_filename, 'w'); + for($i=0; $i<$n; $i++){ + fwrite($fp, $lines[$i]); + } + fclose($fp); + } + + public static function ReadPythonConfig($p_filename) + { + $values = array(); + + $fh = fopen($p_filename, 'r'); + + while(!feof($fh)){ + $line = fgets($fh); + if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){ + continue; + }else{ + $info = explode('=', $line, 2); + $values[trim($info[0])] = trim($info[1]); + } + } + + return $values; + } + + public static function MergeConfigFiles($configFiles, $suffix) { + foreach ($configFiles as $conf) { + // we want to use new liquidsoap.cfg so don't merge + // also for monit + if( $conf == AirtimeIni200::CONF_FILE_LIQUIDSOAP){ + continue; + } + if (file_exists("$conf$suffix.bak")) { + + if($conf === AirtimeIni200::CONF_FILE_AIRTIME) { + // Parse with sections + $newSettings = parse_ini_file($conf, true); + $oldSettings = parse_ini_file("$conf$suffix.bak", true); + } + else { + $newSettings = AirtimeIni200::ReadPythonConfig($conf); + $oldSettings = AirtimeIni200::ReadPythonConfig("$conf$suffix.bak"); + } + + $settings = array_keys($newSettings); + + foreach($settings as $section) { + if(isset($oldSettings[$section])) { + if(is_array($oldSettings[$section])) { + $sectionKeys = array_keys($newSettings[$section]); + foreach($sectionKeys as $sectionKey) { + // skip airtim_dir as we want to use new value + if($sectionKey != "airtime_dir"){ + if(isset($oldSettings[$section][$sectionKey])) { + AirtimeIni200::UpdateIniValue($conf, $sectionKey, $oldSettings[$section][$sectionKey]); + } + } + } + } + else { + AirtimeIni200::UpdateIniValue($conf, $section, $oldSettings[$section]); + } + } + } + } + } + } + + /* Re: http://dev.sourcefabric.org/browse/CC-2797 + * We don't want config files to be world-readable so we + * set the strictest permissions possible. */ + public static function changeConfigFilePermissions(){ + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_AIRTIME, self::CONF_WWW_DATA_GRP)){ + echo "Could not set ownership of api_client.cfg to 'pypo'. Exiting."; + exit(1); + } + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_API_CLIENT, self::CONF_PYPO_GRP)){ + echo "Could not set ownership of api_client.cfg to 'pypo'. Exiting."; + exit(1); + } + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_PYPO, self::CONF_PYPO_GRP)){ + echo "Could not set ownership of pypo.cfg to 'pypo'. Exiting."; + exit(1); + } + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_RECORDER, self::CONF_PYPO_GRP)){ + echo "Could not set ownership of recorder.cfg to 'pypo'. Exiting."; + exit(1); + } + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_LIQUIDSOAP, self::CONF_PYPO_GRP)){ + echo "Could not set ownership of liquidsoap.cfg to 'pypo'. Exiting."; + exit(1); + } + if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_MEDIAMONITOR, self::CONF_PYPO_GRP)){ + echo "Could not set ownership of media-monitor.cfg to 'pypo'. Exiting."; + exit(1); + } + } + + public static function ChangeFileOwnerGroupMod($filename, $user){ + return (chown($filename, $user) && + chgrp($filename, $user) && + chmod($filename, 0640)); + } + + public static function upgradeConfigFiles(){ + + $configFiles = array(AirtimeIni200::CONF_FILE_AIRTIME, + AirtimeIni200::CONF_FILE_PYPO, + AirtimeIni200::CONF_FILE_RECORDER, + AirtimeIni200::CONF_FILE_LIQUIDSOAP, + AirtimeIni200::CONF_FILE_MEDIAMONITOR, + AirtimeIni200::CONF_FILE_API_CLIENT); + + // Backup the config files + $suffix = date("Ymdhis")."-2.0.0"; + foreach ($configFiles as $conf) { + // do not back up monit cfg + if (file_exists($conf)) { + echo "Backing up $conf to $conf$suffix.bak".PHP_EOL; + //copy($conf, $conf.$suffix.".bak"); + exec("cp -p $conf $conf$suffix.bak"); //use cli version to preserve file attributes + } + } + + $default_suffix = "200"; + AirtimeIni200::CreateIniFiles($default_suffix); + AirtimeIni200::MergeConfigFiles($configFiles, $suffix); + } + + /** + * This function creates the /etc/airtime configuration folder + * and copies the default config files to it. + */ + public static function CreateIniFiles($suffix) + { + if (!file_exists("/etc/airtime/")){ + if (!mkdir("/etc/airtime/", 0755, true)){ + echo "Could not create /etc/airtime/ directory. Exiting."; + exit(1); + } + } + + if (!copy(__DIR__."/airtime.conf.$suffix", AirtimeIni200::CONF_FILE_AIRTIME)){ + echo "Could not copy airtime.conf to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/pypo.cfg.$suffix", AirtimeIni200::CONF_FILE_PYPO)){ + echo "Could not copy pypo.cfg to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/recorder.cfg.$suffix", AirtimeIni200::CONF_FILE_RECORDER)){ + echo "Could not copy recorder.cfg to /etc/airtime/. Exiting."; + exit(1); + } + /*if (!copy(__DIR__."/liquidsoap.cfg.$suffix", AirtimeIni200::CONF_FILE_LIQUIDSOAP)){ + echo "Could not copy liquidsoap.cfg to /etc/airtime/. Exiting."; + exit(1); + }*/ + if (!copy(__DIR__."/api_client.cfg.$suffix", AirtimeIni200::CONF_FILE_API_CLIENT)){ + echo "Could not copy airtime-monit.cfg to /etc/monit/conf.d/. Exiting."; + exit(1); + } + } +} + +Airtime200Upgrade::connectToDatabase(); +AirtimeInstall::SetDefaultTimezone(); + +AirtimeInstall::InstallBinaries(); +AirtimeInstall::CreateSymlinksToUtils(); + +/* Airtime 2.0.0 starts interpreting all database times in UTC format. Prior to this, all the times + * were stored using the local time zone. Let's convert to UTC time. */ +ConvertToUtc::setPhpDefaultTimeZoneToSystemTimezone(); +ConvertToUtc::convert_cc_playlist(); +ConvertToUtc::convert_cc_schedule(); +ConvertToUtc::convert_cc_show_days(); +ConvertToUtc::convert_cc_show_instances(); + +// merging/updating config files +echo "* Updating configFiles\n"; +AirtimeIni200::changeConfigFilePermissions(); +AirtimeIni200::upgradeConfigFiles(); + +$values = parse_ini_file(AirtimeIni200::CONF_FILE_AIRTIME, true); +$phpDir = $values['general']['airtime_dir']; +Airtime200Upgrade::InstallAirtimePhpServerCode($phpDir); + +if(AirtimeInstall::DbTableExists('doctrine_migration_versions') === false) { + $migrations = array('20110312121200', '20110331111708', '20110402164819', '20110406182005', '20110629143017', '20110711161043', '20110713161043'); + foreach($migrations as $migration) { + AirtimeInstall::BypassMigrations(__DIR__, $migration); + } +} + +AirtimeInstall::MigrateTablesToVersion(__DIR__, '20110925171256'); + +AirtimeInstall::SetDefaultStreamSetting(); + +AirtimeInstall::GetOldLiquidsoapCfgAndUpdate(); + +AirtimeUpgrade::RemoveOldMonitFile(); + +// restart monit +exec("service monit restart"); + + + + diff --git a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php index b540021dc..35a342bc0 100644 --- a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php +++ b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php @@ -5,6 +5,17 @@ * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt */ + +/* + * In the future, most Airtime upgrades will involve just mutating the + * data that is stored on the system. For example, The only data + * we need to preserve between versions is the database, /etc/airtime, and + * /srv/airtime. Everything else is just binary files that can be removed/replaced + * with the new version of Airtime. Of course, the data may need to be in a new + * format, and that's what this upgrade script will be for. + */ + +const VERSION_NUMBER = "2.0"; set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path()); set_include_path(__DIR__.'/../../../airtime_mvc/library/pear' . PATH_SEPARATOR . get_include_path()); @@ -12,14 +23,30 @@ set_include_path(__DIR__.'/../../../airtime_mvc/application/models' . PATH_SEPAR set_include_path(__DIR__.'/../../../airtime_mvc/application/configs' . PATH_SEPARATOR . get_include_path()); require_once 'conf.php'; require_once 'DB.php'; - require_once 'propel/runtime/lib/Propel.php'; Propel::init(__DIR__."/../../../airtime_mvc/application/configs/airtime-conf.php"); -class AirtimeInstall{ - const CONF_DIR_BINARIES = "/usr/lib/airtime"; - - public static function SetDefaultTimezone() +require_once 'UpgradeCommon.php'; + +/* All functions other than start() should be marked as + * private. + */ +class AirtimeDatabaseUpgrade{ + + public static function start(){ + self::SetDefaultTimezone(); + self::setPhpDefaultTimeZoneToSystemTimezone(); + self::convert_cc_playlist(); + self::convert_cc_schedule(); + self::convert_cc_show_days(); + self::convert_cc_show_instances(); + + self::doDbMigration(); + self::SetDefaultStreamSetting(); + self::GetOldLiquidsoapCfgAndUpdate(); + } + + private static function SetDefaultTimezone() { global $CC_DBC; @@ -33,28 +60,94 @@ class AirtimeInstall{ return true; } - public static function GetUtilsSrcDir() - { - return __DIR__."/../../../utils"; + private static function setPhpDefaultTimeZoneToSystemTimezone(){ + //we can get the default system timezone on debian/ubuntu by reading "/etc/timezone" + $filename = "/etc/timezone"; + $handle = fopen($filename, "r"); + $contents = trim(fread($handle, filesize($filename))); + echo "System timezone detected as: $contents".PHP_EOL; + fclose($handle); + + date_default_timezone_set($contents); } - public static function InstallBinaries() - { - echo "* Installing binaries to ".AirtimeInstall::CONF_DIR_BINARIES.PHP_EOL; - exec("mkdir -p ".AirtimeInstall::CONF_DIR_BINARIES); - exec("cp -R ".AirtimeInstall::GetUtilsSrcDir()." ".AirtimeInstall::CONF_DIR_BINARIES); - } - - public static function CreateSymlinksToUtils() - { - echo "* Installing airtime-log".PHP_EOL; - $dir = AirtimeInstall::CONF_DIR_BINARIES."/utils/airtime-log"; - copy(AirtimeInstall::GetUtilsSrcDir()."/airtime-log.php", AirtimeInstall::CONF_DIR_BINARIES."/utils/airtime-log.php"); + private static function convert_cc_playlist(){ + /* cc_playlist has a field that keeps track of when the playlist was last modified. */ + $playlists = CcPlaylistQuery::create()->find(); - exec("ln -s $dir /usr/bin/airtime-log"); + foreach ($playlists as $pl){ + $dt = new DateTime($pl->getDbMtime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $pl->setDbMtime($dt); + + $pl->save(); + } } - public static function SetDefaultStreamSetting() + private static function convert_cc_schedule(){ + /* cc_schedule has start and end fields that need to be changed to UTC. */ + $schedules = CcScheduleQuery::create()->find(); + + foreach ($schedules as $s){ + $dt = new DateTime($s->getDbStarts(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $s->setDbStarts($dt); + + $dt = new DateTime($s->getDbEnds(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $s->setDbEnds($dt); + + $s->save(); + } + } + + private static function convert_cc_show_days(){ + /* cc_show_days has first_show, last_show and start_time fields that need to be changed to UTC. */ + $showDays = CcShowDaysQuery::create()->find(); + + foreach ($showDays as $sd){ + $dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $sd->setDbFirstShow($dt->format("Y-m-d")); + $sd->setDbStartTime($dt->format("H:i:s")); + + $dt = new DateTime($sd->getDbLastShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $sd->setDbLastShow($dt->format("Y-m-d")); + + $sd->save(); + } + } + + private static function convert_cc_show_instances(){ + /* convert_cc_show_instances has starts and ends fields that need to be changed to UTC. */ + $showInstances = CcShowInstancesQuery::create()->find(); + + foreach ($showInstances as $si){ + $dt = new DateTime($si->getDbStarts(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $si->setDbStarts($dt); + + $dt = new DateTime($si->getDbEnds(), new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + $si->setDbEnds($dt); + + $si->save(); + } + } + + private static function doDbMigration(){ + if(UpgradeCommon::DbTableExists('doctrine_migration_versions') === false) { + $migrations = array('20110312121200', '20110331111708', '20110402164819', '20110406182005', '20110629143017', '20110711161043', '20110713161043'); + foreach($migrations as $migration) { + UpgradeCommon::BypassMigrations(__DIR__, $migration); + } + } + + UpgradeCommon::MigrateTablesToVersion(__DIR__, '20110929184401'); + } + + private static function SetDefaultStreamSetting() { global $CC_DBC; @@ -109,43 +202,8 @@ class AirtimeInstall{ } return true; } - - public static function BypassMigrations($dir, $version) - { - $appDir = AirtimeInstall::GetAirtimeSrcDir(); - $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". - "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". - "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". - "--no-interaction --add migrations:version $version"; - system($command); - } - public static function MigrateTablesToVersion($dir, $version) - { - $appDir = AirtimeInstall::GetAirtimeSrcDir(); - $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". - "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". - "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". - "--no-interaction migrations:migrate $version"; - system($command); - } - - public static function GetAirtimeSrcDir() - { - return __DIR__."/../../../airtime_mvc"; - } - - public static function DbTableExists($p_name) - { - global $CC_DBC; - $sql = "SELECT * FROM ".$p_name; - $result = $CC_DBC->GetOne($sql); - if (PEAR::isError($result)) { - return false; - } - return true; - } - public static function GetOldLiquidsoapCfgAndUpdate(){ + private static function GetOldLiquidsoapCfgAndUpdate(){ global $CC_DBC; echo "* Retrieving old liquidsoap configuration".PHP_EOL; $map = array(); @@ -220,367 +278,80 @@ class AirtimeInstall{ } } -class Airtime200Upgrade{ +class AirtimeStorWatchedDirsUpgrade{ - public static function connectToDatabase(){ - global $CC_DBC, $CC_CONFIG; - - $values = parse_ini_file('/etc/airtime/airtime.conf', true); - - // Database config - $CC_CONFIG['dsn']['username'] = $values['database']['dbuser']; - $CC_CONFIG['dsn']['password'] = $values['database']['dbpass']; - $CC_CONFIG['dsn']['hostspec'] = $values['database']['host']; - $CC_CONFIG['dsn']['phptype'] = 'pgsql'; - $CC_CONFIG['dsn']['database'] = $values['database']['dbname']; - - $CC_DBC = DB::connect($CC_CONFIG['dsn'], FALSE); - } - - public static function InstallAirtimePhpServerCode($phpDir) - { - - $AIRTIME_SRC = realpath(__DIR__.'/../../../airtime_mvc'); - - // delete old files - exec("rm -rf ".$phpDir); - echo "* Installing PHP code to ".$phpDir.PHP_EOL; - exec("mkdir -p ".$phpDir); - exec("cp -R ".$AIRTIME_SRC."/* ".$phpDir); - } - - public static function RemoveOldMonitFile(){ - unlink("/etc/monit/conf.d/airtime-monit.cfg"); + public static function start(){ } } -class ConvertToUtc{ +/* This class deals with any modifications to config files in /etc/airtime + * as well as backups. All functions other than start() should be marked + * as private. */ +class AirtimeConfigFileUpgrade{ - public static function setPhpDefaultTimeZoneToSystemTimezone(){ - //we can get the default system timezone on debian/ubuntu by reading "/etc/timezone" - $filename = "/etc/timezone"; - $handle = fopen($filename, "r"); - $contents = trim(fread($handle, filesize($filename))); - echo "System timezone detected as: $contents".PHP_EOL; - fclose($handle); - - date_default_timezone_set($contents); - } - - public static function convert_cc_playlist(){ - /* cc_playlist has a field that keeps track of when the playlist was last modified. */ - $playlists = CcPlaylistQuery::create()->find(); - - foreach ($playlists as $pl){ - $dt = new DateTime($pl->getDbMtime(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $pl->setDbMtime($dt); - - $pl->save(); - } - } - - public static function convert_cc_schedule(){ - /* cc_schedule has start and end fields that need to be changed to UTC. */ - $schedules = CcScheduleQuery::create()->find(); - - foreach ($schedules as $s){ - $dt = new DateTime($s->getDbStarts(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $s->setDbStarts($dt); - - $dt = new DateTime($s->getDbEnds(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $s->setDbEnds($dt); - - $s->save(); - } - } - - public static function convert_cc_show_days(){ - /* cc_show_days has first_show, last_show and start_time fields that need to be changed to UTC. */ - $showDays = CcShowDaysQuery::create()->find(); - - foreach ($showDays as $sd){ - $dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $sd->setDbFirstShow($dt->format("Y-m-d")); - $sd->setDbStartTime($dt->format("H:i:s")); - - $dt = new DateTime($sd->getDbLastShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $sd->setDbLastShow($dt->format("Y-m-d")); - - $sd->save(); - } - } - - public static function convert_cc_show_instances(){ - /* convert_cc_show_instances has starts and ends fields that need to be changed to UTC. */ - $showInstances = CcShowInstancesQuery::create()->find(); - - foreach ($showInstances as $si){ - $dt = new DateTime($si->getDbStarts(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $si->setDbStarts($dt); - - $dt = new DateTime($si->getDbEnds(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $si->setDbEnds($dt); - - $si->save(); - } - } -} - -class AirtimeIni200{ - - const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf"; - const CONF_FILE_PYPO = "/etc/airtime/pypo.cfg"; - const CONF_FILE_RECORDER = "/etc/airtime/recorder.cfg"; - const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg"; - const CONF_FILE_MEDIAMONITOR = "/etc/airtime/media-monitor.cfg"; - const CONF_FILE_API_CLIENT = "/etc/airtime/api_client.cfg"; - - const CONF_PYPO_GRP = "pypo"; - const CONF_WWW_DATA_GRP = "www-data"; - - /** - * This function updates an INI style config file. - * - * A property and the value the property should be changed to are - * supplied. If the property is not found, then no changes are made. - * - * @param string $p_filename - * The path the to the file. - * @param string $p_property - * The property to look for in order to change its value. - * @param string $p_value - * The value the property should be changed to. - * - */ - public static function UpdateIniValue($p_filename, $p_property, $p_value) - { - $lines = file($p_filename); - $n=count($lines); - foreach ($lines as &$line) { - if ($line[0] != "#"){ - $key_value = explode("=", $line); - $key = trim($key_value[0]); - - if ($key == $p_property){ - $line = "$p_property = $p_value".PHP_EOL; - } - } - } - - $fp=fopen($p_filename, 'w'); - for($i=0; $i<$n; $i++){ - fwrite($fp, $lines[$i]); - } - fclose($fp); - } - - public static function ReadPythonConfig($p_filename) - { - $values = array(); - - $fh = fopen($p_filename, 'r'); - - while(!feof($fh)){ - $line = fgets($fh); - if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){ - continue; - }else{ - $info = explode('=', $line, 2); - $values[trim($info[0])] = trim($info[1]); - } - } - - return $values; - } - - public static function MergeConfigFiles($configFiles, $suffix) { - foreach ($configFiles as $conf) { - // we want to use new liquidsoap.cfg so don't merge - // also for monit - if( $conf == AirtimeIni200::CONF_FILE_LIQUIDSOAP){ - continue; - } - if (file_exists("$conf$suffix.bak")) { - - if($conf === AirtimeIni200::CONF_FILE_AIRTIME) { - // Parse with sections - $newSettings = parse_ini_file($conf, true); - $oldSettings = parse_ini_file("$conf$suffix.bak", true); - } - else { - $newSettings = AirtimeIni200::ReadPythonConfig($conf); - $oldSettings = AirtimeIni200::ReadPythonConfig("$conf$suffix.bak"); - } - - $settings = array_keys($newSettings); - - foreach($settings as $section) { - if(isset($oldSettings[$section])) { - if(is_array($oldSettings[$section])) { - $sectionKeys = array_keys($newSettings[$section]); - foreach($sectionKeys as $sectionKey) { - // skip airtim_dir as we want to use new value - if($sectionKey != "airtime_dir"){ - if(isset($oldSettings[$section][$sectionKey])) { - AirtimeIni200::UpdateIniValue($conf, $sectionKey, $oldSettings[$section][$sectionKey]); - } - } - } - } - else { - AirtimeIni200::UpdateIniValue($conf, $section, $oldSettings[$section]); - } - } - } - } - } + public static function start(){ + echo "* Updating configFiles\n"; + self::changeConfigFilePermissions(); + UpgradeCommon::upgradeConfigFiles(); } /* Re: http://dev.sourcefabric.org/browse/CC-2797 * We don't want config files to be world-readable so we * set the strictest permissions possible. */ - public static function changeConfigFilePermissions(){ - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_AIRTIME, self::CONF_WWW_DATA_GRP)){ + private static function changeConfigFilePermissions(){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_AIRTIME, UpgradeCommon::CONF_WWW_DATA_GRP)){ echo "Could not set ownership of api_client.cfg to 'pypo'. Exiting."; exit(1); } - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_API_CLIENT, self::CONF_PYPO_GRP)){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_API_CLIENT, UpgradeCommon::CONF_PYPO_GRP)){ echo "Could not set ownership of api_client.cfg to 'pypo'. Exiting."; exit(1); } - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_PYPO, self::CONF_PYPO_GRP)){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_PYPO, UpgradeCommon::CONF_PYPO_GRP)){ echo "Could not set ownership of pypo.cfg to 'pypo'. Exiting."; exit(1); } - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_RECORDER, self::CONF_PYPO_GRP)){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_RECORDER, UpgradeCommon::CONF_PYPO_GRP)){ echo "Could not set ownership of recorder.cfg to 'pypo'. Exiting."; exit(1); } - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_LIQUIDSOAP, self::CONF_PYPO_GRP)){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_LIQUIDSOAP, UpgradeCommon::CONF_PYPO_GRP)){ echo "Could not set ownership of liquidsoap.cfg to 'pypo'. Exiting."; exit(1); } - if (!self::ChangeFileOwnerGroupMod(AirtimeIni200::CONF_FILE_MEDIAMONITOR, self::CONF_PYPO_GRP)){ + if (!self::ChangeFileOwnerGroupMod(UpgradeCommon::CONF_FILE_MEDIAMONITOR, UpgradeCommon::CONF_PYPO_GRP)){ echo "Could not set ownership of media-monitor.cfg to 'pypo'. Exiting."; exit(1); } } - public static function ChangeFileOwnerGroupMod($filename, $user){ + private static function ChangeFileOwnerGroupMod($filename, $user){ return (chown($filename, $user) && chgrp($filename, $user) && chmod($filename, 0640)); } - public static function upgradeConfigFiles(){ - $configFiles = array(AirtimeIni200::CONF_FILE_AIRTIME, - AirtimeIni200::CONF_FILE_PYPO, - AirtimeIni200::CONF_FILE_RECORDER, - AirtimeIni200::CONF_FILE_LIQUIDSOAP, - AirtimeIni200::CONF_FILE_MEDIAMONITOR, - AirtimeIni200::CONF_FILE_API_CLIENT); +} - // Backup the config files - $suffix = date("Ymdhis")."-2.0.0"; - foreach ($configFiles as $conf) { - // do not back up monit cfg - if (file_exists($conf)) { - echo "Backing up $conf to $conf$suffix.bak".PHP_EOL; - //copy($conf, $conf.$suffix.".bak"); - exec("cp -p $conf $conf$suffix.bak"); //use cli version to preserve file attributes - } - } +/* Into this class put operations that don't fit into any of the other + * 3 classes. For example, there may be stray files scattered throughout + * the filesystem that we don't need anymore. Put the functions to clean + * those out into this class. */ +class AirtimeMiscUpgrade{ - $default_suffix = "200"; - AirtimeIni200::CreateIniFiles($default_suffix); - AirtimeIni200::MergeConfigFiles($configFiles, $suffix); + public static function start(){ + self::RemoveOldMonitFile(); } - /** - * This function creates the /etc/airtime configuration folder - * and copies the default config files to it. - */ - public static function CreateIniFiles($suffix) - { - if (!file_exists("/etc/airtime/")){ - if (!mkdir("/etc/airtime/", 0755, true)){ - echo "Could not create /etc/airtime/ directory. Exiting."; - exit(1); - } - } - - if (!copy(__DIR__."/airtime.conf.$suffix", AirtimeIni200::CONF_FILE_AIRTIME)){ - echo "Could not copy airtime.conf to /etc/airtime/. Exiting."; - exit(1); - } - if (!copy(__DIR__."/pypo.cfg.$suffix", AirtimeIni200::CONF_FILE_PYPO)){ - echo "Could not copy pypo.cfg to /etc/airtime/. Exiting."; - exit(1); - } - if (!copy(__DIR__."/recorder.cfg.$suffix", AirtimeIni200::CONF_FILE_RECORDER)){ - echo "Could not copy recorder.cfg to /etc/airtime/. Exiting."; - exit(1); - } - /*if (!copy(__DIR__."/liquidsoap.cfg.$suffix", AirtimeIni200::CONF_FILE_LIQUIDSOAP)){ - echo "Could not copy liquidsoap.cfg to /etc/airtime/. Exiting."; - exit(1); - }*/ - if (!copy(__DIR__."/api_client.cfg.$suffix", AirtimeIni200::CONF_FILE_API_CLIENT)){ - echo "Could not copy airtime-monit.cfg to /etc/monit/conf.d/. Exiting."; - exit(1); - } + private static function RemoveOldMonitFile(){ + unlink("/etc/monit/conf.d/airtime-monit.cfg"); } } -Airtime200Upgrade::connectToDatabase(); -AirtimeInstall::SetDefaultTimezone(); +UpgradeCommon::connectToDatabase(); -AirtimeInstall::InstallBinaries(); -AirtimeInstall::CreateSymlinksToUtils(); - -/* Airtime 2.0.0 starts interpreting all database times in UTC format. Prior to this, all the times - * were stored using the local time zone. Let's convert to UTC time. */ -ConvertToUtc::setPhpDefaultTimeZoneToSystemTimezone(); -ConvertToUtc::convert_cc_playlist(); -ConvertToUtc::convert_cc_schedule(); -ConvertToUtc::convert_cc_show_days(); -ConvertToUtc::convert_cc_show_instances(); - -// merging/updating config files -echo "* Updating configFiles\n"; -AirtimeIni200::changeConfigFilePermissions(); -AirtimeIni200::upgradeConfigFiles(); - -$values = parse_ini_file(AirtimeIni200::CONF_FILE_AIRTIME, true); -$phpDir = $values['general']['airtime_dir']; -Airtime200Upgrade::InstallAirtimePhpServerCode($phpDir); - -if(AirtimeInstall::DbTableExists('doctrine_migration_versions') === false) { - $migrations = array('20110312121200', '20110331111708', '20110402164819', '20110406182005', '20110629143017', '20110711161043', '20110713161043'); - foreach($migrations as $migration) { - AirtimeInstall::BypassMigrations(__DIR__, $migration); - } -} - -AirtimeInstall::MigrateTablesToVersion(__DIR__, '20110925171256'); - -AirtimeInstall::SetDefaultStreamSetting(); - -AirtimeInstall::GetOldLiquidsoapCfgAndUpdate(); - -AirtimeUpgrade::RemoveOldMonitFile(); - -// restart monit -exec("service monit restart"); - - - - +AirtimeDatabaseUpgrade::start(); +AirtimeStorWatchedDirsUpgrade::start(); +AirtimeConfigFileUpgrade::start(); +AirtimeMiscUpgrade::start(); diff --git a/install_minimal/upgrades/airtime-2.0.0/api_client.cfg.200 b/install_minimal/upgrades/airtime-2.0.0/api_client.cfg.200 index 3fcd38c64..bf04dcc26 100644 --- a/install_minimal/upgrades/airtime-2.0.0/api_client.cfg.200 +++ b/install_minimal/upgrades/airtime-2.0.0/api_client.cfg.200 @@ -13,6 +13,9 @@ api_base = 'api' # URL to get the version number of the server API version_url = 'version/api_key/%%api_key%%' +#URL to register a components IP Address with the central web server +register_component = 'register-component/format/json/api_key/%%api_key%%/component/%%component%%' + # Hostname base_url = 'localhost' base_port = 80 @@ -45,9 +48,6 @@ remove_watched_dir = 'remove-watched-dir/format/json/api_key/%%api_key%%/path/%% # URL to tell Airtime we want to add watched directory set_storage_dir = 'set-storage-dir/format/json/api_key/%%api_key%%/path/%%path%%' -# URL to tell Airtime we want to get stream setting -get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/' - ############################# ## Config for Recorder ############################# @@ -89,6 +89,8 @@ update_start_playing_url = 'notify-media-item-start-play/api_key/%%api_key%%/med # ??? generate_range_url = 'generate_range_dp.php' +# URL to tell Airtime we want to get stream setting +get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/' ############## # OBP config # diff --git a/install_minimal/upgrades/upgrade-template/UpgradeCommon.php b/install_minimal/upgrades/upgrade-template/UpgradeCommon.php new file mode 100644 index 000000000..57ee794cd --- /dev/null +++ b/install_minimal/upgrades/upgrade-template/UpgradeCommon.php @@ -0,0 +1,206 @@ +<?php + +/* These are helper functions that are common to each upgrade such as + * creating connections to a database, backing up config files etc. + */ +class UpgradeCommon{ + const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf"; + const CONF_FILE_PYPO = "/etc/airtime/pypo.cfg"; + const CONF_FILE_RECORDER = "/etc/airtime/recorder.cfg"; + const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg"; + const CONF_FILE_MEDIAMONITOR = "/etc/airtime/media-monitor.cfg"; + const CONF_FILE_API_CLIENT = "/etc/airtime/api_client.cfg"; + + const CONF_PYPO_GRP = "pypo"; + const CONF_WWW_DATA_GRP = "www-data"; + + public static function DbTableExists($p_name) + { + global $CC_DBC; + $sql = "SELECT * FROM ".$p_name; + $result = $CC_DBC->GetOne($sql); + if (PEAR::isError($result)) { + return false; + } + return true; + } + + private static function GetAirtimeSrcDir() + { + return __DIR__."/../../../airtime_mvc"; + } + + public static function MigrateTablesToVersion($dir, $version) + { + $appDir = self::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction migrations:migrate $version"; + system($command); + } + + public static function BypassMigrations($dir, $version) + { + $appDir = self::GetAirtimeSrcDir(); + $command = "php $appDir/library/doctrine/migrations/doctrine-migrations.phar ". + "--configuration=$dir/../../DoctrineMigrations/migrations.xml ". + "--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ". + "--no-interaction --add migrations:version $version"; + system($command); + } + + public static function upgradeConfigFiles(){ + + $configFiles = array(UpgradeCommon::CONF_FILE_AIRTIME, + UpgradeCommon::CONF_FILE_PYPO, + UpgradeCommon::CONF_FILE_RECORDER, + UpgradeCommon::CONF_FILE_LIQUIDSOAP, + UpgradeCommon::CONF_FILE_MEDIAMONITOR, + UpgradeCommon::CONF_FILE_API_CLIENT); + + // Backup the config files + $suffix = date("Ymdhis")."-".VERSION_NUMBER; + foreach ($configFiles as $conf) { + // do not back up monit cfg + if (file_exists($conf)) { + echo "Backing up $conf to $conf$suffix.bak".PHP_EOL; + //copy($conf, $conf.$suffix.".bak"); + exec("cp -p $conf $conf$suffix.bak"); //use cli version to preserve file attributes + } + } + + $default_suffix = "200"; + self::CreateIniFiles($default_suffix); + self::MergeConfigFiles($configFiles, $suffix); + } + + /** + * This function creates the /etc/airtime configuration folder + * and copies the default config files to it. + */ + public static function CreateIniFiles($suffix) + { + if (!file_exists("/etc/airtime/")){ + if (!mkdir("/etc/airtime/", 0755, true)){ + echo "Could not create /etc/airtime/ directory. Exiting."; + exit(1); + } + } + + if (!copy(__DIR__."/airtime.conf.$suffix", self::CONF_FILE_AIRTIME)){ + echo "Could not copy airtime.conf to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/pypo.cfg.$suffix", self::CONF_FILE_PYPO)){ + echo "Could not copy pypo.cfg to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/recorder.cfg.$suffix", self::CONF_FILE_RECORDER)){ + echo "Could not copy recorder.cfg to /etc/airtime/. Exiting."; + exit(1); + } + if (!copy(__DIR__."/api_client.cfg.$suffix", self::CONF_FILE_API_CLIENT)){ + echo "Could not copy airtime-monit.cfg to /etc/monit/conf.d/. Exiting."; + exit(1); + } + } + + private static function MergeConfigFiles($configFiles, $suffix) { + foreach ($configFiles as $conf) { + // we want to use new liquidsoap.cfg so don't merge + // also for monit + if( $conf == self::CONF_FILE_LIQUIDSOAP){ + continue; + } + if (file_exists("$conf$suffix.bak")) { + + if($conf === self::CONF_FILE_AIRTIME) { + // Parse with sections + $newSettings = parse_ini_file($conf, true); + $oldSettings = parse_ini_file("$conf$suffix.bak", true); + } + else { + $newSettings = self::ReadPythonConfig($conf); + $oldSettings = self::ReadPythonConfig("$conf$suffix.bak"); + } + + $settings = array_keys($newSettings); + + foreach($settings as $section) { + if(isset($oldSettings[$section])) { + if(is_array($oldSettings[$section])) { + $sectionKeys = array_keys($newSettings[$section]); + foreach($sectionKeys as $sectionKey) { + // skip airtim_dir as we want to use new value + if($sectionKey != "airtime_dir"){ + if(isset($oldSettings[$section][$sectionKey])) { + self::UpdateIniValue($conf, $sectionKey, $oldSettings[$section][$sectionKey]); + } + } + } + } + else { + self::UpdateIniValue($conf, $section, $oldSettings[$section]); + } + } + } + } + } + } + + private static function ReadPythonConfig($p_filename) + { + $values = array(); + + $fh = fopen($p_filename, 'r'); + + while(!feof($fh)){ + $line = fgets($fh); + if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){ + continue; + }else{ + $info = explode('=', $line, 2); + $values[trim($info[0])] = trim($info[1]); + } + } + + return $values; + } + + /** + * This function updates an INI style config file. + * + * A property and the value the property should be changed to are + * supplied. If the property is not found, then no changes are made. + * + * @param string $p_filename + * The path the to the file. + * @param string $p_property + * The property to look for in order to change its value. + * @param string $p_value + * The value the property should be changed to. + * + */ + private static function UpdateIniValue($p_filename, $p_property, $p_value) + { + $lines = file($p_filename); + $n=count($lines); + foreach ($lines as &$line) { + if ($line[0] != "#"){ + $key_value = explode("=", $line); + $key = trim($key_value[0]); + + if ($key == $p_property){ + $line = "$p_property = $p_value".PHP_EOL; + } + } + } + + $fp=fopen($p_filename, 'w'); + for($i=0; $i<$n; $i++){ + fwrite($fp, $lines[$i]); + } + fclose($fp); + } +} diff --git a/install_minimal/upgrades/upgrade-template/airtime-upgrade.php b/install_minimal/upgrades/upgrade-template/airtime-upgrade.php new file mode 100644 index 000000000..42aa0c287 --- /dev/null +++ b/install_minimal/upgrades/upgrade-template/airtime-upgrade.php @@ -0,0 +1,84 @@ +<?php +/** + * @package Airtime + * @subpackage StorageServer + * @copyright 2010 Sourcefabric O.P.S. + * @license http://www.gnu.org/licenses/gpl.txt + */ + +/* + * In the future, most Airtime upgrades will involve just mutating the + * data that is stored on the system. For example, The only data + * we need to preserve between versions is the database, /etc/airtime, and + * /srv/airtime. Everything else is just binary files that can be removed/replaced + * with the new version of Airtime. Of course, the data may need to be in a new + * format, and that's what this upgrade script will be for. + */ + +const VERSION_NUMBER = "2.0.0"; + +set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/library/pear' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/application/models' . PATH_SEPARATOR . get_include_path()); +set_include_path(__DIR__.'/../../../airtime_mvc/application/configs' . PATH_SEPARATOR . get_include_path()); +require_once 'conf.php'; +require_once 'DB.php'; +require_once 'propel/runtime/lib/Propel.php'; +Propel::init(__DIR__."/../../../airtime_mvc/application/configs/airtime-conf.php"); + +require_once 'UpgradeCommon.php'; + + +/* All functions other than start() should be marked as + * private. + */ +class AirtimeDatabaseUpgrade{ + + public static function start(){ + //self::doDbMigration(); + } + + private static function doDbMigration(){ + if(UpgradeCommon::DbTableExists('doctrine_migration_versions') === false) { + $migrations = array('20110312121200', '20110331111708', '20110402164819', '20110406182005', '20110629143017', '20110711161043', '20110713161043'); + foreach($migrations as $migration) { + UpgradeCommon::BypassMigrations(__DIR__, $migration); + } + } + + UpgradeCommon::MigrateTablesToVersion(__DIR__, '20110925171256'); + } +} + +class AirtimeStorWatchedDirsUpgrade{ + + public static function start(){ + } +} + +/* This class deals with any modifications to config files in /etc/airtime + * as well as backups. All functions other than start() should be marked + * as private. */ +class AirtimeConfigFileUpgrade{ + + public static function start(){ + UpgradeCommon::upgradeConfigFiles(); + } +} + +/* Into this class put operations that don't fit into any of the other + * 3 classes. For example, there may be stray files scattered throughout + * the filesystem that we don't need anymore. Put the functions to clean + * those out into this class. */ +class AirtimeMiscUpgrade{1 + + public static function start(){ + } +} + +UpgradeCommonFunctions::connectToDatabase(); + +AirtimeDatabaseUpgrade::start(); +AirtimeStorWatchedDirsUpgrade::start(); +AirtimeConfigFileUpgrade::start(); +AirtimeMiscUpgrade::start(); diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 62feb1ee0..f8e389daa 100755 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -561,7 +561,6 @@ class AirTimeApiClient(ApiClientInterface): response = urllib2.urlopen(req).read() except Exception, e: logger.error("Exception: %s", e) - logger.error("Response: %s", response) ################################################################################ # OpenBroadcast API Client diff --git a/utils/phone_home_stat.php b/utils/phone_home_stat.php index e09b442cb..65b6a57b5 100644 --- a/utils/phone_home_stat.php +++ b/utils/phone_home_stat.php @@ -33,7 +33,7 @@ require_once($CC_CONFIG['phpDir'].'/application/models/User.php'); require_once($CC_CONFIG['phpDir'].'/application/models/StoredFile.php'); require_once($CC_CONFIG['phpDir'].'/application/models/Playlist.php'); require_once($CC_CONFIG['phpDir'].'/application/models/Schedule.php'); -require_once($CC_CONFIG['phpDir'].'/application/models/Shows.php'); +require_once($CC_CONFIG['phpDir'].'/application/models/Show.php'); require_once($CC_CONFIG['phpDir'].'/application/models/Preference.php'); //Pear classes.