diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index c7fbae673..ec35c64b8 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -632,7 +632,7 @@ class ApiController extends Zend_Controller_Action $all = $request->getParam('all'); $this->view->files = - Application_Model_StoredFile::listAllFiles($dir_id,$all); + Application_Model_StoredFile::listAllFiles($dir_id, $all); } public function listAllWatchedDirsAction() @@ -800,7 +800,7 @@ class ApiController extends Zend_Controller_Action $watchDir = Application_Model_MusicDir::getDirByPath($rd); // get all the files that is under $dirPath $files = Application_Model_StoredFile::listAllFiles( - $dir->getId(),$all=false, true); + $dir->getId(),$all=false); foreach ($files as $f) { // if the file is from this mount if (substr($f->getFilePath(), 0, strlen($rd)) === $rd) { diff --git a/airtime_mvc/application/models/MusicDir.php b/airtime_mvc/application/models/MusicDir.php index 117d06f40..08b2b2649 100644 --- a/airtime_mvc/application/models/MusicDir.php +++ b/airtime_mvc/application/models/MusicDir.php @@ -195,7 +195,7 @@ SQL; $exist_dir = self::getDirByPath($p_path); - if ($exist_dir == NULL) { + if (is_null($exist_dir)) { $temp_dir = new CcMusicDirs(); $dir = new Application_Model_MusicDir($temp_dir); } else { @@ -228,7 +228,12 @@ SQL; return array("code"=>1, "error"=>"$msg"); } catch (Exception $e) { return array("code"=>1, - "error"=>sprintf(_("%s is already set as the current storage dir or in the watched folders list"), $p_path)); + "error" => sprintf( + _("%s is already set as the current storage dir or in the". + " watched folders list"), + $p_path + ) + ); } } diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index e3f263360..fc3aabb01 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -438,15 +438,12 @@ class Application_Model_Scheduler ->find($this->con); foreach ($schedule as $item) { - - $itemEndDT = $item->getDbEnds(null); - - $item - ->setDbStarts($itemStartDT) - ->setDbEnds($itemEndDT); - - $itemStartDT = $this->findTimeDifference($itemEndDT, $this->crossfadeDuration); $itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength()); + + $item->setDbStarts($itemStartDT) + ->setDbEnds($itemEndDT); + + $itemStartDT = $this->findTimeDifference($itemEndDT, $this->crossfadeDuration); } $schedule->save($this->con); diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 4cfc7cb94..5db22107c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -1071,7 +1071,7 @@ SQL; * @param $dir_id - if this is not provided, it returns all files with full * path constructed. */ - public static function listAllFiles($dir_id=null, $all) + public static function listAllFiles($dir_id=null, $all=true) { $con = Propel::getConnection(); @@ -1081,10 +1081,6 @@ FROM CC_FILES AS f WHERE f.directory = :dir_id SQL; - # TODO : the option $all is deprecated now and is always true. - # refactor code where it's still being passed - $all = true; - if (!$all) { $sql .= " AND f.file_exists = 'TRUE'"; } 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 = <<
  • Warning: Shows cannot be re-linked
  • "); + } + }); + + form.find("#add_show_record").click(function(){ $(this).blur(); form.find("#add_show_rebroadcast").toggle(); diff --git a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js index db5eadd53..be42c53b7 100644 --- a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js +++ b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js @@ -283,6 +283,12 @@ function eventRender(event, element, view) { .find(".fc-event-time") .before(''); } + } else { + if (event.linked) { + $(element) + .find(".fc-event-time") + .before(''); + } } } else if (view.name === 'month') { if (event.show_empty === 1) { @@ -305,6 +311,12 @@ function eventRender(event, element, view) { .find(".fc-event-title") .after(''); } + } else { + if (event.linked) { + $(element) + .find(".fc-event-title") + .after(''); + } } } }