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
+ ));
+ }
+ }
+ }
+ }
+
/**
*
*/