diff --git a/application/config/fhcomplete.php b/application/config/fhcomplete.php index b1fd96f0f..7631126da 100644 --- a/application/config/fhcomplete.php +++ b/application/config/fhcomplete.php @@ -198,6 +198,7 @@ $config['fhc_acl'] = array 'system.tbl_appdaten' => 'system/appdaten', 'system.tbl_benutzerrolle' => 'basis/benutzerrolle', 'system.tbl_berechtigung' => 'basis/berechtigung', + 'system.tbl_filters' => 'system/filters', 'system.tbl_cronjob' => 'basis/cronjob', 'system.tbl_phrase' => 'system/phrase', 'system.tbl_phrasentext' => 'system/phrase', diff --git a/application/controllers/system/Test.php b/application/controllers/system/Test.php index 67e82c7d3..73cb99111 100644 --- a/application/controllers/system/Test.php +++ b/application/controllers/system/Test.php @@ -14,12 +14,12 @@ class Test extends VileSci_Controller /** * */ - public function index() + public function sql() { echo $this->widgetlib->widget( 'FilterWidget', array( - 'app' => 'OpenProject', + 'app' => 'core', 'datasetName' => 'Arbeitspakete', 'query' => ' SELECT p.person_id AS "PersonId", @@ -36,4 +36,31 @@ class Test extends VileSci_Controller ) ); } + + /** + * + */ + public function direct() + { + echo $this->widgetlib->widget( + 'FilterWidget', + array( + 'app' => 'core', + 'datasetName' => 'Arbeitspakete', + 'filter_kurzbz' => 'This filter filters', + 'query' => ' + SELECT p.person_id AS "PersonId", + p.nachname AS "Nachname", + p.vorname AS "Vorname", + k.kontakt AS "Email", + p.aktiv AS "Aktiv" + FROM public.tbl_person p INNER JOIN public.tbl_kontakt k USING(person_id) + WHERE p.aktiv = TRUE + AND p.person_id = k.person_id + AND k.kontakttyp = \'email\' + AND p.person_id < 1000 + ' + ) + ); + } } diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 0c456365e..dbdef94e6 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -8,6 +8,8 @@ class FilterWidget extends Widget const APP_PARAMETER = 'app'; const QUERY_PARAMETER = 'query'; const DATASET_NAME_PARAMETER = 'datasetName'; + const FILTER_KURZBZ = 'filterKurzbz'; + const FILTER_ID = 'filterId'; const DATASET_PARAMETER = 'dataset'; const METADATA_PARAMETER = 'metaData'; @@ -32,18 +34,20 @@ class FilterWidget extends Widget const CMD_ADD_FIELD = 'addField'; const CMD_REMOVE_FIELD = 'rmField'; - const OP_EQUAL = 'A'; - const OP_NOT_EQUAL = 'B'; - const OP_GREATER_THAN = 'C'; - const OP_LESS_THAN = 'D'; - const OP_IS_TRUE = 'E'; - const OP_IS_FALSE = 'F'; - const OP_CONTAINS = 'G'; - const OP_NOT_CONTAIN = 'H'; + const OP_EQUAL = 'equal'; + const OP_NOT_EQUAL = 'nequal'; + const OP_GREATER_THAN = 'gt'; + const OP_LESS_THAN = 'ld'; + const OP_IS_TRUE = 'true'; + const OP_IS_FALSE = 'false'; + const OP_CONTAINS = 'contains'; + const OP_NOT_CONTAINS = 'ncontains'; private $app; private $query; private $datasetName; + private $filterKurzbz; + private $filterId; /** * @@ -65,9 +69,15 @@ class FilterWidget extends Widget */ public function display($widgetData) { + // + $this->_loadFilter(); + // $this->_setSessionFilterData(); + // + $this->FiltersModel->resetQuery(); + // $dataset = @$this->FiltersModel->execReadOnlyQuery($this->_generateQuery()); @@ -171,7 +181,7 @@ class FilterWidget extends Widget @@ -341,6 +351,16 @@ class FilterWidget extends Widget { show_error('The "'.self::QUERY_PARAMETER.'" parameter must be specified'); } + + if (isset($args[self::FILTER_KURZBZ])) + { + $this->filterKurzbz = $args[self::FILTER_KURZBZ]; + } + + if (isset($args[self::FILTER_ID])) + { + $this->filterId = $args[self::FILTER_ID]; + } } else { @@ -348,6 +368,93 @@ class FilterWidget extends Widget } } + /** + * + */ + private function _loadFilter() + { + // + $this->FiltersModel->resetQuery(); + + // + $this->FiltersModel->addJoin('public.tbl_benutzer', 'person_id'); + + // + $this->FiltersModel->addSelect('system.tbl_filters.*'); + + // + $this->FiltersModel->addOrder('sort', 'ASC'); + + // + $this->FiltersModel->addLimit(1); + + // + $filter = $this->FiltersModel->loadWhere( + array( + 'app' => $this->app, + 'dataset_name' => $this->datasetName, + 'uid' => getAuthUID(), + 'default_filter' => true + ) + ); + + $jsonEncodedFilter = null; + + if (hasData($filter)) + { + if (isset($filter->retval[0]->filter) && trim($filter->retval[0]->filter) != '') + { + $jsonEncodedFilter = json_decode($filter->retval[0]->filter); + + } + } + + if ($jsonEncodedFilter != null) + { + $selectedFields = array(); + $selectedFilters = array(); + $activeFilters = array(); + $activeFiltersOperation = array(); + + if (isset($jsonEncodedFilter->columns)) + { + $columns = $jsonEncodedFilter->columns; + + for($columnsCounter = 0; $columnsCounter < count($columns); $columnsCounter++) + { + if (isset($columns[$columnsCounter]->name)) + { + $selectedFields[] = $columns[$columnsCounter]->name; + } + } + } + + if (isset($jsonEncodedFilter->filters)) + { + $filters = $jsonEncodedFilter->filters; + + for($filtersCounter = 0; $filtersCounter < count($filters); $filtersCounter++) + { + if (isset($filters[$filtersCounter]->name)) + { + $selectedFilters[] = $filters[$filtersCounter]->name; + $activeFilters[$filters[$filtersCounter]->name] = $filters[$filtersCounter]->condition; + $activeFiltersOperation[$filters[$filtersCounter]->name] = $filters[$filtersCounter]->operation; + } + } + } + + $filterSessionArray = array( + self::SELECTED_FIELDS => $selectedFields, + self::SELECTED_FILTERS => $selectedFilters, + self::ACTIVE_FILTERS => $activeFilters, + self::ACTIVE_FILTERS_OPERATION => $activeFiltersOperation + ); + + $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); + } + } + /** * */ @@ -550,7 +657,7 @@ class FilterWidget extends Widget case self::OP_CONTAINS: $condition = ' ILIKE \'%'.$activeFilterValue.'%\''; break; - case self::OP_NOT_CONTAIN: + case self::OP_NOT_CONTAINS: $condition = ' NOT ILIKE \'%'.$activeFilterValue.'%\''; break; case self::OP_IS_TRUE: