diff --git a/application/controllers/system/TestFilterWidget.php b/application/controllers/system/TestFilterWidget.php index 45c5d36bf..9cdd54095 100644 --- a/application/controllers/system/TestFilterWidget.php +++ b/application/controllers/system/TestFilterWidget.php @@ -36,6 +36,7 @@ class TestFilterWidget extends VileSci_Controller AND p.person_id < 1000 ', 'hideHeader' => false, + 'hideSave' => false, 'checkboxes' => array('PersonId'), 'additionalColumns' => array('Delete', 'Edit'), 'formatRaw' => function($fieldName, $fieldValue, $datasetRaw) { diff --git a/application/views/widgets/filter/filter.php b/application/views/widgets/filter/filter.php index 271b5a224..1219e84f3 100644 --- a/application/views/widgets/filter/filter.php +++ b/application/views/widgets/filter/filter.php @@ -40,6 +40,11 @@ } }); + $("#saveCustomFilterButton").click(function() { + $("#saveCustomFilter").val(true); + $("#filterForm").submit(); + }); + }); @@ -56,6 +61,12 @@
+
+ +
+ +
+
diff --git a/application/views/widgets/filter/saveFilter.php b/application/views/widgets/filter/saveFilter.php new file mode 100644 index 000000000..e9e0217e6 --- /dev/null +++ b/application/views/widgets/filter/saveFilter.php @@ -0,0 +1,7 @@ +
+ Filter short description: +
+
+ + +
diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index a67004d4d..3d297bf4f 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -15,6 +15,7 @@ class FilterWidget extends Widget const FORMAT_RAW = 'formatRaw'; const CHECKBOXES = 'checkboxes'; const HIDE_HEADER = 'hideHeader'; + const HIDE_SAVE = 'hideSave'; const DATASET_PARAMETER = 'dataset'; const METADATA_PARAMETER = 'metaData'; @@ -24,6 +25,7 @@ class FilterWidget extends Widget const WIDGET_URL_SELECT_FIELDS = 'widgets/filter/selectFields'; const WIDGET_URL_TABLE_DATASET = 'widgets/filter/tableDataset'; const WIDGET_URL_SELECT_FILTERS = 'widgets/filter/selectFilters'; + const WIDGET_URL_SAVE_FILTER = 'widgets/filter/saveFilter'; const SESSION_NAME = 'FILTER'; @@ -83,6 +85,7 @@ class FilterWidget extends Widget // $this->load->model('system/Filters_model', 'FiltersModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); self::$FilterWidgetInstance = $this; } @@ -98,6 +101,9 @@ class FilterWidget extends Widget // $this->_setSessionFilterData(); + // + $this->_saveFilter(); + // $this->FiltersModel->resetQuery(); @@ -172,6 +178,17 @@ class FilterWidget extends Widget } } + /** + * + */ + public static function loadViewSaveFilter() + { + if (self::$FilterWidgetInstance->hideSave != true) + { + self::_loadView(self::WIDGET_URL_SAVE_FILTER); + } + } + /** * */ @@ -422,7 +439,7 @@ class FilterWidget extends Widget /** * */ - private static function _loadView($viewName, $parameters) + private static function _loadView($viewName, $parameters = null) { $ci =& get_instance(); $ci->load->view($viewName, $parameters); @@ -487,6 +504,7 @@ class FilterWidget extends Widget $this->formatRaw = null; $this->checkboxes = null; $this->hideHeader = false; + $this->hideSave = false; if (!is_array($args) || (is_array($args) && count($args) == 0)) { @@ -558,6 +576,11 @@ class FilterWidget extends Widget { $this->hideHeader = $args[self::HIDE_HEADER]; } + + if (isset($args[self::HIDE_SAVE]) && is_bool($args[self::HIDE_SAVE])) + { + $this->hideSave = $args[self::HIDE_SAVE]; + } } } @@ -668,6 +691,104 @@ class FilterWidget extends Widget } } + /** + * + */ + private function _saveFilter() + { + if (isset($_POST['saveCustomFilter']) && $_POST['saveCustomFilter'] == 'true') + { + $objToBeSaved = new stdClass(); + + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + + 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]]; + } + } + } + + $result = $this->FiltersModel->loadWhere(array( + 'app' => $this->app, + 'dataset_name' => $this->datasetName, + 'filter_kurzbz' => $_POST['customFilterKurzbz'] + )); + + if (hasData($result)) + { + $this->FiltersModel->update( + array( + 'app' => $this->app, + 'dataset_name' => $this->datasetName, + 'filter_kurzbz' => $_POST['customFilterKurzbz'] + ), + array( + 'description' => '{}', + 'sort' => null, + 'default_filter' => false, + 'filter' => json_encode($objToBeSaved), + 'oe_kurzbz' => null + ) + ); + } + else + { + $result = $this->BenutzerModel->load(getAuthUID()); + + if (hasData($result)) + { + $this->FiltersModel->insert(array( + 'app' => $this->app, + 'dataset_name' => $this->datasetName, + 'filter_kurzbz' => $_POST['customFilterKurzbz'], + 'person_id' => $result->retval[0]->person_id, + 'description' => '{}', + 'sort' => null, + 'default_filter' => false, + 'filter' => json_encode($objToBeSaved), + 'oe_kurzbz' => null + )); + } + } + } + } + /** * */