diff --git a/application/controllers/widgets/Filters.php b/application/controllers/widgets/Filters.php index 1587683d2..a4b23dc8a 100644 --- a/application/controllers/widgets/Filters.php +++ b/application/controllers/widgets/Filters.php @@ -12,7 +12,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class Filters extends FHC_Controller { - const FILTER_PAGE_PARAM = 'filter_page'; + const FILTER_UNIQUE_ID = 'filterUniqueId'; /** * Calls the parent's constructor and loads the FilterWidgetLib @@ -231,31 +231,33 @@ class Filters extends FHC_Controller } /** - * Loads the FilterWidgetLib with the FILTER_PAGE_PARAM parameter - * If the parameter FILTER_PAGE_PARAM is not given then the execution of the controller is terminated and + * Loads the FilterWidgetLib with the FILTER_UNIQUE_ID parameter + * If the parameter FILTER_UNIQUE_ID is not given then the execution of the controller is terminated and * an error message is printed */ private function _loadFilterWidgetLib() { - // If the parameter FILTER_PAGE_PARAM is present in the HTTP GET or POST - if (isset($_GET[self::FILTER_PAGE_PARAM]) || isset($_POST[self::FILTER_PAGE_PARAM])) + // If the parameter FILTER_UNIQUE_ID is present in the HTTP GET or POST + if (isset($_GET[self::FILTER_UNIQUE_ID]) || isset($_POST[self::FILTER_UNIQUE_ID])) { // If it is present in the HTTP GET - if (isset($_GET[self::FILTER_PAGE_PARAM])) + if (isset($_GET[self::FILTER_UNIQUE_ID])) { - $filterPage = $this->input->get(self::FILTER_PAGE_PARAM); // is retrieved from the HTTP GET + $filterUniqueId = $this->input->get(self::FILTER_UNIQUE_ID); // is retrieved from the HTTP GET } - elseif (isset($_POST[self::FILTER_PAGE_PARAM])) // Else if it is present in the HTTP POST + elseif (isset($_POST[self::FILTER_UNIQUE_ID])) // Else if it is present in the HTTP POST { - $filterPage = $this->input->post(self::FILTER_PAGE_PARAM); // is retrieved from the HTTP POST + $filterUniqueId = $this->input->post(self::FILTER_UNIQUE_ID); // is retrieved from the HTTP POST } // Loads the FilterWidgetLib that contains all the used logic - $this->load->library('FilterWidgetLib', array(self::FILTER_PAGE_PARAM => $filterPage)); + $this->load->library('FilterWidgetLib'); + + $this->filterwidgetlib->setFilterUniqueId($filterUniqueId); } else // Otherwise an error will be written in the output { - $this->terminateWithJsonError('Parameter "'.self::FILTER_PAGE_PARAM.'" not provided!'); + $this->terminateWithJsonError('Parameter "'.self::FILTER_UNIQUE_ID.'" not provided!'); } } } diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index f60a28e23..23453a56f 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -90,7 +90,7 @@ class FilterWidgetLib const FILTER_PHRASES_CATEGORY = 'FilterWidget'; // The category used to store phrases for the FilterWidget - const FILTER_PAGE_PARAM = 'filter_page'; // Filter page parameter name + const FILTER_UNIQUE_ID = 'filterUniqueId'; // Filter page parameter name const PERMISSION_FILTER_METHOD = 'FilterWidget'; // Name for fake method to be checked by the PermissionLib const PERMISSION_TYPE = 'rw'; @@ -113,8 +113,6 @@ class FilterWidgetLib public function __construct($params = null) { $this->_ci =& get_instance(); // get code igniter instance - - $this->_filterUniqueId = $this->_getFilterUniqueId($params); // sets the id for the related filter widget } //------------------------------------------------------------------------------------------------------------------ @@ -782,14 +780,14 @@ class FilterWidgetLib * NOTE: The default value is the URI where the FilterWidget is called * If the fhc_controller_id is present then is also used */ - private function _getFilterUniqueId($params) + public function setFilterUniqueIdByParams($params) { if ($params != null && is_array($params) - && isset($params[self::FILTER_PAGE_PARAM]) - && !isEmptyString($params[self::FILTER_PAGE_PARAM])) + && isset($params[self::FILTER_UNIQUE_ID]) + && !isEmptyString($params[self::FILTER_UNIQUE_ID])) { - $filterUniqueId = $params[self::FILTER_PAGE_PARAM]; + $filterUniqueId = $params[self::FILTER_UNIQUE_ID]; } else { @@ -797,6 +795,21 @@ class FilterWidgetLib $filterUniqueId = $this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method; } + if ($params != null + && is_array($params) + && (isset($params[self::APP_PARAMETER]) || isset($params[self::DATASET_NAME_PARAMETER]) || isset($params[self::FILTER_ID]))) + { + $app = ''; + $dataset = ''; + $filterid = ''; + + if (isset($params[self::APP_PARAMETER])) $app = $params[self::APP_PARAMETER]; + if (isset($params[self::DATASET_NAME_PARAMETER])) $dataset = $params[self::DATASET_NAME_PARAMETER]; + if (isset($params[self::FILTER_ID])) $filterid = $params[self::FILTER_ID]; + + $filterUniqueId .= '/'.$app.':'.$dataset.':'.$filterid; + } + // If the FHC_CONTROLLER_ID parameter is present in the HTTP GET if (isset($_GET[self::FHC_CONTROLLER_ID])) { @@ -807,7 +820,25 @@ class FilterWidgetLib $filterUniqueId .= '/'.$this->_ci->input->post(self::FHC_CONTROLLER_ID); // then use it } - return $filterUniqueId; + $this->_filterUniqueId = $filterUniqueId; + } + + /** + * + */ + public function setFilterUniqueId($filterUniqueId) + { + // If the FHC_CONTROLLER_ID parameter is present in the HTTP GET + if (isset($_GET[self::FHC_CONTROLLER_ID])) + { + $filterUniqueId .= '/'.$this->_ci->input->get(self::FHC_CONTROLLER_ID); // then use it + } + elseif (isset($_POST[self::FHC_CONTROLLER_ID])) // else if the FHC_CONTROLLER_ID parameter is present in the HTTP POST + { + $filterUniqueId .= '/'.$this->_ci->input->post(self::FHC_CONTROLLER_ID); // then use it + } + + $this->_filterUniqueId = $filterUniqueId; } /** diff --git a/application/views/widgets/filter/filter.php b/application/views/widgets/filter/filter.php index 9c05581ff..7a6300cf6 100644 --- a/application/views/widgets/filter/filter.php +++ b/application/views/widgets/filter/filter.php @@ -1,4 +1,5 @@ -
+ +
@@ -12,7 +13,7 @@
-
+
diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 828cd194d..d168744c8 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -72,6 +72,8 @@ class FilterWidget extends Widget $this->_initFilterWidget($args); // checks parameters and initialize properties + $this->filterwidgetlib->setFilterUniqueIdByParams($args); + // Let's start if it's allowed // NOTE: If it is NOT allowed then no data are loaded if ($this->filterwidgetlib->isAllowed($this->_requiredPermissions)) diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index 747843b0d..7ff1e972a 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -13,14 +13,17 @@ * Global function used by FilterWidget JS to refresh the side menu * NOTE: it is called from the FilterWidget JS therefore must be a global function * It may be overwritten by a custom refreshSideMenuHook included in a javascript which will be loaded after this one - * The given parameters, filter_page and navigation_page, are required + * The given parameters, filterUniqueId and navigation_page, are required */ -function refreshSideMenuHook() +function refreshSideMenuHook(app, dataset, filterid) { FHC_NavigationWidget.refreshSideMenuHook( 'widgets/Filters/setNavigationMenu', { - filter_page: FHC_FilterWidget.getFilterPage(), + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + app + ":" + + dataset + ":" + + filterid, navigation_page: FHC_NavigationWidget.getNavigationPage() } ); @@ -33,8 +36,8 @@ function refreshSideMenuHook() */ function sideMenuHook() { - // If menu is present - if (FHC_FilterWidget._hideMenu != true) + // If menu is present and there is only one FilterWidget in this page + if (FHC_FilterWidget._hideMenu != true && FHC_FilterWidget._isMultipleFilterWidgets() != true) { $(".remove-custom-filter").click(function() { @@ -43,7 +46,10 @@ function sideMenuHook() "widgets/Filters/removeCustomFilter", { filter_id: $(this).attr("value"), // filter_id of the filter to be removed - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + FHC_FilterWidget._filterWidgetsAttributes[0].app + ":" + + FHC_FilterWidget._filterWidgetsAttributes[0].dataset + ":" + + FHC_FilterWidget._filterWidgetsAttributes[0].filterid }, { successCallback: function(data, textStatus, jqXHR) { @@ -54,10 +60,13 @@ function sideMenuHook() } else { - // If a success and refreshSideMenuHook is a valid function then call it to refresh the side menu if (typeof refreshSideMenuHook == "function") { - refreshSideMenuHook(); + refreshSideMenuHook( + FHC_FilterWidget._filterWidgetsAttributes[0].app, + FHC_FilterWidget._filterWidgetsAttributes[0].dataset, + FHC_FilterWidget._filterWidgetsAttributes[0].filterid + ); } } } @@ -84,7 +93,9 @@ var FHC_FilterWidget = { // Properties _datasetRepresentation: null, // contains the current data representation - _filterTabulator: null, // stores the tabulator object (if used, otherwise is null) + _filterWidgetsAttributes: null, // + _hideMenu: false, // + _hideOptions: false, // //------------------------------------------------------------------------------------------------------------------ // Public methods @@ -94,6 +105,8 @@ var FHC_FilterWidget = { */ display: function() { + FHC_FilterWidget._setFilterWidgetsAttributes(); + FHC_FilterWidget._getFilter(FHC_FilterWidget._renderFilterWidget); }, @@ -108,7 +121,7 @@ var FHC_FilterWidget = { /** * To retrive the page where the FilterWidget is used, using the FHC_JS_DATA_STORAGE_OBJECT */ - getFilterPage: function() { + getFilterUniqueIdPrefix: function() { return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; }, @@ -151,30 +164,30 @@ var FHC_FilterWidget = { /** * To reset the Filter Options GUI */ - _resetGUI: function() { + _resetGUI: function(filterWidgetDiv) { - $("#dragAndDropFieldsArea").html(""); - $("#addField").html(""); - $("#appliedFilters").html(""); - $("#addFilter").html(""); + filterWidgetDiv.find("#dragAndDropFieldsArea").html(""); + filterWidgetDiv.find("#addField").html(""); + filterWidgetDiv.find("#appliedFilters").html(""); + filterWidgetDiv.find("#addFilter").html(""); // If the choosen dataset representation is tablesorter if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) { - $("#filterTableDataset > thead > tr").html(""); - $("#filterTableDataset > tbody").html(""); + filterWidgetDiv.find("#filterTableDataset > thead > tr").html(""); + filterWidgetDiv.find("#filterTableDataset > tbody").html(""); } // If the choosen dataset representation is pivotUI if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_PIVOTUI) { - $("#filterPivotUI").html(""); + filterWidgetDiv.find("#filterPivotUI").html(""); } // If the choosen dataset representation is tabulator if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABULATOR) { - $("#filterTabulator").html(""); + filterWidgetDiv.find("#filterTabulator").html(""); } }, @@ -184,28 +197,35 @@ var FHC_FilterWidget = { */ _getFilter: function(renderFunction) { - FHC_AjaxClient.ajaxCallGet( - "widgets/Filters/getFilter", - { - filter_page: FHC_FilterWidget.getFilterPage() - }, - { - successCallback: function(data, textStatus, jqXHR) { + FHC_FilterWidget._filterWidgetsAttributes.forEach(function(filterWidgetsAttributes) { - if (FHC_AjaxClient.hasData(data)) - { - if (typeof renderFunction == "function") + FHC_AjaxClient.ajaxCallGet( + "widgets/Filters/getFilter", + { + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + filterWidgetsAttributes.app + ":" + + filterWidgetsAttributes.dataset + ":" + + filterWidgetsAttributes.filterid + }, + { + successCallback: function(data, textStatus, jqXHR) { + + if (FHC_AjaxClient.hasData(data)) { - renderFunction(FHC_AjaxClient.getData(data)); + if (typeof renderFunction == "function") + { + renderFunction(FHC_AjaxClient.getData(data)); + } + } + else + { + console.log(FHC_AjaxClient.getError(data)); } } - else - { - console.log(FHC_AjaxClient.getError(data)); - } } - } - ); + ); + + }); }, /** @@ -216,23 +236,35 @@ var FHC_FilterWidget = { */ _renderFilterWidget: function(data) { + var app = data.app != null ? data.app : ""; + var dataset = data.datasetName != null ? data.datasetName : ""; + var filterid = data.filter_id != null ? data.filter_id : ""; + + var filterWidgetDiv = $('div[app="' + app + '"][dataset="' + dataset + '"][filterid="' + filterid + '"]'); + FHC_FilterWidget._initSessionStorage(); // initialize the session storage FHC_FilterWidget._setDatasetRepresentation(data); // set what type of dataset representation was choosen FHC_FilterWidget._setHideMenu(data); // sets the _hideMenu property + FHC_FilterWidget._setHideOptions(data); - FHC_FilterWidget._turnOffEvents(); // turns all the events off - FHC_FilterWidget._resetGUI(); // Reset the entire GUI + FHC_FilterWidget._turnOffEvents(filterWidgetDiv); // turns all the events off + FHC_FilterWidget._resetGUI(filterWidgetDiv); // Reset the entire GUI // Render the GUI for this FilterWidget - FHC_FilterWidget._setFilterName(data); // set the name in the GUI - FHC_FilterWidget._renderDragAndDropFields(data); // render the fields drag and drop GUI - FHC_FilterWidget._renderDropDownFields(data); // render the fields drop-down - FHC_FilterWidget._renderAppliedFilters(data); // render the GUI for the applied filters - FHC_FilterWidget._renderDropDownFilters(data); // render the filters drop-down - FHC_FilterWidget._renderDataset(data); + FHC_FilterWidget._setFilterName(filterWidgetDiv, data); // set the name in the GUI - FHC_FilterWidget._turnOnEvents(); // turns all the events off + if (FHC_FilterWidget._hideOptions != true) + { + FHC_FilterWidget._renderDragAndDropFields(filterWidgetDiv, data); // render the fields drag and drop GUI + FHC_FilterWidget._renderDropDownFields(filterWidgetDiv, data); // render the fields drop-down + FHC_FilterWidget._renderAppliedFilters(filterWidgetDiv, data); // render the GUI for the applied filters + FHC_FilterWidget._renderDropDownFilters(filterWidgetDiv, data); // render the filters drop-down + } + + FHC_FilterWidget._renderDataset(filterWidgetDiv, data); + + FHC_FilterWidget._turnOnEvents(filterWidgetDiv); // turns all the events off }, /** @@ -259,23 +291,23 @@ var FHC_FilterWidget = { * Turns all the events off * NOTE: must be aligned to _turnOnEvents */ - _turnOffEvents: function() { + _turnOffEvents: function(filterWidgetDiv) { - $("[data-toggle='collapse']").off("click"); - $(".drag-and-drop-fields-span").off("draggable"); - $(".drag-and-drop-fields-span").off("droppable"); - $(".remove-selected-field").off("click"); - $("#addField").off("change"); - $(".applied-filter-operation").off("change"); - $(".remove-applied-filter").off("click"); - $("#addFilter").off("change"); - $("#applyFilter").off("click"); - $("#saveCustomFilterButton").off("click"); + filterWidgetDiv.find('[data-toggle="collapse"]').off("click"); + filterWidgetDiv.find(".drag-and-drop-fields-span").off("draggable"); + filterWidgetDiv.find(".drag-and-drop-fields-span").off("droppable"); + filterWidgetDiv.find(".remove-selected-field").off("click"); + filterWidgetDiv.find("#addField").off("change"); + filterWidgetDiv.find(".applied-filter-operation").off("change"); + filterWidgetDiv.find(".remove-applied-filter").off("click"); + filterWidgetDiv.find("#addFilter").off("change"); + filterWidgetDiv.find("#applyFilter").off("click"); + filterWidgetDiv.find("#saveCustomFilterButton").off("click"); // If the choosen dataset representation is tablesorter if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) { - FHC_FilterWidget._disableTablesorter(); // disable the tablesorter + FHC_FilterWidget._disableTablesorter(filterWidgetDiv); // disable the tablesorter } }, @@ -283,23 +315,23 @@ var FHC_FilterWidget = { * Turns all the events on * NOTE: must be aligned to _turnOffEvents */ - _turnOnEvents: function() { + _turnOnEvents: function(filterWidgetDiv) { - $("[data-toggle='collapse']").click(FHC_FilterWidget._dataToggleCollapseEvent); // Click event to collapse or to open the filter options panel - $(".drag-and-drop-fields-span").draggable(FHC_FilterWidget._draggableConf); // draggable event on selected fields - $(".drag-and-drop-fields-span").droppable(FHC_FilterWidget._droppableConf); // droppable event on selected fields - $(".remove-selected-field").click(FHC_FilterWidget._revomeSelectedFieldsEvent); // Click event on the "X" link - $("#addField").change(FHC_FilterWidget._addFieldEvent); // Change event on the fields drop-down to add new fields - $(".applied-filter-operation").change(FHC_FilterWidget._appliedFiltersOperationsEvent); // Change event on the operation drop-down - $(".remove-applied-filter").click(FHC_FilterWidget._removeAppliedFiltersEvent); // Click event to the "X" button to remove an applied filter - $("#addFilter").change(FHC_FilterWidget._addFilterEvent); // Click event on the applied filters drop-down to add a new filter to the dataset - $("#applyFilter").click(FHC_FilterWidget._applyFilterEvent); // Click event on the applied filters drop-down to apply filters to the dataset - $("#saveCustomFilterButton").click(FHC_FilterWidget._saveCustomFilterButtonEvent); // Click evento to for the save custom filter button + filterWidgetDiv.find('[data-toggle="collapse"]').click(FHC_FilterWidget._dataToggleCollapseEvent); // Click event to collapse or to open the filter options panel + filterWidgetDiv.find(".drag-and-drop-fields-span").draggable(FHC_FilterWidget._draggableConf); // draggable event on selected fields + filterWidgetDiv.find(".drag-and-drop-fields-span").droppable(FHC_FilterWidget._droppableConf); // droppable event on selected fields + filterWidgetDiv.find(".remove-selected-field").click(FHC_FilterWidget._revomeSelectedFieldsEvent); // Click event on the "X" link + filterWidgetDiv.find("#addField").change(FHC_FilterWidget._addFieldEvent); // Change event on the fields drop-down to add new fields + filterWidgetDiv.find(".applied-filter-operation").change(FHC_FilterWidget._appliedFiltersOperationsEvent); // Change event on the operation drop-down + filterWidgetDiv.find(".remove-applied-filter").click(FHC_FilterWidget._removeAppliedFiltersEvent); // Click event to the "X" button to remove an applied filter + filterWidgetDiv.find("#addFilter").change(FHC_FilterWidget._addFilterEvent); // Click event on the applied filters drop-down to add a new filter to the dataset + filterWidgetDiv.find("#applyFilter").click(FHC_FilterWidget._applyFilterEvent); // Click event on the applied filters drop-down to apply filters to the dataset + filterWidgetDiv.find("#saveCustomFilterButton").click(FHC_FilterWidget._saveCustomFilterButtonEvent); // Click evento to for the save custom filter button // If the choosen dataset representation is tablesorter if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) { - FHC_FilterWidget._enableTableSorter(); // enable the tablesorter + FHC_FilterWidget._enableTableSorter(filterWidgetDiv); // enable the tablesorter } }, @@ -380,15 +412,20 @@ var FHC_FilterWidget = { }); + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/sortSelectedFields", { selectedFields: arrayDndId, - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._cleanTablesorterLocalStorage(); + FHC_FilterWidget._cleanTablesorterLocalStorage(divFilterWidgetDataset.find("#filterTableDataset")); FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } @@ -401,11 +438,16 @@ var FHC_FilterWidget = { */ _revomeSelectedFieldsEvent: function(event) { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/removeSelectedField", { selectedField: $(this).attr("fieldToRemove"), - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { @@ -441,15 +483,20 @@ var FHC_FilterWidget = { */ _addFieldEvent: function(event) { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/addSelectedField", { selectedField: $(this).val(), - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._cleanTablesorterLocalStorage(); + FHC_FilterWidget._cleanTablesorterLocalStorage(divFilterWidgetDataset.find("#filterTableDataset")); FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } @@ -461,12 +508,14 @@ var FHC_FilterWidget = { */ _applyFilterEvent: function() { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + var appliedFilters = []; var appliedFiltersOperations = []; var appliedFiltersConditions = []; var appliedFiltersOptions = []; - $("#appliedFilters > div").each(function(i, e) { + divFilterWidgetDataset.find("#appliedFilters > div").each(function(i, e) { appliedFilters.push($(this).find(".hidden-field-name").val()); appliedFiltersOperations.push($(this).find(".applied-filter-operation").val()); appliedFiltersConditions.push($(this).find(".applied-filter-condition:enabled").val()); @@ -480,7 +529,10 @@ var FHC_FilterWidget = { appliedFiltersOperations: appliedFiltersOperations, appliedFiltersConditions: appliedFiltersConditions, appliedFiltersOptions: appliedFiltersOptions, - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { @@ -495,11 +547,16 @@ var FHC_FilterWidget = { */ _removeAppliedFiltersEvent: function(event) { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/removeAppliedFilter", { appliedFilter: $(this).attr("filterToRemove"), - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { @@ -514,11 +571,16 @@ var FHC_FilterWidget = { */ _addFilterEvent: function(event) { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/addFilter", { filter: $(this).val(), - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { @@ -556,20 +618,27 @@ var FHC_FilterWidget = { if ($("#customFilterDescription").val() != "") { + var divFilterWidgetDataset = $(this).parents("#divFilterWidgetDataset"); + FHC_AjaxClient.ajaxCallPost( "widgets/Filters/saveCustomFilter", { customFilterDescription: $("#customFilterDescription").val(), - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + divFilterWidgetDataset.attr("app") + ":" + + divFilterWidgetDataset.attr("dataset") + ":" + + divFilterWidgetDataset.attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) { - if (FHC_FilterWidget._hideMenu != true) + + // If menu is present and there is only one FilterWidget in this page + if (FHC_FilterWidget._hideMenu != true && FHC_FilterWidget._isMultipleFilterWidgets() != true) { // If a success and refreshSideMenuHook is a valid function then call it to refresh the side menu if (typeof refreshSideMenuHook == "function") { - refreshSideMenuHook(); + refreshSideMenuHook(divFilterWidgetDataset.attr("app"), divFilterWidgetDataset.attr("dataset"), divFilterWidgetDataset.attr("filterid")); } } } @@ -585,11 +654,11 @@ var FHC_FilterWidget = { /** * Retrive the filter name from data and display it in the GUI */ - _setFilterName: function(data) { + _setFilterName: function(filterWidgetDiv, data) { if (data.hasOwnProperty("filterName")) { - $(".filter-name-title").html(data.filterName); + filterWidgetDiv.find(".filter-name-title").html(data.filterName); } }, @@ -598,7 +667,7 @@ var FHC_FilterWidget = { * Retrieves the list of used fields, the list of all the fields and * their possibly present aliases from the parameter data */ - _renderDragAndDropFields: function(data) { + _renderDragAndDropFields: function(filterWidgetDiv, data) { var arrayFieldsToDisplay = FHC_FilterWidget._getFieldsToDisplay(data); @@ -614,7 +683,7 @@ var FHC_FilterWidget = { strHtml += " "; strHtml += ""; - $("#dragAndDropFieldsArea").append(strHtml); + filterWidgetDiv.find("#dragAndDropFieldsArea").append(strHtml); } }, @@ -622,16 +691,16 @@ var FHC_FilterWidget = { * Renders the drop-down element that contains all the usable fields in the FilterWidget * The list of all usable fields and their possibly aliases are retrieved from the parameter data */ - _renderDropDownFields: function(data) { + _renderDropDownFields: function(filterWidgetDiv, data) { - FHC_FilterWidget._renderDropDown(data, data.selectedFields, 'addField'); + FHC_FilterWidget._renderDropDown(filterWidgetDiv, data, data.selectedFields, 'addField'); }, /** * Renders a dropdown attached to the HTML element ddElementId, using the elements from data.fields * and excluding the elements that are prenset in the elements parameter */ - _renderDropDown: function(data, elements, ddElementId) { + _renderDropDown: function(filterWidgetDiv, data, elements, ddElementId) { if (data.hasOwnProperty("fields") && $.isArray(data.fields)) { @@ -660,9 +729,9 @@ var FHC_FilterWidget = { fieldToDisplay = data.columnsAliases[fc]; } - if ($("#" + ddElementId).length) // checks if the element exists + if (filterWidgetDiv.find("#" + ddElementId).length) // checks if the element exists { - $("#" + ddElementId).append(""); + filterWidgetDiv.find("#" + ddElementId).append(""); } } } @@ -673,7 +742,7 @@ var FHC_FilterWidget = { * Render the GUI to operate with the filters applied to the dataset * The list of all applied filters is retrieved from the parameter data */ - _renderAppliedFilters: function(data) { + _renderAppliedFilters: function(filterWidgetDiv, data) { if (data.hasOwnProperty("datasetMetadata") && $.isArray(data.datasetMetadata) && data.hasOwnProperty("filters") && $.isArray(data.filters)) @@ -704,7 +773,7 @@ var FHC_FilterWidget = { appliedFilters += "
"; - $("#appliedFilters").append(appliedFilters); + filterWidgetDiv.find("#appliedFilters").append(appliedFilters); } } } @@ -716,9 +785,9 @@ var FHC_FilterWidget = { * to apply a filter to the dataset * The list of all usable fields and their possibly aliases are retrieved from the parameter data */ - _renderDropDownFilters: function(data) { + _renderDropDownFilters: function(filterWidgetDiv, data) { - FHC_FilterWidget._renderDropDown(data, data.filters, 'addFilter'); + FHC_FilterWidget._renderDropDown(filterWidgetDiv, data, data.filters, 'addFilter'); }, /** @@ -815,24 +884,24 @@ var FHC_FilterWidget = { return html; }, - _renderDataset: function(data) { + _renderDataset: function(filterWidgetDiv, data) { // If the choosen dataset representation is tablesorter then... if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) { - FHC_FilterWidget._renderDatasetTablesorter(data); // ...render the tablesorter GUI + FHC_FilterWidget._renderDatasetTablesorter(filterWidgetDiv, data); // ...render the tablesorter GUI } // If the choosen dataset representation is pivotUI then... if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_PIVOTUI) { - FHC_FilterWidget._renderDatasetPivotUI(data); // ...render the pivotUI GUI + FHC_FilterWidget._renderDatasetPivotUI(filterWidgetDiv, data); // ...render the pivotUI GUI } // If the choosen dataset representation is tabulator then... if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABULATOR) { - FHC_FilterWidget._renderDatasetTabulator(data); // ...render the tabulator GUI + FHC_FilterWidget._renderDatasetTabulator(filterWidgetDiv, data); // ...render the tabulator GUI } }, @@ -840,11 +909,11 @@ var FHC_FilterWidget = { * Renders the tablesorter for the FilterWidget * The data to be displayed are retrived from the parameter data */ - _renderDatasetTablesorter: function(data) { + _renderDatasetTablesorter: function(filterWidgetDiv, data) { if (data.hasOwnProperty("checkboxes") && data.checkboxes != null && data.checkboxes.trim() != "") { - $("#filterTableDataset > thead > tr").append("Select"); + filterWidgetDiv.find("#filterTableDataset > thead > tr").append("Select"); } var arrayFieldsToDisplay = FHC_FilterWidget._getFieldsToDisplay(data); @@ -853,7 +922,7 @@ var FHC_FilterWidget = { { var columnName = arrayFieldsToDisplay[i]; - $("#filterTableDataset > thead > tr").append("" + columnName + ""); + filterWidgetDiv.find("#filterTableDataset > thead > tr").append("" + columnName + ""); } if (data.hasOwnProperty("additionalColumns") && $.isArray(data.additionalColumns)) @@ -862,7 +931,7 @@ var FHC_FilterWidget = { { var columnName = data.additionalColumns[i]; - $("#filterTableDataset > thead > tr").append("" + columnName + ""); + filterWidgetDiv.find("#filterTableDataset > thead > tr").append("" + columnName + ""); } } @@ -873,8 +942,8 @@ var FHC_FilterWidget = { if (data.checkboxes != null && data.checkboxes != "") { // select checkbox range with shift key - if (typeof $("#filterTableDataset").checkboxes === 'function') - $("#filterTableDataset").checkboxes("range", true); + if (typeof filterWidgetDiv.find("#filterTableDataset").checkboxes === 'function') + filterWidgetDiv.find("#filterTableDataset").checkboxes("range", true); } for (var i = 0; i < data.dataset.length; i++) @@ -916,7 +985,7 @@ var FHC_FilterWidget = { strHtml += ""; - $("#filterTableDataset > tbody").append(strHtml); + filterWidgetDiv.find("#filterTableDataset > tbody").append(strHtml); } } } @@ -925,14 +994,16 @@ var FHC_FilterWidget = { /** * Enable the tablesorter libs to render the dataset table with sorting features */ - _enableTableSorter: function() { + _enableTableSorter: function(filterWidgetDiv) { + + var filterWidgetTablesorter = filterWidgetDiv.find("#filterTableDataset"); // Checks if the table contains data (rows) - if ($("#filterTableDataset").find("tbody:empty").length == 0 - && $("#filterTableDataset").find("tr:empty").length == 0 - && $("#filterTableDataset").hasClass("table-condensed")) + if (filterWidgetTablesorter.find("tbody:empty").length == 0 + && filterWidgetTablesorter.find("tr:empty").length == 0 + && filterWidgetTablesorter.hasClass("table-condensed")) { - $("#filterTableDataset").tablesorter({ + filterWidgetTablesorter.tablesorter({ dateFormat: "ddmmyyyy", widgets: ["zebra", "filter"], widgetOptions: { @@ -942,33 +1013,33 @@ var FHC_FilterWidget = { // Reset filter storage if there is a filter id in url var filter_id = FHC_AjaxClient.getUrlParameter("filter_id"); - if (typeof filter_id !== "undefined") FHC_FilterWidget._cleanTablesorterLocalStorage(); + if (typeof filter_id !== "undefined") FHC_FilterWidget._cleanTablesorterLocalStorage(filterWidgetTablesorter); - $.tablesorter.updateAll($("#filterTableDataset")[0].config, true, null); + $.tablesorter.updateAll(filterWidgetTablesorter[0].config, true, null); } }, /** * Disable the tablesorter */ - _disableTablesorter: function() { + _disableTablesorter: function(filterWidgetDiv) { - $("#filterTableDataset").trigger("disable"); + filterWidgetDiv.find("#filterTableDataset").trigger("disable"); }, /** * Tablesorter filter local storage clean */ - _cleanTablesorterLocalStorage: function() { + _cleanTablesorterLocalStorage: function(filterWidgetTablesorter) { - $("#filterTableDataset").trigger("filterResetSaved"); + filterWidgetTablesorter.trigger("filterResetSaved"); }, /** * Renders the pivotUI for the FilterWidget * The data to be displayed are retrived from the parameter data */ - _renderDatasetPivotUI: function(data) { + _renderDatasetPivotUI: function(filterWidgetDiv, data) { // Checks if options were given and returns them var options = FHC_FilterWidget._getRepresentationOptions(data); @@ -1017,7 +1088,7 @@ var FHC_FilterWidget = { } // Renders the pivotUI - $("#filterPivotUI").pivotUI( + filterWidgetDiv.find("#filterPivotUI").pivotUI( pivotUIData, options ); @@ -1060,7 +1131,7 @@ var FHC_FilterWidget = { * Renders the tabulator for the FilterWidget * The data to be displayed are retrived from the parameter data */ - _renderDatasetTabulator: function(data) { + _renderDatasetTabulator: function(filterWidgetDiv, data) { // Checks if options were given and returns them var options = FHC_FilterWidget._getRepresentationOptions(data); @@ -1081,7 +1152,7 @@ var FHC_FilterWidget = { options.data = data.dataset; // Renders the tabulator - FHC_FilterWidget._filterTabulator = new Tabulator("#filterTabulator", options); + filterWidgetDiv.find("#filterTabulator").tabulator(options); } } }, @@ -1212,12 +1283,53 @@ var FHC_FilterWidget = { */ _setHideMenu: function(data) { - if (data.hasOwnProperty("hideMenu")) + if (FHC_FilterWidget._filterWidgetsAttributes.length > 1) + { + FHC_FilterWidget._hideMenu = true; + } + else if (data.hasOwnProperty("hideMenu")) { FHC_FilterWidget._hideMenu = data.hideMenu; } - } + }, + /** + * Set what type of dataset representation was choosen + */ + _setHideOptions: function(data) { + + if (data.hasOwnProperty("hideOptions")) + { + FHC_FilterWidget._hideOptions = data.hideOptions; + } + }, + + /** + * Return true if there are more then one FilterWidget in this page, otherwise false + */ + _isMultipleFilterWidgets: function() { + + return $("div[id*='divFilterWidgetDataset']").length > 1; + }, + + /** + * + */ + _setFilterWidgetsAttributes: function() { + + FHC_FilterWidget._filterWidgetsAttributes = []; + + $("div[id*='divFilterWidgetDataset']").each(function(i, e) { + + var filterWidgetsAttributes = {}; + + filterWidgetsAttributes.app = e.attributes["app"].nodeValue; + filterWidgetsAttributes.dataset = e.attributes["dataset"].nodeValue; + filterWidgetsAttributes.filterid = e.attributes["filterid"].nodeValue; + + FHC_FilterWidget._filterWidgetsAttributes.push(filterWidgetsAttributes); + }); + } }; /** diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 87c138b33..213539f49 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -49,7 +49,10 @@ var InfocenterPersonDataset = { FHC_AjaxClient.ajaxCallGet( 'widgets/Filters/rowNumber', { - filter_page: FHC_FilterWidget.getFilterPage() + filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix() + "/" + + $("#divFilterWidgetDataset").attr("app") + ":" + + $("#divFilterWidgetDataset").attr("dataset") + ":" + + $("#divFilterWidgetDataset").attr("filterid") }, { successCallback: function(data, textStatus, jqXHR) {