CC-4961: Show linking
Removed logic out of edit-show action Created new SchedulerService Fixed overlapping show bug
This commit is contained in:
parent
a7601d290f
commit
6766d208aa
9 changed files with 189 additions and 182 deletions
85
airtime_mvc/application/services/SchedulerService.php
Normal file
85
airtime_mvc/application/services/SchedulerService.php
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
class Application_Service_SchedulerService
|
||||
{
|
||||
/**
|
||||
*
|
||||
* Enter description here ...
|
||||
* @param array $instanceIds
|
||||
*/
|
||||
public static function updateScheduleStartTime($instanceIds, $diff)
|
||||
{
|
||||
if (count($instanceIds) > 0 && $diff != 0) {
|
||||
$showIdList = implode(",", $instanceIds);
|
||||
$sql = <<<SQL
|
||||
UPDATE cc_schedule
|
||||
SET starts = starts + :diff1::INTERVAL,
|
||||
ends = ends + :diff2::INTERVAL
|
||||
WHERE instance_id IN (:showIds)
|
||||
SQL;
|
||||
|
||||
Application_Common_Database::prepareAndExecute($sql,
|
||||
array(':diff1' => $diff, ':diff2' => $diff,
|
||||
':showIds' => $showIdList),
|
||||
'execute');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Removes any time gaps in shows
|
||||
*
|
||||
* @param array $schedIds schedule ids to exclude
|
||||
*/
|
||||
public function removeGaps($showId, $schedIds=null)
|
||||
{
|
||||
$ccShowInstances = CcShowInstancesQuery::create()->filterByDbShowId($showId)->find();
|
||||
|
||||
foreach ($ccShowInstances as $instance) {
|
||||
Logging::info("Removing gaps from show instance #".$instance->getDbId());
|
||||
//DateTime object
|
||||
$itemStart = $instance->getDbStarts(null);
|
||||
|
||||
$ccScheduleItems = CcScheduleQuery::create()
|
||||
->filterByDbInstanceId($instance->getDbId())
|
||||
->filterByDbId($schedIds, Criteria::NOT_IN)
|
||||
->orderByDbStarts()
|
||||
->find();
|
||||
|
||||
foreach ($ccScheduleItems as $ccSchedule) {
|
||||
//DateTime object
|
||||
$itemEnd = $this->findEndTime($itemStart, $ccSchedule->getDbClipLength());
|
||||
|
||||
$ccSchedule->setDbStarts($itemStart)
|
||||
->setDbEnds($itemEnd);
|
||||
|
||||
$itemStart = $itemEnd;
|
||||
}
|
||||
$ccScheduleItems->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Enter description here ...
|
||||
* @param DateTime $instanceStart
|
||||
* @param string $clipLength
|
||||
*/
|
||||
private function findEndTime($instanceStart, $clipLength)
|
||||
{
|
||||
$startEpoch = $instanceStart->format("U.u");
|
||||
$durationSeconds = Application_Common_DateHelper::playlistTimeToSeconds($clipLength);
|
||||
|
||||
//add two float numbers to 6 subsecond precision
|
||||
//DateTime::createFromFormat("U.u") will have a problem if there is no decimal in the resulting number.
|
||||
$endEpoch = bcadd($startEpoch , (string) $durationSeconds, 6);
|
||||
|
||||
$dt = DateTime::createFromFormat("U.u", $endEpoch, new DateTimeZone("UTC"));
|
||||
|
||||
if ($dt === false) {
|
||||
//PHP 5.3.2 problem
|
||||
$dt = DateTime::createFromFormat("U", intval($endEpoch), new DateTimeZone("UTC"));
|
||||
}
|
||||
|
||||
return $dt;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue