Merge branch 'CC-3174' into devel

Conflicts:
	airtime_mvc/application/models/StoredFile.php
This commit is contained in:
Naomi Aro 2012-02-17 11:50:49 +01:00
commit ac11d8bcf6
26 changed files with 710 additions and 450 deletions

View file

@ -37,6 +37,8 @@ class LibraryController extends Zend_Controller_Action
{
global $CC_CONFIG;
$this->_helper->viewRenderer->setResponseSegment('library');
$request = $this->getRequest();
$baseUrl = $request->getBaseUrl();
@ -56,16 +58,6 @@ class LibraryController extends Zend_Controller_Action
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/TableTools.css?'.$CC_CONFIG['airtime_version']);
$this->_helper->viewRenderer->setResponseSegment('library');
$form = new Application_Form_AdvancedSearch();
$form->addGroup(1, 1);
$this->search_sess->next_group = 2;
$this->search_sess->next_row[1] = 2;
$this->view->form = $form;
$this->view->md = $this->search_sess->md;
}
public function contextMenuAction()

View file

@ -204,15 +204,11 @@ class ScheduleController extends Zend_Controller_Action
&& !$instance->isRecorded()
&& !$instance->isRebroadcast()) {
$menu["schedule"] = array("name"=> "Add / Remove Content", "url" => "/showbuilder/index/");
$menu["schedule"] = array("name"=> "Add / Remove Content",
"url" => "/showbuilder/index/");
$menu["clear"] = array("name"=> "Remove All Content", "icon" => "delete", "url" => "/schedule/clear-show");
/*
$menu[] = array('action' => array('type' => 'ajax', 'url' => '/Schedule/clear-show'.$params,
'callback' => 'window["scheduleRefetchEvents"]'), 'title' => 'Remove All Content');
*/
$menu["clear"] = array("name"=> "Remove All Content", "icon" => "delete",
"url" => "/schedule/clear-show");
}
}

View file

@ -25,6 +25,8 @@ class ShowbuilderController extends Zend_Controller_Action
public function builderAction() {
$this->_helper->viewRenderer->setResponseSegment('builder');
$request = $this->getRequest();
$baseUrl = $request->getBaseUrl();
@ -37,10 +39,15 @@ class ShowbuilderController extends Zend_Controller_Action
$end = DateTime::createFromFormat("U", $to, new DateTimeZone("UTC"));
$end->setTimezone(new DateTimeZone(date_default_timezone_get()));
$this->view->start_date = $start->format("Y-m-d");
$this->view->start_time = $start->format("H:i");
$this->view->end_date = $end->format("Y-m-d");
$this->view->end_time = $end->format("H:i");
$form = new Application_Form_ShowBuilder();
$form->populate(array(
'sb_date_start' => $start->format("Y-m-d"),
'sb_time_start' => $start->format("H:i"),
'sb_date_end' => $end->format("Y-m-d"),
'sb_time_end' => $end->format("H:i")
));
$this->view->sb_form = $form;
$this->view->headScript()->appendScript("var serverTimezoneOffset = ".date("Z")."; //in seconds");
$this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker.js','text/javascript');
@ -48,8 +55,6 @@ class ShowbuilderController extends Zend_Controller_Action
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.ui.timepicker.css');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/showbuilder.css');
$this->_helper->viewRenderer->setResponseSegment('builder');
}
public function builderFeedAction() {
@ -60,6 +65,8 @@ class ShowbuilderController extends Zend_Controller_Action
$starts_epoch = $request->getParam("start", $current_time);
//default ends is 24 hours after starts.
$ends_epoch = $request->getParam("end", $current_time + (60*60*24));
$show_filter = intval($request->getParam("showFilter", 0));
$my_shows = intval($request->getParam("myShows", 0));
$startsDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC"));
$endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC"));
@ -67,7 +74,8 @@ class ShowbuilderController extends Zend_Controller_Action
Logging::log("showbuilder starts {$startsDT->format("Y-m-d H:i:s")}");
Logging::log("showbuilder ends {$endsDT->format("Y-m-d H:i:s")}");
$showBuilder = new Application_Model_ShowBuilder($startsDT, $endsDT);
$opts = array("myShows" => $my_shows, "showFilter" => $show_filter);
$showBuilder = new Application_Model_ShowBuilder($startsDT, $endsDT, $opts);
$this->view->schedule = $showBuilder->GetItems();
}
@ -75,20 +83,19 @@ class ShowbuilderController extends Zend_Controller_Action
public function scheduleAddAction() {
$request = $this->getRequest();
$mediaItems = $request->getParam("mediaIds", null);
$scheduledIds = $request->getParam("schedIds", null);
$json = array();
try {
$scheduler = new Application_Model_Scheduler();
$scheduler->scheduleAfter($scheduledIds, $mediaItems);
$json["message"]="success... maybe";
}
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
catch (Exception $e) {
$json["message"]=$e->getMessage();
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
@ -98,45 +105,90 @@ class ShowbuilderController extends Zend_Controller_Action
public function scheduleRemoveAction()
{
$request = $this->getRequest();
$ids = $request->getParam("ids", null);
$json = array();
$items = $request->getParam("items", null);
try {
$scheduler = new Application_Model_Scheduler();
$scheduler->removeItems($ids);
$json["message"]="success... maybe";
$scheduler->removeItems($items);
}
catch (Exception $e) {
$json["message"]=$e->getMessage();
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
catch (Exception $e) {
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
$this->view->data = $json;
}
public function scheduleMoveAction() {
$request = $this->getRequest();
$selectedItem = $request->getParam("selectedItem");
$afterItem = $request->getParam("afterItem");
$json = array();
try {
$scheduler = new Application_Model_Scheduler();
$scheduler->moveItem($selectedItem, $afterItem);
$json["message"]="success... maybe";
}
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
catch (Exception $e) {
$json["message"]=$e->getMessage();
$this->view->error = $e->getMessage();
Logging::log($e->getMessage());
}
$this->view->data = $json;
}
public function scheduleReorderAction() {
$request = $this->getRequest();
$showInstance = $request->getParam("instanceId");
}
/*
* make sure any incoming requests for scheduling are ligit.
*
* @param array $items, an array containing pks of cc_schedule items.
*/
private function filterSelected($items) {
$allowed = array();
$user = Application_Model_User::GetCurrentUser();
$type = $user->getType();
//item must be within the host's show.
if ($type === UTYPE_HOST) {
$hosted = CcShowHostsQuery::create()
->filterByDbHost($user->getId())
->find();
$allowed_shows = array();
foreach ($hosted as $host) {
$allowed_shows[] = $host->getDbShow();
}
for ($i = 0; $i < count($items); $i++) {
$instance = $items[$i]["instance"];
if (in_array($instance, $allowed_shows)) {
$allowed[] = $items[$i];
}
}
$this->view->shows = $res;
}
//they can schedule anything.
else if ($type === UTYPE_ADMIN || $type === UTYPE_PROGRAM_MANAGER) {
$allowed = $items;
}
return $allowed;
}
}

View file

@ -1,65 +0,0 @@
<?php
class Application_Form_AdvancedSearch extends Zend_Form
{
public function init()
{
// Add the add button
$this->addElement('button', 'search_add_group', array(
'ignore' => true,
'label' => 'Add',
'order' => '-2'
));
$this->getElement('search_add_group')->removeDecorator('DtDdWrapper');
// Add the submit button
$this->addElement('button', 'search_submit', array(
'ignore' => true,
'label' => 'Save',
'order' => '-1'
));
$this->getElement('search_submit')->removeDecorator('DtDdWrapper');
}
public function addGroup($group_id, $row_id=null) {
$this->addSubForm(new Application_Form_AdvancedSearchGroup(), 'group_'.$group_id, $group_id);
$this->getSubForm('group_'.$group_id)->removeDecorator('DtDdWrapper');
if(!is_null($row_id)) {
$subGroup = $this->getSubForm('group_'.$group_id);
$subGroup->addRow($row_id);
}
}
public function preValidation(array $data) {
function findId($name) {
$t = explode("_", $name);
return $t[1];
}
function findFields($field) {
return strpos($field, 'group') !== false;
}
$groups = array_filter(array_keys($data), 'findFields');
foreach ($groups as $group) {
$group_id = findId($group);
$this->addGroup($group_id);
$subGroup = $this->getSubForm($group);
foreach (array_keys($data[$group]) as $row) {
$row_id = findId($row);
$subGroup->addRow($row_id, $data[$group][$row]);
}
}
}
}

View file

@ -1,37 +0,0 @@
<?php
class Application_Form_AdvancedSearchGroup extends Zend_Form_SubForm
{
public function init()
{
// Add the add button
$this->addElement('button', 'search_add_row', array(
'ignore' => true,
'label' => 'Add',
'order' => '-2'
));
$this->getElement('search_add_row')->removeDecorator('DtDdWrapper');
// Add the add button
$this->addElement('button', 'search_remove_group', array(
'ignore' => true,
'label' => 'Remove',
'order' => '-1'
));
$this->getElement('search_remove_group')->removeDecorator('DtDdWrapper');
}
public function addRow($row_id, $data=null) {
$this->addSubForm(new Application_Form_AdvancedSearchRow(), 'row_'.$row_id, $row_id);
$row = $this->getSubForm('row_'.$row_id);
$row->removeDecorator('DtDdWrapper');
if(!is_null($data)) {
$row->setDefaults($data);
}
}
}

View file

@ -1,70 +0,0 @@
<?php
class Application_Form_AdvancedSearchRow extends Zend_Form_SubForm
{
public function init()
{
$this->addElement(
'select',
'metadata',
array(
'required' => true,
'multiOptions' => array(
"dc:title" => "Title",
"dc:format" => "Format",
"dc:creator" => "Artist/Creator",
"dc:source" => "Album",
"ls:bitrate" => "Bitrate",
"ls:samplerate" => "Samplerate",
"dcterms:extent" => "Length",
"dc:description" => "Comments",
"dc:type" => "Genre",
"ls:channels" => "channels",
"ls:year" => "Year",
"ls:track_num" => "track_number",
"ls:mood" => "mood",
"ls:bpm" => "BPM",
"ls:rating" => "rating",
"ls:encoded_by" => "encoded_by",
"dc:publisher" => "label",
"ls:composer" => "Composer",
"ls:encoder" => "Encoder",
"ls:lyrics" => "lyrics",
"ls:orchestra" => "orchestra",
"ls:conductor" => "conductor",
"ls:lyricist" => "lyricist",
"ls:originallyricist" => "original_lyricist",
"ls:isrcnumber" => "isrc_number",
"dc:language" => "Language",
),
)
);
$this->getElement('metadata')->removeDecorator('Label')->removeDecorator('HtmlTag');
$this->addElement(
'select',
'match',
array(
'required' => true,
'multiOptions' => array(
"0" => "partial",
"1" => "=",
"2" => "<",
"3" => "<=",
"4" => ">",
"5" => ">=",
"6" => "!=",
),
)
);
$this->getElement('match')->removeDecorator('Label')->removeDecorator('HtmlTag');
$this->addElement('text', 'search', array(
'required' => true,
));
$this->getElement('search')->removeDecorator('Label')->removeDecorator('HtmlTag');
}
}

View file

@ -0,0 +1,104 @@
<?php
class Application_Form_ShowBuilder extends Zend_Form_SubForm
{
public function init()
{
$user = Application_Model_User::GetCurrentUser();
$this->setDecorators(array(
array('ViewScript', array('viewScript' => 'form/showbuilder.phtml'))
));
// Add start date element
$startDate = new Zend_Form_Element_Text('sb_date_start');
$startDate->class = 'input_text';
$startDate->setRequired(true)
->setLabel('Date Start:')
->setValue(date("Y-m-d"))
->setFilters(array('StringTrim'))
->setValidators(array(
'NotEmpty',
array('date', false, array('YYYY-MM-DD'))))
->setDecorators(array('ViewHelper'));
$startDate->setAttrib('alt', 'date');
$this->addElement($startDate);
// Add start time element
$startTime = new Zend_Form_Element_Text('sb_time_start');
$startTime->class = 'input_text';
$startTime->setRequired(true)
->setValue('00:00')
->setFilters(array('StringTrim'))
->setValidators(array(
'NotEmpty',
array('date', false, array('HH:mm')),
array('regex', false, array('/^[0-9:]+$/', 'messages' => 'Invalid character entered'))))
->setDecorators(array('ViewHelper'));
$startTime->setAttrib('alt', 'time');
$this->addElement($startTime);
// Add end date element
$endDate = new Zend_Form_Element_Text('sb_date_end');
$endDate->class = 'input_text';
$endDate->setRequired(true)
->setLabel('Date End:')
->setValue(date("Y-m-d"))
->setFilters(array('StringTrim'))
->setValidators(array(
'NotEmpty',
array('date', false, array('YYYY-MM-DD'))))
->setDecorators(array('ViewHelper'));
$endDate->setAttrib('alt', 'date');
$this->addElement($endDate);
// Add end time element
$endTime = new Zend_Form_Element_Text('sb_time_end');
$endTime->class = 'input_text';
$endTime->setRequired(true)
->setValue('01:00')
->setFilters(array('StringTrim'))
->setValidators(array(
'NotEmpty',
array('date', false, array('HH:mm')),
array('regex', false, array('/^[0-9:]+$/', 'messages' => 'Invalid character entered'))))
->setDecorators(array('ViewHelper'));
$endTime->setAttrib('alt', 'time');
$this->addElement($endTime);
// add a select to choose a show.
$showSelect = new Zend_Form_Element_Select("sb_show_filter");
$showSelect->setLabel("Filter By Show:");
$showSelect->setMultiOptions($this->getShowNames());
$showSelect->setValue(null);
$showSelect->setDecorators(array('ViewHelper'));
$this->addElement($showSelect);
if ($user->getType() === 'H') {
$myShows = new Zend_Form_Element_Checkbox('sb_my_shows');
$myShows->setLabel('All My Shows')
->setDecorators(array('ViewHelper'));
$this->addElement($myShows);
}
}
private function getShowNames() {
$showNames = array("0" => "-------------------------");
$shows = CcShowQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->orderByDbName()
->find();
foreach ($shows as $show) {
$showNames[$show->getDbId()] = $show->getDbName();
}
return $showNames;
}
}

View file

@ -768,4 +768,4 @@ class Application_Model_Playlist {
} // class Playlist
class PlaylistNotFoundException extends Exception {}
class OutDatedException extends Exception {}
class PlaylistOutDatedException extends Exception {}

View file

@ -303,7 +303,7 @@ class Application_Model_Schedule {
* @return array $scheduledItems
*
*/
public static function GetScheduleDetailItems($p_startDateTime, $p_endDateTime)
public static function GetScheduleDetailItems($p_startDateTime, $p_endDateTime, $p_shows)
{
global $CC_CONFIG, $CC_DBC;
@ -313,7 +313,7 @@ class Application_Model_Schedule {
showt.background_color AS show_background_colour, showt.id AS show_id,
si.starts AS si_starts, si.ends AS si_ends, si.time_filled AS si_time_filled,
si.record AS si_record, si.rebroadcast AS si_rebroadcast, si.id AS si_id,
si.record AS si_record, si.rebroadcast AS si_rebroadcast, si.id AS si_id, si.last_scheduled AS si_last_scheduled,
sched.starts AS sched_starts, sched.ends AS sched_ends, sched.id AS sched_id,
@ -328,9 +328,13 @@ class Application_Model_Schedule {
WHERE si.modified_instance = false AND
si.starts >= '{$p_startDateTime}' AND si.starts < '{$p_endDateTime}'
si.starts >= '{$p_startDateTime}' AND si.starts < '{$p_endDateTime}'";
ORDER BY si.starts, sched.starts;";
if (count($p_shows) > 0) {
$sql .= " AND show_id IN (".implode(",", $p_shows).")";
}
$sql .= " ORDER BY si.starts, sched.starts;";
Logging::log($sql);

View file

@ -31,11 +31,16 @@ class Application_Model_Scheduler {
if ($type === "audioclip") {
$file = CcFilesQuery::create()->findPK($id, $this->con);
$data = $this->fileInfo;
$data["id"] = $id;
$data["cliplength"] = $file->getDbLength();
if (is_null($file) || !$file->getDbFileExists()) {
throw new Exception("A selected File does not exist!");
}
else {
$data = $this->fileInfo;
$data["id"] = $id;
$data["cliplength"] = $file->getDbLength();
$files[] = $data;
$files[] = $data;
}
}
else if ($type === "playlist") {
@ -44,17 +49,25 @@ class Application_Model_Scheduler {
->filterByDbPlaylistId($id)
->find($this->con);
if (is_null($contents)) {
throw new Exception("A selected Playlist does not exist!");
}
foreach ($contents as $plItem) {
$data = $this->fileInfo;
$data["id"] = $plItem->getDbFileId();
$data["cliplength"] = $plItem->getDbCliplength();
$data["cuein"] = $plItem->getDbCuein();
$data["cueout"] = $plItem->getDbCueout();
$data["fadein"] = $plItem->getDbFadein();
$data["fadeout"] = $plItem->getDbFadeout();
$file = $plItem->getCcFiles($this->con);
if (isset($file) && $file->getDbFileExists()) {
$files[] = $data;
$data = $this->fileInfo;
$data["id"] = $plItem->getDbFileId();
$data["cliplength"] = $plItem->getDbCliplength();
$data["cuein"] = $plItem->getDbCuein();
$data["cueout"] = $plItem->getDbCueout();
$data["fadein"] = $plItem->getDbFadein();
$data["fadeout"] = $plItem->getDbFadeout();
$files[] = $data;
}
}
}
@ -98,6 +111,8 @@ class Application_Model_Scheduler {
try {
$affectedShowInstances = array();
//dont want to recalculate times for moved items.
$excludeIds = array();
foreach ($schedFiles as $file) {
@ -108,34 +123,42 @@ class Application_Model_Scheduler {
foreach ($scheduleItems as $schedule) {
$id = intval($schedule["id"]);
$ts = intval($schedule["timestamp"]);
Logging::log("scheduling after scheduled item: ".$id);
Logging::log("in show: ".intval($schedule["instance"]));
if ($id !== 0) {
$schedItem = CcScheduleQuery::create()->findPK($id, $this->con);
$instance = $schedItem->getDbInstanceId();
//user has an old copy of the time line opened.
if ($instance !== intval($schedule["instance"])) {
Logging::log("items have been since updated");
return;
$instance = $schedItem->getCcShowInstances($this->con);
if (intval($schedule["instance"]) !== $instance->getDbId()) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
$nextStartDT = $schedItem->getDbEnds(null);
}
//selected empty row to add after
else {
$showInstance = CcShowInstancesQuery::create()->findPK($schedule["instance"], $this->con);
$instance = CcShowInstancesQuery::create()->findPK($schedule["instance"], $this->con);
$nextStartDT = $showInstance->getDbStarts(null);
$instance = intval($schedule["instance"]);
}
$currTs = intval($instance->getDbLastScheduled("U")) ? : 0;
//user has an old copy of the time line opened.
if ($ts !== $currTs) {
Logging::log("currTs {$currTs}, ts {$ts}");
$show = $instance->getCcShow($this->con);
throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!");
}
if (!in_array($instance->getDbId(), $affectedShowInstances)) {
$affectedShowInstances[] = $instance->getDbId();
}
Logging::log("finding items >= {$nextStartDT->format("Y-m-d H:i:s.u")}");
if ($adjustSched === true) {
$followingSchedItems = CcScheduleQuery::create()
->filterByDBStarts($nextStartDT->format("Y-m-d H:i:s.u"), Criteria::GREATER_EQUAL)
->filterByDbInstanceId($instance)
->filterByDbInstanceId($instance->getDbId())
->filterByDbId($excludeIds, Criteria::NOT_IN)
->orderByDbStarts()
->find($this->con);
@ -171,7 +194,7 @@ class Application_Model_Scheduler {
$sched->setDbFadeIn($file['fadein']);
$sched->setDbFadeOut($file['fadeout']);
$sched->setDbClipLength($file['cliplength']);
$sched->setDbInstanceId($instance);
$sched->setDbInstanceId($instance->getDbId());
$sched->save($this->con);
$nextStartDT = $endTimeDT;
@ -195,6 +218,10 @@ class Application_Model_Scheduler {
}
}
//update the last scheduled timestamp.
CcShowInstancesQuery::create()
->filterByPrimaryKeys($affectedShowInstances)
->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con);
}
catch (Exception $e) {
throw $e;
@ -236,37 +263,46 @@ class Application_Model_Scheduler {
* @param array $selectedItem
* @param array $afterItem
*/
public function moveItem($selectedItem, $afterItem, $adjustSched = true) {
public function moveItem($selectedItems, $afterItems, $adjustSched = true) {
$this->con->beginTransaction();
try {
$origSelIns = intval($selectedItem[0]["instance"]);
$origAfterIns = intval($afterItem[0]["instance"]);
$origSelTs = intval($selectedItems[0]["timestamp"]);
$origAfterTs = intval($afterItems[0]["timestamp"]);
Logging::log("Moving item {$selectedItem[0]["id"]}");
Logging::log("After {$afterItem[0]["id"]}");
Logging::log("Moving item {$selectedItems[0]["id"]}");
Logging::log("After {$afterItems[0]["id"]}");
$selected = CcScheduleQuery::create()->findPk($selectedItem[0]["id"]);
$after = CcScheduleQuery::create()->findPk($afterItem[0]["id"]);
$selected = CcScheduleQuery::create()->findPk($selectedItems[0]["id"], $this->con);
$after = CcScheduleQuery::create()->findPk($afterItems[0]["id"], $this->con);
/*
if (isset($after) && $origSelIns !== $selected->getDBInstanceId()
|| $origAfterIns !== $after->getDBInstanceId()) {
Logging::log("items have been since updated");
return;
if (is_null($selected) || is_null($after)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
*/
$this->removeGaps($origSelIns, $selected->getDbId());
//moved to another show, remove gaps from original show.
if ($adjustSched === true && $origSelIns !== $origAfterIns) {
$selectedInstance = $selected->getCcShowInstances($this->con);
$afterInstance = $after->getCcShowInstances($this->con);
if (is_null($selectedInstance) || is_null($afterInstance)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
$currTs = intval($selectedInstance->getDbLastScheduled("U")) ? : 0;
if ($origSelTs !== $currTs) {
$show = $selectedInstance->getCcShow($this->con);
throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!");
}
$currTs = intval($afterInstance->getDbLastScheduled("U")) ? : 0;
if ($origAfterTs !== $currTs) {
$show = $afterInstance->getCcShow($this->con);
throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!");
}
$this->removeGaps($selectedInstance->getDbId(), $selected->getDbId());
$data = $this->fileInfo;
$data["id"] = $selected->getDbFileId();
$data["cliplength"] = $selected->getDbClipLength();
@ -276,7 +312,7 @@ class Application_Model_Scheduler {
$data["fadeout"] = $selected->getDbFadeOut();
$data["sched_id"] = $selected->getDbId();
$this->insertAfter($afterItem, array($data), $adjustSched);
$this->insertAfter($afterItems, array($data), $adjustSched);
$this->con->commit();
@ -288,14 +324,35 @@ class Application_Model_Scheduler {
}
}
public function removeItems($scheduledIds, $adjustSched = true) {
public function removeItems($scheduledItems, $adjustSched = true) {
$showInstances = array();
$this->con->beginTransaction();
try {
$removedItems = CcScheduleQuery::create()->findPks($scheduledIds);
$scheduledIds = array();
foreach ($scheduledItems as $item) {
$scheduledIds[$item["id"]] = intval($item["timestamp"]);
}
$removedItems = CcScheduleQuery::create()->findPks(array_keys($scheduledIds));
//check to make sure all items selected are up to date
foreach ($removedItems as $removedItem) {
$ts = $scheduledIds[$removedItem->getDbId()];
$instance = $removedItem->getCcShowInstances($this->con);
if (is_null($instance)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
$currTs = intval($instance->getDbLastScheduled("U")) ? : 0;
if ($ts !== $currTs) {
$show = $instance->getCcShow($this->con);
throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!");
}
}
$removedItems->delete($this->con);
if ($adjustSched === true) {
@ -313,6 +370,11 @@ class Application_Model_Scheduler {
}
}
//update the last scheduled timestamp.
CcShowInstancesQuery::create()
->filterByPrimaryKeys($showInstances)
->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con);
$this->con->commit();
Application_Model_RabbitMq::PushSchedule();
@ -328,11 +390,15 @@ class Application_Model_Scheduler {
* @param array $exclude
* ids of sched items to remove from the calulation.
*/
public function removeGaps($showInstance, $exclude=null) {
private function removeGaps($showInstance, $exclude=null) {
Logging::log("removing gaps from show instance #".$showInstance);
$instance = CcShowInstancesQuery::create()->findPK($showInstance, $this->con);
if (is_null($instance)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
$itemStartDT = $instance->getDbStarts(null);
$schedule = CcScheduleQuery::create()
@ -355,4 +421,6 @@ class Application_Model_Scheduler {
$itemStartDT = $itemEndDT;
}
}
}
}
class OutDatedScheduleException extends Exception {}

View file

@ -6,6 +6,7 @@ class Application_Model_ShowBuilder {
private $startDT;
private $endDT;
private $user;
private $opts;
private $contentDT;
@ -21,19 +22,21 @@ class Application_Model_ShowBuilder {
"runtime" => "",
"title" => "",
"creator" => "",
"album" => ""
"album" => "",
"timestamp" => null
);
/*
* @param DateTime $p_startsDT
* @param DateTime $p_endsDT
*/
public function __construct($p_startDT, $p_endDT) {
public function __construct($p_startDT, $p_endDT, $p_opts) {
$this->startDT = $p_startDT;
$this->endDT = $p_endDT;
$this->timezone = date_default_timezone_get();
$this->user = Application_Model_User::GetCurrentUser();
$this->opts = $p_opts;
}
/*
@ -98,9 +101,22 @@ class Application_Model_ShowBuilder {
return $row;
}
private function getRowTimestamp($p_item, &$row) {
if (is_null($p_item["si_last_scheduled"])) {
$ts = 0;
}
else {
$dt = new DateTime($p_item["si_last_scheduled"], new DateTimeZone("UTC"));
$ts = intval($dt->format("U"));
}
$row["timestamp"] = $ts;
}
private function makeHeaderRow($p_item) {
$row = $this->defaultRowArray;
$this->getRowTimestamp($p_item, &$row);
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
$showStartDT->setTimezone(new DateTimeZone($this->timezone));
@ -124,6 +140,7 @@ class Application_Model_ShowBuilder {
$epoch_now = time();
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
$this->getRowTimestamp($p_item, &$row);
//can only schedule the show if it hasn't started and you are allowed.
if ($epoch_now < $showStartDT->format('U') && $this->user->canSchedule($p_item["show_id"]) == true) {
@ -165,7 +182,23 @@ class Application_Model_ShowBuilder {
$current_id = -1;
$display_items = array();
$scheduled_items = Application_Model_Schedule::GetScheduleDetailItems($this->startDT->format("Y-m-d H:i:s"), $this->endDT->format("Y-m-d H:i:s"));
$shows = array();
if ($this->opts["myShows"] === 1) {
$host_shows = CcShowHostsQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->filterByDbHost($this->user->getId())
->find();
foreach ($host_shows as $host_show) {
$shows[] = $host_show->getDbShow();
}
}
else if ($this->opts["showFilter"] !== 0) {
$shows[] = $this->opts["showFilter"];
}
$scheduled_items = Application_Model_Schedule::GetScheduleDetailItems($this->startDT->format("Y-m-d H:i:s"), $this->endDT->format("Y-m-d H:i:s"), $shows);
for ($i = 0, $rows = count($scheduled_items); $i < $rows; $i++) {

View file

@ -626,9 +626,9 @@ class Application_Model_StoredFile {
$results = Application_Model_StoredFile::searchFiles($fromTable, $datatables);
foreach($results['aaData'] as &$row){
$row['id'] = intval($row['id']);
//$length = new DateTime($row['length']);
@ -852,18 +852,19 @@ class Application_Model_StoredFile {
* enough space to move the $audio_file into and report back to the user if not.
**/
public static function checkForEnoughDiskSpaceToCopy($destination_folder, $audio_file){
//check to see if we have enough space in the /organize directory to copy the file
$freeSpace = disk_free_space($destination_folder);
$fileSize = filesize($audio_file);
if ( $freeSpace < $fileSize){
$freeSpace = ceil($freeSpace/1024/1024);
$fileSize = ceil($fileSize/1024/1024);
$result = array("code" => 107, "message" => "The file was not uploaded, there is ".$freeSpace."MB of disk space left and the file you are uploading has a size of ".$fileSize."MB.");
}
return $result;
//check to see if we have enough space in the /organize directory to copy the file
$freeSpace = disk_free_space($destination_folder);
$fileSize = filesize($audio_file);
if ( $freeSpace < $fileSize){
$freeSpace = ceil($freeSpace/1024/1024);
$fileSize = ceil($fileSize/1024/1024);
$result = array("code" => 107, "message" => "The file was not uploaded, there is ".$freeSpace."MB of disk space left and the file you are uploading has a size of ".$fileSize."MB.");
}
return $result;
}
public static function copyFileToStor($p_targetDir, $fileName, $tempname){
$audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $tempname;
Logging::log('copyFileToStor: moving file '.$audio_file);
@ -878,36 +879,34 @@ class Application_Model_StoredFile {
$result = array( "code" => 106, "message" => "An identical audioclip named '$duplicateName' already exists on the server.");
}
}
if (!isset($result)){//The file has no duplicate, so procceed to copy.
$storDir = Application_Model_MusicDir::getStorDir();
$stor = $storDir->getDirectory();
//check to see if there is enough space in $stor to continue.
$result = Application_Model_StoredFile::checkForEnoughDiskSpaceToCopy($stor, $audio_file);
if (!isset($result)){//if result not set then there's enough disk space to copy the file over
$stor .= "/organize";
$audio_stor = $stor . DIRECTORY_SEPARATOR . $fileName;
Logging::log("copyFileToStor: moving file $audio_file to $audio_stor");
//Martin K.: changed to rename: Much less load + quicker since this is an atomic operation
$r = @rename($audio_file, $audio_stor);
if ($r === false) {
#something went wrong likely there wasn't enough space in the audio_stor to move the file too.
#warn the user that the file wasn't uploaded and they should check if there is enough disk space.
unlink($audio_file);//remove the file from the organize after failed rename
$result = array("code" => 108, "message" => "The file was not uploaded, this error will occur if the computer hard drive does not have enough disk space.");
}
if (!isset($result)){//The file has no duplicate, so procceed to copy.
$storDir = Application_Model_MusicDir::getStorDir();
$stor = $storDir->getDirectory();
//check to see if there is enough space in $stor to continue.
$result = Application_Model_StoredFile::checkForEnoughDiskSpaceToCopy($stor, $audio_file);
if (!isset($result)){//if result not set then there's enough disk space to copy the file over
$stor .= "/organize";
$audio_stor = $stor . DIRECTORY_SEPARATOR . $fileName;
Logging::log("copyFileToStor: moving file $audio_file to $audio_stor");
//Martin K.: changed to rename: Much less load + quicker since this is an atomic operation
$r = @rename($audio_file, $audio_stor);
if ($r === false) {
#something went wrong likely there wasn't enough space in the audio_stor to move the file too.
#warn the user that the file wasn't uploaded and they should check if there is enough disk space.
unlink($audio_file);//remove the file from the organize after failed rename
$result = array("code" => 108, "message" => "The file was not uploaded, this error will occur if the computer hard drive does not have enough disk space.");
}
}
}
return $result;
//$r = @copy($audio_file, $audio_stor);
//$r = @unlink($audio_file);
}
public static function getFileCount()
{
global $CC_CONFIG, $CC_DBC;
@ -1038,3 +1037,4 @@ class Application_Model_StoredFile {
}
class DeleteScheduledFileException extends Exception {}
class FileDoesNotExistException extends Exception {}

View file

@ -76,4 +76,35 @@ class CcShowInstances extends BaseCcShowInstances {
return $dt->format($format);
}
}
/**
* Get the [optionally formatted] temporal [last_scheduled] column value.
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
* @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL
* @throws PropelException - if unable to parse/validate the date/time value.
*/
public function getDbLastScheduled($format = 'Y-m-d H:i:s')
{
if ($this->last_scheduled === null) {
return null;
}
try {
$dt = new DateTime($this->last_scheduled, new DateTimeZone("UTC"));
} catch (Exception $x) {
throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->last_scheduled, true), $x);
}
if ($format === null) {
// Because propel.useDateTimeClass is TRUE, we return a DateTime object.
return $dt;
} elseif (strpos($format, '%') !== false) {
return strftime($format, $dt->format('U'));
} else {
return $dt->format($format);
}
}
} // CcShowInstances

View file

@ -46,7 +46,8 @@ class CcShowInstancesTableMap extends TableMap {
$this->addColumn('REBROADCAST', 'DbRebroadcast', 'TINYINT', false, null, 0);
$this->addForeignKey('INSTANCE_ID', 'DbOriginalShow', 'INTEGER', 'cc_show_instances', 'ID', false, null, null);
$this->addForeignKey('FILE_ID', 'DbRecordedFile', 'INTEGER', 'cc_files', 'ID', false, null, null);
$this->addColumn('TIME_FILLED', 'DbTimeFilled', 'TIME', false, null, null);
$this->addColumn('TIME_FILLED', 'DbTimeFilled', 'VARCHAR', false, null, '00:00:00');
$this->addColumn('LAST_SCHEDULED', 'DbLastScheduled', 'TIMESTAMP', false, null, null);
$this->addColumn('MODIFIED_INSTANCE', 'DbModifiedInstance', 'BOOLEAN', true, null, false);
// validators
} // initialize()

View file

@ -4,7 +4,7 @@
/**
* Base class that represents a row from the 'cc_playlistcontents' table.
*
*
*
*
* @package propel.generator.airtime.om
*/
@ -137,7 +137,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [id] column value.
*
*
* @return int
*/
public function getDbId()
@ -147,7 +147,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [playlist_id] column value.
*
*
* @return int
*/
public function getDbPlaylistId()
@ -157,7 +157,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [file_id] column value.
*
*
* @return int
*/
public function getDbFileId()
@ -167,7 +167,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [position] column value.
*
*
* @return int
*/
public function getDbPosition()
@ -177,7 +177,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [optionally formatted] temporal [cliplength] column value.
*
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
@ -210,7 +210,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [optionally formatted] temporal [cuein] column value.
*
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
@ -243,7 +243,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [optionally formatted] temporal [cueout] column value.
*
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
@ -276,7 +276,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [optionally formatted] temporal [fadein] column value.
*
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
@ -289,6 +289,8 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
return null;
}
try {
$dt = new DateTime($this->fadein);
} catch (Exception $x) {
@ -307,7 +309,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Get the [optionally formatted] temporal [fadeout] column value.
*
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the raw DateTime object will be returned.
@ -340,7 +342,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Set the value of [id] column.
*
*
* @param int $v new value
* @return CcPlaylistcontents The current object (for fluent API support)
*/
@ -360,7 +362,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Set the value of [playlist_id] column.
*
*
* @param int $v new value
* @return CcPlaylistcontents The current object (for fluent API support)
*/
@ -384,7 +386,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Set the value of [file_id] column.
*
*
* @param int $v new value
* @return CcPlaylistcontents The current object (for fluent API support)
*/
@ -408,7 +410,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Set the value of [position] column.
*
*
* @param int $v new value
* @return CcPlaylistcontents The current object (for fluent API support)
*/
@ -428,7 +430,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Sets the value of [cliplength] column to a normalized version of the date/time value specified.
*
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcPlaylistcontents The current object (for fluent API support)
@ -464,7 +466,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
$currNorm = ($this->cliplength !== null && $tmpDt = new DateTime($this->cliplength)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
if ( ($currNorm !== $newNorm) // normalized values don't match
|| ($dt->format('H:i:s') === '00:00:00') // or the entered value matches the default
)
{
@ -478,7 +480,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Sets the value of [cuein] column to a normalized version of the date/time value specified.
*
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcPlaylistcontents The current object (for fluent API support)
@ -514,7 +516,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
$currNorm = ($this->cuein !== null && $tmpDt = new DateTime($this->cuein)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
if ( ($currNorm !== $newNorm) // normalized values don't match
|| ($dt->format('H:i:s') === '00:00:00') // or the entered value matches the default
)
{
@ -528,7 +530,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Sets the value of [cueout] column to a normalized version of the date/time value specified.
*
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcPlaylistcontents The current object (for fluent API support)
@ -564,7 +566,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
$currNorm = ($this->cueout !== null && $tmpDt = new DateTime($this->cueout)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
if ( ($currNorm !== $newNorm) // normalized values don't match
|| ($dt->format('H:i:s') === '00:00:00') // or the entered value matches the default
)
{
@ -578,7 +580,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Sets the value of [fadein] column to a normalized version of the date/time value specified.
*
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcPlaylistcontents The current object (for fluent API support)
@ -614,7 +616,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
$currNorm = ($this->fadein !== null && $tmpDt = new DateTime($this->fadein)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
if ( ($currNorm !== $newNorm) // normalized values don't match
|| ($dt->format('H:i:s') === '00:00:00') // or the entered value matches the default
)
{
@ -628,7 +630,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
/**
* Sets the value of [fadeout] column to a normalized version of the date/time value specified.
*
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcPlaylistcontents The current object (for fluent API support)
@ -664,7 +666,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
$currNorm = ($this->fadeout !== null && $tmpDt = new DateTime($this->fadeout)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
if ( ($currNorm !== $newNorm) // normalized values don't match
|| ($dt->format('H:i:s') === '00:00:00') // or the entered value matches the default
)
{
@ -836,7 +838,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
if ($con === null) {
$con = Propel::getConnection(CcPlaylistcontentsPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
}
$con->beginTransaction();
try {
$ret = $this->preDelete($con);
@ -878,7 +880,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
if ($con === null) {
$con = Propel::getConnection(CcPlaylistcontentsPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
}
$con->beginTransaction();
$isInsert = $this->isNew();
try {
@ -1131,7 +1133,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
* type constants.
*
* @param string $keyType (optional) One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
* Defaults to BasePeer::TYPE_PHPNAME.
* @param boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE.
* @param boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE.
@ -1526,7 +1528,7 @@ abstract class BaseCcPlaylistcontents extends BaseObject implements Persistent
}
// aggregate_column_relation behavior
/**
* Update the aggregate column in the related CcPlaylist object
*

View file

@ -76,10 +76,17 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
/**
* The value for the time_filled field.
* Note: this column has a database default value of: '00:00:00'
* @var string
*/
protected $time_filled;
/**
* The value for the last_scheduled field.
* @var string
*/
protected $last_scheduled;
/**
* The value for the modified_instance field.
* Note: this column has a database default value of: false
@ -136,6 +143,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
{
$this->record = 0;
$this->rebroadcast = 0;
$this->time_filled = '00:00:00';
$this->modified_instance = false;
}
@ -276,7 +284,17 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
}
/**
* Get the [optionally formatted] temporal [time_filled] column value.
* Get the [time_filled] column value.
*
* @return string
*/
public function getDbTimeFilled()
{
return $this->time_filled;
}
/**
* Get the [optionally formatted] temporal [last_scheduled] column value.
*
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
@ -284,18 +302,18 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
* @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL
* @throws PropelException - if unable to parse/validate the date/time value.
*/
public function getDbTimeFilled($format = '%X')
public function getDbLastScheduled($format = 'Y-m-d H:i:s')
{
if ($this->time_filled === null) {
if ($this->last_scheduled === null) {
return null;
}
try {
$dt = new DateTime($this->time_filled);
$dt = new DateTime($this->last_scheduled);
} catch (Exception $x) {
throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->time_filled, true), $x);
throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->last_scheduled, true), $x);
}
if ($format === null) {
@ -549,13 +567,33 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
} // setDbRecordedFile()
/**
* Sets the value of [time_filled] column to a normalized version of the date/time value specified.
* Set the value of [time_filled] column.
*
* @param string $v new value
* @return CcShowInstances The current object (for fluent API support)
*/
public function setDbTimeFilled($v)
{
if ($v !== null) {
$v = (string) $v;
}
if ($this->time_filled !== $v || $this->isNew()) {
$this->time_filled = $v;
$this->modifiedColumns[] = CcShowInstancesPeer::TIME_FILLED;
}
return $this;
} // setDbTimeFilled()
/**
* Sets the value of [last_scheduled] column to a normalized version of the date/time value specified.
*
* @param mixed $v string, integer (timestamp), or DateTime value. Empty string will
* be treated as NULL for temporal objects.
* @return CcShowInstances The current object (for fluent API support)
*/
public function setDbTimeFilled($v)
public function setDbLastScheduled($v)
{
// we treat '' as NULL for temporal objects because DateTime('') == DateTime('now')
// -- which is unexpected, to say the least.
@ -580,22 +618,22 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
}
}
if ( $this->time_filled !== null || $dt !== null ) {
if ( $this->last_scheduled !== null || $dt !== null ) {
// (nested ifs are a little easier to read in this case)
$currNorm = ($this->time_filled !== null && $tmpDt = new DateTime($this->time_filled)) ? $tmpDt->format('H:i:s') : null;
$newNorm = ($dt !== null) ? $dt->format('H:i:s') : null;
$currNorm = ($this->last_scheduled !== null && $tmpDt = new DateTime($this->last_scheduled)) ? $tmpDt->format('Y-m-d\\TH:i:sO') : null;
$newNorm = ($dt !== null) ? $dt->format('Y-m-d\\TH:i:sO') : null;
if ( ($currNorm !== $newNorm) // normalized values don't match
)
{
$this->time_filled = ($dt ? $dt->format('H:i:s') : null);
$this->modifiedColumns[] = CcShowInstancesPeer::TIME_FILLED;
$this->last_scheduled = ($dt ? $dt->format('Y-m-d\\TH:i:sO') : null);
$this->modifiedColumns[] = CcShowInstancesPeer::LAST_SCHEDULED;
}
} // if either are not null
return $this;
} // setDbTimeFilled()
} // setDbLastScheduled()
/**
* Set the value of [modified_instance] column.
@ -635,6 +673,10 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
return false;
}
if ($this->time_filled !== '00:00:00') {
return false;
}
if ($this->modified_instance !== false) {
return false;
}
@ -670,7 +712,8 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->instance_id = ($row[$startcol + 6] !== null) ? (int) $row[$startcol + 6] : null;
$this->file_id = ($row[$startcol + 7] !== null) ? (int) $row[$startcol + 7] : null;
$this->time_filled = ($row[$startcol + 8] !== null) ? (string) $row[$startcol + 8] : null;
$this->modified_instance = ($row[$startcol + 9] !== null) ? (boolean) $row[$startcol + 9] : null;
$this->last_scheduled = ($row[$startcol + 9] !== null) ? (string) $row[$startcol + 9] : null;
$this->modified_instance = ($row[$startcol + 10] !== null) ? (boolean) $row[$startcol + 10] : null;
$this->resetModified();
$this->setNew(false);
@ -679,7 +722,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->ensureConsistency();
}
return $startcol + 10; // 10 = CcShowInstancesPeer::NUM_COLUMNS - CcShowInstancesPeer::NUM_LAZY_LOAD_COLUMNS).
return $startcol + 11; // 11 = CcShowInstancesPeer::NUM_COLUMNS - CcShowInstancesPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) {
throw new PropelException("Error populating CcShowInstances object", $e);
@ -1104,6 +1147,9 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
return $this->getDbTimeFilled();
break;
case 9:
return $this->getDbLastScheduled();
break;
case 10:
return $this->getDbModifiedInstance();
break;
default:
@ -1139,7 +1185,8 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$keys[6] => $this->getDbOriginalShow(),
$keys[7] => $this->getDbRecordedFile(),
$keys[8] => $this->getDbTimeFilled(),
$keys[9] => $this->getDbModifiedInstance(),
$keys[9] => $this->getDbLastScheduled(),
$keys[10] => $this->getDbModifiedInstance(),
);
if ($includeForeignObjects) {
if (null !== $this->aCcShow) {
@ -1210,6 +1257,9 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->setDbTimeFilled($value);
break;
case 9:
$this->setDbLastScheduled($value);
break;
case 10:
$this->setDbModifiedInstance($value);
break;
} // switch()
@ -1245,7 +1295,8 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
if (array_key_exists($keys[6], $arr)) $this->setDbOriginalShow($arr[$keys[6]]);
if (array_key_exists($keys[7], $arr)) $this->setDbRecordedFile($arr[$keys[7]]);
if (array_key_exists($keys[8], $arr)) $this->setDbTimeFilled($arr[$keys[8]]);
if (array_key_exists($keys[9], $arr)) $this->setDbModifiedInstance($arr[$keys[9]]);
if (array_key_exists($keys[9], $arr)) $this->setDbLastScheduled($arr[$keys[9]]);
if (array_key_exists($keys[10], $arr)) $this->setDbModifiedInstance($arr[$keys[10]]);
}
/**
@ -1266,6 +1317,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
if ($this->isColumnModified(CcShowInstancesPeer::INSTANCE_ID)) $criteria->add(CcShowInstancesPeer::INSTANCE_ID, $this->instance_id);
if ($this->isColumnModified(CcShowInstancesPeer::FILE_ID)) $criteria->add(CcShowInstancesPeer::FILE_ID, $this->file_id);
if ($this->isColumnModified(CcShowInstancesPeer::TIME_FILLED)) $criteria->add(CcShowInstancesPeer::TIME_FILLED, $this->time_filled);
if ($this->isColumnModified(CcShowInstancesPeer::LAST_SCHEDULED)) $criteria->add(CcShowInstancesPeer::LAST_SCHEDULED, $this->last_scheduled);
if ($this->isColumnModified(CcShowInstancesPeer::MODIFIED_INSTANCE)) $criteria->add(CcShowInstancesPeer::MODIFIED_INSTANCE, $this->modified_instance);
return $criteria;
@ -1336,6 +1388,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$copyObj->setDbOriginalShow($this->instance_id);
$copyObj->setDbRecordedFile($this->file_id);
$copyObj->setDbTimeFilled($this->time_filled);
$copyObj->setDbLastScheduled($this->last_scheduled);
$copyObj->setDbModifiedInstance($this->modified_instance);
if ($deepCopy) {
@ -1854,6 +1907,7 @@ abstract class BaseCcShowInstances extends BaseObject implements Persistent
$this->instance_id = null;
$this->file_id = null;
$this->time_filled = null;
$this->last_scheduled = null;
$this->modified_instance = null;
$this->alreadyInSave = false;
$this->alreadyInValidation = false;

View file

@ -26,7 +26,7 @@ abstract class BaseCcShowInstancesPeer {
const TM_CLASS = 'CcShowInstancesTableMap';
/** The total number of columns. */
const NUM_COLUMNS = 10;
const NUM_COLUMNS = 11;
/** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0;
@ -58,6 +58,9 @@ abstract class BaseCcShowInstancesPeer {
/** the column name for the TIME_FILLED field */
const TIME_FILLED = 'cc_show_instances.TIME_FILLED';
/** the column name for the LAST_SCHEDULED field */
const LAST_SCHEDULED = 'cc_show_instances.LAST_SCHEDULED';
/** the column name for the MODIFIED_INSTANCE field */
const MODIFIED_INSTANCE = 'cc_show_instances.MODIFIED_INSTANCE';
@ -77,12 +80,12 @@ abstract class BaseCcShowInstancesPeer {
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('DbId', 'DbStarts', 'DbEnds', 'DbShowId', 'DbRecord', 'DbRebroadcast', 'DbOriginalShow', 'DbRecordedFile', 'DbTimeFilled', 'DbModifiedInstance', ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbStarts', 'dbEnds', 'dbShowId', 'dbRecord', 'dbRebroadcast', 'dbOriginalShow', 'dbRecordedFile', 'dbTimeFilled', 'dbModifiedInstance', ),
BasePeer::TYPE_COLNAME => array (self::ID, self::STARTS, self::ENDS, self::SHOW_ID, self::RECORD, self::REBROADCAST, self::INSTANCE_ID, self::FILE_ID, self::TIME_FILLED, self::MODIFIED_INSTANCE, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID', 'STARTS', 'ENDS', 'SHOW_ID', 'RECORD', 'REBROADCAST', 'INSTANCE_ID', 'FILE_ID', 'TIME_FILLED', 'MODIFIED_INSTANCE', ),
BasePeer::TYPE_FIELDNAME => array ('id', 'starts', 'ends', 'show_id', 'record', 'rebroadcast', 'instance_id', 'file_id', 'time_filled', 'modified_instance', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
BasePeer::TYPE_PHPNAME => array ('DbId', 'DbStarts', 'DbEnds', 'DbShowId', 'DbRecord', 'DbRebroadcast', 'DbOriginalShow', 'DbRecordedFile', 'DbTimeFilled', 'DbLastScheduled', 'DbModifiedInstance', ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbStarts', 'dbEnds', 'dbShowId', 'dbRecord', 'dbRebroadcast', 'dbOriginalShow', 'dbRecordedFile', 'dbTimeFilled', 'dbLastScheduled', 'dbModifiedInstance', ),
BasePeer::TYPE_COLNAME => array (self::ID, self::STARTS, self::ENDS, self::SHOW_ID, self::RECORD, self::REBROADCAST, self::INSTANCE_ID, self::FILE_ID, self::TIME_FILLED, self::LAST_SCHEDULED, self::MODIFIED_INSTANCE, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID', 'STARTS', 'ENDS', 'SHOW_ID', 'RECORD', 'REBROADCAST', 'INSTANCE_ID', 'FILE_ID', 'TIME_FILLED', 'LAST_SCHEDULED', 'MODIFIED_INSTANCE', ),
BasePeer::TYPE_FIELDNAME => array ('id', 'starts', 'ends', 'show_id', 'record', 'rebroadcast', 'instance_id', 'file_id', 'time_filled', 'last_scheduled', 'modified_instance', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, )
);
/**
@ -92,12 +95,12 @@ abstract class BaseCcShowInstancesPeer {
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/
private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbStarts' => 1, 'DbEnds' => 2, 'DbShowId' => 3, 'DbRecord' => 4, 'DbRebroadcast' => 5, 'DbOriginalShow' => 6, 'DbRecordedFile' => 7, 'DbTimeFilled' => 8, 'DbModifiedInstance' => 9, ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbStarts' => 1, 'dbEnds' => 2, 'dbShowId' => 3, 'dbRecord' => 4, 'dbRebroadcast' => 5, 'dbOriginalShow' => 6, 'dbRecordedFile' => 7, 'dbTimeFilled' => 8, 'dbModifiedInstance' => 9, ),
BasePeer::TYPE_COLNAME => array (self::ID => 0, self::STARTS => 1, self::ENDS => 2, self::SHOW_ID => 3, self::RECORD => 4, self::REBROADCAST => 5, self::INSTANCE_ID => 6, self::FILE_ID => 7, self::TIME_FILLED => 8, self::MODIFIED_INSTANCE => 9, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'STARTS' => 1, 'ENDS' => 2, 'SHOW_ID' => 3, 'RECORD' => 4, 'REBROADCAST' => 5, 'INSTANCE_ID' => 6, 'FILE_ID' => 7, 'TIME_FILLED' => 8, 'MODIFIED_INSTANCE' => 9, ),
BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'starts' => 1, 'ends' => 2, 'show_id' => 3, 'record' => 4, 'rebroadcast' => 5, 'instance_id' => 6, 'file_id' => 7, 'time_filled' => 8, 'modified_instance' => 9, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbStarts' => 1, 'DbEnds' => 2, 'DbShowId' => 3, 'DbRecord' => 4, 'DbRebroadcast' => 5, 'DbOriginalShow' => 6, 'DbRecordedFile' => 7, 'DbTimeFilled' => 8, 'DbLastScheduled' => 9, 'DbModifiedInstance' => 10, ),
BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbStarts' => 1, 'dbEnds' => 2, 'dbShowId' => 3, 'dbRecord' => 4, 'dbRebroadcast' => 5, 'dbOriginalShow' => 6, 'dbRecordedFile' => 7, 'dbTimeFilled' => 8, 'dbLastScheduled' => 9, 'dbModifiedInstance' => 10, ),
BasePeer::TYPE_COLNAME => array (self::ID => 0, self::STARTS => 1, self::ENDS => 2, self::SHOW_ID => 3, self::RECORD => 4, self::REBROADCAST => 5, self::INSTANCE_ID => 6, self::FILE_ID => 7, self::TIME_FILLED => 8, self::LAST_SCHEDULED => 9, self::MODIFIED_INSTANCE => 10, ),
BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'STARTS' => 1, 'ENDS' => 2, 'SHOW_ID' => 3, 'RECORD' => 4, 'REBROADCAST' => 5, 'INSTANCE_ID' => 6, 'FILE_ID' => 7, 'TIME_FILLED' => 8, 'LAST_SCHEDULED' => 9, 'MODIFIED_INSTANCE' => 10, ),
BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'starts' => 1, 'ends' => 2, 'show_id' => 3, 'record' => 4, 'rebroadcast' => 5, 'instance_id' => 6, 'file_id' => 7, 'time_filled' => 8, 'last_scheduled' => 9, 'modified_instance' => 10, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, )
);
/**
@ -178,6 +181,7 @@ abstract class BaseCcShowInstancesPeer {
$criteria->addSelectColumn(CcShowInstancesPeer::INSTANCE_ID);
$criteria->addSelectColumn(CcShowInstancesPeer::FILE_ID);
$criteria->addSelectColumn(CcShowInstancesPeer::TIME_FILLED);
$criteria->addSelectColumn(CcShowInstancesPeer::LAST_SCHEDULED);
$criteria->addSelectColumn(CcShowInstancesPeer::MODIFIED_INSTANCE);
} else {
$criteria->addSelectColumn($alias . '.ID');
@ -189,6 +193,7 @@ abstract class BaseCcShowInstancesPeer {
$criteria->addSelectColumn($alias . '.INSTANCE_ID');
$criteria->addSelectColumn($alias . '.FILE_ID');
$criteria->addSelectColumn($alias . '.TIME_FILLED');
$criteria->addSelectColumn($alias . '.LAST_SCHEDULED');
$criteria->addSelectColumn($alias . '.MODIFIED_INSTANCE');
}
}

View file

@ -15,6 +15,7 @@
* @method CcShowInstancesQuery orderByDbOriginalShow($order = Criteria::ASC) Order by the instance_id column
* @method CcShowInstancesQuery orderByDbRecordedFile($order = Criteria::ASC) Order by the file_id column
* @method CcShowInstancesQuery orderByDbTimeFilled($order = Criteria::ASC) Order by the time_filled column
* @method CcShowInstancesQuery orderByDbLastScheduled($order = Criteria::ASC) Order by the last_scheduled column
* @method CcShowInstancesQuery orderByDbModifiedInstance($order = Criteria::ASC) Order by the modified_instance column
*
* @method CcShowInstancesQuery groupByDbId() Group by the id column
@ -26,6 +27,7 @@
* @method CcShowInstancesQuery groupByDbOriginalShow() Group by the instance_id column
* @method CcShowInstancesQuery groupByDbRecordedFile() Group by the file_id column
* @method CcShowInstancesQuery groupByDbTimeFilled() Group by the time_filled column
* @method CcShowInstancesQuery groupByDbLastScheduled() Group by the last_scheduled column
* @method CcShowInstancesQuery groupByDbModifiedInstance() Group by the modified_instance column
*
* @method CcShowInstancesQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
@ -64,6 +66,7 @@
* @method CcShowInstances findOneByDbOriginalShow(int $instance_id) Return the first CcShowInstances filtered by the instance_id column
* @method CcShowInstances findOneByDbRecordedFile(int $file_id) Return the first CcShowInstances filtered by the file_id column
* @method CcShowInstances findOneByDbTimeFilled(string $time_filled) Return the first CcShowInstances filtered by the time_filled column
* @method CcShowInstances findOneByDbLastScheduled(string $last_scheduled) Return the first CcShowInstances filtered by the last_scheduled column
* @method CcShowInstances findOneByDbModifiedInstance(boolean $modified_instance) Return the first CcShowInstances filtered by the modified_instance column
*
* @method array findByDbId(int $id) Return CcShowInstances objects filtered by the id column
@ -75,6 +78,7 @@
* @method array findByDbOriginalShow(int $instance_id) Return CcShowInstances objects filtered by the instance_id column
* @method array findByDbRecordedFile(int $file_id) Return CcShowInstances objects filtered by the file_id column
* @method array findByDbTimeFilled(string $time_filled) Return CcShowInstances objects filtered by the time_filled column
* @method array findByDbLastScheduled(string $last_scheduled) Return CcShowInstances objects filtered by the last_scheduled column
* @method array findByDbModifiedInstance(boolean $modified_instance) Return CcShowInstances objects filtered by the modified_instance column
*
* @package propel.generator.airtime.om
@ -422,22 +426,44 @@ abstract class BaseCcShowInstancesQuery extends ModelCriteria
/**
* Filter the query on the time_filled column
*
* @param string|array $dbTimeFilled The value to use as filter.
* Accepts an associative array('min' => $minValue, 'max' => $maxValue)
* @param string $dbTimeFilled The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return CcShowInstancesQuery The current query, for fluid interface
*/
public function filterByDbTimeFilled($dbTimeFilled = null, $comparison = null)
{
if (is_array($dbTimeFilled)) {
if (null === $comparison) {
if (is_array($dbTimeFilled)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $dbTimeFilled)) {
$dbTimeFilled = str_replace('*', '%', $dbTimeFilled);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled, $comparison);
}
/**
* Filter the query on the last_scheduled column
*
* @param string|array $dbLastScheduled The value to use as filter.
* Accepts an associative array('min' => $minValue, 'max' => $maxValue)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return CcShowInstancesQuery The current query, for fluid interface
*/
public function filterByDbLastScheduled($dbLastScheduled = null, $comparison = null)
{
if (is_array($dbLastScheduled)) {
$useMinMax = false;
if (isset($dbTimeFilled['min'])) {
$this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled['min'], Criteria::GREATER_EQUAL);
if (isset($dbLastScheduled['min'])) {
$this->addUsingAlias(CcShowInstancesPeer::LAST_SCHEDULED, $dbLastScheduled['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($dbTimeFilled['max'])) {
$this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled['max'], Criteria::LESS_EQUAL);
if (isset($dbLastScheduled['max'])) {
$this->addUsingAlias(CcShowInstancesPeer::LAST_SCHEDULED, $dbLastScheduled['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
@ -447,7 +473,7 @@ abstract class BaseCcShowInstancesQuery extends ModelCriteria
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(CcShowInstancesPeer::TIME_FILLED, $dbTimeFilled, $comparison);
return $this->addUsingAlias(CcShowInstancesPeer::LAST_SCHEDULED, $dbLastScheduled, $comparison);
}
/**

View file

@ -0,0 +1,16 @@
<div class="sb-timerange">
<?php echo $this->element->getElement('sb_date_start') ?>
<?php echo $this->element->getElement('sb_time_start') ?>
<?php echo $this->element->getElement('sb_date_end') ?>
<?php echo $this->element->getElement('sb_time_end') ?>
<input type="button" id="sb_submit" class="ui-button ui-state-default" value="GO"></input>
</div>
<div class="sb-advanced-options">
<label><?php echo $this->element->getElement('sb_show_filter')->getLabel() ?></label>
<?php echo $this->element->getElement('sb_show_filter') ?>
<?php if ($this->element->getElement('sb_my_shows')):?>
<label><?php echo $this->element->getElement('sb_my_shows')->getLabel(); ?></label>
<?php echo $this->element->getElement('sb_my_shows'); ?>
<?php endif;?>
</div>

View file

@ -3,7 +3,5 @@
</ul>
<div id="simpleSearch">
<div id="import_status" style="visibility:hidden">File import in progress...</div>
<table id="library_display" cellpadding="0" cellspacing="0" class="datatable">
</table>
<table id="library_display" cellpadding="0" cellspacing="0" class="datatable"></table>
</div>

View file

@ -1,6 +1,2 @@
<input type="text" id="show_builder_datepicker_start" class="input_text" value="<?php echo $this->start_date?>"></input>
<input type="text" id="show_builder_timepicker_start" class="input_text" value="<?php echo $this->start_time?>"></input>
<input type="text" id="show_builder_datepicker_end" class="input_text" value="<?php echo $this->end_date?>"></input>
<input type="text" id="show_builder_timepicker_end" class="input_text" value="<?php echo $this->end_time?>"></input>
<input type="button" id="show_builder_timerange_button" class="ui-button ui-state-default" value="GO"></input>
<?php echo $this->sb_form; ?>
<table id="show_builder_table" cellpadding="0" cellspacing="0" class="datatable"></table>