Changed propel to prepared statements
This commit is contained in:
parent
792366e1f5
commit
0107f36206
|
@ -388,7 +388,7 @@ class Application_Model_Scheduler
|
||||||
return $dt;
|
return $dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function findNextStartTime($DT, $instance)
|
private function findNextStartTime($DT, $instanceId)
|
||||||
{
|
{
|
||||||
$sEpoch = $DT->format("U.u");
|
$sEpoch = $DT->format("U.u");
|
||||||
$nEpoch = $this->epochNow;
|
$nEpoch = $this->epochNow;
|
||||||
|
@ -410,7 +410,7 @@ class Application_Model_Scheduler
|
||||||
->setDbCueIn('00:00:00')
|
->setDbCueIn('00:00:00')
|
||||||
->setDbCueOut('00:00:00')
|
->setDbCueOut('00:00:00')
|
||||||
->setDbPlayoutStatus(-1)
|
->setDbPlayoutStatus(-1)
|
||||||
->setDbInstanceId($instance->getDbId())
|
->setDbInstanceId($instanceId)
|
||||||
->save($this->con);
|
->save($this->con);
|
||||||
} else {
|
} else {
|
||||||
$nextDT = $DT;
|
$nextDT = $DT;
|
||||||
|
@ -521,7 +521,12 @@ class Application_Model_Scheduler
|
||||||
|
|
||||||
$linked = false;
|
$linked = false;
|
||||||
|
|
||||||
|
$dropIndex_sql = "DROP INDEX cc_schedule_instance_id_idx";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$dropIndex_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
foreach ($scheduleItems as $schedule) {
|
foreach ($scheduleItems as $schedule) {
|
||||||
|
Logging::info($schedule);
|
||||||
$id = intval($schedule["id"]);
|
$id = intval($schedule["id"]);
|
||||||
|
|
||||||
/* Find out if the show where the cursor position (where an item will
|
/* Find out if the show where the cursor position (where an item will
|
||||||
|
@ -531,12 +536,18 @@ class Application_Model_Scheduler
|
||||||
* of inserted items
|
* of inserted items
|
||||||
*/
|
*/
|
||||||
if ($id != 0) {
|
if ($id != 0) {
|
||||||
$ccSchedule = CcScheduleQuery::create()->findPk($id);
|
$schedule_sql = "SELECT * FROM cc_schedule WHERE id = ".$id;
|
||||||
$ccShowInstance = CcShowInstancesQuery::create()->findPk($ccSchedule->getDbInstanceId());
|
$ccSchedule = Application_Common_Database::prepareAndExecute(
|
||||||
$ccShow = $ccShowInstance->getCcShow();
|
$schedule_sql, array(), Application_Common_Database::SINGLE);
|
||||||
$linked = $ccShow->isLinked();
|
|
||||||
|
$show_sql = "SELECT * FROM cc_show WHERE id IN (".
|
||||||
|
"SELECT show_id FROM cc_show_instances WHERE id = ".$ccSchedule["instance_id"].")";
|
||||||
|
$ccShow = Application_Common_Database::prepareAndExecute(
|
||||||
|
$show_sql, array(), Application_Common_Database::SINGLE);
|
||||||
|
|
||||||
|
$linked = $ccShow["linked"];
|
||||||
if ($linked) {
|
if ($linked) {
|
||||||
$unique = $ccShow->getDbId() . $ccSchedule->getDbPosition();
|
$unique = $ccShow["id"] . $ccSchedule["position"];
|
||||||
if (!in_array($unique, $temp)) {
|
if (!in_array($unique, $temp)) {
|
||||||
$temp[] = $unique;
|
$temp[] = $unique;
|
||||||
} else {
|
} else {
|
||||||
|
@ -544,11 +555,14 @@ class Application_Model_Scheduler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$ccShowInstance = CcShowInstancesQuery::create()->findPk($schedule["instance"]);
|
$show_sql = "SELECT * FROM cc_show WHERE id IN (".
|
||||||
$ccShow = $ccShowInstance->getccShow();
|
"SELECT show_id FROM cc_show_instances WHERE id = ".$schedule["instance"].")";
|
||||||
$linked = $ccShow->isLinked();
|
$ccShow = Application_Common_Database::prepareAndExecute(
|
||||||
|
$show_sql, array(), Application_Common_Database::SINGLE);
|
||||||
|
|
||||||
|
$linked = $ccShow["linked"];
|
||||||
if ($linked) {
|
if ($linked) {
|
||||||
$unique = $ccShow->getDbId() . "a";
|
$unique = $ccShow["id"] . "a";
|
||||||
if (!in_array($unique, $temp)) {
|
if (!in_array($unique, $temp)) {
|
||||||
$temp[] = $unique;
|
$temp[] = $unique;
|
||||||
} else {
|
} else {
|
||||||
|
@ -562,39 +576,47 @@ class Application_Model_Scheduler
|
||||||
* to that show
|
* to that show
|
||||||
*/
|
*/
|
||||||
if ($linked) {
|
if ($linked) {
|
||||||
$instances = $ccShow->getCcShowInstancess();
|
$instance_sql = "SELECT * FROM cc_show_instances ".
|
||||||
|
"WHERE show_id = ".$ccShow["id"];
|
||||||
|
$instances = Application_Common_Database::prepareAndExecute(
|
||||||
|
$instance_sql);
|
||||||
} else {
|
} else {
|
||||||
$instances = array($ccShowInstance);
|
$instance_sql = "SELECT * FROM cc_show_instances ".
|
||||||
|
"WHERE id = ".$schedule["instance"];
|
||||||
|
$instances = Application_Common_Database::prepareAndExecute(
|
||||||
|
$instance_sql);
|
||||||
}
|
}
|
||||||
foreach($instances as &$instance) {
|
foreach($instances as &$instance) {
|
||||||
$instanceId = $instance->getDbId();
|
$instanceId = $instance["id"];
|
||||||
if ($id !== 0) {
|
if ($id !== 0) {
|
||||||
/* We use the selected cursor's position to find the same
|
/* We use the selected cursor's position to find the same
|
||||||
* positions in every other linked instance
|
* positions in every other linked instance
|
||||||
*/
|
*/
|
||||||
$pos = $ccSchedule->getDbPosition();
|
$pos = $ccSchedule["position"];
|
||||||
|
|
||||||
$linkCcSchedule = CcScheduleQuery::create()
|
$linkedItem_sql = "SELECT ends FROM cc_schedule ".
|
||||||
->filterByDbInstanceId($instanceId)
|
"WHERE instance_id = {$instanceId} ".
|
||||||
->filterByDbPosition($pos)
|
"AND position = {$pos} ".
|
||||||
->filterByDbPlayoutStatus(-1, Criteria::NOT_EQUAL)
|
"AND playout_status IS NOT -1";
|
||||||
->findOne();
|
$linkedItemEnds = Application_Common_Database::prepareAndExecute(
|
||||||
|
$linkedItem_sql, array(), Application_Common_Database::COLUMN);
|
||||||
|
|
||||||
$schedItemEndDT = $linkCcSchedule->getDbEnds(null);
|
$nextStartDT = $this->findNextStartTime(
|
||||||
$nextStartDT = $this->findNextStartTime($schedItemEndDT, $instance);
|
new DateTime($linkedItemEnds, new DateTimeZone("UTC")),
|
||||||
|
$instanceId);
|
||||||
|
|
||||||
$pos++;
|
$pos++;
|
||||||
}
|
}
|
||||||
//selected empty row to add after
|
//selected empty row to add after
|
||||||
else {
|
else {
|
||||||
$showStartDT = $instance->getDbStarts(null);
|
$showStartDT = new DateTime($instance["starts"], new DateTimeZone("UTC"));
|
||||||
$nextStartDT = $this->findNextStartTime($showStartDT, $instance);
|
$nextStartDT = $this->findNextStartTime($showStartDT, $instanceId);
|
||||||
|
|
||||||
//show is empty so start position counter at 0
|
//show is empty so start position counter at 0
|
||||||
$pos = 0;
|
$pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!in_array($instance->getDbId(), $affectedShowInstances)) {
|
if (!in_array($instanceId, $affectedShowInstances)) {
|
||||||
$affectedShowInstances[] = $instanceId;
|
$affectedShowInstances[] = $instanceId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,39 +643,50 @@ class Application_Model_Scheduler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$doInsert = false;
|
||||||
|
$doUpdate = false;
|
||||||
|
$values = array();
|
||||||
foreach ($filesToInsert as &$file) {
|
foreach ($filesToInsert as &$file) {
|
||||||
//item existed previously and is being moved.
|
//item existed previously and is being moved.
|
||||||
//need to keep same id for resources if we want REST.
|
//need to keep same id for resources if we want REST.
|
||||||
if (isset($file['sched_id'])) {
|
if (isset($file['sched_id'])) {
|
||||||
$sched = CcScheduleQuery::create()->findPk($file["sched_id"]);
|
$doUpdate = true;
|
||||||
|
|
||||||
|
$movedItem_sql = "SELECT * FROM cc_schedule ".
|
||||||
|
"WHERE id = ".$file["sched_id"];
|
||||||
|
$sched = Application_Common_Database::prepareAndExecute(
|
||||||
|
$movedItem_sql, array(), Application_Common_Database::SINGLE);
|
||||||
|
|
||||||
/* We need to keep a record of the original positon a track
|
/* We need to keep a record of the original positon a track
|
||||||
* is being moved from so we can use it to retrieve the correct
|
* is being moved from so we can use it to retrieve the correct
|
||||||
* items in linked instances
|
* items in linked instances
|
||||||
*/
|
*/
|
||||||
if (!isset($originalPosition)) {
|
if (!isset($originalPosition)) {
|
||||||
$originalPosition = $sched->getDbPosition();
|
$originalPosition = $sched["position"];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are moving an item in a linked show we need to get
|
/* If we are moving an item in a linked show we need to get
|
||||||
* the relative item to move in each instance. We know what the
|
* the relative item to move in each instance. We know what the
|
||||||
* relative item is by its position
|
* relative item is by its position
|
||||||
*/
|
*/
|
||||||
if ($linked && $moveAction) {
|
if ($linked) {
|
||||||
$sched = CcScheduleQuery::create()
|
$movedItem_sql = "SELECT * FROM cc_schedule ".
|
||||||
->filterByDbInstanceId($instanceId)
|
"WHERE position = {$originalPosition} ".
|
||||||
->filterByDbPosition($originalPosition)
|
"AND instance_id = {$instanceId}";
|
||||||
->findOne();
|
|
||||||
}
|
|
||||||
$excludeIds[] = intval($sched->getDbId());
|
|
||||||
|
|
||||||
$file["cliplength"] = $sched->getDbClipLength();
|
$sched = Application_Common_Database::prepareAndExecute(
|
||||||
$file["cuein"] = $sched->getDbCueIn();
|
$movedItem_sql, array(), Application_Common_Database::SINGLE);
|
||||||
$file["cueout"] = $sched->getDbCueOut();
|
}
|
||||||
$file["fadein"] = $sched->getDbFadeIn();
|
$excludeIds[] = intval($sched["id"]);
|
||||||
$file["fadeout"] = $sched->getDbFadeOut();
|
|
||||||
|
$file["cliplength"] = $sched["clip_length"];
|
||||||
|
$file["cuein"] = $sched["cue_in"];
|
||||||
|
$file["cueout"] = $sched["cue_out"];
|
||||||
|
$file["fadein"] = $sched["fade_in"];
|
||||||
|
$file["fadeout"] = $sched["fade_out"];
|
||||||
} else {
|
} else {
|
||||||
$sched = new CcSchedule();
|
//$sched = new CcSchedule();
|
||||||
|
$doInsert = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']);
|
$endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']);
|
||||||
|
@ -662,30 +695,47 @@ class Application_Model_Scheduler
|
||||||
$file['fadein'] = Application_Common_DateHelper::secondsToPlaylistTime($file['fadein']);
|
$file['fadein'] = Application_Common_DateHelper::secondsToPlaylistTime($file['fadein']);
|
||||||
$file['fadeout'] = Application_Common_DateHelper::secondsToPlaylistTime($file['fadeout']);
|
$file['fadeout'] = Application_Common_DateHelper::secondsToPlaylistTime($file['fadeout']);
|
||||||
|
|
||||||
$sched->setDbStarts($nextStartDT)
|
|
||||||
->setDbEnds($endTimeDT)
|
|
||||||
->setDbCueIn($file['cuein'])
|
|
||||||
->setDbCueOut($file['cueout'])
|
|
||||||
->setDbFadeIn($file['fadein'])
|
|
||||||
->setDbFadeOut($file['fadeout'])
|
|
||||||
->setDbClipLength($file['cliplength'])
|
|
||||||
->setDbPosition($pos);
|
|
||||||
|
|
||||||
if (!$moveAction) {
|
|
||||||
$sched->setDbInstanceId($instanceId);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($file["type"]) {
|
switch ($file["type"]) {
|
||||||
case 0:
|
case 0:
|
||||||
$sched->setDbFileId($file['id']);
|
$fileId = $file["id"];
|
||||||
|
$streamId = "null";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
$sched->setDbStreamId($file['id']);
|
$streamId = $file["id"];
|
||||||
|
$fileId = "null";
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sched->save($this->con);
|
if ($doInsert) {
|
||||||
|
$values[] = "(".
|
||||||
|
"'{$nextStartDT->format("Y-m-d H:i:s")}', ".
|
||||||
|
"'{$endTimeDT->format("Y-m-d H:i:s")}', ".
|
||||||
|
"'{$file["cuein"]}', ".
|
||||||
|
"'{$file["cueout"]}', ".
|
||||||
|
"'{$file["fadein"]}', ".
|
||||||
|
"'{$file["fadeout"]}', ".
|
||||||
|
"'{$file["cliplength"]}', ".
|
||||||
|
"{$pos}, ".
|
||||||
|
"{$instanceId}, ".
|
||||||
|
"{$fileId}, ".
|
||||||
|
"{$streamId})";
|
||||||
|
|
||||||
|
} elseif ($doUpdate) {
|
||||||
|
$update_sql = "UPDATE cc_schedule SET ".
|
||||||
|
"starts = '{$nextStartDT->format("Y-m-d H:i:s")}', ".
|
||||||
|
"ends = '{$endTimeDT->format("Y-m-d H:i:s")}', ".
|
||||||
|
"cue_in = '{$file["cuein"]}', ".
|
||||||
|
"cue_out = '{$file["cueout"]}', ".
|
||||||
|
"fade_in = '{$file["fadein"]}', ".
|
||||||
|
"fade_out = '{$file["fadeout"]}', ".
|
||||||
|
"clip_length = '{$file["cliplength"]}', ".
|
||||||
|
"position = {$pos} ".
|
||||||
|
"WHERE id = {$sched["id"]}";
|
||||||
|
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$update_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
}
|
||||||
|
|
||||||
$nextStartDT = $endTimeDT;
|
$nextStartDT = $endTimeDT;
|
||||||
$pos++;
|
$pos++;
|
||||||
|
@ -694,9 +744,18 @@ class Application_Model_Scheduler
|
||||||
* after the insert location, we need to exclude the
|
* after the insert location, we need to exclude the
|
||||||
* schedule item we just inserted because it has correct
|
* schedule item we just inserted because it has correct
|
||||||
* start and end times*/
|
* start and end times*/
|
||||||
$excludeIds[] = $sched->getDbId();
|
//$excludeIds[] = $lastInsertId;
|
||||||
|
|
||||||
}//all files have been inserted/moved
|
}//all files have been inserted/moved
|
||||||
|
if ($doInsert) {
|
||||||
|
$insert_sql = "INSERT INTO cc_schedule ".
|
||||||
|
"(starts, ends, cue_in, cue_out, fade_in, fade_out, ".
|
||||||
|
"clip_length, position, instance_id, file_id, stream_id) VALUES ".
|
||||||
|
implode($values, ",");
|
||||||
|
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$insert_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
}
|
||||||
|
|
||||||
// update is_scheduled flag for each cc_file
|
// update is_scheduled flag for each cc_file
|
||||||
$fileIds = array();
|
$fileIds = array();
|
||||||
|
@ -718,22 +777,30 @@ class Application_Model_Scheduler
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($adjustSched === true) {
|
if ($adjustSched === true) {
|
||||||
$followingSchedItems = CcScheduleQuery::create()
|
$followingItems_sql = "SELECT * FROM cc_schedule ".
|
||||||
->filterByDBStarts($initalStartDT->format("Y-m-d H:i:s.u"), Criteria::GREATER_EQUAL)
|
"WHERE starts >= '{$initalStartDT->format("Y-m-d H:i:s.u")}' ".
|
||||||
->filterByDbInstanceId($instance->getDbId())
|
"AND instance_id = {$instanceId} ";
|
||||||
->filterByDbId($excludeIds, Criteria::NOT_IN)
|
if (count($excludeIds) > 0) {
|
||||||
->orderByDbStarts()
|
$followingItems_sql .= "AND id NOT IN (". implode($excludeIds, ",").") ";
|
||||||
->find($this->con);
|
}
|
||||||
|
$followingItems_sql .= "ORDER BY starts";
|
||||||
|
|
||||||
|
$followingSchedItems = Application_Common_Database::prepareAndExecute(
|
||||||
|
$followingItems_sql);
|
||||||
|
|
||||||
$pstart = microtime(true);
|
$pstart = microtime(true);
|
||||||
|
|
||||||
//recalculate the start/end times after the inserted items.
|
//recalculate the start/end times after the inserted items.
|
||||||
foreach ($followingSchedItems as $item) {
|
foreach ($followingSchedItems as $item) {
|
||||||
$endTimeDT = $this->findEndTime($nextStartDT, $item->getDbClipLength());
|
$endTimeDT = $this->findEndTime($nextStartDT, $item["clip_length"]);
|
||||||
$item->setDbStarts($nextStartDT);
|
$update_sql = "UPDATE cc_schedule SET ".
|
||||||
$item->setDbEnds($endTimeDT);
|
"starts = '{$nextStartDT->format("Y-m-d H:i:s")}', ".
|
||||||
$item->setDbPosition($pos);
|
"ends = '{$endTimeDT->format("Y-m-d H:i:s")}', ".
|
||||||
$item->save($this->con);
|
"position = {$pos} ".
|
||||||
|
"WHERE id = {$item["id"]}";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$update_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
$nextStartDT = $endTimeDT;
|
$nextStartDT = $endTimeDT;
|
||||||
$pos++;
|
$pos++;
|
||||||
}
|
}
|
||||||
|
@ -742,12 +809,16 @@ class Application_Model_Scheduler
|
||||||
Logging::debug("adjusting all following items.");
|
Logging::debug("adjusting all following items.");
|
||||||
Logging::debug(floatval($pend) - floatval($pstart));
|
Logging::debug(floatval($pend) - floatval($pstart));
|
||||||
|
|
||||||
$this->calculateCrossfades($instance->getDbId());
|
$this->calculateCrossfades($instanceId);
|
||||||
}
|
}
|
||||||
}//for each instance
|
}//for each instance
|
||||||
|
|
||||||
}//for each schedule location
|
}//for each schedule location
|
||||||
|
|
||||||
|
$createIndex_sql = "CREATE INDEX cc_schedule_instance_id_idx ".
|
||||||
|
"ON cc_schedule USING btree(instance_id)";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$createIndex_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
$endProfile = microtime(true);
|
$endProfile = microtime(true);
|
||||||
Logging::debug("finished adding scheduled items.");
|
Logging::debug("finished adding scheduled items.");
|
||||||
Logging::debug(floatval($endProfile) - floatval($startProfile));
|
Logging::debug(floatval($endProfile) - floatval($startProfile));
|
||||||
|
@ -783,6 +854,11 @@ class Application_Model_Scheduler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function updateMovedItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private function getInstances($instanceId)
|
private function getInstances($instanceId)
|
||||||
{
|
{
|
||||||
$ccShowInstance = CcShowInstancesQuery::create()->findPk($instanceId);
|
$ccShowInstance = CcShowInstancesQuery::create()->findPk($instanceId);
|
||||||
|
|
|
@ -155,64 +155,105 @@ class Application_Service_SchedulerService
|
||||||
* any other instances with content
|
* any other instances with content
|
||||||
*/
|
*/
|
||||||
$instanceIds = $ccShow->getInstanceIds();
|
$instanceIds = $ccShow->getInstanceIds();
|
||||||
$ccSchedules = CcScheduleQuery::create()
|
$schedule_sql = "SELECT * FROM cc_schedule ".
|
||||||
->filterByDbInstanceId($instanceIds, Criteria::IN)
|
"WHERE instance_id IN (".implode($instanceIds, ",").")";
|
||||||
->find();
|
$ccSchedules = Application_Common_Database::prepareAndExecute(
|
||||||
if (!$ccSchedules->isEmpty()) {
|
$schedule_sql);
|
||||||
|
|
||||||
|
if (count($ccSchedules) > 0) {
|
||||||
/* Find the show contents of just one of the instances. It doesn't
|
/* 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
|
* matter which instance we use since all the content is the same
|
||||||
*/
|
*/
|
||||||
$ccSchedule = $ccSchedules->getFirst();
|
$ccSchedule = $ccSchedules[0];
|
||||||
$showStamp = CcScheduleQuery::create()
|
$showStamp_sql = "SELECT * FROM cc_schedule ".
|
||||||
->filterByDbInstanceId($ccSchedule->getDbInstanceId())
|
"WHERE instance_id = {$ccSchedule["instance_id"]} ".
|
||||||
->orderByDbStarts()
|
"ORDER BY starts";
|
||||||
->find();
|
$showStamp = Application_Common_Database::prepareAndExecute(
|
||||||
|
$showStamp_sql);
|
||||||
|
|
||||||
//get time_filled so we can update cc_show_instances
|
//get time_filled so we can update cc_show_instances
|
||||||
$timeFilled = $ccSchedule->getCcShowInstances()->getDbTimeFilled();
|
$timeFilled_sql = "SELECT time_filled FROM cc_show_instances ".
|
||||||
|
"WHERE id = {$ccSchedule["instance_id"]}";
|
||||||
|
$timeFilled = Application_Common_Database::prepareAndExecute(
|
||||||
|
$timeFilled_sql, array(), Application_Common_Database::COLUMN);
|
||||||
|
|
||||||
|
$dropIndex_sql = "DROP INDEX cc_schedule_instance_id_idx";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$dropIndex_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
//need to find out which linked instances are empty
|
//need to find out which linked instances are empty
|
||||||
foreach ($ccShow->getCcShowInstancess() as $ccShowInstance) {
|
$values = array();
|
||||||
$ccSchedules = CcScheduleQuery::create()
|
foreach ($instanceIds as $id) {
|
||||||
->filterByDbInstanceId($ccShowInstance->getDbId())
|
$instanceSched_sql = "SELECT * FROM cc_schedule ".
|
||||||
->find();
|
"WHERE instance_id = {$id} ".
|
||||||
|
"ORDER by starts";
|
||||||
|
$ccSchedules = Application_Common_Database::prepareAndExecute(
|
||||||
|
$instanceSched_sql);
|
||||||
|
|
||||||
/* If the show instance is empty OR it has different content than
|
/* 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 first instance, we need to fill/replace with the show stamp
|
||||||
* (The show stamp is taken from the first show instance's content)
|
* (The show stamp is taken from the first show instance's content)
|
||||||
*/
|
*/
|
||||||
if ($ccSchedules->isEmpty() ||
|
if (count($ccSchedules) < 1 ||
|
||||||
self::replaceInstanceContentCheck($ccShowInstance, $showStamp)) {
|
self::replaceInstanceContentCheck($ccSchedules, $showStamp)) {
|
||||||
|
|
||||||
$nextStartDT = $ccShowInstance->getDbStarts(null);
|
//$nextStartDT = $ccShowInstance->getDbStarts(null);
|
||||||
|
$instanceStart_sql = "SELECT starts FROM cc_show_instances ".
|
||||||
|
"WHERE id = {$id}";
|
||||||
|
$nextStartDT = new DateTime(
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$instanceStart_sql, array(), Application_Common_Database::EXECUTE),
|
||||||
|
new DateTimeZone("UTC"));
|
||||||
|
|
||||||
foreach ($showStamp as $item) {
|
foreach ($showStamp as $item) {
|
||||||
$endTimeDT = self::findEndTime($nextStartDT, $item->getDbClipLength());
|
$endTimeDT = self::findEndTime($nextStartDT, $item["clip_length"]);
|
||||||
|
|
||||||
$ccSchedule = new CcSchedule();
|
if (is_null($item["file_id"])) {
|
||||||
$ccSchedule
|
$item["file_id"] = "null";
|
||||||
->setDbStarts($nextStartDT)
|
} elseif (is_null($item["stream_id"])) {
|
||||||
->setDbEnds($endTimeDT)
|
$item["stream_id"] = "null";
|
||||||
->setDbFileId($item->getDbFileId())
|
}
|
||||||
->setDbStreamId($item->getDbStreamId())
|
|
||||||
->setDbClipLength($item->getDbClipLength())
|
$values[] = "(".
|
||||||
->setDbFadeIn($item->getDbFadeIn())
|
"'{$nextStartDT->format("Y-m-d H:i:s")}', ".
|
||||||
->setDbFadeOut($item->getDbFadeOut())
|
"'{$endTimeDT->format("Y-m-d H:i:s")}', ".
|
||||||
->setDbCuein($item->getDbCueIn())
|
"'{$item["clip_length"]}', ".
|
||||||
->setDbCueOut($item->getDbCueOut())
|
"'{$item["fade_in"]}', ".
|
||||||
->setDbInstanceId($ccShowInstance->getDbId())
|
"'{$item["fade_out"]}', ".
|
||||||
->setDbPosition($item->getDbPosition())
|
"'{$item["cue_in"]}', ".
|
||||||
->save();
|
"'{$item["cue_out"]}', ".
|
||||||
|
"{$item["file_id"]}, ".
|
||||||
|
"{$item["stream_id"]}, ".
|
||||||
|
"{$id}, ".
|
||||||
|
"{$item["position"]})";
|
||||||
|
|
||||||
$nextStartDT = $endTimeDT;
|
$nextStartDT = $endTimeDT;
|
||||||
} //foreach show item
|
} //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
|
} //foreach linked instance
|
||||||
|
|
||||||
|
$insert_sql = "INSERT INTO cc_schedule (starts, ends, ".
|
||||||
|
"clip_length, fade_in, fade_out, cue_in, cue_out, ".
|
||||||
|
"file_id, stream_id, instance_id, position) VALUES ".
|
||||||
|
implode($values, ",");
|
||||||
|
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$insert_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
|
$createIndex_sql = "CREATE INDEX cc_schedule_instance_id_idx ".
|
||||||
|
"ON cc_schedule USING btree(instance_id)";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$createIndex_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
|
//update time_filled in cc_show_instances
|
||||||
|
$now = gmdate("Y-m-d H:i:s");
|
||||||
|
$update_sql = "UPDATE cc_show_instances SET ".
|
||||||
|
"time_filled = '{$timeFilled}', ".
|
||||||
|
"last_scheduled = '{$now}' ".
|
||||||
|
"WHERE show_id = {$ccShow->getDbId()}";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$update_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
|
|
||||||
} //if at least one linked instance has content
|
} //if at least one linked instance has content
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,20 +300,24 @@ class Application_Service_SchedulerService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function replaceInstanceContentCheck($ccShowInstance, $showStamp)
|
private static function replaceInstanceContentCheck($currentShowStamp, $showStamp)
|
||||||
{
|
{
|
||||||
$currentShowStamp = CcScheduleQuery::create()
|
/*$currentShowStamp = CcScheduleQuery::create()
|
||||||
->filterByDbInstanceId($ccShowInstance->getDbId())
|
->filterByDbInstanceId($ccShowInstance->getDbId())
|
||||||
->orderByDbStarts()
|
->orderByDbStarts()
|
||||||
->find();
|
->find();*/
|
||||||
|
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
foreach ($showStamp as $item) {
|
foreach ($showStamp as $item) {
|
||||||
if ($item->getDbFileId() != $currentShowStamp[$counter]->getDbFileId() ||
|
if ($item["file_id"] != $currentShowStamp[$counter]["file_id"] ||
|
||||||
$item->getDbStreamId() != $currentShowStamp[$counter]->getDbStreamId()) {
|
$item["stream_id"] != $currentShowStamp[$counter]["stream_id"]) {
|
||||||
CcScheduleQuery::create()
|
/*CcScheduleQuery::create()
|
||||||
->filterByDbInstanceId($ccShowInstance->getDbId())
|
->filterByDbInstanceId($ccShowInstance->getDbId())
|
||||||
->delete();
|
->delete();*/
|
||||||
|
$delete_sql = "DELETE FROM cc_schedule ".
|
||||||
|
"WHERE instance_id = {$currentShowStamp[$counter]["instance_id"]}";
|
||||||
|
Application_Common_Database::prepareAndExecute(
|
||||||
|
$delete_sql, array(), Application_Common_Database::EXECUTE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue