From d63a092287d19e2c7af9ab246895e8d20592e0ef Mon Sep 17 00:00:00 2001 From: Paolo Date: Wed, 6 Jun 2018 11:46:26 +0200 Subject: [PATCH] Changes to the FilterWidget III --- application/controllers/system/Filters.php | 499 +++++------------- .../system/infocenter/InfoCenter.php | 2 +- application/libraries/FiltersLib.php | 401 ++++++++++++-- .../system/infocenter/infocenterData.php | 2 +- .../infocenter/infocenterFreigegeben.php | 2 +- .../views/widgets/filter/selectFields.php | 4 +- .../views/widgets/filter/selectFilters.php | 4 +- application/widgets/FilterWidget.php | 144 ++++- public/css/FilterWidget.css | 2 +- public/js/AjaxLib.js | 14 + public/js/FilterWidget.js | 247 +++++---- 11 files changed, 774 insertions(+), 547 deletions(-) diff --git a/application/controllers/system/Filters.php b/application/controllers/system/Filters.php index 98e17fb6e..aaa48a2d2 100644 --- a/application/controllers/system/Filters.php +++ b/application/controllers/system/Filters.php @@ -49,6 +49,150 @@ class Filters extends FHC_Controller $this->outputJsonSuccess($rowNumber); } + /** + * + */ + public function sortSelectedFields() + { + $selectedFields = $this->input->post('selectedFields'); + + if ($this->filterslib->sortSelectedFields($selectedFields) == true) + { + $this->getFilter(); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function removeSelectedField() + { + $selectedField = $this->input->post('selectedField'); + + if ($this->filterslib->removeSelectedField($selectedField) == true) + { + $this->getFilter(); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function addSelectedField() + { + $selectedField = $this->input->post('selectedField'); + + if ($this->filterslib->addSelectedField($selectedField) == true) + { + $this->getFilter(); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function removeAppliedFilter() + { + $appliedFilter = $this->input->post('appliedFilter'); + + if ($this->filterslib->removeAppliedFilter($appliedFilter) == true) + { + $this->outputJsonSuccess('Removed'); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function applyFilters() + { + $appliedFilters = $this->input->post('appliedFilters'); + $appliedFiltersOperations = $this->input->post('appliedFiltersOperations'); + $appliedFiltersConditions = $this->input->post('appliedFiltersConditions'); + $appliedFiltersOptions = $this->input->post('appliedFiltersOptions'); + + if ($this->filterslib->applyFilters( + $appliedFilters, + $appliedFiltersOperations, + $appliedFiltersConditions, + $appliedFiltersOptions + ) == true) + { + $this->outputJsonSuccess('Applied'); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function addFilter() + { + $filter = $this->input->post('filter'); + + if ($this->filterslib->addFilter($filter) == true) + { + $this->getFilter(); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function saveCustomFilter() + { + $customFilterDescription = $this->input->post('customFilterDescription'); + + if ($this->filterslib->saveCustomFilter($customFilterDescription) == true) + { + $this->outputJsonSuccess('Saved'); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * + */ + public function removeCustomFilter() + { + $filter_id = $this->input->post('filter_id'); + + if ($this->filterslib->removeCustomFilter($filter_id) == true) + { + $this->outputJsonSuccess('Removed'); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -77,361 +221,8 @@ class Filters extends FHC_Controller } else // Otherwise an error will be written in the output { - $this->outputJsonError('Parameter '.self::FILTER_PAGE_PARAM.' not provided!'); + echo 'Parameter "'.self::FILTER_PAGE_PARAM.'" not provided!'; exit; } } - - // /** - // * - // */ - // public function sortSelectedFields() - // { - // $selectedFieldsLst = $this->input->post('selectedFieldsLst'); - // - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $json = new stdClass(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $allSelectedFields = $this->_getFromSession('allSelectedFields'); - // $allColumnsAliases = $this->_getFromSession('allColumnsAliases'); - // - // $json->selectedFields = $this->_getFromSession('selectedFields'); - // $json->columnsAliases = $this->_getFromSession('columnsAliases'); - // - // if (isset($selectedFieldsLst) && is_array($selectedFieldsLst)) - // { - // $json->selectedFields = $selectedFieldsLst; - // $json->columnsAliases = array(); - // - // for ($i = 0; $i < count($json->selectedFields); $i++) - // { - // $pos = array_search($json->selectedFields[$i], $allSelectedFields); - // - // $json->columnsAliases[$i] = $json->selectedFields[$i]; - // - // if ($pos !== false) - // { - // if ($allColumnsAliases != null && is_array($allColumnsAliases)) - // { - // $json->columnsAliases[$i] = $allColumnsAliases[$pos]; - // } - // } - // } - // } - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['selectedFields'] = $json->selectedFields; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['columnsAliases'] = $json->columnsAliases; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } - // - // /** - // * - // */ - // public function saveFilter() - // { - // $this->_saveFilter($this->input->post("customFilterDescription"), $this->_getFilterUniqueId()); - // - // $this->output->set_content_type('application/json')->set_output(json_encode('Filter saved')); - // } - // - // /** - // * - // */ - // private function _saveFilter($customFilterDescription, $filterUniqueId) - // { - // $objToBeSaved = new stdClass(); - // - // $filterSessionArray = $this->_readSession($filterUniqueId); - // - // $objToBeSaved->name = $customFilterDescription; - // - // if (isset($filterSessionArray[self::SELECTED_FIELDS])) - // { - // $selectedFields = $filterSessionArray[self::SELECTED_FIELDS]; - // $objToBeSaved->columns = array(); - // - // for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++) - // { - // $objToBeSaved->columns[$selectedFieldsCounter] = new stdClass(); - // $objToBeSaved->columns[$selectedFieldsCounter]->name = $selectedFields[$selectedFieldsCounter]; - // } - // } - // - // if (isset($filterSessionArray[self::SELECTED_FILTERS])) - // { - // $selectedFilters = $filterSessionArray[self::SELECTED_FILTERS]; - // $objToBeSaved->filters = array(); - // - // for ($selectedFiltersCounter = 0; $selectedFiltersCounter < count($selectedFilters); $selectedFiltersCounter++) - // { - // $objToBeSaved->filters[$selectedFiltersCounter] = new stdClass(); - // $objToBeSaved->filters[$selectedFiltersCounter]->name = $selectedFilters[$selectedFiltersCounter]; - // - // if (isset($filterSessionArray[self::ACTIVE_FILTERS]) - // && isset($filterSessionArray[self::ACTIVE_FILTERS][$selectedFilters[$selectedFiltersCounter]])) - // { - // $objToBeSaved->filters[$selectedFiltersCounter]->condition = $filterSessionArray[self::ACTIVE_FILTERS][$selectedFilters[$selectedFiltersCounter]]; - // } - // - // if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION]) - // && isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION][$selectedFilters[$selectedFiltersCounter]])) - // { - // $objToBeSaved->filters[$selectedFiltersCounter]->operation = $filterSessionArray[self::ACTIVE_FILTERS_OPERATION][$selectedFilters[$selectedFiltersCounter]]; - // } - // - // if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPTION]) - // && isset($filterSessionArray[self::ACTIVE_FILTERS_OPTION][$selectedFilters[$selectedFiltersCounter]])) - // { - // $objToBeSaved->filters[$selectedFiltersCounter]->option = $filterSessionArray[self::ACTIVE_FILTERS_OPTION][$selectedFilters[$selectedFiltersCounter]]; - // } - // } - // } - // - // $desc = $customFilterDescription; - // $descPGArray = '{"'.$desc.'", "'.$desc.'", "'.$desc.'", "'.$desc.'"}'; - // - // $resultBenutzer = $this->BenutzerModel->load(getAuthUID()); - // $personId = $resultBenutzer->retval[0]->person_id; - // - // $result = $this->FiltersModel->loadWhere(array( - // 'app' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['app'], - // 'dataset_name' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['datasetName'], - // 'description' => $descPGArray, - // 'person_id' => $personId - // )); - // - // if (hasData($result)) - // { - // $this->FiltersModel->update( - // array( - // 'app' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['app'], - // 'dataset_name' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['datasetName'], - // 'description' => $descPGArray, - // 'person_id' => $personId - // ), - // array( - // 'filter' => json_encode($objToBeSaved) - // ) - // ); - // } - // else - // { - // $this->FiltersModel->insert(array( - // 'app' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['app'], - // 'dataset_name' => $_SESSION[self::SESSION_NAME][$filterUniqueId]['datasetName'], - // 'filter_kurzbz' => uniqid($personId, true), - // 'person_id' => $personId, - // 'description' => $descPGArray, - // 'sort' => null, - // 'default_filter' => false, - // 'filter' => json_encode($objToBeSaved), - // 'oe_kurzbz' => null - // )); - // } - // } - // - // /** - // * - // */ - // public function deleteCustomFilter() - // { - // $filter_id = $this->input->post('filter_id'); - // - // if (is_numeric($filter_id)) - // { - // $this->FiltersModel->deleteCustomFilter($filter_id); - // - // $this->output->set_content_type('application/json')->set_output(json_encode('Removed')); - // } - // } - // - // /** - // * - // */ - // public function removeSelectedFields() - // { - // $fieldName = $this->input->post('fieldName'); - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $allSelectedFields = $this->_getFromSession('allSelectedFields'); - // $allColumnsAliases = $this->_getFromSession('allColumnsAliases'); - // - // $selectedFields = $this->_getFromSession('selectedFields'); - // $columnsAliases = $this->_getFromSession('columnsAliases'); - // - // if (($pos = array_search($fieldName, $selectedFields)) !== false) - // { - // array_splice($selectedFields, $pos, 1); - // - // if ($columnsAliases != null && is_array($columnsAliases)) - // { - // array_splice($columnsAliases, $pos, 1); - // } - // } - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['selectedFields'] = $selectedFields; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['columnsAliases'] = $columnsAliases; - // - // $json = new stdClass(); - // - // $json->allSelectedFields = $allSelectedFields; - // $json->allColumnsAliases = $allColumnsAliases; - // $json->selectedFields = $selectedFields; - // $json->columnsAliases = $columnsAliases; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } - // - // /** - // * - // */ - // public function removeSelectedFilters() - // { - // $fieldName = $this->input->post('fieldName'); - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $selectedFilters = $this->_getFromSession('selectedFilters'); - // $selectedFiltersActiveFilters = $this->_getFromSession('activeFilters'); - // $selectedFiltersActiveFiltersOperation = $this->_getFromSession('activeFiltersOperation'); - // $selectedFiltersActiveFiltersOption = $this->_getFromSession('activeFiltersOption'); - // - // if (($pos = array_search($fieldName, $selectedFilters)) !== false) - // { - // array_splice($selectedFilters, $pos, 1); - // array_splice($selectedFiltersActiveFilters, $pos, 1); - // array_splice($selectedFiltersActiveFiltersOperation, $pos, 1); - // array_splice($selectedFiltersActiveFiltersOption, $pos, 1); - // } - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['selectedFilters'] = $selectedFilters; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFilters'] = $selectedFiltersActiveFilters; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption; - // - // $json = new stdClass(); - // - // $json->selectedFilters = $selectedFilters; - // $json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters; - // $json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation; - // $json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } - // - // /** - // * - // */ - // public function addSelectedFields() - // { - // $fieldName = $this->input->post('fieldName'); - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $allSelectedFields = $this->_getFromSession('allSelectedFields'); - // $allColumnsAliases = $this->_getFromSession('allColumnsAliases'); - // - // $selectedFields = $this->_getFromSession('selectedFields'); - // $columnsAliases = $this->_getFromSession('columnsAliases'); - // - // if (($pos = array_search($fieldName, $allSelectedFields)) !== false - // && array_search($fieldName, $selectedFields) === false) - // { - // array_push($selectedFields, $fieldName); - // - // if ($columnsAliases != null && is_array($columnsAliases)) - // { - // array_push($columnsAliases, $allColumnsAliases[$pos]); - // } - // } - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['selectedFields'] = $selectedFields; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['columnsAliases'] = $columnsAliases; - // - // $json = new stdClass(); - // - // $json->allSelectedFields = $allSelectedFields; - // $json->allColumnsAliases = $allColumnsAliases; - // $json->selectedFields = $selectedFields; - // $json->columnsAliases = $columnsAliases; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } - // - // /** - // * - // */ - // public function addSelectedFilters() - // { - // $fieldName = $this->input->post('fieldName'); - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $selectedFilters = $this->_getFromSession('selectedFilters'); - // $selectedFiltersActiveFilters = $this->_getFromSession('activeFilters'); - // $selectedFiltersActiveFiltersOperation = $this->_getFromSession('activeFiltersOperation'); - // $selectedFiltersActiveFiltersOption = $this->_getFromSession('activeFiltersOption'); - // - // if (!in_array($fieldName, $selectedFilters)) - // { - // array_push($selectedFilters, $fieldName); - // $selectedFiltersActiveFilters[$fieldName] = ""; - // $selectedFiltersActiveFiltersOperation[$fieldName] = ""; - // $selectedFiltersActiveFiltersOption[$fieldName] = ""; - // } - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['selectedFilters'] = $selectedFilters; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFilters'] = $selectedFiltersActiveFilters; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption; - // - // $json = new stdClass(); - // - // $json->selectedFilters = $selectedFilters; - // $json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters; - // $json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation; - // $json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } - // - // /** - // * - // */ - // public function applyFilter() - // { - // $fieldNames = $this->input->post('filterNames'); - // $filterOperations = $this->input->post('filterOperations'); - // $filterOperationValues = $this->input->post('filterOperationValues'); - // $filterOptions = $this->input->post('filterOptions'); - // $filterUniqueId = $this->_getFilterUniqueId(); - // - // $session = $this->_readSession($filterUniqueId); - // - // $activeFilters = array_combine($fieldNames, $filterOperationValues); - // $activeFiltersOperation = array_combine($fieldNames, $filterOperations); - // $activeFiltersOption = array_combine($fieldNames, $filterOptions); - // - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFilters'] = $activeFilters; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOperation'] = $activeFiltersOperation; - // $_SESSION[self::SESSION_NAME][$filterUniqueId]['activeFiltersOption'] = $activeFiltersOption; - // - // $json = new stdClass(); - // - // $json->fieldNames = $fieldNames; - // $json->activeFilters = $activeFilters; - // $json->activeFiltersOperation = $activeFiltersOperation; - // $json->activeFiltersOption = $activeFiltersOption; - // - // $this->output->set_content_type('application/json')->set_output(json_encode($json)); - // } } diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 25a653eb1..378a72f79 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -744,7 +744,7 @@ class InfoCenter extends FHC_Controller 'link' => sprintf($toPrint, site_url('system/infocenter/InfoCenter'), 'filter_id', $filterId), 'description' => $description, 'subscriptDescription' => 'Remove', - 'subscriptLinkClass' => 'remove-filter', + 'subscriptLinkClass' => 'remove-custom-filter', 'subscriptLinkValue' => $filterId ); } diff --git a/application/libraries/FiltersLib.php b/application/libraries/FiltersLib.php index c4b846809..5c51281fc 100644 --- a/application/libraries/FiltersLib.php +++ b/application/libraries/FiltersLib.php @@ -19,6 +19,7 @@ class FiltersLib const SESSION_DATASET_METADATA = 'datasetMetadata'; const SESSION_DATASET = 'dataset'; const SESSION_ROW_NUMBER = 'rowNumber'; + const SESSION_RELOAD_DATASET = 'reloadDataset'; // Alias for the dynamic table used to retrive the dataset const DATASET_TABLE_ALIAS = 'datasetFilterTable'; @@ -28,10 +29,10 @@ class FiltersLib const FHC_CONTROLLER_ID = 'fhc_controller_id'; // ...to identify a single filter widget in the DB + const FILTER_ID = 'filter_id'; const APP_PARAMETER = 'app'; const DATASET_NAME_PARAMETER = 'datasetName'; const FILTER_KURZBZ_PARAMETER = 'filterKurzbz'; - const FILTER_ID = 'filter_id'; // ...stament to retrive the dataset const QUERY_PARAMETER = 'query'; @@ -42,7 +43,7 @@ class FiltersLib const COLUMNS_ALIASES = 'columnsAliases'; // ...to format/mark records of a dataset - const FORMAT_RAW = 'formatRaw'; + const FORMAT_ROW = 'formatRow'; const MARK_ROW = 'markRow'; // ...to hide the options for a filter @@ -88,40 +89,6 @@ class FiltersLib //------------------------------------------------------------------------------------------------------------------ // Public methods - /** - * Return an unique string that identify this filter widget - * 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) - { - // - if ($params != null - && is_array($params) - && isset($params[self::FILTER_PAGE_PARAM]) - && !empty(trim($params[self::FILTER_PAGE_PARAM]))) - { - $filterUniqueId = $params[self::FILTER_PAGE_PARAM]; - } - else - { - // Gets the current page URI - $filterUniqueId = $this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method; - } - - // 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 - } - - return $filterUniqueId; - } - /** * Returns the whole session for this filter widget if found, otherwise null */ @@ -294,21 +261,19 @@ class FiltersLib /** * Generate the query to retrive the dataset for a filter - * NOTE: filterJson should be already checked using the method parseFilterJson */ - public function generateDatasetQuery($query, $filterJson) + public function generateDatasetQuery($query, $filters) { $datasetQuery = null; // If the given query is valid and the json of the filter is valid - if (!empty(trim($query)) && $filterJson != null) + if (!empty(trim($query)) && $filters != null && is_array($filters)) { - $definedFilters = $filterJson->filters; $where = ''; - for ($filtersCounter = 0; $filtersCounter < count($definedFilters); $filtersCounter++) + for ($filtersCounter = 0; $filtersCounter < count($filters); $filtersCounter++) { - $filterDefinition = $definedFilters[$filtersCounter]; + $filterDefinition = $filters[$filtersCounter]; if ($filtersCounter > 0) $where .= ' AND '; @@ -367,9 +332,361 @@ class FiltersLib return $filterName; } + /** + * + */ + public function sortSelectedFields($selectedFields) + { + $sortSelectedFields = false; + + if (isset($selectedFields) && is_array($selectedFields) && count($selectedFields) > 0) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + + if (!array_diff($selectedFields, $fields)) + { + $this->setElementSession(self::SESSION_SELECTED_FIELDS, $selectedFields); + + $sortSelectedFields = true; + } + } + + return $sortSelectedFields; + } + + /** + * + */ + public function removeSelectedField($selectedField) + { + $removeSelectedField = false; + + if (isset($selectedField) && !empty(trim($selectedField))) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + $selectedFields = $this->getElementSession(self::SESSION_SELECTED_FIELDS); + + if (in_array($selectedField, $fields)) + { + if (($pos = array_search($selectedField, $selectedFields)) !== false) + { + array_splice($selectedFields, $pos, 1); + } + + $this->setElementSession(self::SESSION_SELECTED_FIELDS, $selectedFields); + + $removeSelectedField = true; + } + } + + return $removeSelectedField; + } + + /** + * + */ + public function addSelectedField($selectedField) + { + $removeSelectedField = false; + + if (isset($selectedField) && !empty(trim($selectedField))) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + $selectedFields = $this->getElementSession(self::SESSION_SELECTED_FIELDS); + + if (in_array($selectedField, $fields)) + { + array_push($selectedFields, $selectedField); + + $this->setElementSession(self::SESSION_SELECTED_FIELDS, $selectedFields); + + $removeSelectedField = true; + } + } + + return $removeSelectedField; + } + + /** + * + */ + public function removeAppliedFilter($appliedFilter) + { + $removeAppliedFilter = false; + + if (isset($appliedFilter) && !empty(trim($appliedFilter))) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + $filters = $this->getElementSession(self::SESSION_FILTERS); + + if (in_array($appliedFilter, $fields)) + { + $pos = false; + for($i = 0; $i < count($filters); $i++) + { + if ($filters[$i]->name == $appliedFilter) + { + $pos = $i; + break; + } + } + + if ($pos !== false) + { + array_splice($filters, $pos, 1); + } + + $this->setElementSession(self::SESSION_FILTERS, $filters); + $this->setElementSession(self::SESSION_RELOAD_DATASET, true); + + $removeAppliedFilter = true; + } + } + + return $removeAppliedFilter; + } + + /** + * + */ + public function applyFilters($appliedFilters, $appliedFiltersOperations, $appliedFiltersConditions, $appliedFiltersOptions) + { + $applyFilters = false; + + if (isset($appliedFilters) && is_array($appliedFilters) + && isset($appliedFiltersOperations) && is_array($appliedFiltersOperations)) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + + if (!array_diff($appliedFilters, $fields)) + { + $filters = array(); + for ($i = 0; $i < count($appliedFilters); $i++) + { + $filterDefinition = new stdClass(); + + $filterDefinition->name = $appliedFilters[$i]; + $filterDefinition->operation = $appliedFiltersOperations[$i]; + + $filterDefinition->condition = null; + if (isset($appliedFiltersConditions) && isset($appliedFiltersConditions[$i])) + { + $filterDefinition->condition = $appliedFiltersConditions[$i]; + } + + $filterDefinition->option = null; + if (isset($appliedFiltersOptions) && isset($appliedFiltersOptions[$i])) + { + $filterDefinition->option = $appliedFiltersOptions[$i]; + } + + $filters[$i] = $filterDefinition; + } + + $this->setElementSession(self::SESSION_FILTERS, $filters); + $this->setElementSession(self::SESSION_RELOAD_DATASET, true); + + $applyFilters = true; + } + } + + return $applyFilters; + } + + /** + * + */ + public function addFilter($filter) + { + $addFilter = false; + + if (isset($filter) && !empty(trim($filter))) + { + $fields = $this->getElementSession(self::SESSION_FIELDS); + $filters = $this->getElementSession(self::SESSION_FILTERS); + + if (in_array($filter, $fields)) + { + $pos = false; + for($i = 0; $i < count($filters); $i++) + { + if ($filters[$i]->name == $filter) + { + $pos = $i; + break; + } + } + + if ($pos === false) + { + $filterDefinition = new stdClass(); + $filterDefinition->name = $filter; + $filterDefinition->operation = null; + $filterDefinition->condition = null; + $filterDefinition->option = null; + array_push($filters, $filterDefinition); + } + + $this->setElementSession(self::SESSION_FILTERS, $filters); + + $addFilter = true; + } + } + + return $addFilter; + } + + /** + * + */ + public function saveCustomFilter($customFilterDescription) + { + $saveCustomFilter = false; // by default returns a failure + + // Checks parameter customFilterDescription + if (!isset($customFilterDescription) || empty(trim($customFilterDescription))) + { + return $saveCustomFilter; + } + + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // to load the filter definitions + $this->_ci->load->model('person/Benutzer_model', 'BenutzerModel'); // to get the person_id of the authenticated user + + $this->_ci->FiltersModel->resetQuery(); // reset any previous built query + $this->_ci->BenutzerModel->resetQuery(); // reset any previous built query + + // Loads data for the authenticated user + $authBenutzer = $this->_ci->BenutzerModel->loadWhere(array('uid' => getAuthUID())); + if (hasData($authBenutzer)) // if data are found + { + // person_id of the authenticated user + $authPersonId = $authBenutzer->retval[0]->person_id; + // Postgres array for the description + $descPGArray = str_replace('%desc%', $customFilterDescription, '{"%desc%", "%desc%", "%desc%", "%desc%"}'); + + // Loads the definition to check if is already present in the DB + $definition = $this->_ci->FiltersModel->loadWhere(array( + 'app' => $this->getElementSession(self::APP_PARAMETER), + 'dataset_name' => $this->getElementSession(self::DATASET_NAME_PARAMETER), + 'description' => $descPGArray, + 'person_id' => $authPersonId + )); + + // New definition to be json encoded + $jsonDeifinition = new stdClass(); + $jsonDeifinition->name = $customFilterDescription; // name of the filter + + // Generates the "column" property + $jsonDeifinition->columns = array(); + $selectedFields = $this->getElementSession(self::SESSION_SELECTED_FIELDS); // retrived the selected fields + for ($i = 0; $i < count($selectedFields); $i++) + { + // Each element is an object with a property called "name" + $jsonDeifinition->columns[$i] = new stdClass(); + $jsonDeifinition->columns[$i]->name = $selectedFields[$i]; + } + + // List of applied filters + $jsonDeifinition->filters = $this->getElementSession(self::SESSION_FILTERS); + + // If it is already present + if (hasData($definition)) + { + // update it + $this->_ci->FiltersModel->update( + array( + 'app' => $this->getElementSession(self::APP_PARAMETER), + 'dataset_name' => $this->getElementSession(self::DATASET_NAME_PARAMETER), + 'description' => $descPGArray, + 'person_id' => $authPersonId + ), + array( + 'filter' => json_encode($jsonDeifinition) + ) + ); + + $saveCustomFilter = true; + } + else // otherwise insert a new one + { + $this->_ci->FiltersModel->insert( + array( + 'app' => $this->getElementSession(self::APP_PARAMETER), + 'dataset_name' => $this->getElementSession(self::DATASET_NAME_PARAMETER), + 'filter_kurzbz' => uniqid($authPersonId, true), + 'description' => $descPGArray, + 'person_id' => $authPersonId, + 'sort' => null, + 'default_filter' => false, + 'filter' => json_encode($jsonDeifinition), + 'oe_kurzbz' => null + ) + ); + + $saveCustomFilter = true; + } + } + + return $saveCustomFilter; + } + + /** + * + */ + public function removeCustomFilter($filterId) + { + $removeCustomFilter = false; + + if (isset($filterId) && is_numeric($filterId) && $filterId > 0) + { + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // to remove the filter definitions from DB + + // delete it! + $this->_ci->FiltersModel->delete(array('filter_id' => $filterId)); + + $removeCustomFilter = true; + } + + return $removeCustomFilter; + } + //------------------------------------------------------------------------------------------------------------------ // Private methods + /** + * Return an unique string that identify this filter widget + * 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) + { + // + if ($params != null + && is_array($params) + && isset($params[self::FILTER_PAGE_PARAM]) + && !empty(trim($params[self::FILTER_PAGE_PARAM]))) + { + $filterUniqueId = $params[self::FILTER_PAGE_PARAM]; + } + else + { + // Gets the current page URI + $filterUniqueId = $this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method; + } + + // 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 + } + + return $filterUniqueId; + } + /** * */ diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 807e8c45b..3f1dc5182 100755 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -214,7 +214,7 @@ ucfirst($this->p->t('global', 'gesperrtVon')), ucfirst($this->p->t('global', 'parkdatum')) ), - 'formatRaw' => function($datasetRaw) { + 'formatRow' => function($datasetRaw) { $datasetRaw->{'Details'} = sprintf( 'Details', diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php index f2c279b0f..2e31b5f56 100755 --- a/application/views/system/infocenter/infocenterFreigegeben.php +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -169,7 +169,7 @@ 'additionalColumns' => array('Details'), 'columnsAliases' => array('PersonID','Vorname','Nachname','GebDatum','Nation','Letzte Aktion','Letzter Bearbeiter', 'StSem','GesendetAm','NumAbgeschickt','Studiengänge','Sperrdatum','GesperrtVon'), - 'formatRaw' => function($datasetRaw) { + 'formatRow' => function($datasetRaw) { $datasetRaw->{'Details'} = sprintf( 'Details', diff --git a/application/views/widgets/filter/selectFields.php b/application/views/widgets/filter/selectFields.php index 9d852256d..7124b60e9 100644 --- a/application/views/widgets/filter/selectFields.php +++ b/application/views/widgets/filter/selectFields.php @@ -6,8 +6,6 @@ - + diff --git a/application/views/widgets/filter/selectFilters.php b/application/views/widgets/filter/selectFilters.php index 97f5c300f..a4202e70a 100644 --- a/application/views/widgets/filter/selectFilters.php +++ b/application/views/widgets/filter/selectFilters.php @@ -8,9 +8,7 @@ - + diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 480126a94..e7b2a11a9 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -12,6 +12,9 @@ class FilterWidget extends Widget const WIDGET_URL_SELECT_FILTERS = 'widgets/filter/selectFilters'; const WIDGET_URL_SAVE_FILTER = 'widgets/filter/saveFilter'; + const DEFAULT_DATE_FORMAT = 'd.m.Y H:i:s'; + const DEFAULT_MARK_ROW_CLASS = 'text-danger'; + // Fitler info from DB private $_app; private $_datasetName; @@ -26,7 +29,7 @@ class FilterWidget extends Widget private $_columnsAliases; // To format or mark rows of the dataset - private $_formatRaw; + private $_formatRow; private $_markRow; // To have a column in the GUI with checkboxes to select rows in the table @@ -129,7 +132,7 @@ class FilterWidget extends Widget $this->_query = null; $this->_additionalColumns = null; $this->_columnsAliases = null; - $this->_formatRaw = null; + $this->_formatRow = null; $this->_markRow = null; $this->_checkboxes = null; $this->_hideHeader = null; @@ -179,9 +182,9 @@ class FilterWidget extends Widget } // Parameter that contains a function to format the rows of the dataset - if (isset($args[FiltersLib::FORMAT_RAW]) && is_callable($args[FiltersLib::FORMAT_RAW])) + if (isset($args[FiltersLib::FORMAT_ROW]) && is_callable($args[FiltersLib::FORMAT_ROW])) { - $this->_formatRaw = $args[FiltersLib::FORMAT_RAW]; + $this->_formatRow = $args[FiltersLib::FORMAT_ROW]; } // Parameter that contains a function to mark in the GUI the rows of the dataset @@ -259,6 +262,39 @@ class FilterWidget extends Widget $this->filterslib->setSession(null); $session = null; } + else // else if the filter loaded in session is the same that is being requested + { + // Get SESSION_RELOAD_DATASET from the session + $reloadDataset = $this->filterslib->getElementSession(FiltersLib::SESSION_RELOAD_DATASET); + if ($reloadDataset === true) // if it's value is very true, reload the dataset + { + // set as false to stop changing the dataset + $this->filterslib->setElementSession(FiltersLib::SESSION_RELOAD_DATASET, false); + + // Generate dataset query using filters from the session + $datasetQuery = $this->filterslib->generateDatasetQuery( + $this->_query, + $this->filterslib->getElementSession(FiltersLib::SESSION_FILTERS) + ); + + // Then retrive dataset from DB + $dataset = $this->filterslib->getDataset($datasetQuery); + + // Save changes into session if data are valid + if (!isError($dataset)) + { + $formattedDataset = $this->_formatDataset($dataset); // format the dataset using markRow and formatRow + + // Set the new dataset and it's attributes in the session + $this->filterslib->setElementSession( + FiltersLib::SESSION_DATASET_METADATA, + $this->FiltersModel->getExecutedQueryMetaData() + ); + $this->filterslib->setElementSession(FiltersLib::SESSION_ROW_NUMBER, count($dataset->retval)); + $this->filterslib->setElementSession(FiltersLib::SESSION_DATASET, $formattedDataset); + } + } + } } // If the session is empty @@ -277,7 +313,7 @@ class FilterWidget extends Widget if ($parsedFilterJson != null) // if the json is valid { // Generate dataset query - $datasetQuery = $this->filterslib->generateDatasetQuery($this->_query, $parsedFilterJson); + $datasetQuery = $this->filterslib->generateDatasetQuery($this->_query, $parsedFilterJson->filters); // Then retrive dataset from DB $dataset = $this->filterslib->getDataset($datasetQuery); @@ -288,20 +324,27 @@ class FilterWidget extends Widget // Save changes into session if data are valid if (!isError($dataset)) { + $formattedDataset = $this->_formatDataset($dataset); // format the dataset using markRow and formatRow + // Stores an array that contains all the data useful for $this->filterslib->setSession( array( - FiltersLib::FILTER_ID => $this->_filterId, - FiltersLib::SESSION_FILTER_NAME => $filterName, - FiltersLib::SESSION_FIELDS => $this->FiltersModel->getExecutedQueryListFields(), - FiltersLib::SESSION_SELECTED_FIELDS => $this->_getColumnsNames($parsedFilterJson->columns), - FiltersLib::SESSION_COLUMNS_ALIASES => $this->_columnsAliases, - FiltersLib::SESSION_ADDITIONAL_COLUMNS => $this->_additionalColumns, - FiltersLib::SESSION_CHECKBOXES => $this->_checkboxes, - FiltersLib::SESSION_FILTERS => $parsedFilterJson->filters, - FiltersLib::SESSION_DATASET_METADATA => $this->FiltersModel->getExecutedQueryMetaData(), - FiltersLib::SESSION_ROW_NUMBER => count($dataset->retval), - FiltersLib::SESSION_DATASET => $dataset->retval + FiltersLib::FILTER_ID => $this->_filterId, // + FiltersLib::APP_PARAMETER => $this->_app, // + FiltersLib::DATASET_NAME_PARAMETER => $this->_datasetName, // + + FiltersLib::SESSION_FILTER_NAME => $filterName, // + + FiltersLib::SESSION_FIELDS => $this->FiltersModel->getExecutedQueryListFields(), // + FiltersLib::SESSION_SELECTED_FIELDS => $this->_getColumnsNames($parsedFilterJson->columns), // + FiltersLib::SESSION_COLUMNS_ALIASES => $this->_columnsAliases, // + FiltersLib::SESSION_ADDITIONAL_COLUMNS => $this->_additionalColumns, // + FiltersLib::SESSION_CHECKBOXES => $this->_checkboxes, // + FiltersLib::SESSION_FILTERS => $parsedFilterJson->filters, // + FiltersLib::SESSION_DATASET_METADATA => $this->FiltersModel->getExecutedQueryMetaData(), // + FiltersLib::SESSION_ROW_NUMBER => count($dataset->retval), // + FiltersLib::SESSION_DATASET => $formattedDataset, // + FiltersLib::SESSION_RELOAD_DATASET => false // ) ); } @@ -311,6 +354,75 @@ class FilterWidget extends Widget // var_dump($this->filterslib->getSession()); } + /** + * + */ + private function _formatDataset($rawDataset) + { + $formattedDataset = null; + + if (hasData($rawDataset) && is_array($rawDataset->retval)) + { + $formattedDataset = array(); + + for ($rowCounter = 0; $rowCounter < count($rawDataset->retval); $rowCounter++) + { + $row = $rawDataset->retval[$rowCounter]; + + $formattedRow = $this->_formatRow($row); + $formattedRow->MARK_ROW_CLASS = $this->_markRow($row); + $formattedDataset[] = $formattedRow; + } + } + + return $formattedDataset; + } + + /** + * + */ + private function _formatRow($datasetRaw) + { + $tmpDatasetRaw = clone $datasetRaw; + + foreach ($tmpDatasetRaw as $columnName => $columnValue) + { + if (is_bool($columnValue)) + { + $tmpDatasetRaw->{$columnValue} = $columnValue === true ? 'true' : 'false'; + } + elseif (DateTime::createFromFormat('Y-m-d G:i:s', $columnValue) !== false) + { + $tmpDatasetRaw->{$columnValue} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue)); + } + } + + if ($this->_formatRow != null) + { + $formatRow = $this->_formatRow; + $tmpDatasetRaw = $formatRow($tmpDatasetRaw); + } + + return $tmpDatasetRaw; + } + + /** + * + */ + private function _markRow($datasetRaw) + { + if (is_object($datasetRaw)) + { + if ($this->_markRow != null) + { + $markRow = $this->_markRow; + $class = $markRow($datasetRaw); + } + } + + return !isset($class) ? '' : $class; + } + /** * */ diff --git a/public/css/FilterWidget.css b/public/css/FilterWidget.css index 42c10f2cc..3d72b0b2f 100644 --- a/public/css/FilterWidget.css +++ b/public/css/FilterWidget.css @@ -16,7 +16,7 @@ .filter-span-label { display: inline-block; - width: 130px; + width: 200px; font-weight: bold; } diff --git a/public/js/AjaxLib.js b/public/js/AjaxLib.js index a68ffda93..bd2b22689 100644 --- a/public/js/AjaxLib.js +++ b/public/js/AjaxLib.js @@ -124,6 +124,20 @@ var FHC_AjaxClient = { return data; }, + /** + * Retrives error message from response object + */ + getError: function(response) { + var error = 'Generic error'; + + if (jQuery.type(response) == "object" && !jQuery.isEmptyObject(response) && response.hasOwnProperty(RESPONSE)) + { + error = response.retval; + } + + return error; + }, + /** * Retrives code from response object */ diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index aaaae5b18..4c20b30a2 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -10,19 +10,32 @@ */ /** - * Global function used by MavigationWidget JS + * Global function used by NavigationWidget JS */ function sideMenuHook() { - $(".remove-applied-filter").click(function() { + $(".remove-custom-filter").click(function() { // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/deleteCustomFilter', + 'system/Filters/removeCustomFilter', { - filter_id: $(this).attr('value') + filter_id: $(this).attr('value'), + filter_page: FHC_FilterWidget.getFilterPage() }, { - successCallback: refreshSideMenu // NOTE: to be checked + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + { + console.log(FHC_AjaxClient.getError(data)); + } + else + { + if (typeof refreshSideMenu == 'function') + { + refreshSideMenu(); + } + } + } } ); }); @@ -42,9 +55,64 @@ var FHC_FilterWidget = { FHC_FilterWidget._getFilter(FHC_FilterWidget._renderFilterWidget); }, + /** + * + */ + refresh: function() { + FHC_FilterWidget._resetAll(); + FHC_FilterWidget.display(); + }, + + /** + * + */ + getFilterPage: function() { + return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; + }, + //------------------------------------------------------------------------------------------------------------------ // Private methods + /** + * + */ + _failOrRefresh: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + { + console.log(FHC_AjaxClient.getError(data)); + } + else + { + FHC_FilterWidget.refresh(); + } + }, + + /** + * + */ + _failOrReload: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + { + console.log(FHC_AjaxClient.getError(data)); + } + else + { + location.reload(); + } + }, + + /** + * + */ + _resetAll: function() { + // + $("#dragAndDropFieldsArea").html(""); + $("#addField").html(""); + // + $("#appliedFilters").html(""); + $("#addFilter").html(""); + }, + /** * */ @@ -52,13 +120,10 @@ var FHC_FilterWidget = { FHC_AjaxClient.ajaxCallGet( 'system/Filters/getFilter', { - filter_page: FHC_FilterWidget._getFilterPage() + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - - // console.log(data); - if (FHC_AjaxClient.hasData(data) && typeof renderFunction == 'function') { renderFunction(FHC_AjaxClient.getData(data)); @@ -73,7 +138,7 @@ var FHC_FilterWidget = { */ _renderFilterWidget: function(data) { - console.log(data); + FHC_FilterWidget._resetAll(); // FHC_FilterWidget._setFilterName(data); // @@ -219,15 +284,12 @@ var FHC_FilterWidget = { FHC_AjaxClient.ajaxCallPost( 'system/Filters/sortSelectedFields', { - selectedFieldsLst: arrayDndId, - filter_page: FHC_FilterWidget._getFilterPage() + selectedFields: arrayDndId, + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFields(); - - FHC_FilterWidget.renderSelectedFields(); - FHC_FilterWidget.renderTableDataset(); + FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } ); @@ -237,17 +299,14 @@ var FHC_FilterWidget = { $(".remove-selected-field").click(function(event) { // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/removeSelectedFields', + 'system/Filters/removeSelectedField', { - fieldName: $(this).attr('fieldToRemove'), - filter_page: FHC_FilterWidget._getFilterPage() + selectedField: $(this).attr('fieldToRemove'), + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFields(); - - FHC_FilterWidget.renderSelectedFields(); - FHC_FilterWidget.renderTableDataset(); + FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } ); @@ -294,17 +353,14 @@ var FHC_FilterWidget = { $("#addField").change(function(event) { // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/addSelectedFields', + 'system/Filters/addSelectedField', { - fieldName: $(this).val(), - filter_page: FHC_FilterWidget._getFilterPage() + selectedField: $(this).val(), + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFields(); - - FHC_FilterWidget.renderSelectedFields(); - FHC_FilterWidget.renderTableDataset(); + FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } ); @@ -381,38 +437,31 @@ var FHC_FilterWidget = { $("#applyFilter").click(function() { - var selectFilterName = []; - var selectFilterOperation = []; - var selectFilterOperationValue = []; - var selectFilterOption = []; + var appliedFilters = []; + var appliedFiltersOperations = []; + var appliedFiltersConditions = []; + var appliedFiltersOptions = []; - $("#selectedFilters > div").each(function(i, e) { - var tmpSelectFilterName = $(this).find('.hidden-field-name').val(); - var tmpSelectFilterOperation = $(this).find('.applied-filter-operation').val(); - var tmpSelectFilterOperationValue = $(this).find('.applied-filter-condition:enabled').val(); - var tmpSelectFilterOption = $(this).find('.applied-filter-option:enabled').val(); - - selectFilterName.push(tmpSelectFilterName); - selectFilterOperation.push(tmpSelectFilterOperation); - selectFilterOperationValue.push(tmpSelectFilterOperationValue != null ? tmpSelectFilterOperationValue : ""); - selectFilterOption.push(tmpSelectFilterOption != null ? tmpSelectFilterOption : ""); + $("#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()); + appliedFiltersOptions.push($(this).find('.applied-filter-option:enabled').val()); }); // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/applyFilter', + 'system/Filters/applyFilters', { - filterNames: selectFilterName, - filterOperations: selectFilterOperation, - filterOperationValues: selectFilterOperationValue, - filterOptions: selectFilterOption, - filter_page: FHC_FilterWidget._getFilterPage() + appliedFilters: appliedFilters, + appliedFiltersOperations: appliedFiltersOperations, + appliedFiltersConditions: appliedFiltersConditions, + appliedFiltersOptions: appliedFiltersOptions, + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFilters(); - - location.reload(); + FHC_FilterWidget._failOrReload(data, textStatus, jqXHR); } } ); @@ -421,16 +470,14 @@ var FHC_FilterWidget = { $(".remove-applied-filter").click(function(event) { // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/removeSelectedFilters', + 'system/Filters/removeAppliedFilter', { - fieldName: $(this).attr('filterToRemove'), - filter_page: FHC_FilterWidget._getFilterPage() + appliedFilter: $(this).attr('filterToRemove'), + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFilters(); - - location.reload(); + FHC_FilterWidget._failOrReload(data, textStatus, jqXHR); } } ); @@ -479,17 +526,14 @@ var FHC_FilterWidget = { $("#addFilter").change(function(event) { // FHC_AjaxClient.ajaxCallPost( - 'system/Filters/addSelectedFilters', + 'system/Filters/addFilter', { - fieldName: $(this).val(), - filter_page: FHC_FilterWidget._getFilterPage() + filter: $(this).val(), + filter_page: FHC_FilterWidget.getFilterPage() }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._resetSelectedFilters(); - - FHC_FilterWidget.renderSelectedFilters(); - FHC_FilterWidget.renderTableDataset(); + FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } ); @@ -514,6 +558,8 @@ var FHC_FilterWidget = { if (metaData.type.toLowerCase().indexOf("int") >= 0) { + if (appliedFilter.condition == null) appliedFilter.condition = 0; + html = ''; html += ' '; html += ' '; @@ -556,6 +604,8 @@ var FHC_FilterWidget = { var classOption = 'form-control applied-filter-option'; var disabled = ""; + if (appliedFilter.condition == null) appliedFilter.condition = 0; + if (appliedFilter.operation == "set" || appliedFilter.operation == "nset") { classOperation += ' hidden-control'; @@ -572,7 +622,7 @@ var FHC_FilterWidget = { html += ' '; html += ''; html += ''; - html += ' '; + html += ' '; html += ''; html += ''; html += '