mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
- Better Js
- Better HTML structure - Correct dynamic build of the SQL statement - Stores filters and filters operations in session - Boolean values are converted as strings inside the table
This commit is contained in:
@@ -7,6 +7,16 @@
|
||||
<script language="Javascript" type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
|
||||
$("#addField").change(function() {
|
||||
$("#filterForm").submit();
|
||||
});
|
||||
|
||||
$(".remove-field").each(function() {
|
||||
$(this).click(function() {
|
||||
$("#rmField").val($(this).attr('fieldToRemove'));
|
||||
});
|
||||
});
|
||||
|
||||
$("#addFilter").change(function() {
|
||||
$("#filterForm").submit();
|
||||
});
|
||||
|
||||
@@ -1,23 +1,33 @@
|
||||
<div>
|
||||
<?php
|
||||
$selectedFields = FilterWidget::getSelectedFields();
|
||||
<?php
|
||||
$selectedFields = FilterWidget::getSelectedFields();
|
||||
|
||||
foreach ($selectedFields as $key => $value)
|
||||
{
|
||||
echo '<input type="submit" value="'.$value.'" onClick="document.getElementById(\'rmField\').value=\''.$value.'\'">';
|
||||
}
|
||||
?>
|
||||
<input type="hidden" id="rmField" name="rmField" value="">
|
||||
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
|
||||
{
|
||||
$selectedField = $selectedFields[$selectedFieldsCounter];
|
||||
?>
|
||||
<input type="submit" value="<?php echo $selectedField; ?> X" class="remove-field" fieldToRemove="<?php echo $selectedField; ?>">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<input type="hidden" id="<?php echo FilterWidget::CMD_REMOVE_FIELD; ?>" name="<?php echo FilterWidget::CMD_REMOVE_FIELD; ?>" value="">
|
||||
</div>
|
||||
<div>
|
||||
Add:
|
||||
<select name="addField" onChange="document.getElementById('filterForm').submit()">
|
||||
<option value="">Select a field to add..</option>
|
||||
<span>
|
||||
Add field:
|
||||
</span>
|
||||
<span>
|
||||
<select id="<?php echo FilterWidget::CMD_ADD_FIELD; ?>" name="<?php echo FilterWidget::CMD_ADD_FIELD; ?>">
|
||||
<option value="">Select a field to add..</option>
|
||||
<?php
|
||||
foreach ($listFields as $key => $value)
|
||||
for ($listFieldsCounter = 0; $listFieldsCounter < count($listFields); $listFieldsCounter++)
|
||||
{
|
||||
echo '<option value="'.$value.'">'.$value.'</option>';
|
||||
$listField = $listFields[$listFieldsCounter];
|
||||
?>
|
||||
<option value="<?php echo $listField; ?>"><?php echo $listField; ?></option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</select>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -24,15 +24,15 @@
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<input type="hidden" id="rmFilter" name="rmFilter" value="">
|
||||
<input type="hidden" id="<?php echo FilterWidget::CMD_REMOVE_FILTER; ?>" name="<?php echo FilterWidget::CMD_REMOVE_FILTER; ?>" value="">
|
||||
</div>
|
||||
<div>
|
||||
<span>
|
||||
Add filter:
|
||||
</span>
|
||||
<span>
|
||||
<select id="addFilter" name="addFilter">
|
||||
<option value="">Select a field to add...</option>
|
||||
<select id="<?php echo FilterWidget::CMD_ADD_FILTER; ?>" name="<?php echo FilterWidget::CMD_ADD_FILTER; ?>">
|
||||
<option value="">Select a filter to add...</option>
|
||||
<?php
|
||||
for ($listFieldsCounter = 0; $listFieldsCounter < count($listFields); $listFieldsCounter++)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$result = $dataset->retval;
|
||||
$results = $dataset->retval;
|
||||
|
||||
$selectedFields = FilterWidget::getSelectedFields();
|
||||
?>
|
||||
@@ -9,35 +9,50 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach ($selectedFields as $key => $value)
|
||||
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
|
||||
{
|
||||
if (array_key_exists($value, $result[0]))
|
||||
{
|
||||
$selectedFilter = $selectedFields[$selectedFieldsCounter];
|
||||
?>
|
||||
<th title="<?php echo $value; ?>"><?php echo $value; ?></th>
|
||||
<th title="<?php echo $selectedFilter; ?>"><?php echo $selectedFilter; ?></th>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
foreach ($result as $key => $value)
|
||||
for ($resultsCounter = 0; $resultsCounter < count($results); $resultsCounter++)
|
||||
{
|
||||
echo "<tr>";
|
||||
|
||||
foreach ($selectedFields as $key2 => $value2)
|
||||
$result = $results[$resultsCounter];
|
||||
?>
|
||||
<tr>
|
||||
<?php
|
||||
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
|
||||
{
|
||||
if (array_key_exists($value2, $value))
|
||||
$selectedFilter = $selectedFields[$selectedFieldsCounter];
|
||||
|
||||
if (array_key_exists($selectedFilter, $result))
|
||||
{
|
||||
?>
|
||||
<td><?php echo $value->{$value2}; ?></td>
|
||||
<td>
|
||||
<?php
|
||||
|
||||
if (is_bool($result->{$selectedFilter}))
|
||||
{
|
||||
echo $result->{$selectedFilter} === true ? 'true' : 'false';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $result->{$selectedFilter};
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
echo "</tr>";
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
|
||||
@@ -23,12 +23,23 @@ class FilterWidget extends Widget
|
||||
const SELECTED_FIELDS = 'selectedFields';
|
||||
const SELECTED_FILTERS = 'selectedFilters';
|
||||
const ACTIVE_FILTERS = 'activeFilters';
|
||||
const ACTIVE_FILTERS_OPERATION = 'activeFiltersOperation';
|
||||
|
||||
const ACTIVE_FILTER_OPERATION_POSTFIX = '-operation';
|
||||
|
||||
const CMD_ADD_FILTER = 'addFilter';
|
||||
const CMD_REMOVE_FILTER = 'rmFilter';
|
||||
const CMD_ADD_FIELD = 'addField';
|
||||
const CMD_REMOVE_FIELD = 'rmField';
|
||||
const CMD_APPLY_FILTERS = 'applyFilters';
|
||||
|
||||
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';
|
||||
|
||||
private $app;
|
||||
private $query;
|
||||
@@ -58,7 +69,7 @@ class FilterWidget extends Widget
|
||||
$this->_setSessionFilterData();
|
||||
|
||||
//
|
||||
$dataset = $this->FiltersModel->execReadOnlyQuery($this->_generateQuery());
|
||||
$dataset = @$this->FiltersModel->execReadOnlyQuery($this->_generateQuery());
|
||||
|
||||
//
|
||||
$listFields = $this->FiltersModel->getExecutedQueryListFields();
|
||||
@@ -142,10 +153,10 @@ class FilterWidget extends Widget
|
||||
$html = '
|
||||
<span>
|
||||
<select name="%s" class="select-filter-operation">
|
||||
<option value="A">equal</option>
|
||||
<option value="B">not equal</option>
|
||||
<option value="C">greater than</option>
|
||||
<option value="D">less than</option>
|
||||
<option value="'.self::OP_EQUAL.'">equal</option>
|
||||
<option value="'.self::OP_NOT_EQUAL.'">not equal</option>
|
||||
<option value="'.self::OP_GREATER_THAN.'">greater than</option>
|
||||
<option value="'.self::OP_LESS_THAN.'">less than</option>
|
||||
</select>
|
||||
</span>
|
||||
<span>
|
||||
@@ -158,8 +169,8 @@ class FilterWidget extends Widget
|
||||
$html = '
|
||||
<span>
|
||||
<select name="%s" class="select-filter-operation">
|
||||
<option value="A">contains</option>
|
||||
<option value="B">does not contain</option>
|
||||
<option value="'.self::OP_CONTAINS.'">contains</option>
|
||||
<option value="'.self::OP_NOT_CONTAIN.'">does not contain</option>
|
||||
</select>
|
||||
</span>
|
||||
<span>
|
||||
@@ -172,8 +183,8 @@ class FilterWidget extends Widget
|
||||
$html = '
|
||||
<span>
|
||||
<select name="%s" class="select-filter-operation">
|
||||
<option value="true">is true</option>
|
||||
<option value="false">is false</option>
|
||||
<option value="'.self::OP_IS_TRUE.'">is true</option>
|
||||
<option value="'.self::OP_IS_FALSE.'">is false</option>
|
||||
</select>
|
||||
</span>
|
||||
<span>
|
||||
@@ -271,6 +282,11 @@ class FilterWidget extends Widget
|
||||
$filterSessionArray[self::ACTIVE_FILTERS] = array();
|
||||
}
|
||||
|
||||
if (!isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION]))
|
||||
{
|
||||
$filterSessionArray[self::ACTIVE_FILTERS_OPERATION] = array();
|
||||
}
|
||||
|
||||
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
|
||||
}
|
||||
|
||||
@@ -340,16 +356,7 @@ class FilterWidget extends Widget
|
||||
|
||||
if (array_key_exists(self::CMD_REMOVE_FIELD, $_POST) && trim($_POST[self::CMD_REMOVE_FIELD]) != '')
|
||||
{
|
||||
$tmpArray = array();
|
||||
foreach ($selectedFields as $key => $value)
|
||||
{
|
||||
if ($_POST[self::CMD_REMOVE_FIELD] != $value)
|
||||
{
|
||||
$tmpArray[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$selectedFields = $tmpArray;
|
||||
$selectedFields = $this->_removeElementFromArray($selectedFields, $_POST[self::CMD_REMOVE_FIELD]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,20 +370,13 @@ class FilterWidget extends Widget
|
||||
{
|
||||
// Selected filters
|
||||
$selectedFilters = array();
|
||||
$activeFilters = array();
|
||||
|
||||
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
|
||||
|
||||
if (isset($filterSessionArray[self::SELECTED_FILTERS]))
|
||||
{
|
||||
$selectedFilters = $filterSessionArray[self::SELECTED_FILTERS];
|
||||
}
|
||||
|
||||
if (isset($filterSessionArray[self::ACTIVE_FILTERS]))
|
||||
{
|
||||
$activeFilters = $filterSessionArray[self::ACTIVE_FILTERS];
|
||||
}
|
||||
|
||||
if (is_array($_POST))
|
||||
{
|
||||
if (array_key_exists(self::CMD_ADD_FILTER, $_POST) && trim($_POST[self::CMD_ADD_FILTER]) != '')
|
||||
@@ -389,21 +389,7 @@ class FilterWidget extends Widget
|
||||
|
||||
if (array_key_exists(self::CMD_REMOVE_FILTER, $_POST) && trim($_POST[self::CMD_REMOVE_FILTER]) != '')
|
||||
{
|
||||
$tmpArray = array();
|
||||
foreach ($selectedFilters as $key => $value)
|
||||
{
|
||||
if ($_POST[self::CMD_REMOVE_FILTER] != $value)
|
||||
{
|
||||
$tmpArray[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$selectedFilters = $tmpArray;
|
||||
|
||||
if (isset($activeFilters[$_POST[self::CMD_REMOVE_FILTER]]))
|
||||
{
|
||||
|
||||
}
|
||||
$selectedFilters = $this->_removeElementFromArray($selectedFilters, $_POST[self::CMD_REMOVE_FILTER]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -413,12 +399,9 @@ class FilterWidget extends Widget
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private function _getActiveFiltersFromPost()
|
||||
private function _setActiveFiltersFromPost(&$activeFilters, &$activeFiltersOperation)
|
||||
{
|
||||
// Selected fields
|
||||
$activeFilters = array();
|
||||
$selectedFilters = array();
|
||||
|
||||
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
|
||||
|
||||
if (isset($filterSessionArray[self::ACTIVE_FILTERS]))
|
||||
@@ -426,6 +409,11 @@ class FilterWidget extends Widget
|
||||
$activeFilters = $filterSessionArray[self::ACTIVE_FILTERS];
|
||||
}
|
||||
|
||||
if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION]))
|
||||
{
|
||||
$activeFiltersOperation = $filterSessionArray[self::ACTIVE_FILTERS_OPERATION];
|
||||
}
|
||||
|
||||
if (isset($filterSessionArray[self::SELECTED_FILTERS]))
|
||||
{
|
||||
$selectedFilters = $filterSessionArray[self::SELECTED_FILTERS];
|
||||
@@ -433,18 +421,36 @@ class FilterWidget extends Widget
|
||||
|
||||
if (is_array($_POST))
|
||||
{
|
||||
for ($selectedFiltersCounter = 0; $selectedFiltersCounter < count($selectedFilters); $selectedFiltersCounter++)
|
||||
if (array_key_exists(self::CMD_REMOVE_FILTER, $_POST) && trim($_POST[self::CMD_REMOVE_FILTER]) != '')
|
||||
{
|
||||
$selectedFilter = $selectedFilters[$selectedFiltersCounter];
|
||||
|
||||
if (isset($_POST[$selectedFilter]))
|
||||
if (isset($activeFilters[$_POST[self::CMD_REMOVE_FILTER]]))
|
||||
{
|
||||
$activeFilters[$selectedFilter] = $_POST[$selectedFilter];
|
||||
unset($activeFilters[$_POST[self::CMD_REMOVE_FILTER]]);
|
||||
}
|
||||
|
||||
if (isset($activeFiltersOperation[$_POST[self::CMD_REMOVE_FILTER]]))
|
||||
{
|
||||
unset($activeFiltersOperation[$_POST[self::CMD_REMOVE_FILTER]]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for ($selectedFiltersCounter = 0; $selectedFiltersCounter < count($selectedFilters); $selectedFiltersCounter++)
|
||||
{
|
||||
$selectedFilter = $selectedFilters[$selectedFiltersCounter];
|
||||
|
||||
if (isset($_POST[$selectedFilter]))
|
||||
{
|
||||
$activeFilters[$selectedFilter] = $_POST[$selectedFilter];
|
||||
}
|
||||
|
||||
if (isset($_POST[$selectedFilter.self::ACTIVE_FILTER_OPERATION_POSTFIX]))
|
||||
{
|
||||
$activeFiltersOperation[$selectedFilter] = $_POST[$selectedFilter.self::ACTIVE_FILTER_OPERATION_POSTFIX];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $activeFilters;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -454,8 +460,15 @@ class FilterWidget extends Widget
|
||||
{
|
||||
$filterSessionArray = array(
|
||||
self::SELECTED_FIELDS => $this->_getSelectedFieldsFromPost(),
|
||||
self::SELECTED_FILTERS => $this->_getSelectedFiltersFromPost(),
|
||||
self::ACTIVE_FILTERS => $this->_getActiveFiltersFromPost(),
|
||||
self::SELECTED_FILTERS => $this->_getSelectedFiltersFromPost()
|
||||
);
|
||||
|
||||
$filterSessionArray[self::ACTIVE_FILTERS] = array();
|
||||
$filterSessionArray[self::ACTIVE_FILTERS_OPERATION] = array();
|
||||
|
||||
$this->_setActiveFiltersFromPost(
|
||||
$filterSessionArray[self::ACTIVE_FILTERS],
|
||||
$filterSessionArray[self::ACTIVE_FILTERS_OPERATION]
|
||||
);
|
||||
|
||||
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
|
||||
@@ -467,28 +480,98 @@ class FilterWidget extends Widget
|
||||
private function _generateQuery()
|
||||
{
|
||||
$query = $this->query;
|
||||
// Filters dataset
|
||||
if (is_array($_POST)
|
||||
&& array_key_exists(self::CMD_APPLY_FILTERS, $_POST)
|
||||
&& $_POST[self::CMD_APPLY_FILTERS] == 'true')
|
||||
|
||||
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
|
||||
|
||||
if (isset($filterSessionArray[self::ACTIVE_FILTERS]))
|
||||
{
|
||||
if (is_array($_POST) && array_key_exists(self::SELECTED_FILTERS, $_POST))
|
||||
{
|
||||
$selectedFilters = $_POST[self::SELECTED_FILTERS];
|
||||
}
|
||||
$activeFilters = $filterSessionArray[self::ACTIVE_FILTERS];
|
||||
}
|
||||
|
||||
for ($filtersCounter = 0; $filtersCounter < count($selectedFilters); $filtersCounter++)
|
||||
{
|
||||
$selectedFilter = $selectedFilters[$filtersCounter];
|
||||
if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION]))
|
||||
{
|
||||
$activeFiltersOperation = $filterSessionArray[self::ACTIVE_FILTERS_OPERATION];
|
||||
}
|
||||
|
||||
if (isset($_POST[$selectedFilter]))
|
||||
//
|
||||
if (count($activeFilters) > 0)
|
||||
{
|
||||
$where = '';
|
||||
$first = true;
|
||||
|
||||
foreach ($activeFilters as $field => $activeFilterValue)
|
||||
{
|
||||
if ($first)
|
||||
{
|
||||
$first = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$where .= ' AND ';
|
||||
}
|
||||
|
||||
if (isset($activeFiltersOperation[$field]))
|
||||
{
|
||||
$where .= '"'.$field.'"';
|
||||
$condition = '';
|
||||
|
||||
switch ($activeFiltersOperation[$field])
|
||||
{
|
||||
case self::OP_EQUAL:
|
||||
$condition = ' = '.$activeFilterValue;
|
||||
break;
|
||||
case self::OP_NOT_EQUAL:
|
||||
$condition = ' != '.$activeFilterValue;
|
||||
break;
|
||||
case self::OP_GREATER_THAN:
|
||||
$condition = ' > '.$activeFilterValue;
|
||||
break;
|
||||
case self::OP_LESS_THAN:
|
||||
$condition = ' < '.$activeFilterValue;
|
||||
break;
|
||||
case self::OP_CONTAINS:
|
||||
$condition = ' ILIKE \'%'.$activeFilterValue.'%\'';
|
||||
break;
|
||||
case self::OP_NOT_CONTAIN:
|
||||
$condition = ' NOT ILIKE \'%'.$activeFilterValue.'%\'';
|
||||
break;
|
||||
case self::OP_IS_TRUE:
|
||||
$condition = ' IS TRUE';
|
||||
break;
|
||||
case self::OP_IS_FALSE:
|
||||
$condition = ' IS FALSE';
|
||||
break;
|
||||
}
|
||||
|
||||
$where .= $condition;
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT * FROM ('.$this->query.') tableFilters WHERE "Vorname" ILIKE \'%Oliver%\'';
|
||||
if ($where != '')
|
||||
{
|
||||
$query = 'SELECT * FROM ('.$this->query.') tableFilters WHERE '.$where;
|
||||
}
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private function _removeElementFromArray($array, $element)
|
||||
{
|
||||
$_removeElementFromArray = array();
|
||||
|
||||
for ($arrayCounter = 0; $arrayCounter < count($array); $arrayCounter++)
|
||||
{
|
||||
$arrayElement = $array[$arrayCounter];
|
||||
if ($arrayElement != $element)
|
||||
{
|
||||
$_removeElementFromArray[] = $arrayElement;
|
||||
}
|
||||
}
|
||||
|
||||
return $_removeElementFromArray;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user