diff --git a/application/libraries/FiltersLib.php b/application/libraries/FiltersLib.php index 2af6f15ac..604f0a41a 100644 --- a/application/libraries/FiltersLib.php +++ b/application/libraries/FiltersLib.php @@ -22,6 +22,7 @@ class FiltersLib const SESSION_RELOAD_DATASET = 'reloadDataset'; const SESSION_DATASET_REPRESENTATION = 'datasetRepresentation'; const SESSION_DATASET_REP_OPTIONS = 'datasetRepresentationOptions'; + const SESSION_DATASET_REP_FIELDS_DEFS = 'datasetRepresentationFieldsDefinitions'; // Alias for the dynamic table used to retrieve the dataset const DATASET_TABLE_ALIAS = 'datasetFilterTable'; @@ -61,6 +62,7 @@ class FiltersLib // ...to specify how to represent the dataset (ex: tablesorter, pivotUI, ...) const DATASET_REPRESENTATION = 'datasetRepresentation'; const DATASET_REP_OPTIONS = 'datasetRepOptions'; + const DATASET_REP_FIELDS_DEFS = 'datasetRepFieldsDefs'; // Different dataset representations const DATASET_REP_TABLESORTER = 'tablesorter'; diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index ff483738a..3fff125d8 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -49,6 +49,8 @@ class FilterWidget extends Widget private $_datasetRepresentation; // dataset representation (ex: tablesorter, pivotUI, ...) private $_datasetRepresentationOptions; // dataset representation options for tablesorter, pivotUI, ... + private $_datasetRepFieldsDefs; // dataset representation attributes for each record field + private $_reloadDataset; // Force Reload of Dataset private static $_FilterWidgetInstance; // static property that contains the instance of itself @@ -175,6 +177,7 @@ class FilterWidget extends Widget $this->_customMenu = null; $this->_datasetRepresentation = null; $this->_datasetRepresentationOptions = null; + $this->_datasetRepFieldsDefs = null; // Retrieved the required permissions parameter if present if (isset($args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER])) @@ -281,6 +284,12 @@ class FilterWidget extends Widget { $this->_datasetRepresentationOptions = $args[FiltersLib::DATASET_REP_OPTIONS]; } + + // To specify how to represent each record field + if (isset($args[FiltersLib::DATASET_REP_FIELDS_DEFS]) && !isEmptyString($args[FiltersLib::DATASET_REP_FIELDS_DEFS])) + { + $this->_datasetRepFieldsDefs = $args[FiltersLib::DATASET_REP_FIELDS_DEFS]; + } } /** @@ -434,7 +443,8 @@ class FilterWidget extends Widget FiltersLib::SESSION_DATASET => $dataset->retval, // the entire dataset FiltersLib::SESSION_RELOAD_DATASET => false, // if the dataset must be reloaded, not needed the first time FiltersLib::SESSION_DATASET_REPRESENTATION => $this->_datasetRepresentation, // the choosen dataset representation - FiltersLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions // the choosen dataset representation options + FiltersLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions, // the choosen dataset representation options + FiltersLib::SESSION_DATASET_REP_FIELDS_DEFS => $this->_datasetRepFieldsDefs // the choosen dataset representation record fields definition ) ); } diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index 4a075bba1..f8aaa06d0 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -833,7 +833,7 @@ var FHC_FilterWidget = { */ _renderDatasetTablesorter: function(data) { - if (data.hasOwnProperty("checkboxes") && data.checkboxes!=null && data.checkboxes.trim() != "") + if (data.hasOwnProperty("checkboxes") && data.checkboxes != null && data.checkboxes.trim() != "") { $("#filterTableDataset > thead > tr").append("Select"); } @@ -1055,18 +1055,20 @@ var FHC_FilterWidget = { // Checks if options were given and returns them var options = FHC_FilterWidget._getRepresentationOptions(data); + // Checks if record fields definitions were given and returns them + var recordFieldsDefinitions = FHC_FilterWidget._getRepresentationFieldsDefinitions(data); // Manipulation for the representation! - var arrayFieldsToDisplay = FHC_FilterWidget._getFieldsToDisplayTabulator(data); + var arrayTabulatorColumns = FHC_FilterWidget._getTabulatorColumns(data, recordFieldsDefinitions); - if (arrayFieldsToDisplay.length > 0) + if (arrayTabulatorColumns.length > 0) { // ...if there are data to be displayed... if (data.hasOwnProperty("dataset") && $.isArray(data.dataset)) { if (options == null) options = {}; - options.columns = arrayFieldsToDisplay; + options.columns = arrayTabulatorColumns; options.data = data.dataset; // Renders the tabulator @@ -1109,7 +1111,7 @@ var FHC_FilterWidget = { /** * Retrives the fields to be displayed from the data parameter, if aliases are present then they are used */ - _getFieldsToDisplayTabulator: function(data) { + _getTabulatorColumns: function(data, recordFieldsDefinitions) { var fieldsToDisplayTabulator = []; @@ -1124,17 +1126,24 @@ var FHC_FilterWidget = { // Build the array of objects (columns) used by tabulator and store it in tabulatorColumns var tmpColumnObj = {}; // New object that represents a column + // If was given a definition for this field then use it! + if (recordFieldsDefinitions.hasOwnProperty(data.selectedFields[sfc])) + { + tmpColumnObj = recordFieldsDefinitions[data.selectedFields[sfc]]; + } + + tmpColumnObj.field = data.selectedFields[sfc]; // Field name to be linked with dataset field name + + // If there is an alias for this field use it to give a title to this field (header) if (data.hasOwnProperty("columnsAliases") && $.isArray(data.columnsAliases)) { tmpColumnObj.title = data.columnsAliases[fc]; } - else + else // otherwise use the field name itself { tmpColumnObj.title = data.selectedFields[sfc]; } - tmpColumnObj.field = data.selectedFields[sfc]; - fieldsToDisplayTabulator.push(tmpColumnObj); // Add tmpColumnObj to tabulatorColumns } } @@ -1149,8 +1158,14 @@ var FHC_FilterWidget = { var tmpColumnObj = {}; // New object that represents a column - tmpColumnObj.title = additionalColumn; - tmpColumnObj.field = additionalColumn; + // If was given a definition for this field then use it! + if (recordFieldsDefinitions.hasOwnProperty(additionalColumn)) + { + tmpColumnObj = recordFieldsDefinitions[additionalColumn]; + } + + tmpColumnObj.title = additionalColumn; // Give a title to this field (header) + tmpColumnObj.field = additionalColumn; // Field name to be linked with dataset field name fieldsToDisplayTabulator.push(tmpColumnObj); // Add tmpColumnObj to tabulatorColumns }); @@ -1181,6 +1196,28 @@ var FHC_FilterWidget = { return options; }, + /** + * Gets record fields definitions to represent the dataset + */ + _getRepresentationFieldsDefinitions: function(data) { + + var fieldsDefinitions = {}; // eventually contains record fields definitions + + // Checks if record fields definitions was given as parameter + if (data.hasOwnProperty("datasetRepresentationFieldsDefinitions") && data.datasetRepresentationFieldsDefinitions != "") + { + var tmpFDefs = eval("(" + data.datasetRepresentationFieldsDefinitions + ")"); // and converts them from string to javascript code + + // If it is an object then can be used + if (typeof tmpFDefs == "object") + { + fieldsDefinitions = tmpFDefs; + } + } + + return fieldsDefinitions; + }, + /** * Set what type of dataset representation was choosen */