CC-3174 : Show builder

creating a scheduling system to work with the new timeline in mind using propel.
This commit is contained in:
Naomi Aro 2012-01-27 21:06:04 +01:00
parent f5761fd03c
commit 3f3117cf0e
8 changed files with 175 additions and 27 deletions

View File

@ -29,6 +29,13 @@ $pages = array(
'action' => 'index',
'resource' => 'library'
),
array(
'label' => 'Show Builder',
'module' => 'default',
'controller' => 'Showbuilder',
'action' => 'index',
'resource' => 'showbuilder'
),
array(
'label' => 'Calendar',
'module' => 'default',
@ -67,7 +74,7 @@ $pages = array(
'action' => 'stream-setting'
),
array(
'label' =>
'label' =>
Application_Model_Preference::GetPlanLevel() == 'disabled'?'Support Settings':'Station Information Settings',
'module' => 'default',
'controller' => 'Preference',

View File

@ -232,8 +232,8 @@ class LibraryController extends Zend_Controller_Action
public function contentsAction()
{
$post = $this->getRequest()->getPost();
$datatables = Application_Model_StoredFile::searchFilesForPlaylistBuilder($post);
$params = $this->getRequest()->getParams();
$datatables = Application_Model_StoredFile::searchFilesForPlaylistBuilder($params);
//format clip lengh to 1 decimal
foreach($datatables["aaData"] as &$data){

View File

@ -26,13 +26,8 @@ class ShowbuilderController extends Zend_Controller_Action
$request = $this->getRequest();
$baseUrl = $request->getBaseUrl();
$this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker.js','text/javascript');
$this->view->headScript()->appendScript("var serverTimezoneOffset = ".date("Z")."; //in seconds");
//$this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js','text/javascript');
//$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js','text/javascript');
//$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js','text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedHeader.js','text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker.js','text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/showbuilder/builder.js','text/javascript');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.ui.timepicker.css');
@ -64,12 +59,44 @@ class ShowbuilderController extends Zend_Controller_Action
$request = $this->getRequest();
$show_instance_id = $request->getParam("sid", 0);
$scheduled_item_id = $request->getParam("time", 0);
$scheduled_start = $request->getParam("start", 0);
$instance = $request->getParam("instance", null);
$id = $request->getParam("id", null);
$starts_epoch = $request->getParam("start", null);
$file_id = $request->getParam("file", null);
//snap to previous/next default.
$scheduled_type = $request->getParam("type", 0);
$startDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC"));
//invalid request
if (is_null($start)) {
return;
}
//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();
}
}

View File

@ -0,0 +1,70 @@
<?php
class Application_Model_Scheduler {
private $propSched;
public function __construct($id = null) {
if (is_null($id)) {
$this->propSched = new CcSchedule();
}
else {
$this->propSched = CcScheduleQuery::create()->findPK($id);
}
}
/*
public function findScheduledItems($starts, $ends) {
CcScheduleQuery::create()
->filterByDbStarts(array('min' => $starts->format('Y-m-d H:i:s'), 'max' => $ends->format('Y-m-d H:i:s')))
->find();
}
*/
public function addScheduledItem($starts, $duration, $adjustSched = true) {
}
/*
* @param DateTime $starts
*/
public function updateScheduledItem($p_newStarts, $p_adjustSched = true) {
$origStarts = $this->propSched->getDbStarts(null);
$diff = $origStarts->diff($p_newStarts);
//item is scheduled further in future
if ($diff->format("%R") === "+") {
CcScheduleQuery::create()
->filterByDbStarts($this->propSched->getDbStarts(), Criteria::GREATER_THAN)
->filterByDbId($this->propSched->getDbId(), Criteria::NOT_EQUAL)
->find();
}
//item has been scheduled earlier
else {
CcScheduleQuery::create()
->filterByDbStarts($this->propSched->getDbStarts(), Criteria::GREATER_THAN)
->filterByDbId($this->propSched->getDbId(), Criteria::NOT_EQUAL)
->find();
}
}
public function removeScheduledItem($adjustSched = true) {
if ($adjustSched === true) {
$duration = $this->propSched->getDbEnds('U') - $this->propSched->getDbStarts('U');
CcScheduleQuery::create()
->filterByDbInstanceId()
->filterByDbStarts()
->find();
}
$this->propSched->delete();
}
}

View File

@ -14,7 +14,9 @@ class Application_Model_ShowBuilder {
"id" => "",
"instance" => "",
"starts" => "",
"startsUnix" => null,
"ends" => "",
"endsUnix" => null,
"runtime" => "",
"title" => "",
"creator" => "",
@ -73,7 +75,10 @@ class Application_Model_ShowBuilder {
$row["header"] = true;
$row["starts"] = $showStartDT->format("Y-m-d H:i");
$row["startsUnix"] = $showStartDT->format("U");
$row["ends"] = $showEndDT->format("Y-m-d H:i");
$row["endsUnix"] = $showEndDT->format("U");
$row["duration"] = $showEndDT->format("U") - $showStartDT->format("U");
$row["title"] = $p_item["show_name"];
return $row;
@ -94,7 +99,10 @@ class Application_Model_ShowBuilder {
$row["id"] = $p_item["sched_id"];
$row["instance"] = $p_item["si_id"];
$row["starts"] = $schedStartDT->format("H:i:s");
$row["startsUnix"] = $schedStartDT->format("U");
$row["ends"] = $schedEndDT->format("H:i:s");
$row["endsUnix"] = $schedEndDT->format("U");
$row["duration"] = $schedEndDT->format("U") - $schedStartDT->format("U");
$row["runtime"] = $this->formatDuration($runtime);
$row["title"] = $p_item["file_track_title"];
$row["creator"] = $p_item["file_artist_name"];

View File

@ -804,6 +804,8 @@ class Application_Model_StoredFile {
$sql = $selectorRows." FROM ".$fromTable." ORDER BY ".$orderby." OFFSET ".$data["iDisplayStart"]." LIMIT ".$data["iDisplayLength"];
}
Logging::log($sql);
$results = $CC_DBC->getAll($sql);
if(!isset($totalDisplayRows)) {

View File

@ -273,7 +273,7 @@ function saveNumEntriesSetting() {
* Use user preference for number of entries to show
*/
function getNumEntriesPreference(data) {
return parseInt(data.libraryInit.numEntries);
return parseInt(data.libraryInit.numEntries, 10);
}
function groupAdd() {
@ -457,11 +457,12 @@ function createDataTable(data) {
dTable = $('#library_display').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "/Library/contents/format/json",
"sAjaxSource": "/Library/contents",
"fnServerData": function ( sSource, aoData, testCallback ) {
aoData.push( { name: "format", value: "json"} );
$.ajax( {
"dataType": 'json',
"type": "POST",
"type": "GET",
"url": sSource,
"data": aoData,
"success": testCallback
@ -490,7 +491,7 @@ function createDataTable(data) {
"sSearch": ""
},
"iDisplayLength": getNumEntriesPreference(data),
"bStateSave": true,
// R = ColReorder, C = ColVis, see datatables doc for others
"sDom": 'Rlfr<"H"C<"library_toolbar">>t<"F"ip>',
"oColVis": {
@ -499,10 +500,6 @@ function createDataTable(data) {
"aiExclude": [0, 1, 2],
"sSize": "css",
"bShowAll": true
},
"oColReorder": {
"aiOrder": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], /* code this */
"iFixedColumns": 3
}
});
dTable.fnSetFilteringDelay(350);

View File

@ -138,6 +138,9 @@ var fnShowBuilderRowCallback = function ( nRow, aData, iDisplayIndex, iDisplayIn
fnPrepareSeparatorRow,
node;
//save some info for reordering purposes.
$(nRow).data({aData: aData});
fnPrepareSeparatorRow = function(sRowContent, sClass) {
node = nRow.children[1];
@ -167,6 +170,12 @@ var fnShowBuilderRowCallback = function ( nRow, aData, iDisplayIndex, iDisplayIn
sSeparatorHTML = '<span>Show Footer</span>';
fnPrepareSeparatorRow(sSeparatorHTML, "show-builder-footer");
}
else if (aData.empty === true) {
}
else {
$(nRow).attr("id", "sched_"+aData.id);
}
return nRow;
};
@ -197,7 +206,7 @@ $(document).ready(function() {
oTable = $('#show_builder_table').dataTable( {
"aoColumns": [
/* checkbox */ {"mDataProp": "checkbox", "sTitle": "<input type='checkbox' name='sb_all'>", "sWidth": "25px"},
// /* scheduled id */{"mDataProp": "id", "sTitle": "id", "bVisible": false, "sWidth": "1px"},
// /* scheduled id */{"mDataProp": "id", "sTitle": "id"},
// /* instance */{"mDataProp": "instance", "sTitle": "si_id"},
/* starts */{"mDataProp": "starts", "sTitle": "Airtime"},
/* ends */{"mDataProp": "ends", "sTitle": "Off Air"},
@ -215,6 +224,7 @@ $(document).ready(function() {
"bProcessing": true,
"bServerSide": true,
"bInfo": false,
"bAutoWidth": false,
"fnServerData": fnServerData,
"fnRowCallback": fnShowBuilderRowCallback,
@ -235,8 +245,6 @@ $(document).ready(function() {
"sAjaxSource": "/showbuilder/builder-feed"
});
//new FixedHeader( oTable );
new FixedColumns( oTable );
$( "#show_builder_datepicker_start" ).datepicker(oBaseDatePickerSettings);
@ -263,10 +271,39 @@ $(document).ready(function() {
$( "#show_builder_table" ).sortable({
placeholder: "placeholder show-builder-placeholder",
items: 'tr',
cancel: ".show-builder-header .show-builder-footer",
forceHelperSize: true,
forcePlaceholderSize: true,
items: 'tr:not(.show-builder-header):not(.show-builder-footer)',
//cancel: ".show-builder-header .show-builder-footer",
receive: function(event, ui) {
var x;
},
update: function(event, ui) {
var oItemData = ui.item.data("aData"),
oPrevData = ui.item.prev().data("aData"),
oRequestData = {format: "json"};
//if prev item is a footer, item is not scheduled into a show.
if (oPrevData.footer === false) {
oRequestData.instance = oPrevData.instance;
}
//set the start time appropriately
if (oPrevData.header === true) {
oRequestData.start = oPrevData.startsUnix;
}
else {
oRequestData.start = oPrevData.endsUnix;
}
oRequestData.id = oItemData.id;
oRequestData.duration = oItemData.duration;
/*
$.post("/showbuilder/schedule", oRequestData, function(json){
var x;
});
*/
}
});