CC-3174 : show builder
darg into and drag around in the timeline is now working. need to change schedule table to not have auto incrementing ids to preserve an item's id for REST. (might find another way)
This commit is contained in:
parent
0199f572bd
commit
e001cd24c1
|
@ -6,7 +6,7 @@ class ShowbuilderController extends Zend_Controller_Action
|
|||
public function init()
|
||||
{
|
||||
$ajaxContext = $this->_helper->getHelper('AjaxContext');
|
||||
$ajaxContext->addActionContext('schedule-update', 'json')
|
||||
$ajaxContext->addActionContext('schedule-move', 'json')
|
||||
->addActionContext('schedule-add', 'json')
|
||||
->addActionContext('schedule-remove', 'json')
|
||||
->addActionContext('builder-feed', 'json')
|
||||
|
@ -103,48 +103,26 @@ class ShowbuilderController extends Zend_Controller_Action
|
|||
$this->view->data = $json;
|
||||
}
|
||||
|
||||
public function scheduleAction() {
|
||||
public function scheduleMoveAction() {
|
||||
|
||||
$request = $this->getRequest();
|
||||
|
||||
$instance = $request->getParam("instance", null);
|
||||
$id = $request->getParam("id", null);
|
||||
$starts_epoch = $request->getParam("start", null);
|
||||
$file_id = $request->getParam("file", null);
|
||||
$selectedItem = $request->getParam("selectedItem");
|
||||
$afterItem = $request->getParam("afterItem");
|
||||
|
||||
$startDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC"));
|
||||
$json = array();
|
||||
|
||||
//invalid request
|
||||
if (is_null($start)) {
|
||||
return;
|
||||
try {
|
||||
$scheduler = new Application_Model_Scheduler();
|
||||
$scheduler->moveItem($selectedItem, $afterItem);
|
||||
|
||||
$json["message"]="success... maybe";
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$json["message"]=$e->getMessage();
|
||||
Logging::log($e->getMessage());
|
||||
}
|
||||
|
||||
//updating a scheduled item.
|
||||
if (isset($id)) {
|
||||
$schedItem = CcScheduleQuery::create()->findPK($id);
|
||||
$duration = $schedItem->getDbEnds('U') - $schedItem->getDbStarts('U');
|
||||
|
||||
$endDT = DateTime::createFromFormat("U", $starts_epoch + $duration, new DateTimeZone("UTC"));
|
||||
|
||||
$oldInstance = $schedItem->getDbInstanceId();
|
||||
|
||||
if ($instance === $oldInstance) {
|
||||
CcScheduleQuery::create()
|
||||
->filterByDbInstanceId($oldInstance)
|
||||
->find();
|
||||
}
|
||||
//file was dragged out of the show into another show or scheduled not within a show.
|
||||
else {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
$schedItem = new CcSchedule();
|
||||
}
|
||||
|
||||
$schedItem->setDbStarts($startDT);
|
||||
$schedItem->setDbEnds($endDT);
|
||||
$schedItem->save();
|
||||
$this->view->data = $json;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,15 @@
|
|||
class Application_Model_Scheduler {
|
||||
|
||||
private $con;
|
||||
private $fileInfo = array(
|
||||
"id" => "",
|
||||
"cliplength" => "",
|
||||
"cuein" => "00:00:00",
|
||||
"cueout" => "00:00:00",
|
||||
"fadein" => "00:00:00",
|
||||
"fadeout" => "00:00:00",
|
||||
"sched_id" => null,
|
||||
);
|
||||
|
||||
public function __construct($id = null) {
|
||||
|
||||
|
@ -16,21 +25,12 @@ class Application_Model_Scheduler {
|
|||
*/
|
||||
private function retrieveMediaFiles($id, $type) {
|
||||
|
||||
$fileInfo = array(
|
||||
"id" => "",
|
||||
"cliplength" => "",
|
||||
"cuein" => "00:00:00",
|
||||
"cueout" => "00:00:00",
|
||||
"fadein" => "00:00:00",
|
||||
"fadeout" => "00:00:00"
|
||||
);
|
||||
|
||||
$files = array();
|
||||
|
||||
if ($type === "audioclip") {
|
||||
$file = CcFilesQuery::create()->findPK($id);
|
||||
|
||||
$data = $fileInfo;
|
||||
$data = $this->fileInfo;
|
||||
$data["id"] = $id;
|
||||
$data["cliplength"] = $file->getDbLength();
|
||||
|
||||
|
@ -60,7 +60,6 @@ class Application_Model_Scheduler {
|
|||
public function scheduleAfter($scheduleItems, $mediaItems, $adjustSched = true) {
|
||||
|
||||
$this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME);
|
||||
|
||||
$this->con->beginTransaction();
|
||||
|
||||
$schedFiles = array();
|
||||
|
@ -73,6 +72,24 @@ class Application_Model_Scheduler {
|
|||
|
||||
$schedFiles = array_merge($schedFiles, $this->retrieveMediaFiles($media["id"], $media["type"]));
|
||||
}
|
||||
$this->insertAfter($scheduleItems, $schedFiles, $adjustSched);
|
||||
|
||||
$this->con->commit();
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$this->con->rollback();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @param array $scheduledIds
|
||||
* @param array $fileIds
|
||||
* @param array $playlistIds
|
||||
*/
|
||||
private function insertAfter($scheduleItems, $schedFiles, $adjustSched = true) {
|
||||
|
||||
try {
|
||||
|
||||
foreach ($scheduleItems as $schedule) {
|
||||
$id = intval($schedule["id"]);
|
||||
|
@ -85,6 +102,7 @@ class Application_Model_Scheduler {
|
|||
|
||||
//user has an old copy of the time line opened.
|
||||
if ($instance !== intval($schedule["instance"])) {
|
||||
Logging::log("items have been since updated");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -113,17 +131,25 @@ class Application_Model_Scheduler {
|
|||
$endTimeEpoch = $nextStartDT->format("U") + $durationDT->format("U");
|
||||
$endTimeDT = DateTime::createFromFormat("U", $endTimeEpoch, new DateTimeZone("UTC"));
|
||||
|
||||
$newItem = new CcSchedule();
|
||||
$newItem->setDbStarts($nextStartDT);
|
||||
$newItem->setDbEnds($endTimeDT);
|
||||
$newItem->setDbFileId($file['id']);
|
||||
$newItem->setDbCueIn($file['cuein']);
|
||||
$newItem->setDbCueOut($file['cueout']);
|
||||
$newItem->setDbFadeIn($file['fadein']);
|
||||
$newItem->setDbFadeOut($file['fadeout']);
|
||||
$newItem->setDbClipLength($durationDT->format("H:i:s.u"));
|
||||
$newItem->setDbInstanceId($instance);
|
||||
$newItem->save($this->con);
|
||||
$sched = new CcSchedule();
|
||||
|
||||
//item existed previously and is being moved.
|
||||
//TODO make it possible to insert the primary key of the item
|
||||
//need to keep same id for resources if we want REST.
|
||||
if (isset($file['sched_id'])) {
|
||||
//$sched->setDbId($file['sched_id']);
|
||||
}
|
||||
|
||||
$sched->setDbStarts($nextStartDT);
|
||||
$sched->setDbEnds($endTimeDT);
|
||||
$sched->setDbFileId($file['id']);
|
||||
$sched->setDbCueIn($file['cuein']);
|
||||
$sched->setDbCueOut($file['cueout']);
|
||||
$sched->setDbFadeIn($file['fadein']);
|
||||
$sched->setDbFadeOut($file['fadeout']);
|
||||
$sched->setDbClipLength($durationDT->format("H:i:s.u"));
|
||||
$sched->setDbInstanceId($instance);
|
||||
$sched->save($this->con);
|
||||
|
||||
$nextStartDT = $endTimeDT;
|
||||
}
|
||||
|
@ -149,6 +175,59 @@ class Application_Model_Scheduler {
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @param array $selectedItem
|
||||
* @param array $afterItem
|
||||
*/
|
||||
public function moveItem($selectedItem, $afterItem, $adjustSched = true) {
|
||||
|
||||
$this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME);
|
||||
|
||||
$this->con->beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$origSelIns = intval($selectedItem[0]["instance"]);
|
||||
$origAfterIns = intval($afterItem[0]["instance"]);
|
||||
|
||||
Logging::log("Moving item {$selectedItem[0]["id"]}");
|
||||
Logging::log("After {$afterItem[0]["id"]}");
|
||||
|
||||
$selected = CcScheduleQuery::create()->findPk($selectedItem[0]["id"]);
|
||||
$after = CcScheduleQuery::create()->findPk($afterItem[0]["id"]);
|
||||
|
||||
if ($origSelIns !== $selected->getDBInstanceId()
|
||||
|| $origAfterIns !== $after->getDBInstanceId()) {
|
||||
|
||||
Logging::log("items have been since updated");
|
||||
return;
|
||||
}
|
||||
|
||||
$selected->delete($this->con);
|
||||
$this->removeGaps($origSelIns);
|
||||
|
||||
//moved to another show, remove gaps from original show.
|
||||
if ($adjustSched === true && $origSelIns !== $origAfterIns) {
|
||||
|
||||
}
|
||||
|
||||
$data = $this->fileInfo;
|
||||
$data["id"] = $selected->getDbFileId();
|
||||
$data["cliplength"] = $selected->getDbClipLength();
|
||||
$data["cuein"] = $selected->getDbCueIn();
|
||||
$data["cueout"] = $selected->getDbCueOut();
|
||||
$data["fadein"] = $selected->getDbFadeIn();
|
||||
$data["fadeout"] = $selected->getDbFadeOut();
|
||||
$data["sched_id"] = $selected->getDbId();
|
||||
|
||||
$this->insertAfter($afterItem, array($data), $adjustSched);
|
||||
|
||||
$this->con->commit();
|
||||
}
|
||||
catch (Exception $e) {
|
||||
|
@ -219,7 +298,6 @@ class Application_Model_Scheduler {
|
|||
Logging::log($itemStartDT->format("Y-m-d H:i:s"));
|
||||
|
||||
Logging::log("duration");
|
||||
Logging::log($durationDT->format("Y-m-d H:i:s"));
|
||||
Logging::log($durationDT->format("U"). "seconds");
|
||||
|
||||
$endEpoch = $itemStartDT->format("U") + $durationDT->format("U");
|
||||
|
|
|
@ -325,8 +325,8 @@ $(document).ready(function() {
|
|||
fnUpdate;
|
||||
|
||||
fnAdd = function() {
|
||||
var aSchedIds = [],
|
||||
aMediaIds = [];
|
||||
var aMediaIds = [],
|
||||
aSchedIds = [];
|
||||
|
||||
aSchedIds.push({"id": oPrevData.id, "instance": oPrevData.instance});
|
||||
aMediaIds.push({"id": oItemData.id, "type": oItemData.ftype});
|
||||
|
@ -338,6 +338,20 @@ $(document).ready(function() {
|
|||
});
|
||||
};
|
||||
|
||||
fnMove = function() {
|
||||
var aSelect = [],
|
||||
aAfter = [];
|
||||
|
||||
aSelect.push({"id": oItemData.id, "instance": oItemData.instance});
|
||||
aAfter.push({"id": oPrevData.id, "instance": oPrevData.instance});
|
||||
|
||||
$.post("/showbuilder/schedule-move",
|
||||
{"format": "json", "selectedItem": aSelect, "afterItem": aAfter},
|
||||
function(json){
|
||||
oTable.fnDraw();
|
||||
});
|
||||
};
|
||||
|
||||
fnReceive = function(event, ui) {
|
||||
origRow = ui.item;
|
||||
};
|
||||
|
@ -353,6 +367,7 @@ $(document).ready(function() {
|
|||
//item was reordered.
|
||||
else {
|
||||
oItemData = ui.item.data("aData");
|
||||
fnMove();
|
||||
}
|
||||
|
||||
origRow = undefined;
|
||||
|
|
Loading…
Reference in New Issue