Changed FilterWidget to be more responsive with Javascript

This commit is contained in:
Paolo
2018-02-27 18:37:16 +01:00
parent 75d1a60401
commit b8c1aae251
10 changed files with 1230 additions and 640 deletions
+382
View File
@@ -0,0 +1,382 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Filters extends VileSci_Controller
{
const SESSION_NAME = 'FILTER';
const SELECTED_FIELDS = 'selectedFields';
const SELECTED_FILTERS = 'selectedFilters';
const ACTIVE_FILTERS = 'activeFilters';
const ACTIVE_FILTERS_OPTION = 'activeFiltersOption';
const ACTIVE_FILTERS_OPERATION = 'activeFiltersOperation';
const FILTER_NAME = 'filterName';
public function __construct()
{
parent::__construct();
// Load session library
$this->load->library('session');
$this->load->model('system/Filters_model', 'FiltersModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
}
public function tableDataset()
{
$json = new stdClass();
$json->selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields'];
$json->columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases'];
$json->additionalColumns = $_SESSION[self::SESSION_NAME]['additionalColumns'];
$json->checkboxes = $_SESSION[self::SESSION_NAME]['checkboxes'];
$json->dataset = $_SESSION[self::SESSION_NAME]['dataset'];
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
public function selectFields()
{
$json = new stdClass();
$json->allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields'];
$json->allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases'];
$json->selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields'];
$json->columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases'];
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
public function selectFilters()
{
$json = new stdClass();
$json->allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields'];
$json->allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases'];
$json->selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters'];
$json->selectedFiltersAliases = array();
$json->selectedFiltersMetaData = array();
$json->selectedFiltersActiveFilters = array();
$json->selectedFiltersActiveFiltersOperation = array();
$json->selectedFiltersActiveFiltersOption = array();
$metaData = $_SESSION[self::SESSION_NAME]['metaData'];
$activeFilters = $_SESSION[self::SESSION_NAME]['activeFilters'];
$activeFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation'];
$activeFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption'];
for ($i = 0; $i < count($json->selectedFilters); $i++)
{
$pos = array_search($json->selectedFilters[$i], $json->allSelectedFields);
if ($pos !== false)
{
$json->selectedFiltersAliases[] = $json->allColumnsAliases[$pos];
$json->selectedFiltersMetaData[] = $metaData[$pos];
if (isset($activeFilters[$json->selectedFilters[$i]]))
{
$json->selectedFiltersActiveFilters[] = $activeFilters[$json->selectedFilters[$i]];
}
if (isset($activeFiltersOperation[$json->selectedFilters[$i]]))
{
$json->selectedFiltersActiveFiltersOperation[] = $activeFiltersOperation[$json->selectedFilters[$i]];
}
if (isset($activeFiltersOption[$json->selectedFilters[$i]]))
{
$json->selectedFiltersActiveFiltersOption[] = $activeFiltersOption[$json->selectedFilters[$i]];
}
}
}
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
public function saveFilter()
{
$this->_saveFilter($this->input->post("customFilterDescription"));
$this->output->set_content_type('application/json')->set_output(json_encode('Tutto bene!!!'));
}
/**
*
*/
private function _saveFilter($customFilterDescription)
{
$objToBeSaved = new stdClass();
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
$objToBeSaved->name = $customFilterDescription;
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]];
}
}
}
$desc = $customFilterDescription;
$descPGArray = '{"'.$desc.'", "'.$desc.'", "'.$desc.'", "'.$desc.'"}';
$resultBenutzer = $this->BenutzerModel->load(getAuthUID());
$personId = $resultBenutzer->retval[0]->person_id;
$result = $this->FiltersModel->loadWhere(array(
'app' => $_SESSION[self::SESSION_NAME]['app'],
'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'],
'description' => $descPGArray,
'person_id' => $personId
));
if (hasData($result))
{
$this->FiltersModel->update(
array(
'app' => $_SESSION[self::SESSION_NAME]['app'],
'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'],
'description' => $descPGArray,
'person_id' => $personId
),
array(
'filter' => json_encode($objToBeSaved)
)
);
}
else
{
$this->FiltersModel->insert(array(
'app' => $_SESSION[self::SESSION_NAME]['app'],
'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'],
'filter_kurzbz' => uniqid($personId, true),
'person_id' => $personId,
'description' => $descPGArray,
'sort' => null,
'default_filter' => false,
'filter' => json_encode($objToBeSaved),
'oe_kurzbz' => null
));
}
}
/**
*
*/
public function deleteCustomFilter()
{
$filter_id = $this->input->post('filter_id');
if (is_numeric($filter_id))
{
$this->FiltersModel->deleteCustomFilter($filter_id);
$this->output->set_content_type('application/json')->set_output(json_encode('Tutto bene!!!'));
}
}
/**
*
*/
public function removeSelectedFields()
{
$fieldName = $this->input->post('fieldName');
$allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields'];
$allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases'];
$selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields'];
$columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases'];
if (($pos = array_search($fieldName, $selectedFields)) !== false)
{
array_splice($selectedFields, $pos, 1);
array_splice($columnsAliases, $pos, 1);
}
$_SESSION[self::SESSION_NAME]['selectedFields'] = $selectedFields;
$_SESSION[self::SESSION_NAME]['columnsAliases'] = $columnsAliases;
$json = new stdClass();
$json->allSelectedFields = $allSelectedFields;
$json->allColumnsAliases = $allColumnsAliases;
$json->selectedFields = $selectedFields;
$json->columnsAliases = $columnsAliases;
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
/**
*
*/
public function removeSelectedFilters()
{
$fieldName = $this->input->post('fieldName');
$selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters'];
$selectedFiltersActiveFilters = $_SESSION[self::SESSION_NAME]['activeFilters'];
$selectedFiltersActiveFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation'];
$selectedFiltersActiveFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption'];
if (($pos = array_search($fieldName, $selectedFilters)) !== false)
{
array_splice($selectedFilters, $pos, 1);
array_splice($selectedFiltersActiveFilters, $pos, 1);
array_splice($selectedFiltersActiveFiltersOperation, $pos, 1);
array_splice($selectedFiltersActiveFiltersOption, $pos, 1);
}
$_SESSION[self::SESSION_NAME]['selectedFilters'] = $selectedFilters;
$_SESSION[self::SESSION_NAME]['activeFilters'] = $selectedFiltersActiveFilters;
$_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation;
$_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption;
$json = new stdClass();
$json->selectedFilters = $selectedFilters;
$json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters;
$json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation;
$json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption;
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
/**
*
*/
public function addSelectedFields()
{
$fieldName = $this->input->post('fieldName');
$allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields'];
$allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases'];
$selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields'];
$columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases'];
if (($pos = array_search($fieldName, $allSelectedFields)) !== false
&& array_search($fieldName, $selectedFields) === false)
{
array_push($selectedFields, $fieldName);
array_push($columnsAliases, $allColumnsAliases[$pos]);
}
$_SESSION[self::SESSION_NAME]['selectedFields'] = $selectedFields;
$_SESSION[self::SESSION_NAME]['columnsAliases'] = $columnsAliases;
$json = new stdClass();
$json->allSelectedFields = $allSelectedFields;
$json->allColumnsAliases = $allColumnsAliases;
$json->selectedFields = $selectedFields;
$json->columnsAliases = $columnsAliases;
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
/**
*
*/
public function addSelectedFilters()
{
$fieldName = $this->input->post('fieldName');
$selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters'];
$selectedFiltersActiveFilters = $_SESSION[self::SESSION_NAME]['activeFilters'];
$selectedFiltersActiveFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation'];
$selectedFiltersActiveFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption'];
if (!in_array($fieldName, $selectedFilters))
{
array_push($selectedFilters, $fieldName);
$selectedFiltersActiveFilters[$fieldName] = "";
$selectedFiltersActiveFiltersOperation[$fieldName] = "";
$selectedFiltersActiveFiltersOption[$fieldName] = "";
}
$_SESSION[self::SESSION_NAME]['selectedFilters'] = $selectedFilters;
$_SESSION[self::SESSION_NAME]['activeFilters'] = $selectedFiltersActiveFilters;
$_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation;
$_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption;
$json = new stdClass();
$json->selectedFilters = $selectedFilters;
$json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters;
$json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation;
$json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption;
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
/**
*
*/
public function applyFilter()
{
$fieldNames = $this->input->post('filterNames');
$filterOperations = $this->input->post('filterOperations');
$filterOperationValues = $this->input->post('filterOperationValues');
$filterOptions = $this->input->post('filterOptions');
$activeFilters = array_combine($fieldNames, $filterOperationValues);
$activeFiltersOperation = array_combine($fieldNames, $filterOperations);
$activeFiltersOption = array_combine($fieldNames, $filterOptions);
$_SESSION[self::SESSION_NAME]['activeFilters'] = $activeFilters;
$_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $activeFiltersOperation;
$_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $activeFiltersOption;
$json = new stdClass();
$json->fieldNames = $fieldNames;
$json->activeFilters = $activeFilters;
$json->activeFiltersOperation = $activeFiltersOperation;
$json->activeFiltersOption = $activeFiltersOption;
$this->output->set_content_type('application/json')->set_output(json_encode($json));
}
}
@@ -395,21 +395,6 @@ class InfoCenter extends VileSci_Controller
->_display();
}
/**
*
*/
public function deleteCustomFilter()
{
$filter_id = $this->input->get('filter_id');
if (is_numeric($filter_id))
{
$this->FiltersModel->deleteCustomFilter($filter_id);
redirect(self::URL_PREFIX);
}
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
@@ -530,8 +515,9 @@ class InfoCenter extends VileSci_Controller
$tofill['children'][] = array(
'link' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filter_id'), $filterId),
'description' => $description,
'subscriptLink' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter/deleteCustomFilter?filter_id'), $filterId),
'subscriptDescription' => 'Remove'
'subscriptDescription' => 'Remove',
'subscriptLinkId' => 'removeFilterById',
'subscriptLinkValue' => $filterId
);
}
}
@@ -101,58 +101,42 @@
',
'hideHeader' => false,
'hideSave' => false,
'checkboxes' => array('PersonId'),
'checkboxes' => 'PersonId',
'columnsAliases' => array('Person ID', 'Name', 'Surname', 'Birthday', 'Last Action', 'User - Operator', 'Studien semester', 'Send Date', 'Number sent', 'Lock Date'),
'additionalColumns' => array('Details'),
'formatRaw' => function($fieldName, $fieldValue, $datasetRaw) {
'formatRaw' => function($datasetRaw) {
if ($fieldName == 'Details')
$datasetRaw->{'Details'} = sprintf(
'<a href="%s%s">Details</a>',
base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'),
$datasetRaw->{'PersonId'}
);
if ($datasetRaw->{'SendDate'} == null)
{
$link = '<a href="%s%s">Details</a>';
$datasetRaw->{$fieldName} = sprintf(
$link,
base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'),
$datasetRaw->PersonId
);
$datasetRaw->{'SendDate'} = 'Not sent';
}
if ($fieldName == 'SendDate')
if ($datasetRaw->{'LastAction'} == null)
{
if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00')
{
$datasetRaw->{$fieldName} = 'Not sent';
}
$datasetRaw->{'LastAction'} = 'Not logged';
}
if ($fieldName == 'LastAction')
if ($datasetRaw->{'User/Operator'} == '')
{
if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00')
{
$datasetRaw->{$fieldName} = 'Not logged';
}
$datasetRaw->{'User/Operator'} = 'NA';
}
if ($fieldName == 'User/Operator')
if ($datasetRaw->{'LockDate'} == null)
{
if ($datasetRaw->{$fieldName} == '')
{
$datasetRaw->{$fieldName} = 'NA';
}
}
if ($fieldName == 'LockDate')
{
if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00')
{
$datasetRaw->{$fieldName} = 'Not locked';
}
$datasetRaw->{'LockDate'} = 'Not locked';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
if ($datasetRaw->LockDate != '')
if ($datasetRaw->LockDate != null)
{
return FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
+38 -121
View File
@@ -61,102 +61,21 @@
$(document).ready(function() {
$(".filter-select-field-dnd-span").draggable({
containment: "parent",
cursor: "move",
opacity: 0.4,
revert: "invalid",
revertDuration: 200
});
$(".filter-select-field-dnd-span").droppable({
accept: ".filter-select-field-dnd-span",
over: function(event, ui) {
$(this).on("mousemove", function( event ) {
var padding = 20;
var elementCenter = $(this).offset().left + (padding + $(this).width() / 2);
console.log(elementCenter);
console.log(event.pageX);
if (event.pageX > elementCenter)
{
$(this).addClass("selection-after");
$(this).removeClass("selection-before");
}
else if (event.pageX < elementCenter)
{
$(this).addClass("selection-before");
$(this).removeClass("selection-after");
}
});
},
out: function(event, ui) {
$(this).off("mousemove");
$(this).removeClass("selection-before");
$(this).removeClass("selection-after");
},
drop: function(event, ui) {
var padding = 20;
var elementCenter = $(this).offset().left + (padding + $(this).width() / 2);
if (event.pageX > elementCenter)
{
$(this).insertBefore(ui.draggable);
$("#removeFilterById").click(function() {
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/deleteCustomFilter'); ?>",
method: "POST",
data: {
filter_id: $(this).attr('value')
}
else if (event.pageX < elementCenter)
{
$(this).insertAfter(ui.draggable);
}
$(this).off("mousemove");
$(this).removeClass("selection-before");
$(this).removeClass("selection-after");
}
});
$("#addField").change(function() {
$("#filterForm").submit();
});
$(".remove-field").each(function() {
$(this).click(function() {
$("#rmField").val($(this).attr('fieldToRemove'));
$("#filterForm").submit();
})
.done(function(data, textStatus, jqXHR) {
alert("Filter successfully removed");
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
});
$("#addFilter").change(function() {
$("#filterForm").submit();
});
$(".remove-filter").each(function() {
$(this).click(function() {
$("#rmFilter").val($(this).attr('filterToRemove'));
$("#filterForm").submit();
});
});
$(".select-filter-operation").change(function() {
$("#filterForm").submit();
});
$(".select-filter-operation-value").keydown(function(event) {
if (event.which == 13)
{
$("#filterForm").submit();
}
});
$("#saveCustomFilterButton").click(function() {
$("#saveCustomFilter").val(true);
$("#filterForm").submit();
});
$("#applyFilter").click(function() {
$("#filterForm").submit();
});
$("[data-toggle='collapse']").click(function() {
var filterOptionsStatus = sessionStorage.getItem('filter-options-status');
@@ -182,49 +101,47 @@
</script>
<div class="row">
<div class="col-lg-12">
<form class="form-inline" id="filterForm" method="POST" action="<?php echo current_url(); ?>">
<?php FilterWidget::displayFilterName(); ?>
<?php FilterWidget::displayFilterName(); ?>
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#collapseFilterHeader">Filter options</a>
</h4>
</div>
<div id="collapseFilterHeader" class="panel-collapse collapse">
<div class="filters-hidden-panel">
<div>
<?php FilterWidget::loadViewSelectFields($listFields); ?>
</div>
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#collapseFilterHeader">Filter options</a>
</h4>
</div>
<div id="collapseFilterHeader" class="panel-collapse collapse">
<div class="filters-hidden-panel">
<div>
<?php FilterWidget::loadViewSelectFields(); ?>
</div>
<br>
<br>
<div>
<?php FilterWidget::loadViewSelectFilters($metaData); ?>
</div>
<div>
<?php FilterWidget::loadViewSelectFilters(); ?>
</div>
<br>
<br>
<div>
<?php FilterWidget::loadViewSaveFilter(); ?>
</div>
<div>
<?php FilterWidget::loadViewSaveFilter(); ?>
</div>
</div>
</div>
</div>
</div>
<br>
<br>
<div id="datasetActionsTop"></div>
<div id="datasetActionsTop"></div>
<div>
<?php FilterWidget::loadViewTableDataset($dataset); ?>
</div>
<div>
<?php FilterWidget::loadViewTableDataset(); ?>
</div>
<div id="datasetActionsBottom"></div>
<div id="datasetActionsBottom"></div>
</form>
</div>
</div>
@@ -1,7 +1,36 @@
<script language="Javascript" type="text/javascript">
$(document).ready(function() {
$("#saveCustomFilterButton").click(function() {
if ($("#customFilterDescription").val() != '')
{
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/saveFilter'); ?>",
method: "POST",
data: {
customFilterDescription: $("#customFilterDescription").val()
}
})
.done(function(data, textStatus, jqXHR) {
alert("Filter successfully saved");
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
}
else
{
alert("You forgot something!");
}
});
});
</script>
<div>
Filter description: <input type="text" id="customFilterDescription" name="customFilterDescription" value="">
Filter description: <input type="text" id="customFilterDescription" value="" class="">
</div>
<div>
<input type="button" id="saveCustomFilterButton" value="Save filter">
<input type="hidden" id="saveCustomFilter" name="saveCustomFilter" value="false">
</div>
+178 -42
View File
@@ -1,54 +1,190 @@
<div id="filterSelectFieldsDnd" class="filter-select-fields-dnd-div">
<?php
$selectedFields = FilterWidget::getSelectedFields();
$columnsAliases = FilterWidget::getColumnsAliases();
<script language="Javascript" type="text/javascript">
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
{
$selectedField = $selectedFields[$selectedFieldsCounter];
$selectedFieldAlias = $selectedField;
function dndSF()
{
$(".filter-select-field-dnd-span").draggable({
containment: "parent",
cursor: "move",
opacity: 0.4,
revert: "invalid",
revertDuration: 200
});
if ($columnsAliases != null)
{
$indx = array_search($selectedField, $listFields);
if ($indx !== false)
$(".filter-select-field-dnd-span").droppable({
accept: ".filter-select-field-dnd-span",
over: function(event, ui) {
$(this).on("mousemove", function( event ) {
var padding = 20;
var elementCenter = $(this).offset().left + (padding + $(this).width() / 2);
if (event.pageX > elementCenter)
{
$(this).addClass("selection-after");
$(this).removeClass("selection-before");
}
else if (event.pageX < elementCenter)
{
$(this).addClass("selection-before");
$(this).removeClass("selection-after");
}
});
},
out: function(event, ui) {
$(this).off("mousemove");
$(this).removeClass("selection-before");
$(this).removeClass("selection-after");
},
drop: function(event, ui) {
var padding = 20;
var elementCenter = $(this).offset().left + (padding + $(this).width() / 2);
if (event.pageX > elementCenter)
{
$selectedFieldAlias = $columnsAliases[$indx];
$(this).insertBefore(ui.draggable);
}
else if (event.pageX < elementCenter)
{
$(this).insertAfter(ui.draggable);
}
$(this).off("mousemove");
$(this).removeClass("selection-before");
$(this).removeClass("selection-after");
}
});
}
function resetEventsSF()
{
$("#addField").off('change');
$(".remove-field").off('click');
}
function addEventsSF()
{
$("#addField").change(function(event) {
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/addSelectedFields'); ?>",
method: "POST",
data: {
fieldName: $(this).val()
}
})
.done(function(data, textStatus, jqXHR) {
resetSelectedFields();
renderSelectedFields();
renderTableDataset();
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
});
$(".remove-field").click(function(event) {
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/removeSelectedFields'); ?>",
method: "POST",
data: {
fieldName: $(this).attr('fieldToRemove')
}
})
.done(function(data, textStatus, jqXHR) {
resetSelectedFields();
renderSelectedFields();
renderTableDataset();
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
});
}
function renderSelectedFields()
{
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/selectFields'); ?>",
method: "GET",
data: {},
dataType: "json"
})
.done(function(data, textStatus, jqXHR) {
resetEventsSF();
if (data != null)
{
var arrayFieldsToDisplay = [];
if (data.columnsAliases != null && $.isArray(data.columnsAliases))
{
arrayFieldsToDisplay = data.columnsAliases;
}
else if (data.selectedFields != null && $.isArray(data.selectedFields))
{
arrayFieldsToDisplay = data.selectedFields;
}
for (var i = 0; i < arrayFieldsToDisplay.length; i++)
{
var fieldToDisplay = arrayFieldsToDisplay[i];
var fieldName = data.selectedFields[i];
var strHtml = '<span class="filter-select-field-dnd-span">';
strHtml += fieldToDisplay;
strHtml += '<a class="remove-field" fieldToRemove="' + fieldName + '">X</a>';
strHtml += '</span>';
$("#filterSelectFieldsDnd").append(strHtml);
}
var strDropDown = '<option value="">Select a field to add..</option>';
$("#addField").append(strDropDown);
for (var i = 0; i < data.allSelectedFields.length; i++)
{
var fieldName = data.allSelectedFields[i];
var fieldToDisplay = data.allColumnsAliases[i];
strDropDown = '<option value="' + fieldName + '">' + fieldToDisplay + '</option>';
$("#addField").append(strDropDown);
}
}
?>
<span class="filter-select-field-dnd-span">
<?php echo $selectedFieldAlias; ?>
<a class="remove-field" fieldToRemove="<?php echo $selectedField; ?>">X</a>
<input type="hidden" name="<?php echo $selectedField; ?>" value="<?php echo $selectedField; ?>">
</span>
<?php
}
?>
</div>
<input type="hidden" id="<?php echo FilterWidget::CMD_REMOVE_FIELD; ?>" name="<?php echo FilterWidget::CMD_REMOVE_FIELD; ?>" value="">
dndSF();
addEventsSF();
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
}
function resetSelectedFields()
{
$("#filterSelectFieldsDnd").html("");
$("#addField").html("");
}
$(document).ready(function() {
renderSelectedFields();
});
</script>
<div id="filterSelectFieldsDnd" class="filter-select-fields-dnd-div"></div>
<div>
<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
for ($listFieldsCounter = 0; $listFieldsCounter < count($listFields); $listFieldsCounter++)
{
$listField = $listFields[$listFieldsCounter];
$listFieldAlias = $listField;
if ($columnsAliases != null)
{
$listFieldAlias = $columnsAliases[$listFieldsCounter];
}
?>
<option value="<?php echo $listField; ?>"><?php echo $listFieldAlias; ?></option>
<?php
}
?>
</select>
<select id="addField" class=""></select>
</span>
</div>
@@ -1,69 +1,285 @@
<div>
<?php
$selectedFilters = FilterWidget::getSelectedFilters();
$columnsAliases = FilterWidget::getColumnsAliases();
<script language="Javascript" type="text/javascript">
for ($filtersCounter = 0; $filtersCounter < count($selectedFilters); $filtersCounter++)
function resetEventsSFilters()
{
$("#addFilter").off('change');
}
function addEventsSFilters()
{
$("#addFilter").change(function(event) {
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/addSelectedFilters'); ?>",
method: "POST",
data: {
fieldName: $(this).val()
}
})
.done(function(data, textStatus, jqXHR) {
resetSelectedFilters();
renderSelectedFilters();
renderTableDataset();
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
});
$(".remove-filter").click(function(event) {
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/removeSelectedFilters'); ?>",
method: "POST",
data: {
fieldName: $(this).attr('filterToRemove')
}
})
.done(function(data, textStatus, jqXHR) {
resetSelectedFilters();
renderSelectedFilters();
renderTableDataset();
}).fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
});
$(".select-filter-operation").change(function() {
if ($(this).val() == "set" || $(this).val() == "nset")
{
$(this).parent().parent().find(".select-filter-operation-value").addClass("hidden-control");
$(this).parent().parent().find(".select-filter-option").addClass("hidden-control");
$(this).parent().parent().find(".select-filter-operation-value").prop('disabled', true);
$(this).parent().parent().find(".select-filter-option").prop('disabled', true);
}
else
{
$(this).parent().parent().find(".select-filter-operation-value").removeClass("hidden-control");
$(this).parent().parent().find(".select-filter-option").removeClass("hidden-control");
$(this).parent().parent().find(".select-filter-operation-value").prop('disabled', false);
$(this).parent().parent().find(".select-filter-option").prop('disabled', false);
}
});
$("#applyFilter").click(function() {
var selectFilterName = [];
var selectFilterOperation = [];
var selectFilterOperationValue = [];
var selectFilterOption = [];
$("#selectedFilters > div").each(function(i, e) {
var tmpSelectFilterName = $(this).find('.hidden-field-name').val();
var tmpSelectFilterOperation = $(this).find('.select-filter-operation').val();
var tmpSelectFilterOperationValue = $(this).find('.select-filter-operation-value:enabled').val();
var tmpSelectFilterOption = $(this).find('.select-filter-option:enabled').val();
selectFilterName.push(tmpSelectFilterName);
selectFilterOperation.push(tmpSelectFilterOperation);
selectFilterOperationValue.push(tmpSelectFilterOperationValue != null ? tmpSelectFilterOperationValue : "");
selectFilterOption.push(tmpSelectFilterOption != null ? tmpSelectFilterOption : "");
});
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/applyFilter'); ?>",
method: "POST",
data: {
filterNames: selectFilterName,
filterOperations: selectFilterOperation,
filterOperationValues: selectFilterOperationValue,
filterOptions: selectFilterOption
}
})
.done(function(data, textStatus, jqXHR) {
// Success
}).fail(function(jqXHR, textStatus, errorThrown) {
// Error
}).always(function() {
location.reload();
});
});
}
function renderSelectedFilterFields(metaData, activeFilters, activeFiltersOperation, activeFiltersOption)
{
var html = '';
if (metaData.type.toLowerCase().indexOf("int") >= 0)
{
$selectedFilter = $selectedFilters[$filtersCounter];
$md = FilterWidget::getFilterMetaData($selectedFilter, $metaData);
$selectedFieldAlias = $md->name;
if ($columnsAliases != null)
{
$indx = array_search($selectedFilter, $listFields);
if ($indx !== false)
{
$selectedFieldAlias = $columnsAliases[$indx];
}
}
?>
<div>
<span>
<?php echo $selectedFieldAlias; ?>
</span>
<?php echo FilterWidget::renderFilterType($md); ?>
<span>
<input type="button" value="X" class="remove-filter" filterToRemove="<?php echo $md->name; ?>">
</span>
</div>
<?php
html = '<span>';
html += ' <select class="select-filter-operation">';
html += ' <option value="equal" ' + (activeFiltersOperation == "equal" ? "selected" : "") + '>equal</option>';
html += ' <option value="nequal" ' + (activeFiltersOperation == "nqual" ? "selected" : "") + '>not equal</option>';
html += ' <option value="gt" ' + (activeFiltersOperation == "gt" ? "selected" : "") + '>greater than</option>';
html += ' <option value="lt" ' + (activeFiltersOperation == "lt" ? "selected" : "") + '>less than</option>';
html += ' </select>';
html += '</span>';
html += '<span>';
html += ' <input type="number" value="' + activeFilters + '" class="select-filter-operation-value">';
html += '</span>';
}
?>
<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="<?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++)
if (metaData.type.toLowerCase().indexOf('varchar') >= 0)
{
html = '<span>';
html += ' <select class="select-filter-operation">';
html += ' <option value="contains" ' + (activeFiltersOperation == "contains" ? "selected" : "") + '>contains</option>';
html += ' <option value="ncontains" ' + (activeFiltersOperation == "ncontains" ? "selected" : "") + '>does not contain</option>';
html += ' </select>';
html += '</span>';
html += '<span>';
html += ' <input type="text" value="' + activeFilters + '" class="select-filter-operation-value">';
html += '</span>';
}
if (metaData.type.toLowerCase().indexOf('bool') >= 0)
{
html = '<span>';
html += ' <select class="select-filter-operation">';
html += ' <option value="true" ' + (activeFiltersOperation == "true" ? "selected" : "") + '>is true</option>';
html += ' <option value="false" ' + (activeFiltersOperation == "false" ? "selected" : "") + '>is false</option>';
html += ' </select>';
html += '</span>';
html += '<span>';
html += ' <input type="hidden" value="' + activeFilters + '" class="select-filter-operation-value">';
html += '</span>';
}
if (metaData.type.toLowerCase().indexOf('timestamp') >= 0 || metaData.type.toLowerCase().indexOf('date') >= 0)
{
var classOperation = 'select-filter-operation-value';
var classOption = 'select-filter-option';
var disabled = "";
if (activeFiltersOperation == "set" || activeFiltersOperation == "nset")
{
$field = $listFields[$listFieldsCounter];
$listFieldAlias = $field;
if ($columnsAliases != null)
{
$listFieldAlias = $columnsAliases[$listFieldsCounter];
}
?>
<option value="<?php echo $field; ?>"><?php echo $listFieldAlias; ?></option>
<?php
classOperation += ' hidden-control';
classOption += ' hidden-control';
disabled = "disabled";
}
?>
</select>
</span>
<span>
<input id="applyFilter" name="applyFilter" type="button" value="Apply">
</span>
</div>
html = '<span>';
html += ' <select class="select-filter-operation">';
html += ' <option value="lt" ' + (activeFiltersOperation == "lt" ? "selected" : "") + '>less than</option>';
html += ' <option value="gt" ' + (activeFiltersOperation == "gt" ? "selected" : "") + '>greater than</option>';
html += ' <option value="set" ' + (activeFiltersOperation == "set" ? "selected" : "") + '>is set</option>';
html += ' <option value="nset" ' + (activeFiltersOperation == "nset" ? "selected" : "") + '>is not set</option>';
html += ' </select>';
html += '</span>';
html += '<span>';
html += ' <input type="text" value="' + activeFilters + '" class="' + classOperation + '" ' + disabled + '>';
html += '</span>';
html += '<span>';
html += ' <select class="' + classOption + '" ' + disabled + '>';
html += ' <option value="days" ' + (activeFiltersOption == "days" ? "selected" : "") + '>Days</option>';
html += ' <option value="months" ' + (activeFiltersOption == "months" ? "selected" : "") + '>Months</option>';
html += ' </select>';
html += '</span>';
}
html += '<span>';
html += ' <input type="hidden" value="' + metaData.name + '" class="hidden-field-name">';
html += '</span>';
return html;
}
function renderSelectedFilters()
{
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/selectFilters'); ?>",
method: "GET",
data: {},
dataType: "json"
})
.done(function(data, textStatus, jqXHR) {
resetEventsSFilters();
if (data != null)
{
var strDropDown = '<option value="">Select a filter to add..</option>';
$("#addFilter").append(strDropDown);
for (var i = 0; i < data.allSelectedFields.length; i++)
{
var fieldName = data.allSelectedFields[i];
var fieldToDisplay = data.allColumnsAliases[i];
strDropDown = '<option value="' + fieldName + '">' + fieldToDisplay + '</option>';
$("#addFilter").append(strDropDown);
}
for (var i = 0; i < data.selectedFilters.length; i++)
{
var selectedFilters = '<div>';
selectedFilters += '<span>';
selectedFilters += data.selectedFiltersAliases[i];
selectedFilters += '</span>';
selectedFilters += renderSelectedFilterFields(
data.selectedFiltersMetaData[i],
data.selectedFiltersActiveFilters[i],
data.selectedFiltersActiveFiltersOperation[i],
data.selectedFiltersActiveFiltersOption[i]
);
selectedFilters += '<span>';
selectedFilters += '<input type="button" value="X" class="remove-filter" filterToRemove="' + data.selectedFilters[i] + '">';
selectedFilters += '</span>';
selectedFilters += '</div>';
$("#selectedFilters").append(selectedFilters);
}
}
addEventsSFilters();
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
}
function resetSelectedFilters()
{
$("#addFilter").html("");
$("#selectedFilters").html("");
}
$(document).ready(function() {
renderSelectedFilters();
});
</script>
<div id="selectedFilters"></div>
<div>
<span>
Add filter:
</span>
<span>
<select id="addFilter" class=""></select>
</span>
<span>
<input id="applyFilter" type="button" value="Apply">
</span>
</div>
+149 -97
View File
@@ -1,104 +1,156 @@
<?php
$results = $dataset->retval;
<script language="Javascript" type="text/javascript">
$selectedFields = FilterWidget::getSelectedFields();
$additionalColumns = FilterWidget::getAdditionalColumns();
$checkboxes = FilterWidget::getCheckboxes();
$columnsAliases = FilterWidget::getColumnsAliases();
?>
function callTableSorter()
{
// Checks if the table contains data (rows)
if ($('#filterTableDataset').find('tbody:empty').length == 0
&& $('#filterTableDataset').find('tr:empty').length == 0
&& $('#filterTableDataset').hasClass('table-condensed'))
{
$("#filterTableDataset").tablesorter({
widgets: ["zebra", "filter"]
});
var config = $('#filterTableDataset')[0].config;
$.tablesorter.updateAll(config, true, null);
}
}
function renderTableDataset()
{
$.ajax({
url: "<?php echo base_url('index.ci.php/system/Filters/tableDataset'); ?>",
method: "GET",
data: {},
dataType: "json"
})
.done(function(data, textStatus, jqXHR) {
resetTableDataset();
if (data != null)
{
if (data.checkboxes != null)
{
$("#filterTableDataset > thead > tr").append("<th title=\"Select\">Select</th>");
}
var arrayFieldsToDisplay = [];
if (data.columnsAliases != null && $.isArray(data.columnsAliases) && data.columnsAliases.length > 0)
{
arrayFieldsToDisplay = data.columnsAliases;
}
else if (data.selectedFields != null && $.isArray(data.selectedFields))
{
arrayFieldsToDisplay = data.selectedFields;
}
/* ------------------------------------------------------------------------------------------------ */
if (data.checkboxes != null && data.checkboxes != "")
{
$("#filterTableDataset > thead > tr").html("<th title=\"Select\">Select</th>");
}
for (var i = 0; i < arrayFieldsToDisplay.length; i++)
{
var th = arrayFieldsToDisplay[i];
$("#filterTableDataset > thead > tr").append("<th title=\"" + th + "\">" + th + "</th>");
}
if (data.additionalColumns != null && $.isArray(data.additionalColumns))
{
for (var i = 0; i < data.additionalColumns.length; i++)
{
var th = data.additionalColumns[i];
$("#filterTableDataset > thead > tr").append("<th title=\"" + th + "\">" + th + "</th>");
}
}
/* ------------------------------------------------------------------------------------------------ */
if (arrayFieldsToDisplay.length > 0)
{
if (data.dataset != null && $.isArray(data.dataset))
{
for (var i = 0; i < data.dataset.length; i++)
{
var record = data.dataset[i];
var strHtml = '<tr class="' + record.FILTER_CLASS_MARK_ROW + '">';
if (data.checkboxes != null && data.checkboxes != "")
{
strHtml += '<td>';
strHtml += '<input type="checkbox" name="' + data.checkboxes + '[]" value="' + record[data.checkboxes] + '">';
strHtml += '</td>';
}
$.each(arrayFieldsToDisplay, function(i, fieldToDisplay) {
if (record.hasOwnProperty(data.selectedFields[i]))
{
strHtml += '<td>' + record[data.selectedFields[i]] + '</td>';
}
});
if (data.additionalColumns != null && $.isArray(data.additionalColumns))
{
$.each(data.additionalColumns, function(i, additionalColumn) {
if (record.hasOwnProperty(additionalColumn))
{
strHtml += '<td>' + record[additionalColumn] + '</td>';
}
});
}
strHtml += '</tr>';
$("#filterTableDataset > tbody").append(strHtml);
}
}
else
{
// console.log("No dataset!!!");
}
}
else
{
console.log("No fields to display!!!");
}
}
else
{
console.log("No data!!!");
}
callTableSorter();
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
}
function resetTableDataset()
{
$("#filterTableDataset > thead > tr").html("");
$("#filterTableDataset > tbody").html("");
}
$(document).ready(function() {
renderTableDataset();
});
</script>
<div>
<table class="tablesorter" id="tableDataset">
<table class="tablesorter table-bordered table-responsive" id="filterTableDataset">
<thead>
<tr>
<?php
if ($checkboxes != null)
{
?>
<th title="Select">Select</th>
<?php
}
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
{
$selectedField = $selectedFields[$selectedFieldsCounter];
$selectedFieldAlias = $selectedField;
if ($columnsAliases != null)
{
$indx = array_search($selectedField, $listFields);
if ($indx !== false)
{
$selectedFieldAlias = $columnsAliases[$indx];
}
}
?>
<th title="<?php echo $selectedField; ?>"><?php echo $selectedFieldAlias; ?></th>
<?php
}
?>
<?php
for ($additionalColumnsCounter = 0; $additionalColumnsCounter < count($additionalColumns); $additionalColumnsCounter++)
{
$additionalColumn = $additionalColumns[$additionalColumnsCounter];
?>
<th title="<?php echo $additionalColumn; ?>"><?php echo $additionalColumn; ?></th>
<?php
}
?>
</tr>
<tr></tr>
</thead>
<tbody>
<?php
for ($resultsCounter = 0; $resultsCounter < count($results); $resultsCounter++)
{
$result = $results[$resultsCounter];
?>
<tr class="<?php echo FilterWidget::markRow($result); ?>">
<?php
if ($checkboxes != null)
{
?>
<td>
<input type="checkbox" name="<?php echo $checkboxes[0]; ?>[]" value="<?php echo $result->{$checkboxes[0]}; ?>">
</td>
<?php
}
for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++)
{
$selectedField = $selectedFields[$selectedFieldsCounter];
if (array_key_exists($selectedField, $result))
{
$formattedResult = FilterWidget::formatRaw($selectedField, $result->{$selectedField}, $result);
?>
<td>
<?php
echo $formattedResult->{$selectedField};
?>
</td>
<?php
}
}
for ($additionalColumnsCounter = 0; $additionalColumnsCounter < count($additionalColumns); $additionalColumnsCounter++)
{
$additionalColumn = $additionalColumns[$additionalColumnsCounter];
$formattedResult = FilterWidget::formatRaw($additionalColumn, null, $result);
?>
<td>
<?php
echo $formattedResult->{$additionalColumn};
?>
</td>
<?php
}
?>
</tr>
<?php
}
?>
</tbody>
<tbody></tbody>
</table>
</div>
+148 -260
View File
@@ -31,6 +31,9 @@ class FilterWidget extends Widget
const SESSION_NAME = 'FILTER';
const ALL_SELECTED_FIELDS = 'allSelectedFields';
const ALL_COLUMNS_ALIASES = 'allColumnsAliases';
const SELECTED_FIELDS = 'selectedFields';
const SELECTED_FILTERS = 'selectedFilters';
const ACTIVE_FILTERS = 'activeFilters';
@@ -130,9 +133,6 @@ class FilterWidget extends Widget
//
$this->_setSessionFilterData();
//
$this->_saveFilter();
//
$this->FiltersModel->resetQuery();
@@ -142,8 +142,8 @@ class FilterWidget extends Widget
//
$this->listFields = $this->FiltersModel->getExecutedQueryListFields();
//
$selectedFields = array();
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
if (isset($filterSessionArray[self::SELECTED_FIELDS]))
{
@@ -154,7 +154,6 @@ class FilterWidget extends Widget
if (count($selectedFields) == 0)
{
$filterSessionArray[self::SELECTED_FIELDS] = $this->listFields;
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
}
//
@@ -163,21 +162,54 @@ class FilterWidget extends Widget
show_error('Parameter columnsAliases does not have a number of items equal to those returned by the query');
}
$filterSessionArray[self::COLUMNS_ALIASES] = $this->_getColumnAliasesFromPost();
$filterSessionArray[self::CHECKBOXES] = $this->checkboxes;
if ($this->app != null)
{
$filterSessionArray[self::APP_PARAMETER] = $this->app;
}
if ($this->datasetName != null)
{
$filterSessionArray[self::DATASET_NAME_PARAMETER] = $this->datasetName;
}
$filterSessionArray[self::ALL_SELECTED_FIELDS] = $this->listFields;
$filterSessionArray[self::ALL_COLUMNS_ALIASES] = $this->columnsAliases;
/* ------------------------------------------------------------ */
$tmpDataset = null;
if (hasData($this->dataset))
{
$tmpDataset = array();
for ($resultsCounter = 0; $resultsCounter < count($this->dataset->retval); $resultsCounter++)
{
$result = $this->dataset->retval[$resultsCounter];
$class = $this->_markRow($result);
$formattedResult = $this->_formatRaw($result);
$formattedResult->FILTER_CLASS_MARK_ROW = $class;
$tmpDataset[] = $formattedResult;
}
}
$filterSessionArray[self::DATASET_PARAMETER] = $tmpDataset;
/* ------------------------------------------------------------ */
//
$this->metaData = $this->FiltersModel->getExecutedQueryMetaData();
$filterSessionArray[self::METADATA_PARAMETER] = $this->metaData;
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
//
$this->loadViewFilters();
}
/**
*
*/
public static function getSelectedFields()
{
return self::_getFromSession(self::SELECTED_FIELDS);
}
/**
*
*/
@@ -186,14 +218,6 @@ class FilterWidget extends Widget
return self::_getFromSession(self::SELECTED_FILTERS);
}
/**
*
*/
public static function getAdditionalColumns()
{
return self::_getFromSession(self::ADDITIONAL_COLUMNS);
}
/**
*
*/
@@ -209,12 +233,7 @@ class FilterWidget extends Widget
{
if (self::$FilterWidgetInstance->hideHeader != true)
{
self::_loadView(
self::WIDGET_URL_SELECT_FIELDS,
array(
self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields
)
);
self::_loadView(self::WIDGET_URL_SELECT_FIELDS);
}
}
@@ -225,13 +244,7 @@ class FilterWidget extends Widget
{
if (self::$FilterWidgetInstance->hideHeader != true)
{
self::_loadView(
self::WIDGET_URL_SELECT_FILTERS,
array(
self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields,
self::METADATA_PARAMETER => self::$FilterWidgetInstance->metaData
)
);
self::_loadView(self::WIDGET_URL_SELECT_FILTERS);
}
}
@@ -251,147 +264,32 @@ class FilterWidget extends Widget
*/
public static function loadViewTableDataset()
{
self::_loadView(
self::WIDGET_URL_TABLE_DATASET,
array(
self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields,
self::DATASET_PARAMETER => self::$FilterWidgetInstance->dataset
)
);
self::_loadView(self::WIDGET_URL_TABLE_DATASET);
}
/**
*
*/
public static function getFilterMetaData($filter, $metaData)
private function _formatRaw($datasetRaw)
{
$md = null;
$tmpDatasetRaw = clone $datasetRaw;
for ($metaDataCounter = 0; $metaDataCounter < count($metaData); $metaDataCounter++)
foreach ($tmpDatasetRaw as $columnName => $columnValue)
{
if ($metaData[$metaDataCounter]->name == $filter)
if (is_bool($columnValue))
{
$md = $metaData[$metaDataCounter];
break;
$tmpDatasetRaw->{$columnValue} = $columnValue === true ? 'true' : 'false';
}
elseif (DateTime::createFromFormat('Y-m-d G:i:s', $columnValue) !== false)
{
$tmpDatasetRaw->{$columnValue} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue));
}
}
return $md;
}
/**
*
*/
public static function renderFilterType($filterMetaData)
{
$html = '';
$activeFilterValue = self::_getActiveFilterValue($filterMetaData->name);
$activeFilterOperationValue = self::_getActiveFilterOperationValue($filterMetaData->name);
$activeFilterOptionValue = self::_getActiveFilterOptionValue($filterMetaData->name);
if ($filterMetaData->type == 'int4')
if ($this->formatRaw != null)
{
$html = '
<span>
<select name="%s" class="select-filter-operation">
<option value="'.self::OP_EQUAL.'" '.($activeFilterOperationValue == self::OP_EQUAL ? 'selected' : '').'>equal</option>
<option value="'.self::OP_NOT_EQUAL.'" '.($activeFilterOperationValue == self::OP_NOT_EQUAL ? 'selected' : '').'>not equal</option>
<option value="'.self::OP_GREATER_THAN.'" '.($activeFilterOperationValue == self::OP_GREATER_THAN ? 'selected' : '').'>greater than</option>
<option value="'.self::OP_LESS_THAN.'" '.($activeFilterOperationValue == self::OP_LESS_THAN ? 'selected' : '').'>less than</option>
</select>
</span>
<span>
<input type="number" name="%s" value="%s" class="select-filter-operation-value">
</span>
';
}
elseif ($filterMetaData->type == 'varchar')
{
$html = '
<span>
<select name="%s" class="select-filter-operation">
<option value="'.self::OP_CONTAINS.'" '.($activeFilterOperationValue == self::OP_CONTAINS ? 'selected' : '').'>contains</option>
<option value="'.self::OP_NOT_CONTAINS.'" '.($activeFilterOperationValue == self::OP_NOT_CONTAINS ? 'selected' : '').'>does not contain</option>
</select>
</span>
<span>
<input type="text" name="%s" value="%s" class="select-filter-operation-value">
</span>
';
}
elseif ($filterMetaData->type == 'bool')
{
$html = '
<span>
<select name="%s" class="select-filter-operation">
<option value="'.self::OP_IS_TRUE.'" '.($activeFilterOperationValue == self::OP_IS_TRUE ? 'selected' : '').'>is true</option>
<option value="'.self::OP_IS_FALSE.'" '.($activeFilterOperationValue == self::OP_IS_FALSE ? 'selected' : '').'>is false</option>
</select>
</span>
<span>
<input type="hidden" name="%s" value="%s">
</span>
';
}
elseif ($filterMetaData->type == 'timestamp')
{
$classOperation = 'select-filter-operation-value';
$classOption = 'select-filter-option';
if ($activeFilterOperationValue == self::OP_SET)
{
$classOperation .= ' hidden-control';
$classOption .= ' hidden-control';
}
$html = '
<span>
<select name="%s" class="select-filter-operation">
<option value="'.self::OP_LESS_THAN.'" '.($activeFilterOperationValue == self::OP_LESS_THAN ? 'selected' : '').'>less than</option>
<option value="'.self::OP_GREATER_THAN.'" '.($activeFilterOperationValue == self::OP_GREATER_THAN ? 'selected' : '').'>greater than</option>
<option value="'.self::OP_SET.'" '.($activeFilterOperationValue == self::OP_SET ? 'selected' : '').'>is set</option>
<option value="'.self::OP_NOT_SET.'" '.($activeFilterOperationValue == self::OP_NOT_SET ? 'selected' : '').'>is not set</option>
</select>
</span>
<span>
<input type="text" name="%s" value="%s" class="'.$classOperation.'">
</span>
<select name="%s" class="'.$classOption.'">
<option value="'.self::OPT_DAYS.'" '.($activeFilterOptionValue == self::OPT_DAYS ? 'selected' : '').'>Days</option>
<option value="'.self::OPT_MONTHS.'" '.($activeFilterOptionValue == self::OPT_MONTHS ? 'selected' : '').'>Months</option>
</select>
';
}
return sprintf($html, $filterMetaData->name.'-operation', $filterMetaData->name, $activeFilterValue, $filterMetaData->name.'-option');
}
/**
*
*/
public static function formatRaw($fieldName, $fieldValue, $datasetRaw)
{
$tmpDatasetRaw = null;
if (is_object($datasetRaw))
{
$tmpDatasetRaw = clone $datasetRaw;
$tmpMetaData = self::getFilterMetaData($fieldName, self::$FilterWidgetInstance->metaData);
if (is_bool($fieldValue))
{
$tmpDatasetRaw->{$fieldName} = $fieldValue === true ? 'true' : 'false';
}
elseif ($tmpMetaData != null && $tmpMetaData->type == 'timestamp')
{
$tmpDatasetRaw->{$fieldName} = date(self::DEFAULT_DATE_FORMAT, strtotime($fieldValue));
}
$formatRaw = self::$FilterWidgetInstance->getFormatRaw();
if ($formatRaw != null)
{
$tmpDatasetRaw = $formatRaw($fieldName, $fieldValue, $tmpDatasetRaw);
}
$formatRaw = $this->formatRaw;
$tmpDatasetRaw = $formatRaw($tmpDatasetRaw);
}
return $tmpDatasetRaw;
@@ -400,28 +298,18 @@ class FilterWidget extends Widget
/**
*
*/
public static function markRow($datasetRaw)
private function _markRow($datasetRaw)
{
$class = '';
if (is_object($datasetRaw))
{
$markRow = self::$FilterWidgetInstance->getMarkRow();
if ($markRow != null)
if ($this->markRow != null)
{
$markRow = $this->markRow;
$class = $markRow($datasetRaw);
}
}
return $class;
}
/**
*
*/
public static function getCheckboxes()
{
return self::$FilterWidgetInstance->_getCheckboxes();
return $class == null ? '' : $class;
}
/**
@@ -444,37 +332,7 @@ class FilterWidget extends Widget
protected function loadViewFilters()
{
// Loads views
$this->view(self::WIDGET_URL_FILTER,
array(
self::DATASET_PARAMETER => $this->dataset,
self::METADATA_PARAMETER => $this->metaData,
self::LIST_FIELDS_PARAMETER => $this->listFields
)
);
}
/**
*
*/
protected function getFormatRaw()
{
return $this->formatRaw;
}
/**
*
*/
protected function getMarkRow()
{
return $this->markRow;
}
/**
*
*/
protected function _getCheckboxes()
{
return $this->checkboxes;
$this->view(self::WIDGET_URL_FILTER);
}
//------------------------------------------------------------------------------------------------------------------
@@ -614,6 +472,16 @@ class FilterWidget extends Widget
$filterSessionArray[self::FILTER_NAME] = null;
}
if (!isset($filterSessionArray[self::APP_PARAMETER]))
{
$filterSessionArray[self::APP_PARAMETER] = null;
}
if (!isset($filterSessionArray[self::DATASET_NAME_PARAMETER]))
{
$filterSessionArray[self::DATASET_NAME_PARAMETER] = null;
}
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
}
@@ -700,9 +568,7 @@ class FilterWidget extends Widget
$this->markRow = $args[self::MARK_ROW];
}
if (isset($args[self::CHECKBOXES])
&& is_array($args[self::CHECKBOXES])
&& count($args[self::CHECKBOXES]) > 0)
if (isset($args[self::CHECKBOXES]))
{
$this->checkboxes = $args[self::CHECKBOXES];
}
@@ -825,6 +691,7 @@ class FilterWidget extends Widget
}
$this->filterName = $filterName;
$this->app = $filter->retval[0]->app;
$filterSessionArray = array(
self::SELECTED_FIELDS => $selectedFields,
@@ -832,7 +699,9 @@ class FilterWidget extends Widget
self::ACTIVE_FILTERS => $activeFilters,
self::ACTIVE_FILTERS_OPERATION => $activeFiltersOperation,
self::ACTIVE_FILTERS_OPTION => $activeFiltersOption,
self::FILTER_NAME => $filterName
self::FILTER_NAME => $filterName,
self::APP_PARAMETER => $filter->retval[0]->app,
self::DATASET_NAME_PARAMETER => $filter->retval[0]->dataset_name
);
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
@@ -845,7 +714,9 @@ class FilterWidget extends Widget
self::ACTIVE_FILTERS => array(),
self::ACTIVE_FILTERS_OPERATION => array(),
self::ACTIVE_FILTERS_OPTION => array(),
self::FILTER_NAME => null
self::FILTER_NAME => null,
self::APP_PARAMETER => null,
self::DATASET_NAME_PARAMETER => null
);
$this->session->set_userdata(self::SESSION_NAME, $filterSessionArray);
@@ -963,23 +834,70 @@ class FilterWidget extends Widget
$selectedFields = $filterSessionArray[self::SELECTED_FIELDS];
}
if (is_array($_POST))
{
if (array_key_exists(self::CMD_ADD_FIELD, $_POST) && trim($_POST[self::CMD_ADD_FIELD]) != '')
{
if (!in_array($_POST[self::CMD_ADD_FIELD], $selectedFields))
{
$selectedFields[] = $_POST[self::CMD_ADD_FIELD];
}
}
return $selectedFields;
}
if (array_key_exists(self::CMD_REMOVE_FIELD, $_POST) && trim($_POST[self::CMD_REMOVE_FIELD]) != '')
/**
*
*/
private function _getAppFromPost()
{
$app = $this->app;
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
if (isset($filterSessionArray[self::APP_PARAMETER]))
{
$app = $filterSessionArray[self::APP_PARAMETER];
}
return $app;
}
/**
*
*/
private function _getDatasetFromPost()
{
$datasetName = $this->datasetName;
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
if (isset($filterSessionArray[self::DATASET_NAME_PARAMETER]))
{
$datasetName = $filterSessionArray[self::DATASET_NAME_PARAMETER];
}
return $datasetName;
}
/**
*
*/
private function _getColumnAliasesFromPost()
{
$columnsAliases = $this->columnsAliases;
$selectedFields = array();
$filterSessionArray = $this->session->userdata(self::SESSION_NAME);
if (isset($filterSessionArray[self::SELECTED_FIELDS]))
{
$selectedFields = $filterSessionArray[self::SELECTED_FIELDS];
}
if (isset($this->listFields) && count($selectedFields) > 0)
{
$columnsAliases = array();
for ($i = 0; $i < count($selectedFields); $i++)
{
$selectedFields = $this->_removeElementFromArray($selectedFields, $_POST[self::CMD_REMOVE_FIELD]);
if (($pos = array_search($selectedFields[$i], $this->listFields)) !== false)
{
$columnsAliases[] = $this->columnsAliases[$pos];
}
}
}
return $selectedFields;
return $columnsAliases;
}
/**
@@ -996,22 +914,6 @@ class FilterWidget extends Widget
$selectedFilters = $filterSessionArray[self::SELECTED_FILTERS];
}
if (is_array($_POST))
{
if (array_key_exists(self::CMD_ADD_FILTER, $_POST) && trim($_POST[self::CMD_ADD_FILTER]) != '')
{
if (!in_array($_POST[self::CMD_ADD_FILTER], $selectedFilters))
{
$selectedFilters[] = $_POST[self::CMD_ADD_FILTER];
}
}
if (array_key_exists(self::CMD_REMOVE_FILTER, $_POST) && trim($_POST[self::CMD_REMOVE_FILTER]) != '')
{
$selectedFilters = $this->_removeElementFromArray($selectedFilters, $_POST[self::CMD_REMOVE_FILTER]);
}
}
return $selectedFilters;
}
@@ -1096,7 +998,9 @@ class FilterWidget extends Widget
self::SELECTED_FIELDS => $this->_getSelectedFieldsFromPost(),
self::SELECTED_FILTERS => $this->_getSelectedFiltersFromPost(),
self::ADDITIONAL_COLUMNS => $this->additionalColumns,
self::COLUMNS_ALIASES => $this->columnsAliases
self::COLUMNS_ALIASES => $this->_getColumnAliasesFromPost(),
self::APP_PARAMETER => $this->_getAppFromPost(),
self::DATASET_NAME_PARAMETER => $this->_getDatasetFromPost()
);
$filterSessionArray[self::ACTIVE_FILTERS] = array();
@@ -1222,6 +1126,9 @@ class FilterWidget extends Widget
case self::OP_NOT_SET:
$condition = ' IS NULL';
break;
default:
$condition = ' IS NOT NULL';
break;
}
$where .= $condition;
@@ -1236,23 +1143,4 @@ class FilterWidget extends Widget
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;
}
}
+4 -4
View File
@@ -41,7 +41,7 @@ class NavigationMenuWidget extends Widget
echo '<li class="'.$expanded.'">';
if (isset($item['subscriptLink']) && isset($item['subscriptDescription']))
if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription']))
{
echo '<span>';
}
@@ -62,12 +62,12 @@ class NavigationMenuWidget extends Widget
echo '</a>';
if (isset($item['subscriptLink']) && isset($item['subscriptDescription']))
if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription']))
{
echo '<a class="menuSubscriptLink" href="'.$item['subscriptLink'].'">'.$item['subscriptDescription'].'</a>';
echo '<a id="'.$item['subscriptLinkId'].'" class="menuSubscriptLink" value="'.$item['subscriptLinkValue'].'" href="#">'.$item['subscriptDescription'].'</a>';
}
if (isset($item['subscriptLink']) && isset($item['subscriptDescription']))
if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription']))
{
echo '</span>';
}