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: