Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Yuchen Wang 2011-11-15 12:38:18 -05:00
commit fdff88cb76
25 changed files with 503 additions and 274 deletions

View File

@ -1,6 +1,10 @@
======= =======
CREDITS CREDITS
======= =======
Version 1.9.5
-------------
Same as previous version.
Version 1.9.4 Version 1.9.4
------------- -------------
Same as previous version. Same as previous version.

View File

@ -56,7 +56,7 @@ class ScheduleController extends Zend_Controller_Action
$this->view->headLink()->appendStylesheet($baseUrl.'/css/colorpicker/css/colorpicker.css'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/colorpicker/css/colorpicker.css');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/add-show.css'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/add-show.css');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/contextmenu.css'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/contextmenu.css');
Application_Model_Schedule::createNewFormSections($this->view); Application_Model_Schedule::createNewFormSections($this->view);
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
@ -68,7 +68,9 @@ class ScheduleController extends Zend_Controller_Action
public function eventFeedAction() public function eventFeedAction()
{ {
$start = new DateTime($this->_getParam('start', null)); $start = new DateTime($this->_getParam('start', null));
$start->setTimezone(new DateTimeZone("UTC"));
$end = new DateTime($this->_getParam('end', null)); $end = new DateTime($this->_getParam('end', null));
$end->setTimezone(new DateTimeZone("UTC"));
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
@ -113,7 +115,7 @@ class ScheduleController extends Zend_Controller_Action
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
if($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
try{ try{
$show = new Application_Model_ShowInstance($showInstanceId); $show = new Application_Model_ShowInstance($showInstanceId);
}catch(Exception $e){ }catch(Exception $e){
@ -123,8 +125,9 @@ class ScheduleController extends Zend_Controller_Action
$error = $show->resizeShow($deltaDay, $deltaMin); $error = $show->resizeShow($deltaDay, $deltaMin);
} }
if(isset($error)) if (isset($error)) {
$this->view->error = $error; $this->view->error = $error;
}
} }
public function deleteShowAction() public function deleteShowAction()
@ -141,7 +144,7 @@ class ScheduleController extends Zend_Controller_Action
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$show->deleteShow(); $show->deleteShow();
} }
} }
@ -177,15 +180,15 @@ class ScheduleController extends Zend_Controller_Action
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$params = '/format/json/id/#id#'; $params = '/format/json/id/#id#';
$showStartDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowInstanceStart()); $showStartDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowInstanceStart());
$showEndDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowInstanceEnd()); $showEndDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowInstanceEnd());
$menu = array(); $menu = array();
if ($epochNow < $showStartDateHelper->getTimestamp()) { if ($epochNow < $showStartDateHelper->getTimestamp()) {
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER, UTYPE_HOST),$show->getShowId()) && !$show->isRecorded() && !$show->isRebroadcast()) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER, UTYPE_HOST),$show->getShowId()) && !$show->isRecorded() && !$show->isRebroadcast()) {
@ -239,7 +242,7 @@ class ScheduleController extends Zend_Controller_Action
'callback' => 'window["scheduleRefetchEvents"]'), 'title' => 'Delete This Instance and All Following'); 'callback' => 'window["scheduleRefetchEvents"]'), 'title' => 'Delete This Instance and All Following');
} }
} }
//returns format jjmenu is looking for. //returns format jjmenu is looking for.
die(json_encode($menu)); die(json_encode($menu));
} }
@ -305,12 +308,12 @@ class ScheduleController extends Zend_Controller_Action
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$playlists = $show->searchPlaylistsForShow($post); $playlists = $show->searchPlaylistsForShow($post);
foreach( $playlists['aaData'] as &$data){ foreach( $playlists['aaData'] as &$data){
// calling two functions to format time to 1 decimal place // calling two functions to format time to 1 decimal place
$sec = Application_Model_Playlist::playlistTimeToSeconds($data[4]); $sec = Application_Model_Playlist::playlistTimeToSeconds($data[4]);
$data[4] = Application_Model_Playlist::secondsToPlaylistTime($sec); $data[4] = Application_Model_Playlist::secondsToPlaylistTime($sec);
} }
//for datatables //for datatables
@ -354,13 +357,13 @@ class ScheduleController extends Zend_Controller_Action
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$start_timestamp = $show->getShowInstanceStart(); $start_timestamp = $show->getShowInstanceStart();
$end_timestamp = $show->getShowInstanceEnd(); $end_timestamp = $show->getShowInstanceEnd();
//check to make sure show doesn't overlap. //check to make sure show doesn't overlap.
if(Application_Model_Show::getShows(new DateTime($start_timestamp, new DateTimeZone("UTC")), if(Application_Model_Show::getShows(new DateTime($start_timestamp, new DateTimeZone("UTC")),
new DateTime($end_timestamp, new DateTimeZone("UTC")), new DateTime($end_timestamp, new DateTimeZone("UTC")),
array($showInstanceId))) { array($showInstanceId))) {
$this->view->error = "cannot schedule an overlapping show."; $this->view->error = "cannot schedule an overlapping show.";
return; return;
@ -368,7 +371,7 @@ class ScheduleController extends Zend_Controller_Action
$dateInfo_s = getDate(strtotime(Application_Model_DateHelper::ConvertToLocalDateTimeString($start_timestamp))); $dateInfo_s = getDate(strtotime(Application_Model_DateHelper::ConvertToLocalDateTimeString($start_timestamp)));
$dateInfo_e = getDate(strtotime(Application_Model_DateHelper::ConvertToLocalDateTimeString($end_timestamp))); $dateInfo_e = getDate(strtotime(Application_Model_DateHelper::ConvertToLocalDateTimeString($end_timestamp)));
$this->view->showContent = $show->getShowContent(); $this->view->showContent = $show->getShowContent();
$this->view->timeFilled = $show->getTimeScheduled(); $this->view->timeFilled = $show->getTimeScheduled();
$this->view->showName = $show->getName(); $this->view->showName = $show->getName();
@ -410,7 +413,9 @@ class ScheduleController extends Zend_Controller_Action
$originalShowName = $originalShow->getName(); $originalShowName = $originalShow->getName();
$originalShowStart = $originalShow->getShowInstanceStart(); $originalShowStart = $originalShow->getShowInstanceStart();
$timestamp = strtotime($originalShowStart); //convert from UTC to user's timezone for display.
$originalDateTime = new DateTime($originalShowStart, new DateTimeZone("UTC"));
$timestamp = strtotime(Application_Model_DateHelper::ConvertToLocalDateTimeString($originalDateTime->format("Y-m-d H:i:s")));
$this->view->additionalShowInfo = $this->view->additionalShowInfo =
"Rebroadcast of show \"$originalShowName\" from " "Rebroadcast of show \"$originalShowName\" from "
.date("l, F jS", $timestamp)." at ".date("G:i", $timestamp); .date("l, F jS", $timestamp)." at ".date("G:i", $timestamp);
@ -427,7 +432,7 @@ class ScheduleController extends Zend_Controller_Action
if(!$user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if(!$user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
return; return;
} }
$isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true; $isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true;
$showInstanceId = $this->_getParam('id'); $showInstanceId = $this->_getParam('id');
@ -464,12 +469,12 @@ class ScheduleController extends Zend_Controller_Action
'add_show_url' => $show->getUrl(), 'add_show_url' => $show->getUrl(),
'add_show_genre' => $show->getGenre(), 'add_show_genre' => $show->getGenre(),
'add_show_description' => $show->getDescription())); 'add_show_description' => $show->getDescription()));
$startsDateTime = new DateTime($showInstance->getShowInstanceStart(), new DateTimeZone("UTC")); $startsDateTime = new DateTime($show->getStartDate()." ".$show->getStartTime(), new DateTimeZone(date_default_timezone_get()));
$endsDateTime = new DateTime($showInstance->getShowInstanceEnd(), new DateTimeZone("UTC")); $endsDateTime = new DateTime($show->getEndDate()." ".$show->getEndTime(), new DateTimeZone(date_default_timezone_get()));
$startsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); //$startsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
$endsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); //$endsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
$formWhen->populate(array('add_show_start_date' => $startsDateTime->format("Y-m-d"), $formWhen->populate(array('add_show_start_date' => $startsDateTime->format("Y-m-d"),
'add_show_start_time' => $startsDateTime->format("H:i"), 'add_show_start_time' => $startsDateTime->format("H:i"),
@ -505,27 +510,27 @@ class ScheduleController extends Zend_Controller_Action
$formWho->populate(array('add_show_hosts' => $hosts)); $formWho->populate(array('add_show_hosts' => $hosts));
$formStyle->populate(array('add_show_background_color' => $show->getBackgroundColor(), $formStyle->populate(array('add_show_background_color' => $show->getBackgroundColor(),
'add_show_color' => $show->getColor())); 'add_show_color' => $show->getColor()));
if(!$isSaas){ if(!$isSaas){
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
$formRecord->removeDecorator('DtDdWrapper'); $formRecord->removeDecorator('DtDdWrapper');
$formAbsoluteRebroadcast->removeDecorator('DtDdWrapper'); $formAbsoluteRebroadcast->removeDecorator('DtDdWrapper');
$formRebroadcast->removeDecorator('DtDdWrapper'); $formRebroadcast->removeDecorator('DtDdWrapper');
$this->view->rr = $formRecord; $this->view->rr = $formRecord;
$this->view->absoluteRebroadcast = $formAbsoluteRebroadcast; $this->view->absoluteRebroadcast = $formAbsoluteRebroadcast;
$this->view->rebroadcast = $formRebroadcast; $this->view->rebroadcast = $formRebroadcast;
$formRecord->populate(array('add_show_record' => $show->isRecorded(), $formRecord->populate(array('add_show_record' => $show->isRecorded(),
'add_show_rebroadcast' => $show->isRebroadcast())); 'add_show_rebroadcast' => $show->isRebroadcast()));
$formRecord->getElement('add_show_record')->setOptions(array('disabled' => true)); $formRecord->getElement('add_show_record')->setOptions(array('disabled' => true));
$rebroadcastsRelative = $show->getRebroadcastsRelative(); $rebroadcastsRelative = $show->getRebroadcastsRelative();
$rebroadcastFormValues = array(); $rebroadcastFormValues = array();
$i = 1; $i = 1;
@ -535,7 +540,7 @@ class ScheduleController extends Zend_Controller_Action
$i++; $i++;
} }
$formRebroadcast->populate($rebroadcastFormValues); $formRebroadcast->populate($rebroadcastFormValues);
$rebroadcastsAbsolute = $show->getRebroadcastsAbsolute(); $rebroadcastsAbsolute = $show->getRebroadcastsAbsolute();
$rebroadcastAbsoluteFormValues = array(); $rebroadcastAbsoluteFormValues = array();
$i = 1; $i = 1;
@ -551,7 +556,7 @@ class ScheduleController extends Zend_Controller_Action
$this->view->entries = 5; $this->view->entries = 5;
} }
public function getFormAction(){ public function getFormAction(){
Application_Model_Schedule::createNewFormSections($this->view); Application_Model_Schedule::createNewFormSections($this->view);
$this->view->form = $this->view->render('schedule/add-show-form.phtml'); $this->view->form = $this->view->render('schedule/add-show-form.phtml');
} }
@ -565,7 +570,7 @@ class ScheduleController extends Zend_Controller_Action
foreach($js as $j){ foreach($js as $j){
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$show = new Application_Model_Show($data['add_show_id']); $show = new Application_Model_Show($data['add_show_id']);
$startDateModified = true; $startDateModified = true;
@ -582,10 +587,10 @@ class ScheduleController extends Zend_Controller_Action
if($data['add_show_day_check'] == "") { if($data['add_show_day_check'] == "") {
$data['add_show_day_check'] = null; $data['add_show_day_check'] = null;
} }
$isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true; $isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true;
$record = false; $record = false;
$formWhat = new Application_Form_AddShowWhat(); $formWhat = new Application_Form_AddShowWhat();
$formWho = new Application_Form_AddShowWho(); $formWho = new Application_Form_AddShowWho();
$formWhen = new Application_Form_AddShowWhen(); $formWhen = new Application_Form_AddShowWhen();
@ -604,8 +609,8 @@ class ScheduleController extends Zend_Controller_Action
$when = $formWhen->checkReliantFields($data, $startDateModified); $when = $formWhen->checkReliantFields($data, $startDateModified);
} }
//The way the following code works is that is parses the hour and //The way the following code works is that is parses the hour and
//minute from a string with the format "1h 20m" or "2h" or "36m". //minute from a string with the format "1h 20m" or "2h" or "36m".
//So we are detecting whether an hour or minute value exists via strpos //So we are detecting whether an hour or minute value exists via strpos
//and then parse appropriately. A better way to do this in the future is //and then parse appropriately. A better way to do this in the future is
@ -613,10 +618,10 @@ class ScheduleController extends Zend_Controller_Action
//have to do this extra String parsing. //have to do this extra String parsing.
$hPos = strpos($data["add_show_duration"], 'h'); $hPos = strpos($data["add_show_duration"], 'h');
$mPos = strpos($data["add_show_duration"], 'm'); $mPos = strpos($data["add_show_duration"], 'm');
$hValue = 0; $hValue = 0;
$mValue = 0; $mValue = 0;
if($hPos !== false){ if($hPos !== false){
$hValue = trim(substr($data["add_show_duration"], 0, $hPos)); $hValue = trim(substr($data["add_show_duration"], 0, $hPos));
} }
@ -624,18 +629,18 @@ class ScheduleController extends Zend_Controller_Action
$hPos = $hPos === FALSE ? 0 : $hPos+1; $hPos = $hPos === FALSE ? 0 : $hPos+1;
$mValue = trim(substr($data["add_show_duration"], $hPos, -1 )); $mValue = trim(substr($data["add_show_duration"], $hPos, -1 ));
} }
$data["add_show_duration"] = $hValue.":".$mValue; $data["add_show_duration"] = $hValue.":".$mValue;
if(!$isSaas){ if(!$isSaas){
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
$formRecord->removeDecorator('DtDdWrapper'); $formRecord->removeDecorator('DtDdWrapper');
$formAbsoluteRebroadcast->removeDecorator('DtDdWrapper'); $formAbsoluteRebroadcast->removeDecorator('DtDdWrapper');
$formRebroadcast->removeDecorator('DtDdWrapper'); $formRebroadcast->removeDecorator('DtDdWrapper');
//If show is a new show (not updated), then get //If show is a new show (not updated), then get
//isRecorded from POST data. Otherwise get it from //isRecorded from POST data. Otherwise get it from
//the database since the user is not allowed to //the database since the user is not allowed to
@ -648,7 +653,7 @@ class ScheduleController extends Zend_Controller_Action
$record = $formRecord->isValid($data); $record = $formRecord->isValid($data);
} }
} }
if($data["add_show_repeats"]) { if($data["add_show_repeats"]) {
$repeats = $formRepeats->isValid($data); $repeats = $formRepeats->isValid($data);
if($repeats) { if($repeats) {
@ -658,7 +663,7 @@ class ScheduleController extends Zend_Controller_Action
$formAbsoluteRebroadcast->reset(); $formAbsoluteRebroadcast->reset();
//make it valid, results don't matter anyways. //make it valid, results don't matter anyways.
$rebroadAb = 1; $rebroadAb = 1;
if ($data["add_show_rebroadcast"]) { if ($data["add_show_rebroadcast"]) {
$rebroad = $formRebroadcast->isValid($data); $rebroad = $formRebroadcast->isValid($data);
if($rebroad) { if($rebroad) {
@ -676,7 +681,7 @@ class ScheduleController extends Zend_Controller_Action
$formRebroadcast->reset(); $formRebroadcast->reset();
//make it valid, results don't matter anyways. //make it valid, results don't matter anyways.
$rebroad = 1; $rebroad = 1;
if ($data["add_show_rebroadcast"]) { if ($data["add_show_rebroadcast"]) {
$rebroadAb = $formAbsoluteRebroadcast->isValid($data); $rebroadAb = $formAbsoluteRebroadcast->isValid($data);
if($rebroadAb) { if($rebroadAb) {
@ -699,10 +704,10 @@ class ScheduleController extends Zend_Controller_Action
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
Application_Model_Show::create($data); Application_Model_Show::create($data);
} }
//send back a new form for the user. //send back a new form for the user.
Application_Model_Schedule::createNewFormSections($this->view); Application_Model_Schedule::createNewFormSections($this->view);
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} }
}else{ }else{
@ -711,14 +716,14 @@ class ScheduleController extends Zend_Controller_Action
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
Application_Model_Show::create($data); Application_Model_Show::create($data);
} }
//send back a new form for the user. //send back a new form for the user.
Application_Model_Schedule::createNewFormSections($this->view); Application_Model_Schedule::createNewFormSections($this->view);
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} }
} }
else { else {
$this->view->what = $formWhat; $this->view->what = $formWhat;
$this->view->when = $formWhen; $this->view->when = $formWhen;
$this->view->repeats = $formRepeats; $this->view->repeats = $formRepeats;
@ -730,7 +735,7 @@ class ScheduleController extends Zend_Controller_Action
$this->view->rebroadcast = $formRebroadcast; $this->view->rebroadcast = $formRebroadcast;
} }
$this->view->addNewShow = true; $this->view->addNewShow = true;
//the form still needs to be "update" since //the form still needs to be "update" since
//the validity test failed. //the validity test failed.
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1){
@ -798,7 +803,7 @@ class ScheduleController extends Zend_Controller_Action
$file_id = $this->_getParam('id', null); $file_id = $this->_getParam('id', null);
$file = Application_Model_StoredFile::Recall($file_id); $file = Application_Model_StoredFile::Recall($file_id);
$baseUrl = $this->getRequest()->getBaseUrl(); $baseUrl = $this->getRequest()->getBaseUrl();
$url = $file->getRelativeFileUrl($baseUrl).'/download/true'; $url = $file->getRelativeFileUrl($baseUrl).'/download/true';
$menu[] = array('action' => array('type' => 'gourl', 'url' => $url), $menu[] = array('action' => array('type' => 'gourl', 'url' => $url),
@ -807,7 +812,7 @@ class ScheduleController extends Zend_Controller_Action
//returns format jjmenu is looking for. //returns format jjmenu is looking for.
die(json_encode($menu)); die(json_encode($menu));
} }
/** /**
* Sets the user specific preference for which time scale to use in Calendar. * Sets the user specific preference for which time scale to use in Calendar.
* This is only being used by schedule.js at the moment. * This is only being used by schedule.js at the moment.
@ -815,7 +820,7 @@ class ScheduleController extends Zend_Controller_Action
public function setTimeScaleAction() { public function setTimeScaleAction() {
Application_Model_Preference::SetCalendarTimeScale($this->_getParam('timeScale')); Application_Model_Preference::SetCalendarTimeScale($this->_getParam('timeScale'));
} }
/** /**
* Sets the user specific preference for which time interval to use in Calendar. * Sets the user specific preference for which time interval to use in Calendar.
* This is only being used by schedule.js at the moment. * This is only being used by schedule.js at the moment.

View File

@ -17,7 +17,7 @@ class Application_Model_DateHelper
{ {
return date("Y-m-d H:i:s", $this->_dateTime); return date("Y-m-d H:i:s", $this->_dateTime);
} }
/** /**
* Get time of object construction in the format * Get time of object construction in the format
* YYYY-MM-DD HH:mm:ss * YYYY-MM-DD HH:mm:ss
@ -59,10 +59,10 @@ class Application_Model_DateHelper
/** /**
* Calculate and return the timestamp for end of day today * Calculate and return the timestamp for end of day today
* in local time. * in local time.
* *
* For example, if local time is 2PM on 2011-11-01, * For example, if local time is 2PM on 2011-11-01,
* then the function would return 2011-11-02 00:00:00 * then the function would return 2011-11-02 00:00:00
* *
* @return End of day timestamp in local timezone * @return End of day timestamp in local timezone
*/ */
function getDayEndTimestamp() { function getDayEndTimestamp() {
@ -70,7 +70,7 @@ class Application_Model_DateHelper
$dateTime->add(new DateInterval('P1D')); $dateTime->add(new DateInterval('P1D'));
return $dateTime->format('Y-m-d H:i:s'); return $dateTime->format('Y-m-d H:i:s');
} }
/** /**
* Find the epoch timestamp difference from "now" to the beginning of today. * Find the epoch timestamp difference from "now" to the beginning of today.
*/ */
@ -98,7 +98,7 @@ class Application_Model_DateHelper
* Returns the offset in seconds, between local and UTC timezones. * Returns the offset in seconds, between local and UTC timezones.
* E.g., if local timezone is -4, this function * E.g., if local timezone is -4, this function
* returns -14400. * returns -14400.
* *
* @return type offset in int, between local and UTC timezones * @return type offset in int, between local and UTC timezones
*/ */
function getLocalTimeZoneOffset() { function getLocalTimeZoneOffset() {
@ -106,31 +106,31 @@ class Application_Model_DateHelper
$timezone = new DateTimeZone(date_default_timezone_get()); $timezone = new DateTimeZone(date_default_timezone_get());
return $timezone->getOffset($dateTime); return $timezone->getOffset($dateTime);
} }
/** /**
* Returns the offset hour in int, between local and UTC timezones. * Returns the offset hour in int, between local and UTC timezones.
* E.g., if local timezone is -4:30, this function * E.g., if local timezone is -4:30, this function
* returns -4. * returns -4.
* *
* @return type offset hour in int, between local and UTC timezones * @return type offset hour in int, between local and UTC timezones
*/ */
function getLocalOffsetHour() { function getLocalOffsetHour() {
$offset = $this->getLocalTimeZoneOffset(); $offset = $this->getLocalTimeZoneOffset();
return (int)($offset / 3600); return (int)($offset / 3600);
} }
/** /**
* Returns the offset minute in int, between local and UTC timezones. * Returns the offset minute in int, between local and UTC timezones.
* E.g., if local timezone is -4:30, this function * E.g., if local timezone is -4:30, this function
* returns -30. * returns -30.
* *
* @return type offset minute in int, between local and UTC timezones * @return type offset minute in int, between local and UTC timezones
*/ */
function getLocalOffsetMinute() { function getLocalOffsetMinute() {
$offset = $this->getLocalTimeZoneOffset(); $offset = $this->getLocalTimeZoneOffset();
return (int)(($offset % 3600) / 60); return (int)(($offset % 3600) / 60);
} }
public static function TimeDiff($time1, $time2) public static function TimeDiff($time1, $time2)
{ {
return strtotime($time2) - strtotime($time1); return strtotime($time2) - strtotime($time1);
@ -193,11 +193,11 @@ class Application_Model_DateHelper
$explode = explode(" ", $p_dateTime); $explode = explode(" ", $p_dateTime);
return $explode[1]; return $explode[1];
} }
/* Given a track length in the format HH:MM:SS.mm, we want to /* Given a track length in the format HH:MM:SS.mm, we want to
* convert this to seconds. This is useful for Liquidsoap which * convert this to seconds. This is useful for Liquidsoap which
* likes input parameters give in seconds. * likes input parameters give in seconds.
* For example, 00:06:31.444, should be converted to 391.444 seconds * For example, 00:06:31.444, should be converted to 391.444 seconds
* @param int $p_time * @param int $p_time
* The time interval in format HH:MM:SS.mm we wish to * The time interval in format HH:MM:SS.mm we wish to
* convert to seconds. * convert to seconds.
@ -205,46 +205,51 @@ class Application_Model_DateHelper
* The input parameter converted to seconds. * The input parameter converted to seconds.
*/ */
public static function calculateLengthInSeconds($p_time){ public static function calculateLengthInSeconds($p_time){
if (2 !== substr_count($p_time, ":")){ if (2 !== substr_count($p_time, ":")){
return FALSE; return FALSE;
} }
if (1 === substr_count($p_time, ".")){ if (1 === substr_count($p_time, ".")){
list($hhmmss, $ms) = explode(".", $p_time); list($hhmmss, $ms) = explode(".", $p_time);
} else { } else {
$hhmmss = $p_time; $hhmmss = $p_time;
$ms = 0; $ms = 0;
} }
list($hours, $minutes, $seconds) = explode(":", $hhmmss); list($hours, $minutes, $seconds) = explode(":", $hhmmss);
$totalSeconds = $hours*3600 + $minutes*60 + $seconds + $ms/1000; $totalSeconds = $hours*3600 + $minutes*60 + $seconds + $ms/1000;
return $totalSeconds; return $totalSeconds;
} }
public static function ConvertToUtcDateTime($p_dateString, $timezone){ public static function ConvertToUtcDateTime($p_dateString, $timezone=null){
$dateTime = new DateTime($p_dateString, new DateTimeZone($timezone)); if (isset($timezone)) {
$dateTime = new DateTime($p_dateString, new DateTimeZone($timezone));
}
else {
$dateTime = new DateTime($p_dateString, new DateTimeZone(date_default_timezone_get()));
}
$dateTime->setTimezone(new DateTimeZone("UTC")); $dateTime->setTimezone(new DateTimeZone("UTC"));
return $dateTime; return $dateTime;
} }
public static function ConvertToSpecificTimezoneDateTime($p_dateString, $timezone){ public static function ConvertToSpecificTimezoneDateTime($p_dateString, $timezone){
$dateTime = new DateTime($p_dateString, new DateTimeZone("UTC")); $dateTime = new DateTime($p_dateString, new DateTimeZone("UTC"));
$dateTime->setTimezone(new DateTimeZone($timezone)); $dateTime->setTimezone(new DateTimeZone($timezone));
return $dateTime; return $dateTime;
} }
public static function ConvertToLocalDateTime($p_dateString){ public static function ConvertToLocalDateTime($p_dateString){
$dateTime = new DateTime($p_dateString, new DateTimeZone("UTC")); $dateTime = new DateTime($p_dateString, new DateTimeZone("UTC"));
$dateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $dateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
return $dateTime; return $dateTime;
} }
public static function ConvertToLocalDateTimeString($p_dateString, $format="Y-m-d H:i:s"){ public static function ConvertToLocalDateTimeString($p_dateString, $format="Y-m-d H:i:s"){
$dateTime = new DateTime($p_dateString, new DateTimeZone("UTC")); $dateTime = new DateTime($p_dateString, new DateTimeZone("UTC"));
$dateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $dateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));

View File

@ -281,7 +281,6 @@ class Application_Model_MusicDir {
} }
public static function removeWatchedDir($p_dir){ public static function removeWatchedDir($p_dir){
$real_path = realpath($p_dir)."/"; $real_path = realpath($p_dir)."/";
if($real_path != "/"){ if($real_path != "/"){
$p_dir = $real_path; $p_dir = $real_path;

View File

@ -119,17 +119,17 @@ class Application_Model_Show {
WHERE starts >= '{$day_timestamp}' AND show_id = {$this->_showId}"; WHERE starts >= '{$day_timestamp}' AND show_id = {$this->_showId}";
$CC_DBC->query($sql); $CC_DBC->query($sql);
// check if we can safely delete the show // check if we can safely delete the show
$showInstancesRow = CcShowInstancesQuery::create() $showInstancesRow = CcShowInstancesQuery::create()
->filterByDbShowId($this->_showId) ->filterByDbShowId($this->_showId)
->findOne(); ->findOne();
if(is_null($showInstancesRow)){ if(is_null($showInstancesRow)){
$sql = "DELETE FROM cc_show WHERE id = {$this->_showId}"; $sql = "DELETE FROM cc_show WHERE id = {$this->_showId}";
$CC_DBC->query($sql); $CC_DBC->query($sql);
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} }
@ -137,10 +137,10 @@ class Application_Model_Show {
* This function is called when a repeating show is edited and the * This function is called when a repeating show is edited and the
* days that is repeats on have changed. More specifically, a day * days that is repeats on have changed. More specifically, a day
* that the show originally repeated on has been "unchecked". * that the show originally repeated on has been "unchecked".
* *
* Removes Show Instances that occur on days of the week specified * Removes Show Instances that occur on days of the week specified
* by input array. For example, if array contains one value of "0", * by input array. For example, if array contains one value of "0",
* (0 = Sunday, 1=Monday) then all show instances that occur on * (0 = Sunday, 1=Monday) then all show instances that occur on
* Sunday are removed. * Sunday are removed.
* *
* @param array p_uncheckedDays * @param array p_uncheckedDays
@ -385,8 +385,8 @@ class Application_Model_Show {
/** /**
* Deletes all show instances of current show before a * Deletes all show instances of current show before a
* certain date. * certain date.
* *
* This function is used in the case where a repeating show is being * This function is used in the case where a repeating show is being
* edited and the start date of the first show has been changed more * edited and the start date of the first show has been changed more
* into the future. In this case, delete any show instances that * into the future. In this case, delete any show instances that
@ -454,11 +454,11 @@ class Application_Model_Show {
return $startTime; return $startTime;
} }
} }
/** /**
* Get the end date of the current show. * Get the end date of the current show.
* Note that this is not the end date of repeated show * Note that this is not the end date of repeated show
* *
* @return string * @return string
* The end date in the format YYYY-MM-DD * The end date in the format YYYY-MM-DD
*/ */
@ -466,12 +466,12 @@ class Application_Model_Show {
$startDate = $this->getStartDate(); $startDate = $this->getStartDate();
$startTime = $this->getStartTime(); $startTime = $this->getStartTime();
$duration = $this->getDuration(); $duration = $this->getDuration();
$startDateTime = new DateTime($startDate.' '.$startTime); $startDateTime = new DateTime($startDate.' '.$startTime);
$duration = explode(":", $duration); $duration = explode(":", $duration);
$endDate = $startDateTime->add(new DateInterval('PT'.$duration[0].'H'.$duration[1].'M')); $endDate = $startDateTime->add(new DateInterval('PT'.$duration[0].'H'.$duration[1].'M'));
return $endDate->format('Y-m-d'); return $endDate->format('Y-m-d');
} }
@ -485,12 +485,12 @@ class Application_Model_Show {
$startDate = $this->getStartDate(); $startDate = $this->getStartDate();
$startTime = $this->getStartTime(); $startTime = $this->getStartTime();
$duration = $this->getDuration(); $duration = $this->getDuration();
$startDateTime = new DateTime($startDate.' '.$startTime); $startDateTime = new DateTime($startDate.' '.$startTime);
$duration = explode(":", $duration); $duration = explode(":", $duration);
$endDate = $startDateTime->add(new DateInterval('PT'.$duration[0].'H'.$duration[1].'M')); $endDate = $startDateTime->add(new DateInterval('PT'.$duration[0].'H'.$duration[1].'M'));
return $endDate->format('H:i:s'); return $endDate->format('H:i:s');
} }
@ -511,7 +511,7 @@ class Application_Model_Show {
* Get the ID's of future instance of the current show. * Get the ID's of future instance of the current show.
* *
* @return array * @return array
* A simple array containing all ID's of show instance * A simple array containing all ID's of show instance
* scheduled in the future. * scheduled in the future.
*/ */
public function getAllFutureInstanceIds(){ public function getAllFutureInstanceIds(){
@ -535,11 +535,11 @@ class Application_Model_Show {
} }
/* Called when a show's duration is changed (edited). /* Called when a show's duration is changed (edited).
* *
* @param array $p_data * @param array $p_data
* array containing the POST data about the show from the * array containing the POST data about the show from the
* browser. * browser.
* *
*/ */
private function updateDurationTime($p_data){ private function updateDurationTime($p_data){
//need to update cc_show_instances, cc_show_days //need to update cc_show_instances, cc_show_days
@ -640,7 +640,7 @@ class Application_Model_Show {
public function getInstanceOnDate($p_dateTime){ public function getInstanceOnDate($p_dateTime){
global $CC_DBC; global $CC_DBC;
$timestamp = $p_dateTime->format("Y-m-d H:i:s"); $timestamp = $p_dateTime->format("Y-m-d H:i:s");
$showId = $this->getId(); $showId = $this->getId();
$sql = "SELECT id FROM cc_show_instances" $sql = "SELECT id FROM cc_show_instances"
." WHERE date(starts) = date(TIMESTAMP '$timestamp') " ." WHERE date(starts) = date(TIMESTAMP '$timestamp') "
@ -836,7 +836,7 @@ class Application_Model_Show {
$daysAdd = 6 - $startDow + 1 + $day; $daysAdd = 6 - $startDow + 1 + $day;
else else
$daysAdd = $day - $startDow; $daysAdd = $day - $startDow;
$startDateTimeClone->add(new DateInterval("P".$daysAdd."D")); $startDateTimeClone->add(new DateInterval("P".$daysAdd."D"));
} }
if (is_null($endDate) || $startDateTimeClone->getTimestamp() <= $endDateTime->getTimestamp()) { if (is_null($endDate) || $startDateTimeClone->getTimestamp() <= $endDateTime->getTimestamp()) {
@ -905,12 +905,12 @@ class Application_Model_Show {
$showHost->save(); $showHost->save();
} }
} }
Application_Model_Show::populateShowUntil($showId); Application_Model_Show::populateShowUntil($showId);
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
return $showId; return $showId;
} }
/** /**
* Generate repeating show instances for a single show up to the given date. * Generate repeating show instances for a single show up to the given date.
* If no date is given, use the one in the user's preferences, which is stored * If no date is given, use the one in the user's preferences, which is stored
@ -934,7 +934,7 @@ class Application_Model_Show {
$p_dateTime = $date; $p_dateTime = $date;
} }
} }
$sql = "SELECT * FROM cc_show_days WHERE show_id = $p_showId"; $sql = "SELECT * FROM cc_show_days WHERE show_id = $p_showId";
$res = $CC_DBC->GetAll($sql); $res = $CC_DBC->GetAll($sql);
@ -942,7 +942,7 @@ class Application_Model_Show {
Application_Model_Show::populateShow($showRow, $p_dateTime); Application_Model_Show::populateShow($showRow, $p_dateTime);
} }
} }
/** /**
* We are going to use cc_show_days as a template, to generate Show Instances. This function * We are going to use cc_show_days as a template, to generate Show Instances. This function
* is basically a dispatcher that looks at the show template, and sends it to the correct function * is basically a dispatcher that looks at the show template, and sends it to the correct function
@ -953,8 +953,8 @@ class Application_Model_Show {
* A row from cc_show_days table * A row from cc_show_days table
* @param DateTime $p_dateTime * @param DateTime $p_dateTime
* DateTime object in UTC time. * DateTime object in UTC time.
*/ */
private static function populateShow($p_showRow, $p_dateTime) { private static function populateShow($p_showRow, $p_dateTime) {
if($p_showRow["repeat_type"] == -1) { if($p_showRow["repeat_type"] == -1) {
Application_Model_Show::populateNonRepeatingShow($p_showRow, $p_dateTime); Application_Model_Show::populateNonRepeatingShow($p_showRow, $p_dateTime);
} }
@ -969,7 +969,7 @@ class Application_Model_Show {
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} }
/** /**
* Creates a single show instance. If the show is recorded, it may have multiple * Creates a single show instance. If the show is recorded, it may have multiple
* rebroadcast dates, and so this function will create those as well. * rebroadcast dates, and so this function will create those as well.
@ -978,11 +978,11 @@ class Application_Model_Show {
* A row from cc_show_days table * A row from cc_show_days table
* @param DateTime $p_dateTime * @param DateTime $p_dateTime
* DateTime object in UTC time. * DateTime object in UTC time.
*/ */
private static function populateNonRepeatingShow($p_showRow, $p_dateTime) private static function populateNonRepeatingShow($p_showRow, $p_dateTime)
{ {
global $CC_DBC; global $CC_DBC;
$show_id = $p_showRow["show_id"]; $show_id = $p_showRow["show_id"];
$first_show = $p_showRow["first_show"]; //non-UTC $first_show = $p_showRow["first_show"]; //non-UTC
$start_time = $p_showRow["start_time"]; //non-UTC $start_time = $p_showRow["start_time"]; //non-UTC
@ -990,7 +990,7 @@ class Application_Model_Show {
$day = $p_showRow["day"]; $day = $p_showRow["day"];
$record = $p_showRow["record"]; $record = $p_showRow["record"];
$timezone = $p_showRow["timezone"]; $timezone = $p_showRow["timezone"];
$start = $first_show." ".$start_time; $start = $first_show." ".$start_time;
$utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone); $utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone);
@ -1012,7 +1012,7 @@ class Application_Model_Show {
$newInstance = true; $newInstance = true;
} }
if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp){ if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp){
$ccShowInstance->setDbShowId($show_id); $ccShowInstance->setDbShowId($show_id);
$ccShowInstance->setDbStarts($utcStartDateTime); $ccShowInstance->setDbStarts($utcStartDateTime);
$ccShowInstance->setDbEnds($utcEndDateTime); $ccShowInstance->setDbEnds($utcEndDateTime);
@ -1029,27 +1029,29 @@ class Application_Model_Show {
$sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}"; $sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}";
$rebroadcasts = $CC_DBC->GetAll($sql); $rebroadcasts = $CC_DBC->GetAll($sql);
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $utcStartDateTime, $duration); Logging::log('$start time of non repeating record '.$start);
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone);
} }
} }
/** /**
* Creates a 1 or more than 1 show instances (user has stated this show repeats). If the show * Creates a 1 or more than 1 show instances (user has stated this show repeats). If the show
* is recorded, it may have multiple rebroadcast dates, and so this function will create * is recorded, it may have multiple rebroadcast dates, and so this function will create
* those as well. * those as well.
* *
* @param array $p_showRow * @param array $p_showRow
* A row from cc_show_days table * A row from cc_show_days table
* @param DateTime $p_dateTime * @param DateTime $p_dateTime
* DateTime object in UTC time. * DateTime object in UTC time. "shows_populated_until" date YY-mm-dd in cc_pref
* @param string $p_interval * @param string $p_interval
* Period of time between repeating shows * Period of time between repeating shows (in php DateInterval notation 'P7D')
*/ */
private static function populateRepeatingShow($p_showRow, $p_dateTime, $p_interval) private static function populateRepeatingShow($p_showRow, $p_dateTime, $p_interval)
{ {
global $CC_DBC; global $CC_DBC;
$show_id = $p_showRow["show_id"]; $show_id = $p_showRow["show_id"];
$next_pop_date = $p_showRow["next_pop_date"]; $next_pop_date = $p_showRow["next_pop_date"];
$first_show = $p_showRow["first_show"]; //non-UTC $first_show = $p_showRow["first_show"]; //non-UTC
@ -1060,26 +1062,27 @@ class Application_Model_Show {
$record = $p_showRow["record"]; $record = $p_showRow["record"];
$timezone = $p_showRow["timezone"]; $timezone = $p_showRow["timezone"];
$date = new Application_Model_DateHelper();
$currentUtcTimestamp = $date->getUtcTimestamp();
if(isset($next_pop_date)) { if(isset($next_pop_date)) {
$start = $next_pop_date." ".$start_time; $start = $next_pop_date." ".$start_time;
} else { } else {
$start = $first_show." ".$start_time; $start = $first_show." ".$start_time;
} }
$utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone); $utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone);
//convert $last_show into a UTC DateTime object, or null if there is no last show.
$utcLastShowDateTime = $last_show ? Application_Model_DateHelper::ConvertToUtcDateTime($last_show, $timezone) : null;
$sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}"; $sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}";
$rebroadcasts = $CC_DBC->GetAll($sql); $rebroadcasts = $CC_DBC->GetAll($sql);
$show = new Application_Model_Show($show_id); $show = new Application_Model_Show($show_id);
$date = new Application_Model_DateHelper(); while($utcStartDateTime->getTimestamp() <= $p_dateTime->getTimestamp()
$currentUtcTimestamp = $date->getUtcTimestamp(); && (is_null($utcLastShowDateTime) || $utcStartDateTime->getTimestamp() < $utcLastShowDateTime->getTimestamp())){
while($utcStartDateTime->getTimestamp()
<= $p_dateTime->getTimestamp() &&
($utcStartDateTime->getTimestamp() < strtotime($last_show) || is_null($last_show))) {
$utcStart = $utcStartDateTime->format("Y-m-d H:i:s"); $utcStart = $utcStartDateTime->format("Y-m-d H:i:s");
$sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'"; $sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'";
$utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC")); $utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC"));
@ -1113,37 +1116,63 @@ class Application_Model_Show {
$showInstance->correctScheduleStartTimes(); $showInstance->correctScheduleStartTimes();
} }
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $utcStartDateTime, $duration); self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone);
$dt = new DateTime($start, new DateTimeZone($timezone)); $dt = new DateTime($start, new DateTimeZone($timezone));
$dt->add(new DateInterval($p_interval)); $dt->add(new DateInterval($p_interval));
$start = $dt->format("Y-m-d H:i:s"); $start = $dt->format("Y-m-d H:i:s");
$dt->setTimezone(new DateTimeZone('UTC')); $dt->setTimezone(new DateTimeZone('UTC'));
$utcStartDateTime = $dt; $utcStartDateTime = $dt;
} }
Application_Model_Show::setNextPop($start, $show_id, $day); Application_Model_Show::setNextPop($start, $show_id, $day);
} }
private static function createRebroadcastInstances($p_rebroadcasts, $p_currentUtcTimestamp, $p_showId, $p_showInstanceId, $p_utcStartDateTime, $p_duration){
global $CC_DBC;
foreach($p_rebroadcasts as $rebroadcast) {
$timeinfo = $p_utcStartDateTime->format("Y-m-d H:i:s");
$sql = "SELECT timestamp '{$timeinfo}' + interval '{$rebroadcast["day_offset"]}' + interval '{$rebroadcast["start_time"]}'"; /* Create rebroadcast instances for a created show marked for recording
*
* @param $p_rebroadcasts rows gotten from the db table cc_show_rebroadcasts, tells airtime when to schedule the rebroadcasts.
* @param $p_currentUtcTimestamp a timestring in format "Y-m-d H:i:s", current UTC time.
* @param $p_showId int of the show it belongs to (from cc_show)
* @param $p_showInstanceId the instance id of the created recorded show instance
* (from cc_show_instances), used to associate rebroadcasts to this show.
* @param $p_startTime a timestring in format "Y-m-d H:i:s" in the timezone, not UTC of the rebroadcasts' parent recorded show.
* @param $p_duration duration of the show in format 1:0
* @param $p_timezone string of user's timezone "Europe/Prague"
*
*/
private static function createRebroadcastInstances($p_rebroadcasts, $p_currentUtcTimestamp, $p_showId, $p_showInstanceId, $p_startTime, $p_duration, $p_timezone=null){
global $CC_DBC;
Logging::log('Count of rebroadcasts '. count($p_rebroadcasts));
foreach($p_rebroadcasts as $rebroadcast) {
//use only the date part of the show start time stamp for the offsets to work properly.
$sql = "SELECT date '{$p_startTime}' + interval '{$rebroadcast["day_offset"]}' + interval '{$rebroadcast["start_time"]}'";
$rebroadcast_start_time = $CC_DBC->GetOne($sql); $rebroadcast_start_time = $CC_DBC->GetOne($sql);
Logging::log('rebroadcast start '.$rebroadcast_start_time);
$sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$p_duration}'"; $sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$p_duration}'";
$rebroadcast_end_time = $CC_DBC->GetOne($sql); $rebroadcast_end_time = $CC_DBC->GetOne($sql);
Logging::log('rebroadcast end '.$rebroadcast_end_time);
if ($rebroadcast_start_time > $p_currentUtcTimestamp){
//convert to UTC, after we have used the defined offsets to calculate rebroadcasts.
$utc_rebroadcast_start_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_start_time, $p_timezone);
$utc_rebroadcast_end_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_end_time, $p_timezone);
Logging::log('UTC rebroadcast start '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s"));
Logging::log('UTC rebroadcast end '.$utc_rebroadcast_end_time->format("Y-m-d H:i:s"));
Logging::log('Current UTC timestamp '.$p_currentUtcTimestamp);
if ($utc_rebroadcast_start_time->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){
Logging::log('Creating rebroadcast show starting at UTC '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s"));
$newRebroadcastInstance = new CcShowInstances(); $newRebroadcastInstance = new CcShowInstances();
$newRebroadcastInstance->setDbShowId($p_showId); $newRebroadcastInstance->setDbShowId($p_showId);
$newRebroadcastInstance->setDbStarts($rebroadcast_start_time); $newRebroadcastInstance->setDbStarts($utc_rebroadcast_start_time->format("Y-m-d H:i:s"));
$newRebroadcastInstance->setDbEnds($rebroadcast_end_time); $newRebroadcastInstance->setDbEnds($utc_rebroadcast_end_time->format("Y-m-d H:i:s"));
$newRebroadcastInstance->setDbRecord(0); $newRebroadcastInstance->setDbRecord(0);
$newRebroadcastInstance->setDbRebroadcast(1); $newRebroadcastInstance->setDbRebroadcast(1);
$newRebroadcastInstance->setDbOriginalShow($p_showInstanceId); $newRebroadcastInstance->setDbOriginalShow($p_showInstanceId);
@ -1167,6 +1196,7 @@ class Application_Model_Show {
{ {
global $CC_DBC; global $CC_DBC;
//UTC DateTime object
$showsPopUntil = Application_Model_Preference::GetShowsPopulatedUntil(); $showsPopUntil = Application_Model_Preference::GetShowsPopulatedUntil();
//if application is requesting shows past our previous populated until date, generate shows up until this point. //if application is requesting shows past our previous populated until date, generate shows up until this point.
@ -1176,7 +1206,7 @@ class Application_Model_Show {
} }
$sql = "SELECT starts, ends, record, rebroadcast, instance_id, show_id, name, description, $sql = "SELECT starts, ends, record, rebroadcast, instance_id, show_id, name, description,
color, background_color, file_id, cc_show_instances.id AS instance_id color, background_color, file_id, deleted_instance, cc_show_instances.id AS instance_id
FROM cc_show_instances FROM cc_show_instances
LEFT JOIN cc_show ON cc_show.id = cc_show_instances.show_id"; LEFT JOIN cc_show ON cc_show.id = cc_show_instances.show_id";
@ -1233,7 +1263,7 @@ class Application_Model_Show {
public static function populateAllShowsInRange($p_startTimestamp, $p_endTimestamp) public static function populateAllShowsInRange($p_startTimestamp, $p_endTimestamp)
{ {
global $CC_DBC; global $CC_DBC;
$endTimeString = $p_endTimestamp->format("Y-m-d H:i:s"); $endTimeString = $p_endTimestamp->format("Y-m-d H:i:s");
if (!is_null($p_startTimestamp)) { if (!is_null($p_startTimestamp)) {
$startTimeString = $p_startTimestamp->format("Y-m-d H:i:s"); $startTimeString = $p_startTimestamp->format("Y-m-d H:i:s");
@ -1272,23 +1302,26 @@ class Application_Model_Show {
$days = $interval->format('%a'); $days = $interval->format('%a');
$shows = Application_Model_Show::getShows($start, $end); $shows = Application_Model_Show::getShows($start, $end);
$today_timestamp = date("Y-m-d H:i:s"); $today_timestamp = Application_Model_DateHelper::ConvertToUtcDateTime(date("Y-m-d H:i:s"))->format("Y-m-d H:i:s");
foreach ($shows as $show) { foreach ($shows as $show) {
$options = array();
//only bother calculating percent for week or day view. if ($show["deleted_instance"] != "t"){
if(intval($days) <= 7) { $options = array();
$show_instance = new Application_Model_ShowInstance($show["instance_id"]);
$options["percent"] = $show_instance->getPercentScheduled();
}
if ($editable && (strtotime($today_timestamp) < strtotime($show["starts"]))) { //only bother calculating percent for week or day view.
$options["editable"] = true; if(intval($days) <= 7) {
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options); $show_instance = new Application_Model_ShowInstance($show["instance_id"]);
} $options["percent"] = $show_instance->getPercentScheduled();
else { }
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options);
if ($editable && (strtotime($today_timestamp) < strtotime($show["starts"]))) {
$options["editable"] = true;
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options);
} else {
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options);
}
} }
} }
@ -1302,10 +1335,10 @@ class Application_Model_Show {
if($show["rebroadcast"]) { if($show["rebroadcast"]) {
$event["disableResizing"] = true; $event["disableResizing"] = true;
} }
$startDateTime = new DateTime($show["starts"], new DateTimeZone("UTC")); $startDateTime = new DateTime($show["starts"], new DateTimeZone("UTC"));
$startDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $startDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
$endDateTime = new DateTime($show["ends"], new DateTimeZone("UTC")); $endDateTime = new DateTime($show["ends"], new DateTimeZone("UTC"));
$endDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $endDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
@ -1317,8 +1350,9 @@ class Application_Model_Show {
$event["description"] = $show["description"]; $event["description"] = $show["description"];
$event["showId"] = $show["show_id"]; $event["showId"] = $show["show_id"];
$event["record"] = intval($show["record"]); $event["record"] = intval($show["record"]);
$event["deleted_instance"] = $show["deleted_instance"];
$event["rebroadcast"] = intval($show["rebroadcast"]); $event["rebroadcast"] = intval($show["rebroadcast"]);
// get soundcloud_id // get soundcloud_id
if(!is_null($show["file_id"])){ if(!is_null($show["file_id"])){
$file = Application_Model_StoredFile::Recall($show["file_id"]); $file = Application_Model_StoredFile::Recall($show["file_id"]);
@ -1342,28 +1376,28 @@ class Application_Model_Show {
return $event; return $event;
} }
public function setShowFirstShow($s_date){ public function setShowFirstShow($s_date){
$showDay = CcShowDaysQuery::create() $showDay = CcShowDaysQuery::create()
->filterByDbShowId($this->_showId) ->filterByDbShowId($this->_showId)
->findOne(); ->findOne();
$showDay->setDbFirstShow($s_date) $showDay->setDbFirstShow($s_date)
->save(); ->save();
} }
public function setShowLastShow($e_date){ public function setShowLastShow($e_date){
$showDay = CcShowDaysQuery::create() $showDay = CcShowDaysQuery::create()
->filterByDbShowId($this->_showId) ->filterByDbShowId($this->_showId)
->findOne(); ->findOne();
$showDay->setDbLastShow($e_date) $showDay->setDbLastShow($e_date)
->save(); ->save();
} }
/** /**
* Given local current time $timeNow, returns the show being played right now. * Given local current time $timeNow, returns the show being played right now.
* *
* @param type $timeNow local current time * @param type $timeNow local current time
* @return type show being played right now * @return type show being played right now
*/ */
@ -1371,10 +1405,10 @@ class Application_Model_Show {
{ {
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
// Need this in the query below, so that we are NOT comparing UTC // Need this in the query below, so that we are NOT comparing UTC
// timestamps si.starts/si.ends with local timestamps $timeNow // timestamps si.starts/si.ends with local timestamps $timeNow
$timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true); $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true);
$sql = "SELECT si.starts as start_timestamp, si.ends as end_timestamp, s.name, s.id, si.id as instance_id, si.record, s.url" $sql = "SELECT si.starts as start_timestamp, si.ends as end_timestamp, s.name, s.id, si.id as instance_id, si.record, s.url"
." FROM $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s" ." FROM $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s"
." WHERE si.show_id = s.id" ." WHERE si.show_id = s.id"
@ -1384,15 +1418,15 @@ class Application_Model_Show {
// Convert back to local timezone // Convert back to local timezone
$rows = $CC_DBC->GetAll($sql); $rows = $CC_DBC->GetAll($sql);
Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp"));
return $rows; return $rows;
} }
/** /**
* Given local current time $timeNow, returns the next $limit number of * Given local current time $timeNow, returns the next $limit number of
* shows within 2 days if $timeEnd is not given; Otherwise, returns the * shows within 2 days if $timeEnd is not given; Otherwise, returns the
* next $limit number of shows from $timeNow to $timeEnd, both in local time. * next $limit number of shows from $timeNow to $timeEnd, both in local time.
* *
* @param type $timeNow local current time * @param type $timeNow local current time
* @param type $limit number of shows to return * @param type $limit number of shows to return
* @param type $timeEnd optional: interval end time * @param type $timeEnd optional: interval end time
@ -1401,11 +1435,11 @@ class Application_Model_Show {
public static function GetNextShows($timeNow, $limit, $timeEnd = "") public static function GetNextShows($timeNow, $limit, $timeEnd = "")
{ {
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
// Need this in the query below, so that we are NOT comparing UTC // Need this in the query below, so that we are NOT comparing UTC
// timestamps si.starts with local timestamps $timeNow // timestamps si.starts with local timestamps $timeNow
$timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true); $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true);
// defaults to retrieving shows from next 2 days if no end time has // defaults to retrieving shows from next 2 days if no end time has
// been specified // been specified
if($timeEnd == "") { if($timeEnd == "") {
@ -1413,7 +1447,7 @@ class Application_Model_Show {
} else { } else {
$timeEnd = "'$timeEnd' + $timezoneInterval"; $timeEnd = "'$timeEnd' + $timezoneInterval";
} }
$sql = "SELECT *, si.starts as start_timestamp, si.ends as end_timestamp FROM " $sql = "SELECT *, si.starts as start_timestamp, si.ends as end_timestamp FROM "
." $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s" ." $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s"
." WHERE si.show_id = s.id" ." WHERE si.show_id = s.id"
@ -1425,14 +1459,14 @@ class Application_Model_Show {
// Convert timestamps to local timezone // Convert timestamps to local timezone
$rows = $CC_DBC->GetAll($sql); $rows = $CC_DBC->GetAll($sql);
Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp"));
return $rows; return $rows;
} }
/** /**
* Given a day of the week variable $day, based in local time, returns the * Given a day of the week variable $day, based in local time, returns the
* shows being played on this day of the week we're in right now. * shows being played on this day of the week we're in right now.
* *
* @param type $day day of the week * @param type $day day of the week
* @return type shows being played on this day * @return type shows being played on this day
*/ */
@ -1442,14 +1476,14 @@ class Application_Model_Show {
//SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); //SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
//Result: 5 //Result: 5
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
// Need this in the query below, so that we are NOT extracting DOW and WEEK // Need this in the query below, so that we are NOT extracting DOW and WEEK
// information from UTC timestamps si.starts, and comparing with a local // information from UTC timestamps si.starts, and comparing with a local
// timezone based variable $day and localtimestamp // timezone based variable $day and localtimestamp
$timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(); $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString();
$sql = "SELECT" $sql = "SELECT"
." si.starts as show_starts," ." si.starts as show_starts,"
." si.ends as show_ends," ." si.ends as show_ends,"
@ -1461,69 +1495,69 @@ class Application_Model_Show {
." WHERE EXTRACT(DOW FROM si.starts + $timezoneInterval) = $day" ." WHERE EXTRACT(DOW FROM si.starts + $timezoneInterval) = $day"
." AND EXTRACT(WEEK FROM si.starts + $timezoneInterval) = EXTRACT(WEEK FROM localtimestamp)" ." AND EXTRACT(WEEK FROM si.starts + $timezoneInterval) = EXTRACT(WEEK FROM localtimestamp)"
." ORDER BY si.starts"; ." ORDER BY si.starts";
// Convert result timestamps to local timezone // Convert result timestamps to local timezone
$rows = $CC_DBC->GetAll($sql); $rows = $CC_DBC->GetAll($sql);
Application_Model_Show::ConvertToLocalTimeZone($rows, array("show_starts", "show_ends")); Application_Model_Show::ConvertToLocalTimeZone($rows, array("show_starts", "show_ends"));
return $rows; return $rows;
} }
/** /**
* Convert the columns given in the array $columnsToConvert in the * Convert the columns given in the array $columnsToConvert in the
* database result $rows to local timezone. * database result $rows to local timezone.
* *
* @param type $rows arrays of arrays containing database query result * @param type $rows arrays of arrays containing database query result
* @param type $columnsToConvert array of column names to convert * @param type $columnsToConvert array of column names to convert
*/ */
public static function ConvertToLocalTimeZone(&$rows, $columnsToConvert) { public static function ConvertToLocalTimeZone(&$rows, $columnsToConvert) {
$timezone = date_default_timezone_get(); $timezone = date_default_timezone_get();
foreach($rows as &$row) { foreach($rows as &$row) {
foreach($columnsToConvert as $column) { foreach($columnsToConvert as $column) {
$row[$column] = Application_Model_DateHelper::ConvertToLocalDateTimeString($row[$column]); $row[$column] = Application_Model_DateHelper::ConvertToLocalDateTimeString($row[$column]);
} }
} }
} }
/** /**
* Returns the timezone difference as an INTERVAL string that can be used * Returns the timezone difference as an INTERVAL string that can be used
* by SQL queries. * by SQL queries.
* *
* E.g., if local timezone is -4:30, this function returns: * E.g., if local timezone is -4:30, this function returns:
* INTERVAL '-4 hours -30 minutes' * INTERVAL '-4 hours -30 minutes'
* *
* Note that if $fromLocalToUtc is true, then it returns: * Note that if $fromLocalToUtc is true, then it returns:
* INTERVAL '4 hours 30 minutes' * INTERVAL '4 hours 30 minutes'
* *
* @param type $fromLocalToUtc true if we're converting from local to UTC * @param type $fromLocalToUtc true if we're converting from local to UTC
*/ */
public static function GetTimeZoneIntervalString($fromLocalToUtc = false) { public static function GetTimeZoneIntervalString($fromLocalToUtc = false) {
$date = new Application_Model_DateHelper; $date = new Application_Model_DateHelper;
$timezoneHour = $date->getLocalOffsetHour(); $timezoneHour = $date->getLocalOffsetHour();
$timezoneMin = $date->getLocalOffsetMinute(); $timezoneMin = $date->getLocalOffsetMinute();
// negate the hour and min if converting from local to UTC // negate the hour and min if converting from local to UTC
if($fromLocalToUtc) { if($fromLocalToUtc) {
$timezoneHour = -$timezoneHour; $timezoneHour = -$timezoneHour;
$timezoneMin = -$timezoneMin; $timezoneMin = -$timezoneMin;
} }
return "INTERVAL '$timezoneHour hours $timezoneMin minutes'"; return "INTERVAL '$timezoneHour hours $timezoneMin minutes'";
} }
public static function GetMaxLengths() { public static function GetMaxLengths() {
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
$sql = "SELECT column_name, character_maximum_length FROM information_schema.columns" $sql = "SELECT column_name, character_maximum_length FROM information_schema.columns"
." WHERE table_name = 'cc_show' AND character_maximum_length > 0"; ." WHERE table_name = 'cc_show' AND character_maximum_length > 0";
$result = $CC_DBC->GetAll($sql); $result = $CC_DBC->GetAll($sql);
// store result into assoc array // store result into assoc array
$assocArray = array(); $assocArray = array();
foreach($result as $row) { foreach($result as $row) {
$assocArray[$row['column_name']] = $row['character_maximum_length']; $assocArray[$row['column_name']] = $row['character_maximum_length'];
} }
return $assocArray; return $assocArray;
} }
} }

View File

@ -24,7 +24,7 @@ class Application_Model_ShowInstance {
{ {
return $this->_instanceId; return $this->_instanceId;
} }
public function getShow(){ public function getShow(){
return new Application_Model_Show($this->getShowId()); return new Application_Model_Show($this->getShowId());
} }
@ -137,6 +137,11 @@ class Application_Model_ShowInstance {
$this->_showInstance->updateDbTimeFilled($con); $this->_showInstance->updateDbTimeFilled($con);
} }
public function isDeleted()
{
$this->_showInstance->getDbDeletedInstance();
}
public function correctScheduleStartTimes(){ public function correctScheduleStartTimes(){
global $CC_DBC; global $CC_DBC;
@ -169,7 +174,7 @@ class Application_Model_ShowInstance {
public function moveShow($deltaDay, $deltaMin) public function moveShow($deltaDay, $deltaMin)
{ {
global $CC_DBC; global $CC_DBC;
if ($this->getShow()->isRepeating()){ if ($this->getShow()->isRepeating()){
return "Can't drag and drop repeating shows"; return "Can't drag and drop repeating shows";
} }
@ -185,7 +190,7 @@ class Application_Model_ShowInstance {
$today_timestamp = time(); $today_timestamp = time();
$starts = $this->getShowInstanceStart(); $starts = $this->getShowInstanceStart();
$ends = $this->getShowInstanceEnd(); $ends = $this->getShowInstanceEnd();
$startsDateTime = new DateTime($starts, new DateTimeZone("UTC")); $startsDateTime = new DateTime($starts, new DateTimeZone("UTC"));
if($today_timestamp > $startsDateTime->getTimestamp()) { if($today_timestamp > $startsDateTime->getTimestamp()) {
@ -200,13 +205,13 @@ class Application_Model_ShowInstance {
$new_ends = $CC_DBC->GetOne($sql); $new_ends = $CC_DBC->GetOne($sql);
$newEndsDateTime = new DateTime($new_ends, new DateTimeZone("UTC")); $newEndsDateTime = new DateTime($new_ends, new DateTimeZone("UTC"));
if($today_timestamp > $newStartsDateTime->getTimestamp()) { if($today_timestamp > $newStartsDateTime->getTimestamp()) {
return "Can't move show into past"; return "Can't move show into past";
} }
$overlap = Application_Model_Show::getShows($newStartsDateTime, $newEndsDateTime, array($this->_instanceId)); $overlap = Application_Model_Show::getShows($newStartsDateTime, $newEndsDateTime, array($this->_instanceId));
if(count($overlap) > 0) { if(count($overlap) > 0) {
return "Should not overlap shows"; return "Should not overlap shows";
} }
@ -224,13 +229,13 @@ class Application_Model_ShowInstance {
$this->setShowStart($new_starts); $this->setShowStart($new_starts);
$this->setShowEnd($new_ends); $this->setShowEnd($new_ends);
$this->correctScheduleStartTimes(); $this->correctScheduleStartTimes();
$show = new Application_Model_Show($this->getShowId()); $show = new Application_Model_Show($this->getShowId());
if(!$show->isRepeating()){ if(!$show->isRepeating()){
$show->setShowFirstShow($new_starts); $show->setShowFirstShow($new_starts);
$show->setShowLastShow($new_ends); $show->setShowLastShow($new_ends);
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} }
@ -246,7 +251,7 @@ class Application_Model_ShowInstance {
$mins = abs($deltaMin%60); $mins = abs($deltaMin%60);
$today_timestamp = date("Y-m-d H:i:s"); $today_timestamp = Application_Model_DateHelper::ConvertToUtcDateTime(date("Y-m-d H:i:s"))->format("Y-m-d H:i:s");
$starts = $this->getShowInstanceStart(); $starts = $this->getShowInstanceStart();
$ends = $this->getShowInstanceEnd(); $ends = $this->getShowInstanceEnd();
@ -259,8 +264,11 @@ class Application_Model_ShowInstance {
//only need to check overlap if show increased in size. //only need to check overlap if show increased in size.
if(strtotime($new_ends) > strtotime($ends)) { if(strtotime($new_ends) > strtotime($ends)) {
//TODO --martin
$overlap = Application_Model_Show::getShows($ends, $new_ends); $utcStartDateTime = new DateTime($ends, new DateTimeZone("UTC"));
$utcEndDateTime = new DateTime($new_ends, new DateTimeZone("UTC"));
$overlap = Application_Model_Show::getShows($utcStartDateTime, $utcEndDateTime);
if(count($overlap) > 0) { if(count($overlap) > 0) {
return "Should not overlap shows"; return "Should not overlap shows";
@ -380,7 +388,7 @@ class Application_Model_ShowInstance {
public function deleteShow() public function deleteShow()
{ {
global $CC_DBC; global $CC_DBC;
// see if it was recording show // see if it was recording show
$recording = CcShowInstancesQuery::create() $recording = CcShowInstancesQuery::create()
->findPK($this->_instanceId) ->findPK($this->_instanceId)
@ -389,21 +397,28 @@ class Application_Model_ShowInstance {
$showId = CcShowInstancesQuery::create() $showId = CcShowInstancesQuery::create()
->findPK($this->_instanceId) ->findPK($this->_instanceId)
->getDbShowId(); ->getDbShowId();
CcShowInstancesQuery::create() CcShowInstancesQuery::create()
->findPK($this->_instanceId) ->findPK($this->_instanceId)
->delete(); ->setDbDeletedInstance(true)
->save();
// check if we can safely delete the show // check if we can safely delete the show
$showInstancesRow = CcShowInstancesQuery::create() $showInstancesRow = CcShowInstancesQuery::create()
->filterByDbShowId($showId) ->filterByDbShowId($showId)
->filterByDbDeletedInstance(false)
->findOne(); ->findOne();
/* If we didn't find any instances of the show that haven't
* been deleted, then just erase everything related to that show.
* We can just delete, the show and the foreign key-constraint should
* take care of deleting all of its instances. */
if(is_null($showInstancesRow)){ if(is_null($showInstancesRow)){
$sql = "DELETE FROM cc_show WHERE id = '$showId'"; CcShowQuery::create()
$CC_DBC->query($sql); ->filterByDbId($showId)
->delete();
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
if($recording){ if($recording){
Application_Model_RabbitMq::SendMessageToShowRecorder("cancel_recording"); Application_Model_RabbitMq::SendMessageToShowRecorder("cancel_recording");
@ -659,7 +674,7 @@ class Application_Model_ShowInstance {
return new Application_Model_ShowInstance($id); return new Application_Model_ShowInstance($id);
} }
} }
// returns number of show instances that ends later than $day // returns number of show instances that ends later than $day
public static function GetShowInstanceCount($day){ public static function GetShowInstanceCount($day){
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;

View File

@ -47,6 +47,7 @@ class CcShowInstancesTableMap extends TableMap {
$this->addForeignKey('INSTANCE_ID', 'DbOriginalShow', 'INTEGER', 'cc_show_instances', 'ID', false, null, null); $this->addForeignKey('INSTANCE_ID', 'DbOriginalShow', 'INTEGER', 'cc_show_instances', 'ID', false, null, null);
$this->addForeignKey('FILE_ID', 'DbRecordedFile', 'INTEGER', 'cc_files', 'ID', false, null, null); $this->addForeignKey('FILE_ID', 'DbRecordedFile', 'INTEGER', 'cc_files', 'ID', false, null, null);
$this->addColumn('TIME_FILLED', 'DbTimeFilled', 'TIME', false, null, null); $this->addColumn('TIME_FILLED', 'DbTimeFilled', 'TIME', false, null, null);
$this->addColumn('DELETED_INSTANCE', 'DbDeletedInstance', 'BOOLEAN', true, null, false);
// validators // validators
} // initialize() } // initialize()

View File

@ -80,6 +80,13 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
*/ */
protected $time_filled; protected $time_filled;
/**
* The value for the deleted_instance field.
* Note: this column has a database default value of: false
* @var boolean
*/
protected $deleted_instance;
/** /**
* @var CcShow * @var CcShow
*/ */
@ -129,6 +136,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
{ {
$this->record = 0; $this->record = 0;
$this->rebroadcast = 0; $this->rebroadcast = 0;
$this->deleted_instance = false;
} }
/** /**
@ -300,6 +308,16 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
} }
} }
/**
* Get the [deleted_instance] column value.
*
* @return boolean
*/
public function getDbDeletedInstance()
{
return $this->deleted_instance;
}
/** /**
* Set the value of [id] column. * Set the value of [id] column.
* *
@ -579,6 +597,26 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
return $this; return $this;
} // setDbTimeFilled() } // setDbTimeFilled()
/**
* Set the value of [deleted_instance] column.
*
* @param boolean $v new value
* @return CcShowInstances The current object (for fluent API support)
*/
public function setDbDeletedInstance($v)
{
if ($v !== null) {
$v = (boolean) $v;
}
if ($this->deleted_instance !== $v || $this->isNew()) {
$this->deleted_instance = $v;
$this->modifiedColumns[] = CcShowInstancesPeer::DELETED_INSTANCE;
}
return $this;
} // setDbDeletedInstance()
/** /**
* Indicates whether the columns in this object are only set to default values. * Indicates whether the columns in this object are only set to default values.
* *
@ -597,6 +635,10 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
return false; return false;
} }
if ($this->deleted_instance !== false) {
return false;
}
// otherwise, everything was equal, so return TRUE // otherwise, everything was equal, so return TRUE
return true; return true;
} // hasOnlyDefaultValues() } // hasOnlyDefaultValues()
@ -628,6 +670,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->instance_id = ($row[$startcol + 6] !== null) ? (int) $row[$startcol + 6] : null; $this->instance_id = ($row[$startcol + 6] !== null) ? (int) $row[$startcol + 6] : null;
$this->file_id = ($row[$startcol + 7] !== null) ? (int) $row[$startcol + 7] : null; $this->file_id = ($row[$startcol + 7] !== null) ? (int) $row[$startcol + 7] : null;
$this->time_filled = ($row[$startcol + 8] !== null) ? (string) $row[$startcol + 8] : null; $this->time_filled = ($row[$startcol + 8] !== null) ? (string) $row[$startcol + 8] : null;
$this->deleted_instance = ($row[$startcol + 9] !== null) ? (boolean) $row[$startcol + 9] : null;
$this->resetModified(); $this->resetModified();
$this->setNew(false); $this->setNew(false);
@ -636,7 +679,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->ensureConsistency(); $this->ensureConsistency();
} }
return $startcol + 9; // 9 = CcShowInstancesPeer::NUM_COLUMNS - CcShowInstancesPeer::NUM_LAZY_LOAD_COLUMNS). return $startcol + 10; // 10 = CcShowInstancesPeer::NUM_COLUMNS - CcShowInstancesPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) { } catch (Exception $e) {
throw new PropelException("Error populating CcShowInstances object", $e); throw new PropelException("Error populating CcShowInstances object", $e);
@ -1060,6 +1103,9 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
case 8: case 8:
return $this->getDbTimeFilled(); return $this->getDbTimeFilled();
break; break;
case 9:
return $this->getDbDeletedInstance();
break;
default: default:
return null; return null;
break; break;
@ -1093,6 +1139,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$keys[6] => $this->getDbOriginalShow(), $keys[6] => $this->getDbOriginalShow(),
$keys[7] => $this->getDbRecordedFile(), $keys[7] => $this->getDbRecordedFile(),
$keys[8] => $this->getDbTimeFilled(), $keys[8] => $this->getDbTimeFilled(),
$keys[9] => $this->getDbDeletedInstance(),
); );
if ($includeForeignObjects) { if ($includeForeignObjects) {
if (null !== $this->aCcShow) { if (null !== $this->aCcShow) {
@ -1162,6 +1209,9 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
case 8: case 8:
$this->setDbTimeFilled($value); $this->setDbTimeFilled($value);
break; break;
case 9:
$this->setDbDeletedInstance($value);
break;
} // switch() } // switch()
} }
@ -1195,6 +1245,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
if (array_key_exists($keys[6], $arr)) $this->setDbOriginalShow($arr[$keys[6]]); if (array_key_exists($keys[6], $arr)) $this->setDbOriginalShow($arr[$keys[6]]);
if (array_key_exists($keys[7], $arr)) $this->setDbRecordedFile($arr[$keys[7]]); if (array_key_exists($keys[7], $arr)) $this->setDbRecordedFile($arr[$keys[7]]);
if (array_key_exists($keys[8], $arr)) $this->setDbTimeFilled($arr[$keys[8]]); if (array_key_exists($keys[8], $arr)) $this->setDbTimeFilled($arr[$keys[8]]);
if (array_key_exists($keys[9], $arr)) $this->setDbDeletedInstance($arr[$keys[9]]);
} }
/** /**
@ -1215,6 +1266,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
if ($this->isColumnModified(CcShowInstancesPeer::INSTANCE_ID)) $criteria->add(CcShowInstancesPeer::INSTANCE_ID, $this->instance_id); if ($this->isColumnModified(CcShowInstancesPeer::INSTANCE_ID)) $criteria->add(CcShowInstancesPeer::INSTANCE_ID, $this->instance_id);
if ($this->isColumnModified(CcShowInstancesPeer::FILE_ID)) $criteria->add(CcShowInstancesPeer::FILE_ID, $this->file_id); if ($this->isColumnModified(CcShowInstancesPeer::FILE_ID)) $criteria->add(CcShowInstancesPeer::FILE_ID, $this->file_id);
if ($this->isColumnModified(CcShowInstancesPeer::TIME_FILLED)) $criteria->add(CcShowInstancesPeer::TIME_FILLED, $this->time_filled); if ($this->isColumnModified(CcShowInstancesPeer::TIME_FILLED)) $criteria->add(CcShowInstancesPeer::TIME_FILLED, $this->time_filled);
if ($this->isColumnModified(CcShowInstancesPeer::DELETED_INSTANCE)) $criteria->add(CcShowInstancesPeer::DELETED_INSTANCE, $this->deleted_instance);
return $criteria; return $criteria;
} }
@ -1284,6 +1336,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$copyObj->setDbOriginalShow($this->instance_id); $copyObj->setDbOriginalShow($this->instance_id);
$copyObj->setDbRecordedFile($this->file_id); $copyObj->setDbRecordedFile($this->file_id);
$copyObj->setDbTimeFilled($this->time_filled); $copyObj->setDbTimeFilled($this->time_filled);
$copyObj->setDbDeletedInstance($this->deleted_instance);
if ($deepCopy) { if ($deepCopy) {
// important: temporarily setNew(false) because this affects the behavior of // important: temporarily setNew(false) because this affects the behavior of
@ -1801,6 +1854,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->instance_id = null; $this->instance_id = null;
$this->file_id = null; $this->file_id = null;
$this->time_filled = null; $this->time_filled = null;
$this->deleted_instance = null;
$this->alreadyInSave = false; $this->alreadyInSave = false;
$this->alreadyInValidation = false; $this->alreadyInValidation = false;
$this->clearAllReferences(); $this->clearAllReferences();

View File

@ -26,7 +26,7 @@ abstract class BaseCcShowInstancesPeer {
const TM_CLASS = 'CcShowInstancesTableMap'; const TM_CLASS = 'CcShowInstancesTableMap';
/** The total number of columns. */ /** The total number of columns. */
const NUM_COLUMNS = 9; const NUM_COLUMNS = 10;
/** The number of lazy-loaded columns. */ /** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0; const NUM_LAZY_LOAD_COLUMNS = 0;
@ -58,6 +58,9 @@ abstract class BaseCcShowInstancesPeer {
/** the column name for the TIME_FILLED field */ /** the column name for the TIME_FILLED field */
const TIME_FILLED = 'cc_show_instances.TIME_FILLED'; const TIME_FILLED = 'cc_show_instances.TIME_FILLED';
/** the column name for the DELETED_INSTANCE field */
const DELETED_INSTANCE = 'cc_show_instances.DELETED_INSTANCE';
/** /**
* An identiy map to hold any loaded instances of CcShowInstances objects. * An identiy map to hold any loaded instances of CcShowInstances objects.
* This must be public so that other peer classes can access this when hydrating from JOIN * This must be public so that other peer classes can access this when hydrating from JOIN
@ -74,12 +77,12 @@ abstract class BaseCcShowInstancesPeer {
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/ */
private static $fieldNames = array ( private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('DbId', 'DbStarts', 'DbEnds', 'DbShowId', 'DbRecord', 'DbRebroadcast', 'DbOriginalShow', 'DbRecordedFile', 'DbTimeFilled', ), BasePeer::TYPE_PHPNAME => array ('DbId', 'DbStarts', 'DbEnds', 'DbShowId', 'DbRecord', 'DbRebroadcast', 'DbOriginalShow', 'DbRecordedFile', 'DbTimeFilled', 'DbDeletedInstance', ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbStarts', 'dbEnds', 'dbShowId', 'dbRecord', 'dbRebroadcast', 'dbOriginalShow', 'dbRecordedFile', 'dbTimeFilled', ), BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbStarts', 'dbEnds', 'dbShowId', 'dbRecord', 'dbRebroadcast', 'dbOriginalShow', 'dbRecordedFile', 'dbTimeFilled', 'dbDeletedInstance', ),
BasePeer::TYPE_COLNAME => array (self::ID, self::STARTS, self::ENDS, self::SHOW_ID, self::RECORD, self::REBROADCAST, self::INSTANCE_ID, self::FILE_ID, self::TIME_FILLED, ), BasePeer::TYPE_COLNAME => array (self::ID, self::STARTS, self::ENDS, self::SHOW_ID, self::RECORD, self::REBROADCAST, self::INSTANCE_ID, self::FILE_ID, self::TIME_FILLED, self::DELETED_INSTANCE, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID', 'STARTS', 'ENDS', 'SHOW_ID', 'RECORD', 'REBROADCAST', 'INSTANCE_ID', 'FILE_ID', 'TIME_FILLED', ), BasePeer::TYPE_RAW_COLNAME => array ('ID', 'STARTS', 'ENDS', 'SHOW_ID', 'RECORD', 'REBROADCAST', 'INSTANCE_ID', 'FILE_ID', 'TIME_FILLED', 'DELETED_INSTANCE', ),
BasePeer::TYPE_FIELDNAME => array ('id', 'starts', 'ends', 'show_id', 'record', 'rebroadcast', 'instance_id', 'file_id', 'time_filled', ), BasePeer::TYPE_FIELDNAME => array ('id', 'starts', 'ends', 'show_id', 'record', 'rebroadcast', 'instance_id', 'file_id', 'time_filled', 'deleted_instance', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, ) BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
); );
/** /**
@ -89,12 +92,12 @@ abstract class BaseCcShowInstancesPeer {
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/ */
private static $fieldKeys = array ( private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbStarts' => 1, 'DbEnds' => 2, 'DbShowId' => 3, 'DbRecord' => 4, 'DbRebroadcast' => 5, 'DbOriginalShow' => 6, 'DbRecordedFile' => 7, 'DbTimeFilled' => 8, ), BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbStarts' => 1, 'DbEnds' => 2, 'DbShowId' => 3, 'DbRecord' => 4, 'DbRebroadcast' => 5, 'DbOriginalShow' => 6, 'DbRecordedFile' => 7, 'DbTimeFilled' => 8, 'DbDeletedInstance' => 9, ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbStarts' => 1, 'dbEnds' => 2, 'dbShowId' => 3, 'dbRecord' => 4, 'dbRebroadcast' => 5, 'dbOriginalShow' => 6, 'dbRecordedFile' => 7, 'dbTimeFilled' => 8, ), BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbStarts' => 1, 'dbEnds' => 2, 'dbShowId' => 3, 'dbRecord' => 4, 'dbRebroadcast' => 5, 'dbOriginalShow' => 6, 'dbRecordedFile' => 7, 'dbTimeFilled' => 8, 'dbDeletedInstance' => 9, ),
BasePeer::TYPE_COLNAME => array (self::ID => 0, self::STARTS => 1, self::ENDS => 2, self::SHOW_ID => 3, self::RECORD => 4, self::REBROADCAST => 5, self::INSTANCE_ID => 6, self::FILE_ID => 7, self::TIME_FILLED => 8, ), BasePeer::TYPE_COLNAME => array (self::ID => 0, self::STARTS => 1, self::ENDS => 2, self::SHOW_ID => 3, self::RECORD => 4, self::REBROADCAST => 5, self::INSTANCE_ID => 6, self::FILE_ID => 7, self::TIME_FILLED => 8, self::DELETED_INSTANCE => 9, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'STARTS' => 1, 'ENDS' => 2, 'SHOW_ID' => 3, 'RECORD' => 4, 'REBROADCAST' => 5, 'INSTANCE_ID' => 6, 'FILE_ID' => 7, 'TIME_FILLED' => 8, ), BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'STARTS' => 1, 'ENDS' => 2, 'SHOW_ID' => 3, 'RECORD' => 4, 'REBROADCAST' => 5, 'INSTANCE_ID' => 6, 'FILE_ID' => 7, 'TIME_FILLED' => 8, 'DELETED_INSTANCE' => 9, ),
BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'starts' => 1, 'ends' => 2, 'show_id' => 3, 'record' => 4, 'rebroadcast' => 5, 'instance_id' => 6, 'file_id' => 7, 'time_filled' => 8, ), BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'starts' => 1, 'ends' => 2, 'show_id' => 3, 'record' => 4, 'rebroadcast' => 5, 'instance_id' => 6, 'file_id' => 7, 'time_filled' => 8, 'deleted_instance' => 9, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, ) BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
); );
/** /**
@ -175,6 +178,7 @@ abstract class BaseCcShowInstancesPeer {
$criteria->addSelectColumn(CcShowInstancesPeer::INSTANCE_ID); $criteria->addSelectColumn(CcShowInstancesPeer::INSTANCE_ID);
$criteria->addSelectColumn(CcShowInstancesPeer::FILE_ID); $criteria->addSelectColumn(CcShowInstancesPeer::FILE_ID);
$criteria->addSelectColumn(CcShowInstancesPeer::TIME_FILLED); $criteria->addSelectColumn(CcShowInstancesPeer::TIME_FILLED);
$criteria->addSelectColumn(CcShowInstancesPeer::DELETED_INSTANCE);
} else { } else {
$criteria->addSelectColumn($alias . '.ID'); $criteria->addSelectColumn($alias . '.ID');
$criteria->addSelectColumn($alias . '.STARTS'); $criteria->addSelectColumn($alias . '.STARTS');
@ -185,6 +189,7 @@ abstract class BaseCcShowInstancesPeer {
$criteria->addSelectColumn($alias . '.INSTANCE_ID'); $criteria->addSelectColumn($alias . '.INSTANCE_ID');
$criteria->addSelectColumn($alias . '.FILE_ID'); $criteria->addSelectColumn($alias . '.FILE_ID');
$criteria->addSelectColumn($alias . '.TIME_FILLED'); $criteria->addSelectColumn($alias . '.TIME_FILLED');
$criteria->addSelectColumn($alias . '.DELETED_INSTANCE');
} }
} }

View File

@ -15,6 +15,7 @@
* @method CcShowInstancesQuery orderByDbOriginalShow($order = Criteria::ASC) Order by the instance_id column * @method CcShowInstancesQuery orderByDbOriginalShow($order = Criteria::ASC) Order by the instance_id column
* @method CcShowInstancesQuery orderByDbRecordedFile($order = Criteria::ASC) Order by the file_id column * @method CcShowInstancesQuery orderByDbRecordedFile($order = Criteria::ASC) Order by the file_id column
* @method CcShowInstancesQuery orderByDbTimeFilled($order = Criteria::ASC) Order by the time_filled column * @method CcShowInstancesQuery orderByDbTimeFilled($order = Criteria::ASC) Order by the time_filled column
* @method CcShowInstancesQuery orderByDbDeletedInstance($order = Criteria::ASC) Order by the deleted_instance column
* *
* @method CcShowInstancesQuery groupByDbId() Group by the id column * @method CcShowInstancesQuery groupByDbId() Group by the id column
* @method CcShowInstancesQuery groupByDbStarts() Group by the starts column * @method CcShowInstancesQuery groupByDbStarts() Group by the starts column
@ -25,6 +26,7 @@
* @method CcShowInstancesQuery groupByDbOriginalShow() Group by the instance_id column * @method CcShowInstancesQuery groupByDbOriginalShow() Group by the instance_id column
* @method CcShowInstancesQuery groupByDbRecordedFile() Group by the file_id column * @method CcShowInstancesQuery groupByDbRecordedFile() Group by the file_id column
* @method CcShowInstancesQuery groupByDbTimeFilled() Group by the time_filled column * @method CcShowInstancesQuery groupByDbTimeFilled() Group by the time_filled column
* @method CcShowInstancesQuery groupByDbDeletedInstance() Group by the deleted_instance column
* *
* @method CcShowInstancesQuery leftJoin($relation) Adds a LEFT JOIN clause to the query * @method CcShowInstancesQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method CcShowInstancesQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query * @method CcShowInstancesQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
@ -62,6 +64,7 @@
* @method CcShowInstances findOneByDbOriginalShow(int $instance_id) Return the first CcShowInstances filtered by the instance_id column * @method CcShowInstances findOneByDbOriginalShow(int $instance_id) Return the first CcShowInstances filtered by the instance_id column
* @method CcShowInstances findOneByDbRecordedFile(int $file_id) Return the first CcShowInstances filtered by the file_id column * @method CcShowInstances findOneByDbRecordedFile(int $file_id) Return the first CcShowInstances filtered by the file_id column
* @method CcShowInstances findOneByDbTimeFilled(string $time_filled) Return the first CcShowInstances filtered by the time_filled column * @method CcShowInstances findOneByDbTimeFilled(string $time_filled) Return the first CcShowInstances filtered by the time_filled column
* @method CcShowInstances findOneByDbDeletedInstance(boolean $deleted_instance) Return the first CcShowInstances filtered by the deleted_instance column
* *
* @method array findByDbId(int $id) Return CcShowInstances objects filtered by the id column * @method array findByDbId(int $id) Return CcShowInstances objects filtered by the id column
* @method array findByDbStarts(string $starts) Return CcShowInstances objects filtered by the starts column * @method array findByDbStarts(string $starts) Return CcShowInstances objects filtered by the starts column
@ -72,6 +75,7 @@
* @method array findByDbOriginalShow(int $instance_id) Return CcShowInstances objects filtered by the instance_id column * @method array findByDbOriginalShow(int $instance_id) Return CcShowInstances objects filtered by the instance_id column
* @method array findByDbRecordedFile(int $file_id) Return CcShowInstances objects filtered by the file_id column * @method array findByDbRecordedFile(int $file_id) Return CcShowInstances objects filtered by the file_id column
* @method array findByDbTimeFilled(string $time_filled) Return CcShowInstances objects filtered by the time_filled column * @method array findByDbTimeFilled(string $time_filled) Return CcShowInstances objects filtered by the time_filled column
* @method array findByDbDeletedInstance(boolean $deleted_instance) Return CcShowInstances objects filtered by the deleted_instance column
* *
* @package propel.generator.airtime.om * @package propel.generator.airtime.om
*/ */
@ -446,6 +450,23 @@ abstract class BaseCcShowInstancesQuery extends ModelCriteria
return $this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled, $comparison); return $this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled, $comparison);
} }
/**
* Filter the query on the deleted_instance column
*
* @param boolean|string $dbDeletedInstance The value to use as filter.
* Accepts strings ('false', 'off', '-', 'no', 'n', and '0' are false, the rest is true)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return CcShowInstancesQuery The current query, for fluid interface
*/
public function filterByDbDeletedInstance($dbDeletedInstance = null, $comparison = null)
{
if (is_string($dbDeletedInstance)) {
$deleted_instance = in_array(strtolower($dbDeletedInstance), array('false', 'off', '-', 'no', 'n', '0')) ? false : true;
}
return $this->addUsingAlias(CcShowInstancesPeer::DELETED_INSTANCE, $dbDeletedInstance, $comparison);
}
/** /**
* Filter the query by a related CcShow object * Filter the query by a related CcShow object
* *

View File

@ -149,6 +149,11 @@
<column name="instance_id" phpName="DbOriginalShow" type="INTEGER" required="false"/> <column name="instance_id" phpName="DbOriginalShow" type="INTEGER" required="false"/>
<column name="file_id" phpName="DbRecordedFile" type="INTEGER" required="false"/> <column name="file_id" phpName="DbRecordedFile" type="INTEGER" required="false"/>
<column name="time_filled" phpName="DbTimeFilled" type="TIME" /> <column name="time_filled" phpName="DbTimeFilled" type="TIME" />
<!-- The purpose of the deleted_instance column is to mark a show instance that was
deleted when it was part of repeating show. This is useful because the way shows work,
instances can be regenerated if we edit the show, which is unwanted behaviour. This column serves
to ensure that we don't regenerate the instance. -->
<column name="deleted_instance" phpName="DbDeletedInstance" type="BOOLEAN" required="true" defaultValue="false" />
<behavior name="aggregate_column"> <behavior name="aggregate_column">
<parameter name="name" value="time_filled" /> <parameter name="name" value="time_filled" />
<parameter name="foreign_table" value="cc_schedule" /> <parameter name="foreign_table" value="cc_schedule" />

View File

@ -196,6 +196,7 @@ CREATE TABLE "cc_show_instances"
"instance_id" INTEGER, "instance_id" INTEGER,
"file_id" INTEGER, "file_id" INTEGER,
"time_filled" TIME, "time_filled" TIME,
"deleted_instance" BOOLEAN default 'f' NOT NULL,
PRIMARY KEY ("id") PRIMARY KEY ("id")
); );

View File

@ -1,3 +1,11 @@
1.9.5 - Nov 2, 2011
*(CC-2743, CC-2769) Fixed problem where Media-Monitor would try to parse a file's metadata while the OS was still copying it
*(CC-2882) Fixed a bug where a couldn't unregister an old directory name from Airtime after it was renamed.
*(CC-2891) Fixed a bug with parsing Unicode metadata in audio files.
*(CC-2972) Fixed a bug where systems behind a firewall would have Airtime services communicating via its external IP.
*(CC-2975) Issue with older python-virtualenv identified. Airtime installer now requires virtualenv >= 1.4.9
*(CC-3012, CC-3013) Fixed an issue with Media-Monitor crashing when parsing certain audio tracks
1.9.4 - Sept 13, 2011 1.9.4 - Sept 13, 2011
*Improvements *Improvements
-DEB packages now available for Ubuntu & Debian -DEB packages now available for Ubuntu & Debian

View File

@ -22,18 +22,19 @@ echo "----------------------------------------------------"
echo " 1. Install Packages" echo " 1. Install Packages"
echo "----------------------------------------------------" echo "----------------------------------------------------"
apt-get update
# Updated package list # Updated package list
apt-get -y install tar gzip curl apache2 php5-pgsql libapache2-mod-php5 \ apt-get -y install tar gzip curl apache2 php5-pgsql libapache2-mod-php5 \
php-pear php5-gd postgresql odbc-postgresql python2.6 lame libsoundtouch-ocaml \ php-pear php5-gd postgresql odbc-postgresql python2.6 libsoundtouch-ocaml \
libmp3lame-dev libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \
libesd0 icecast2 libportaudio2 libsamplerate0 rabbitmq-server patch \ libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \
php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \ php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \
libvorbis-ocaml libvorbis-ocaml
#possibly remove? #install packages with --force-yes option (this is useful in the case
#libvorbis-ocaml-dev #of Debian, where these packages are unauthorized)
#libcamomile-ocaml-dev apt-get -y --force-yes install libmp3lame-dev lame icecast2
if [ "$?" -ne "0" ]; then if [ "$?" -ne "0" ]; then
echo "" echo ""

View File

@ -11,7 +11,7 @@ class Version20111103141311 extends AbstractMigration
{ {
// add timezone column to cc_show_days // add timezone column to cc_show_days
$cc_subjs = $schema->getTable('cc_show_days'); $cc_subjs = $schema->getTable('cc_show_days');
$cc_subjs->addColumn('timezone', 'string', array('required' => true)); $cc_subjs->addColumn('timezone', 'string', array('required' => true, 'default'=> ''));
} }
public function down(Schema $schema) public function down(Schema $schema)

View File

@ -0,0 +1,20 @@
<?php
namespace DoctrineMigrations;
use Doctrine\DBAL\Migrations\AbstractMigration,
Doctrine\DBAL\Schema\Schema;
class Version20111114222927 extends AbstractMigration
{
public function up(Schema $schema)
{
$cc_show_instances = $schema->getTable('cc_show_instances');
$cc_show_instances->addColumn('deleted_instance', 'boolean', array('notnull' => true, 'default'=> '0'));
}
public function down(Schema $schema)
{
}
}

View File

@ -15,21 +15,6 @@ if [[ "$DEB" = "Status: install ok installed" ]]; then
exit 1 exit 1
fi fi
#Check whether version of virtualenv is <= 1.4.8. If so exit install.
BAD_VERSION="1.4.8"
VERSION=$(virtualenv --version)
NEWEST_VERSION=$(echo -e "$BAD_VERSION\n$VERSION\n'" | sort -t '.' -g | tail -n 1)
echo -n "Ensuring python-virtualenv version > $BAD_VERSION..."
if [[ "$NEWEST_VERSION" = "$BAD_VERSION" ]]; then
URL="http://apt.sourcefabric.org/pool/main/p/python-virtualenv/python-virtualenv_1.4.9-3_all.deb"
echo "Failed!"
echo "You have version $BAD_VERSION or older installed. Please install package at $URL first and then try installing Airtime again."
exit 1
else
echo "Success!"
fi
echo -e "\n******************************** Install Begin *********************************" echo -e "\n******************************** Install Begin *********************************"
# Absolute path to this script, e.g. /home/user/bin/foo.sh # Absolute path to this script, e.g. /home/user/bin/foo.sh

View File

@ -1,4 +1,4 @@
#!/bin/bash -e #!/bin/bash
#Check if root user #Check if root user
if [ `whoami` != 'root' ]; then if [ `whoami` != 'root' ]; then

View File

@ -1,4 +1,4 @@
#!/bin/bash -e #!/bin/bash
#-e Causes bash script to exit if any of the installers #-e Causes bash script to exit if any of the installers
#return with a non-zero return value. #return with a non-zero return value.

View File

@ -1,4 +1,4 @@
#!/bin/bash -e #!/bin/bash
#-e Causes bash script to exit if any of the installers #-e Causes bash script to exit if any of the installers
#return with a non-zero return value. #return with a non-zero return value.

View File

@ -80,11 +80,13 @@ if (strcmp($version, "1.9.3") < 0){
if (strcmp($version, "1.9.4") < 0){ if (strcmp($version, "1.9.4") < 0){
passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-1.9.4/airtime-upgrade.php"); passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-1.9.4/airtime-upgrade.php");
} }
if (strcmp($version, "1.9.5") < 0){
passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-1.9.5/airtime-upgrade.php");
}
if (strcmp($version, "2.0.0") < 0){ if (strcmp($version, "2.0.0") < 0){
system("php ".__DIR__."/../upgrades/airtime-2.0.0/airtime-upgrade.php"); system("php ".__DIR__."/../upgrades/airtime-2.0.0/airtime-upgrade.php");
} }
//set the new version in the database. //set the new version in the database.
$sql = "DELETE FROM cc_pref WHERE keystr = 'system_version'"; $sql = "DELETE FROM cc_pref WHERE keystr = 'system_version'";
$CC_DBC->query($sql); $CC_DBC->query($sql);

View File

@ -0,0 +1,37 @@
<?php
require_once(dirname(__FILE__).'/../../include/AirtimeInstall.php');
class Airtime195Upgrade{
const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg";
const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf";
const CONF_PYPO_GRP = "pypo";
public static function BackupHtaccess($phpDir){
exec("mkdir -p /tmp");
exec("cp $phpDir/public/.htaccess /tmp");
}
public static function RestoreHtaccess($phpDir){
exec("cp /tmp/.htaccess $phpDir/public/");
exec("rm -f /tmp/.htaccess");
}
public static function InstallAirtimePhpServerCode($phpDir)
{
self::BackupHtaccess($phpDir);
$AIRTIME_SRC = realpath(__DIR__.'/../../../airtime_mvc');
echo "* Installing PHP code to ".$phpDir.PHP_EOL;
exec("rm -rf \"$phpDir\"");
exec("mkdir -p $phpDir");
exec("cp -R ".$AIRTIME_SRC."/* ".$phpDir);
self::RestoreHtaccess($phpDir);
}
}
$values = parse_ini_file(Airtime195Upgrade::CONF_FILE_AIRTIME, true);
$phpDir = $values['general']['airtime_dir'];
Airtime195Upgrade::InstallAirtimePhpServerCode($phpDir);

View File

@ -103,6 +103,7 @@ class AirtimeDatabaseUpgrade{
$showDays = CcShowDaysQuery::create()->find(); $showDays = CcShowDaysQuery::create()->find();
foreach ($showDays as $sd){ foreach ($showDays as $sd){
/*
$dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); $dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get()));
$dt->setTimezone(new DateTimeZone("UTC")); $dt->setTimezone(new DateTimeZone("UTC"));
$sd->setDbFirstShow($dt->format("Y-m-d")); $sd->setDbFirstShow($dt->format("Y-m-d"));
@ -113,6 +114,11 @@ class AirtimeDatabaseUpgrade{
$sd->setDbLastShow($dt->format("Y-m-d")); $sd->setDbLastShow($dt->format("Y-m-d"));
$sd->save(); $sd->save();
* */
$sd->setDbTimezone(date_default_timezone_get())->save();
} }
} }
@ -141,7 +147,7 @@ class AirtimeDatabaseUpgrade{
} }
} }
UpgradeCommon::MigrateTablesToVersion(__DIR__, '20111103141311'); UpgradeCommon::MigrateTablesToVersion(__DIR__, '20111114222927');
} }
private static function SetDefaultStreamSetting() private static function SetDefaultStreamSetting()

View File

@ -29,7 +29,7 @@ class MediaMonitorCommon:
# if file doesn't have any extension, info[-2] throws exception # if file doesn't have any extension, info[-2] throws exception
# Hence, checking length of info before we do anything # Hence, checking length of info before we do anything
if(len(info) >= 3): if(len(info) >= 2):
if(info[-2] in self.supported_file_formats): if(info[-2] in self.supported_file_formats):
return True return True
else: else:

View File

@ -4,6 +4,27 @@ SCRIPT=`readlink -f $0`
# Absolute directory this script is in # Absolute directory this script is in
SCRIPTPATH=`dirname $SCRIPT` SCRIPTPATH=`dirname $SCRIPT`
which virtualenv > /dev/null
if [ "$?" -ne "0" ]; then
echo "virtualenv not found!"
echo -e "Please install virtualenv and retry Airtime installation.\n"
exit 1
fi
#Check whether version of virtualenv is <= 1.4.8. If so exit install.
BAD_VERSION="1.4.8"
VERSION=$(virtualenv --version)
NEWEST_VERSION=$(echo -e "$BAD_VERSION\n$VERSION\n'" | sort -t '.' -g | tail -n 1)
echo -n "Ensuring python-virtualenv version > $BAD_VERSION..."
if [[ "$NEWEST_VERSION" = "$BAD_VERSION" ]]; then
URL="http://apt.sourcefabric.org/pool/main/p/python-virtualenv/python-virtualenv_1.4.9-3_all.deb"
echo "Failed!"
echo "You have version $BAD_VERSION or older installed. Please install package at $URL first and then try installing Airtime again."
exit 1
else
echo "Success!"
fi
VIRTUAL_ENV_DIR="/usr/lib/airtime/airtime_virtualenv" VIRTUAL_ENV_DIR="/usr/lib/airtime/airtime_virtualenv"
VIRTUAL_ENV_SHARE="/usr/share/python-virtualenv/" VIRTUAL_ENV_SHARE="/usr/share/python-virtualenv/"
@ -19,12 +40,12 @@ EXTRAOPTION=$(virtualenv --help | grep extra-search-dir)
if [ "$?" -eq "0" ]; then if [ "$?" -eq "0" ]; then
virtualenv --extra-search-dir=${SCRIPTPATH}/3rd_party --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv || exit 1 virtualenv --extra-search-dir=${SCRIPTPATH}/3rd_party --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv || exit 1
else else
# copy distribute-0.6.10.tar.gz to /usr/share/python-virtualenv/ # copy distribute-0.6.10.tar.gz to /usr/share/python-virtualenv/
# this is due to the bug in virtualenv 1.4.9 # this is due to the bug in virtualenv 1.4.9
if [ -d "$VIRTUAL_ENV_SHARE" ]; then if [ -d "$VIRTUAL_ENV_SHARE" ]; then
cp ${SCRIPTPATH}/3rd_party/distribute-0.6.10.tar.gz /usr/share/python-virtualenv/ cp ${SCRIPTPATH}/3rd_party/distribute-0.6.10.tar.gz /usr/share/python-virtualenv/
fi fi
virtualenv --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv || exit 1 virtualenv --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv || exit 1
fi fi
echo -e "\n*** Installing Python Libraries ***" echo -e "\n*** Installing Python Libraries ***"