diff --git a/airtime_mvc/application/controllers/PlayouthistoryController.php b/airtime_mvc/application/controllers/PlayouthistoryController.php index 2c7e0ca83..8b84902e3 100644 --- a/airtime_mvc/application/controllers/PlayouthistoryController.php +++ b/airtime_mvc/application/controllers/PlayouthistoryController.php @@ -11,6 +11,7 @@ class PlayouthistoryController extends Zend_Controller_Action ->addActionContext('edit-aggregate-item', 'json') ->addActionContext('create-list-item', 'json') ->addActionContext('edit-list-item', 'json') + ->addActionContext('delete-list-item', 'json') ->addActionContext('update-list-item', 'json') ->addActionContext('update-aggregate-item', 'json') ->addActionContext('create-template', 'json') @@ -137,10 +138,10 @@ class PlayouthistoryController extends Zend_Controller_Action public function editListItemAction() { - $file_id = $this->_getParam('id'); + $history_id = $this->_getParam('id', null); $historyService = new Application_Service_HistoryService(); - $form = $historyService->makeHistoryItemForm($file_id); + $form = $historyService->makeHistoryItemForm($history_id); $this->view->form = $form; $this->view->dialog = $this->view->render('form/edit-history-item.phtml'); @@ -148,6 +149,14 @@ class PlayouthistoryController extends Zend_Controller_Action unset($this->view->form); } + public function deleteListItemAction() + { + $history_id = $this->_getParam('id'); + + $historyService = new Application_Service_HistoryService(); + $historyService->deletePlayedItem($history_id); + } + public function updateListItemAction() { $request = $this->getRequest(); diff --git a/airtime_mvc/application/services/HistoryService.php b/airtime_mvc/application/services/HistoryService.php index 103a73049..7e6b80718 100644 --- a/airtime_mvc/application/services/HistoryService.php +++ b/airtime_mvc/application/services/HistoryService.php @@ -21,7 +21,7 @@ class Application_Service_HistoryService public function __construct() { $this->con = isset($con) ? $con : Propel::getConnection(CcPlayoutHistoryPeer::DATABASE_NAME); - $this->timezone = date_default_timezone_get(); + $this->timezone = Application_Model_Preference::GetTimezone(); } /* @@ -61,6 +61,21 @@ class Application_Service_HistoryService left join cc_files as file on (file.id = playout.file_id)"; $results = Application_Model_Datatables::findEntries($this->con, $select, $historyTable, $opts, "history"); + + $timezoneUTC = new DateTimeZone("UTC"); + $timezoneLocal = new DateTimeZone($this->timezone); + + //need to display the results in the station's timezone. + foreach ($results["history"] as $index => &$result) { + + $dateTime = new DateTime($result["starts"], $timezoneUTC); + $dateTime->setTimezone($timezoneLocal); + $result["starts"] = $dateTime->format("Y-m-d H:i:s"); + + $dateTime = new DateTime($result["ends"], $timezoneUTC); + $dateTime->setTimezone($timezoneLocal); + $result["ends"] = $dateTime->format("Y-m-d H:i:s"); + } return $results; } @@ -153,7 +168,7 @@ class Application_Service_HistoryService } /* id is an id in cc_playout_history */ - public function makeHistoryItemForm() { + public function makeHistoryItemForm($id) { try { $form = new Application_Form_EditHistoryItem(); @@ -197,18 +212,23 @@ class Application_Service_HistoryService public function createPlayedItem($data) { try { - $form = $this->makeHistoryItemForm(); + $form = $this->makeHistoryItemForm(null); + $history_id = $form->getElement("his_item_id"); - $json = $form->processAjax($data); - Logging::info($json); - if ($form->isValid($data)) { - $values = $form->getElementsAndSubFormsOrdered(); + $history_id->setIgnore(true); + $values = $form->getValues(); + Logging::info("created list item"); Logging::info($values); } + else { + Logging::info("created list item NOT VALID"); + } + + Logging::info($form->getMessages()); - return $json; + //return $json; } catch (Exception $e) { Logging::info($e); @@ -216,21 +236,25 @@ class Application_Service_HistoryService } /* id is an id in cc_playout_history */ - public function editPlayedItem($id) { + public function editPlayedItem($data) { try { - $form = $this->makeHistoryItemForm(); + $id = $data["his_item_id"]; + $form = $this->makeHistoryItemForm($id); + $history_id = $form->getElement("his_item_id"); + $history_id->setRequired(true); - $json = $form->processAjax($data); - Logging::info($json); - if ($form->isValid($data)) { - $values = $form->getElementsAndSubFormsOrdered(); - Logging::info("edited list item"); - Logging::info($values); - } - - return $json; + $values = $form->getValues(); + + Logging::info("edited list item"); + Logging::info($values); + } + else { + Logging::info("edited list item NOT VALID"); + } + + Logging::info($form->getMessages()); } catch (Exception $e) { Logging::info($e); @@ -240,29 +264,59 @@ class Application_Service_HistoryService /* id is an id in cc_files */ public function editPlayedFile($data) { - $form = new Application_Form_EditHistoryFile(); - - $json = $form->processAjax($data); - Logging::info($json); - - if ($form->isValid($data)) { - - $id = $data["his_file_id"]; - $file = Application_Model_StoredFile::RecallById($id, $this->con); - - $md = array( - MDATA_KEY_TITLE => $data['his_file_title'], - MDATA_KEY_CREATOR => $data['his_file_creator'], - MDATA_KEY_COMPOSER => $data['his_file_composer'], - MDATA_KEY_COPYRIGHT => $data['his_file_copyright'] - ); - - $file->setDbColMetadata($md); - } + $this->con->beginTransaction(); + + try { + $form = new Application_Form_EditHistoryFile(); + + $json = $form->processAjax($data); + Logging::info($json); + + if ($form->isValid($data)) { + + $id = $data["his_file_id"]; + $file = Application_Model_StoredFile::RecallById($id, $this->con); + + $md = array( + MDATA_KEY_TITLE => $data['his_file_title'], + MDATA_KEY_CREATOR => $data['his_file_creator'], + MDATA_KEY_COMPOSER => $data['his_file_composer'], + MDATA_KEY_COPYRIGHT => $data['his_file_copyright'] + ); + + $file->setDbColMetadata($md); + } + + $this->con->commit(); + } + catch (Exception $e) { + $this->con->rollback(); + Logging::info($e); + throw $e; + } return $json; } + /* id is an id in cc_playout_history */ + public function deletePlayedItem($id) { + + $this->con->beginTransaction(); + + try { + + $record = CcPlayoutHistoryQuery::create()->findPk($id, $this->con); + $record->delete($this->con); + + $this->con->commit(); + } + catch (Exception $e) { + $this->con->rollback(); + Logging::info($e); + throw $e; + } + } + //---------------- Following code is for History Templates --------------------------// diff --git a/airtime_mvc/application/views/scripts/playouthistory/index.phtml b/airtime_mvc/application/views/scripts/playouthistory/index.phtml index 86da61578..c2a8da2f5 100644 --- a/airtime_mvc/application/views/scripts/playouthistory/index.phtml +++ b/airtime_mvc/application/views/scripts/playouthistory/index.phtml @@ -7,6 +7,7 @@
  • +
    diff --git a/airtime_mvc/application/views/scripts/playouthistory/template.phtml b/airtime_mvc/application/views/scripts/playouthistory/template.phtml new file mode 100644 index 000000000..5c59f19ef --- /dev/null +++ b/airtime_mvc/application/views/scripts/playouthistory/template.phtml @@ -0,0 +1,3 @@ +
    + +
    \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/playouthistory/historytable.js b/airtime_mvc/public/js/airtime/playouthistory/historytable.js index 9a7b8e248..729b7b7df 100644 --- a/airtime_mvc/public/js/airtime/playouthistory/historytable.js +++ b/airtime_mvc/public/js/airtime/playouthistory/historytable.js @@ -35,9 +35,9 @@ var AIRTIME = (function(AIRTIME) { ] }; - var lengthMenu = [[50, 100, 500, -1], [50, 100, 500, $.i18n._("All")]]; + var lengthMenu = [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, $.i18n._("All")]]; - var sDom = 'lf<"dt-process-rel"r><"H"T><"dataTables_scrolling"t><"F"ip>'; + var sDom = 'l<"dt-process-rel"r><"H"T><"dataTables_scrolling"t><"F"ip>'; function getFileName(ext){ var filename = $("#his_date_start").val()+"_"+$("#his_time_start").val()+"m--"+$("#his_date_end").val()+"_"+$("#his_time_end").val()+"m"; @@ -98,13 +98,9 @@ var AIRTIME = (function(AIRTIME) { fnRowCallback; fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { - var url = baseUrl+"Playouthistory/edit-aggregate-item/format/json/id/"+aData.file_id, - $link = $("", { - "href": url, - "text": $.i18n._("Edit") - }); - - $('td.his_edit', nRow).html($link); + var editUrl = baseUrl+"Playouthistory/edit-aggregate-item/format/json/id/"+aData.file_id; + + nRow.setAttribute('url-edit', editUrl); }; oTable = $historyTableDiv.dataTable( { @@ -115,8 +111,7 @@ var AIRTIME = (function(AIRTIME) { {"sTitle": $.i18n._("Played"), "mDataProp": "played", "sClass": "his_artist"}, /* times played */ {"sTitle": $.i18n._("Length"), "mDataProp": "length", "sClass": "his_length library_length"}, /* Length */ {"sTitle": $.i18n._("Composer"), "mDataProp": "composer", "sClass": "his_composer"}, /* Composer */ - {"sTitle": $.i18n._("Copyright"), "mDataProp": "copyright", "sClass": "his_copyright"}, /* Copyright */ - {"sTitle" : $.i18n._("Admin"), "mDataProp": "file_id", "bSearchable" : false, "sClass": "his_edit"}, /* id of history item */ + {"sTitle": $.i18n._("Copyright"), "mDataProp": "copyright", "sClass": "his_copyright"} /* Copyright */ ], "bProcessing": true, @@ -145,13 +140,11 @@ var AIRTIME = (function(AIRTIME) { fnRowCallback; fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { - var url = baseUrl+"playouthistory/edit-list-item/format/json/id/"+aData.history_id, - $link = $("", { - "href": url, - "text": $.i18n._("Edit") - }); - - $('td.his_edit', nRow).html($link); + var editUrl = baseUrl+"playouthistory/edit-list-item/format/json/id/"+aData.history_id, + deleteUrl = baseUrl+"playouthistory/delete-list-item/format/json/id/"+aData.history_id; + + nRow.setAttribute('url-edit', editUrl); + nRow.setAttribute('url-delete', deleteUrl); }; oTable = $historyTableDiv.dataTable( { @@ -160,8 +153,7 @@ var AIRTIME = (function(AIRTIME) { {"sTitle": $.i18n._("Start"), "mDataProp": "starts", "sClass": "his_starts"}, /* Starts */ {"sTitle": $.i18n._("End"), "mDataProp": "ends", "sClass": "his_ends"}, /* Ends */ {"sTitle": $.i18n._("Title"), "mDataProp": "title", "sClass": "his_title"}, /* Title */ - {"sTitle": $.i18n._("Creator"), "mDataProp": "artist", "sClass": "his_artist"}, /* Creator */ - {"sTitle" : $.i18n._("Admin"), "mDataProp": "history_id", "bSearchable" : false, "sClass": "his_edit"}, /* id of history item */ + {"sTitle": $.i18n._("Creator"), "mDataProp": "artist", "sClass": "his_artist"} /* Creator */ ], "bProcessing": true, @@ -191,7 +183,8 @@ var AIRTIME = (function(AIRTIME) { screenWidth = Math.floor(viewport.width - 110), oBaseDatePickerSettings, oBaseTimePickerSettings, - oTable, + oTableAgg, + oTableItem, dateStartId = "#his_date_start", timeStartId = "#his_time_start", dateEndId = "#his_date_end", @@ -251,15 +244,72 @@ var AIRTIME = (function(AIRTIME) { minuteText: $.i18n._("Minute") }; - oTable = aggregateHistoryTable(); - itemHistoryTable(); + oTableItem = itemHistoryTable(); + oTableAgg = aggregateHistoryTable(); $historyContentDiv.find(dateStartId).datepicker(oBaseDatePickerSettings); $historyContentDiv.find(timeStartId).timepicker(oBaseTimePickerSettings); $historyContentDiv.find(dateEndId).datepicker(oBaseDatePickerSettings); $historyContentDiv.find(timeEndId).timepicker(oBaseTimePickerSettings); - $historyContentDiv.on("click", "td.his_edit", function(e) { + // 'open' an information row when a row is clicked on + //for create/edit/delete + function openRow(oTable, tr) { + var links = ['url-edit', 'url-delete'], + i, len, + attr, + name, + $link, + $div; + + $div = $("
    "); + + for (i = 0, len = links.length; i < len; i++) { + + attr = links[i]; + + if (tr.hasAttribute(attr)) { + name = attr.split("-")[1]; + + $link = $("", { + "href": tr.getAttribute(attr), + "text": $.i18n._(name), + "class": "his_"+name + }); + + $div.append($link); + } + } + + if (oTable.fnIsOpen(tr)) { + oTable.fnClose(tr); + } + else { + oTable.fnOpen(tr, $div, "his_update"); + } + } + + $historyContentDiv.on("click", "#history_table_list tr", function(ev) { + openRow(oTableItem, this); + }); + + $historyContentDiv.on("click", "#history_table_aggregate tr", function(ev) { + openRow(oTableAgg, this); + }); + + $("#his_create").click(function(e) { + var url = baseUrl+"playouthistory/edit-list-item/format/json" ; + + e.preventDefault(); + + $.get(url, function(json) { + + makeHistoryDialog(json.dialog); + + }, "json"); + }); + + $historyContentDiv.on("click", "a.his_edit", function(e) { var url = e.target.href; e.preventDefault(); @@ -271,6 +321,27 @@ var AIRTIME = (function(AIRTIME) { }, "json"); }); + $historyContentDiv.on("click", "a.his_delete", function(e) { + var url = e.target.href, + doDelete; + + e.preventDefault(); + + doDelete = confirm($.i18n._("Delete this history record?")); + + if (doDelete) { + $.post(url, function(json) { + oTableAgg.fnDraw(); + oTableItem.fnDraw(); + + }, "json"); + } + }); + + $('body').on("click", ".his_file_cancel, .his_item_cancel", function(e) { + removeHistoryDialog(); + }); + $('body').on("click", ".his_file_save", function(e) { e.preventDefault(); @@ -288,7 +359,7 @@ var AIRTIME = (function(AIRTIME) { } else { removeHistoryDialog(); - oTable.fnDraw(); + oTableAgg.fnDraw(); } }, "json"); @@ -299,11 +370,15 @@ var AIRTIME = (function(AIRTIME) { e.preventDefault(); - var $form = $(this).parents("form"); - var data = $form.serializeArray(); - - var url = baseUrl+"Playouthistory/update-list-item/format/json"; + var $form = $(this).parents("form"), + data = $form.serializeArray(), + id = data[0].value, + createUrl = baseUrl+"Playouthistory/create-list-item/format/json", + updateUrl = baseUrl+"Playouthistory/update-list-item/format/json", + url; + url = (id === "") ? createUrl : updateUrl; + $.post(url, data, function(json) { //TODO put errors on form. @@ -312,7 +387,7 @@ var AIRTIME = (function(AIRTIME) { } else { removeHistoryDialog(); - oTable.fnDraw(); + oTableItem.fnDraw(); } }, "json"); @@ -325,11 +400,12 @@ var AIRTIME = (function(AIRTIME) { oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId); - fn = oTable.fnSettings().fnServerData; + fn = fnServerData; fn.start = oRange.start; fn.end = oRange.end; - oTable.fnDraw(); + oTableAgg.fnDraw(); + oTableItem.fnDraw(); }); $historyContentDiv.find("#his-tabs").tabs();