CC-3696: more rebroadcast show instances will be created after change the calendar

-fixed
This commit is contained in:
Martin Konecny 2012-04-25 15:09:58 -04:00
parent b5bf5e9598
commit 34a1949511
2 changed files with 47 additions and 36 deletions

View File

@ -868,14 +868,6 @@ class Application_Model_Show {
$this->updateDurationTime($p_data); $this->updateDurationTime($p_data);
} }
if ($isRecorded){
//delete all rebroadcasts. They will simply be recreated later
//in the execution of this PHP script. This simplifies having to
//reason about whether we should keep individual rebroadcasts or
//delete them or move them around etc.
$this->deleteAllRebroadcasts();
}
if ($p_data['add_show_repeats']){ if ($p_data['add_show_repeats']){
if (($repeatType == 1 || $repeatType == 2) && if (($repeatType == 1 || $repeatType == 2) &&
$p_data['add_show_start_date'] != $this->getStartDate()){ $p_data['add_show_start_date'] != $this->getStartDate()){
@ -1172,8 +1164,8 @@ class Application_Model_Show {
$sql = "SELECT * FROM cc_show_days WHERE show_id = $p_showId"; $sql = "SELECT * FROM cc_show_days WHERE show_id = $p_showId";
$res = $con->query($sql)->fetchAll(); $res = $con->query($sql)->fetchAll();
foreach ($res as $showRow) { foreach ($res as $showDaysRow) {
Application_Model_Show::populateShow($showRow, $p_populateUntilDateTime); Application_Model_Show::populateShow($showDaysRow, $p_populateUntilDateTime);
} }
} }
@ -1188,18 +1180,18 @@ class Application_Model_Show {
* @param DateTime $p_populateUntilDateTime * @param DateTime $p_populateUntilDateTime
* DateTime object in UTC time. * DateTime object in UTC time.
*/ */
private static function populateShow($p_showRow, $p_populateUntilDateTime) { private static function populateShow($p_showDaysRow, $p_populateUntilDateTime) {
if($p_showRow["repeat_type"] == -1) { if($p_showDaysRow["repeat_type"] == -1) {
Application_Model_Show::populateNonRepeatingShow($p_showRow, $p_populateUntilDateTime); Application_Model_Show::populateNonRepeatingShow($p_showDaysRow, $p_populateUntilDateTime);
} }
else if($p_showRow["repeat_type"] == 0) { else if($p_showDaysRow["repeat_type"] == 0) {
Application_Model_Show::populateRepeatingShow($p_showRow, $p_populateUntilDateTime, 'P7D'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P7D');
} }
else if($p_showRow["repeat_type"] == 1) { else if($p_showDaysRow["repeat_type"] == 1) {
Application_Model_Show::populateRepeatingShow($p_showRow, $p_populateUntilDateTime, 'P14D'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P14D');
} }
else if($p_showRow["repeat_type"] == 2) { else if($p_showDaysRow["repeat_type"] == 2) {
Application_Model_Show::populateRepeatingShow($p_showRow, $p_populateUntilDateTime, 'P1M'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P1M');
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} }
@ -1258,11 +1250,12 @@ 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 = $con->query($sql)->fetchAll(); $rebroadcasts = $con->query($sql)->fetchAll();
//Logging::log('$start time of non repeating record '.$start); if ($showInstance->isRecorded()){
$showInstance->deleteRebroadcasts();
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone); 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
@ -1276,19 +1269,19 @@ class Application_Model_Show {
* @param string $p_interval * @param string $p_interval
* Period of time between repeating shows (in php DateInterval notation 'P7D') * Period of time between repeating shows (in php DateInterval notation 'P7D')
*/ */
private static function populateRepeatingShow($p_showRow, $p_populateUntilDateTime, $p_interval) private static function populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, $p_interval)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$show_id = $p_showRow["show_id"]; $show_id = $p_showDaysRow["show_id"];
$next_pop_date = $p_showRow["next_pop_date"]; $next_pop_date = $p_showDaysRow["next_pop_date"];
$first_show = $p_showRow["first_show"]; //non-UTC $first_show = $p_showDaysRow["first_show"]; //non-UTC
$last_show = $p_showRow["last_show"]; //non-UTC $last_show = $p_showDaysRow["last_show"]; //non-UTC
$start_time = $p_showRow["start_time"]; //non-UTC $start_time = $p_showDaysRow["start_time"]; //non-UTC
$duration = $p_showRow["duration"]; $duration = $p_showDaysRow["duration"];
$day = $p_showRow["day"]; $day = $p_showDaysRow["day"];
$record = $p_showRow["record"]; $record = $p_showDaysRow["record"];
$timezone = $p_showRow["timezone"]; $timezone = $p_showDaysRow["timezone"];
$currentUtcTimestamp = gmdate("Y-m-d H:i:s"); $currentUtcTimestamp = gmdate("Y-m-d H:i:s");
@ -1314,6 +1307,12 @@ class Application_Model_Show {
if ($show->hasInstanceOnDate($utcStartDateTime)){ if ($show->hasInstanceOnDate($utcStartDateTime)){
$ccShowInstance = $show->getInstanceOnDate($utcStartDateTime); $ccShowInstance = $show->getInstanceOnDate($utcStartDateTime);
if ($ccShowInstance->getDbModifiedInstance()){
//show instance on this date has been deleted.
continue;
}
$newInstance = false; $newInstance = false;
} else { } else {
$ccShowInstance = new CcShowInstances(); $ccShowInstance = new CcShowInstances();
@ -1341,10 +1340,8 @@ class Application_Model_Show {
$showInstance->correctScheduleStartTimes(); $showInstance->correctScheduleStartTimes();
} }
//don't create rebroadcasts for a deleted recorded show. $showInstance->deleteRebroadcasts();
if ($ccShowInstance->getDbModifiedInstance() == false) {
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone); self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone);
}
if ($p_interval == 'P1M'){ if ($p_interval == 'P1M'){
/* When adding months, there is a problem if we are on January 31st and add one month with PHP. /* When adding months, there is a problem if we are on January 31st and add one month with PHP.

View File

@ -31,6 +31,20 @@ class Application_Model_ShowInstance {
return new Application_Model_Show($this->getShowId()); return new Application_Model_Show($this->getShowId());
} }
public function deleteRebroadcasts(){
$con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s");
$instance_id = $this->getShowInstanceId();
$sql = "DELETE FROM cc_show_instances"
." WHERE starts > TIMESTAMP '$timestamp'"
." AND instance_id = $instance_id"
." AND rebroadcast = 1";
$con->exec($sql);
}
/* This function is weird. It should return a boolean, but instead returns /* This function is weird. It should return a boolean, but instead returns
* an integer if it is a rebroadcast, or returns null if it isn't. You can convert * an integer if it is a rebroadcast, or returns null if it isn't. You can convert
* it to boolean by using is_null(isRebroadcast), where true means isn't and false * it to boolean by using is_null(isRebroadcast), where true means isn't and false