diff --git a/airtime_mvc/application/services/SchedulerService.php b/airtime_mvc/application/services/SchedulerService.php index 7fe3ca6f8..69f046153 100644 --- a/airtime_mvc/application/services/SchedulerService.php +++ b/airtime_mvc/application/services/SchedulerService.php @@ -145,71 +145,114 @@ class Application_Service_SchedulerService return $dt; } - public static function fillLinkedShows($ccShow) + public static function fillNewLinkedInstances($ccShow) { - if ($ccShow->isLinked()) { - /* First check if any linked instances have content - * If all instances are empty then we don't need to fill - * any other instances with content + /* First check if any linked instances have content + * If all instances are empty then we don't need to fill + * any other instances with content + */ + $instanceIds = $ccShow->getInstanceIds(); + $ccSchedules = CcScheduleQuery::create() + ->filterByDbInstanceId($instanceIds, Criteria::IN) + ->find(); + if (!$ccSchedules->isEmpty()) { + /* Find the show contents of just one of the instances. It doesn't + * matter which instance we use since all the content is the same */ - $instanceIds = $ccShow->getInstanceIds(); - $ccSchedules = CcScheduleQuery::create() - ->filterByDbInstanceId($instanceIds, Criteria::IN) + $ccSchedule = $ccSchedules->getFirst(); + $showStamp = CcScheduleQuery::create() + ->filterByDbInstanceId($ccSchedule->getDbInstanceId()) + ->orderByDbStarts() ->find(); - if (!$ccSchedules->isEmpty()) { - /* Find the show contents of just one of the instances. It doesn't - * matter which instance we use since all the content is the same - */ - $ccSchedule = $ccSchedules->getFirst(); - $showStamp = CcScheduleQuery::create() - ->filterByDbInstanceId($ccSchedule->getDbInstanceId()) - ->orderByDbStarts() + + //get time_filled so we can update cc_show_instances + $timeFilled = $ccSchedule->getCcShowInstances()->getDbTimeFilled(); + + //need to find out which linked instances are empty + foreach ($ccShow->getCcShowInstancess() as $ccShowInstance) { + $ccSchedules = CcScheduleQuery::create() + ->filterByDbInstanceId($ccShowInstance->getDbId()) ->find(); + /* If the show instance is empty OR it has different content than + * the first instance, we cant to fill/replace with the show stamp + * (The show stamp is taken from the first show instance's content) + */ + if ($ccSchedules->isEmpty() || + self::replaceInstanceContentCheck($ccShowInstance, $showStamp)) { - //get time_filled so we can update cc_show_instances - $timeFilled = $ccSchedule->getCcShowInstances()->getDbTimeFilled(); + $nextStartDT = $ccShowInstance->getDbStarts(null); - //need to find out which linked instances are empty - foreach ($ccShow->getCcShowInstancess() as $ccShowInstance) { - $ccSchedules = CcScheduleQuery::create() - ->filterByDbInstanceId($ccShowInstance->getDbId()) - ->find(); - /* If the show instance is empty OR it has different content than - * the first instance, we cant to fill/replace with the show stamp - * (The show stamp is taken from the first show instance's content) - */ - if ($ccSchedules->isEmpty() || self::replaceInstanceContentCheck($ccShowInstance, $showStamp)) { - $nextStartDT = $ccShowInstance->getDbStarts(null); + foreach ($showStamp as $item) { + $endTimeDT = self::findEndTime($nextStartDT, $item->getDbClipLength()); - foreach ($showStamp as $item) { - $endTimeDT = self::findEndTime($nextStartDT, $item->getDbClipLength()); - - $ccSchedule = new CcSchedule(); - $ccSchedule - ->setDbStarts($nextStartDT) - ->setDbEnds($endTimeDT) - ->setDbFileId($item->getDbFileId()) - ->setDbStreamId($item->getDbStreamId()) - ->setDbClipLength($item->getDbClipLength()) - ->setDbFadeIn($item->getDbFadeIn()) - ->setDbFadeOut($item->getDbFadeOut()) - ->setDbCuein($item->getDbCueIn()) - ->setDbCueOut($item->getDbCueOut()) - ->setDbInstanceId($ccShowInstance->getDbId()) - ->setDbPosition($item->getDbPosition()) - ->save(); - - $nextStartDT = $endTimeDT; - } //foreach show item - - //update time_filled in cc_show_instances - $ccShowInstance - ->setDbTimeFilled($timeFilled) - ->setDbLastScheduled(gmdate("Y-m-d H:i:s")) + $ccSchedule = new CcSchedule(); + $ccSchedule + ->setDbStarts($nextStartDT) + ->setDbEnds($endTimeDT) + ->setDbFileId($item->getDbFileId()) + ->setDbStreamId($item->getDbStreamId()) + ->setDbClipLength($item->getDbClipLength()) + ->setDbFadeIn($item->getDbFadeIn()) + ->setDbFadeOut($item->getDbFadeOut()) + ->setDbCuein($item->getDbCueIn()) + ->setDbCueOut($item->getDbCueOut()) + ->setDbInstanceId($ccShowInstance->getDbId()) + ->setDbPosition($item->getDbPosition()) ->save(); - } - } //foreach linked instance - } //if at least one linked instance has content + + $nextStartDT = $endTimeDT; + } //foreach show item + + //update time_filled in cc_show_instances + $ccShowInstance + ->setDbTimeFilled($timeFilled) + ->setDbLastScheduled(gmdate("Y-m-d H:i:s")) + ->save(); + } + } //foreach linked instance + } //if at least one linked instance has content + } + + public static function fillPreservedLinkedShowContent($ccShow, $showStamp) + { + $item = $showStamp->getFirst(); + $timeFilled = $item->getCcShowInstances()->getDbTimeFilled(); + + foreach ($ccShow->getCcShowInstancess() as $ccShowInstance) { + $ccSchedules = CcScheduleQuery::create() + ->filterByDbInstanceId($ccShowInstance->getDbId()) + ->find(); + + if ($ccSchedules->isEmpty()) { + + $nextStartDT = $ccShowInstance->getDbStarts(null); + + foreach ($showStamp as $item) { + $endTimeDT = self::findEndTime($nextStartDT, $item->getDbClipLength()); + + $ccSchedule = new CcSchedule(); + $ccSchedule + ->setDbStarts($nextStartDT) + ->setDbEnds($endTimeDT) + ->setDbFileId($item->getDbFileId()) + ->setDbStreamId($item->getDbStreamId()) + ->setDbClipLength($item->getDbClipLength()) + ->setDbFadeIn($item->getDbFadeIn()) + ->setDbFadeOut($item->getDbFadeOut()) + ->setDbCuein($item->getDbCueIn()) + ->setDbCueOut($item->getDbCueOut()) + ->setDbInstanceId($ccShowInstance->getDbId()) + ->setDbPosition($item->getDbPosition()) + ->save(); + + $nextStartDT = $endTimeDT; + } //foreach show item + + $ccShowInstance + ->setDbTimeFilled($timeFilled) + ->setDbLastScheduled(gmdate("Y-m-d H:i:s")) + ->save(); + } } } diff --git a/airtime_mvc/application/services/ShowService.php b/airtime_mvc/application/services/ShowService.php index dab59e4d9..00090f295 100644 --- a/airtime_mvc/application/services/ShowService.php +++ b/airtime_mvc/application/services/ShowService.php @@ -13,6 +13,7 @@ class Application_Service_ShowService private $isRebroadcast; private $repeatType; private $isUpdate; + private $linkedShowContent; public function __construct($showId=null, $showData=null, $isUpdate=false) { @@ -217,10 +218,16 @@ class Application_Service_ShowService } } - if (isset($this->ccShow) && ($this->isUpdate || $fillInstances)) { - Application_Service_SchedulerService::fillLinkedShows( - $this->ccShow); + if (isset($this->ccShow) && ($this->isUpdate || $fillInstances) && + $this->ccShow->isLinked()) { + Application_Service_SchedulerService::fillNewLinkedInstances($this->ccShow); } + + if (isset($this->linkedShowContent)) { + Application_Service_SchedulerService::fillPreservedLinkedShowContent( + $this->ccShow, $this->linkedShowContent); + } + return $this->ccShow; } @@ -379,6 +386,9 @@ SQL; if (count($daysRemoved) > 0) { //delete repeating show instances for the repeating //days that were removed + if ($this->ccShow->isLinked()) { + $this->preserveLinkedShowContent(); + } $this->deleteRemovedShowDayInstances($daysRemoved, $ccShowDays, $showId); } @@ -423,6 +433,22 @@ SQL; return $daysAdded; } + private function preserveLinkedShowContent() + { + /* Get show content from any linekd instance. It doesn't + * matter which instance since content is the same in all. + */ + $ccShowInstance = $this->ccShow->getCcShowInstancess()->getFirst(); + + $ccSchedules = CcScheduleQuery::create() + ->filterByDbInstanceId($ccShowInstance->getDbId()) + ->find(); + + if (!$ccSchedules->isEmpty()) { + $this->linkedShowContent = $ccSchedules; + } + } + public function getRepeatingEndDate() { $sql = <<