mirror of
https://github.com/Cacti/cacti.git
synced 2026-10-30 08:37:01 +09:00
327 lines
9.6 KiB
PHP
327 lines
9.6 KiB
PHP
<?php
|
|
/*
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2017 The Cacti Group |
|
|
| |
|
|
| This program is free software; you can redistribute it and/or |
|
|
| modify it under the terms of the GNU General Public License |
|
|
| as published by the Free Software Foundation; either version 2 |
|
|
| of the License, or (at your option) any later version. |
|
|
| |
|
|
| This program is distributed in the hope that it will be useful, |
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
| GNU General Public License for more details. |
|
|
+-------------------------------------------------------------------------+
|
|
| Cacti: The Complete RRDTool-based Graphing Solution |
|
|
+-------------------------------------------------------------------------+
|
|
| This code is designed, written, and maintained by the Cacti Group. See |
|
|
| about.php and/or the AUTHORS file for specific developer information. |
|
|
+-------------------------------------------------------------------------+
|
|
| http://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
/*
|
|
* Create a consistent responsive filter
|
|
*/
|
|
|
|
class CactiTableFilter {
|
|
public $form_header = '';
|
|
public $form_action = '';
|
|
public $form_id = '';
|
|
public $action_url = '';
|
|
public $action_label = '';
|
|
public $session_var = 'sess_default';
|
|
private $item_rows = array();
|
|
private $filter_array = array();
|
|
public $default_filter = array();
|
|
|
|
|
|
public function __construct($form_header = '', $form_action = '', $form_id = '', $form_width,
|
|
$session_var = '', $action_url = '', $action_label = '') {
|
|
global $item_rows;
|
|
|
|
$this->form_header = $form_header;
|
|
$this->form_action = $form_action;
|
|
$this->form_id = $form_id;
|
|
$this->form_width = $form_width;
|
|
$this->action_url = $action_url;
|
|
$this->action_label = $action_label;
|
|
$this->session_var = $session_var;
|
|
$this->item_rows = $item_rows;
|
|
|
|
if ($this->action_url != '' && $this->action_label == '') {
|
|
$this->action_label = __('Add');
|
|
}
|
|
|
|
/* default filter */
|
|
$this->default_filter = array(
|
|
'rows' => array(
|
|
'row1' => array(
|
|
'filter' => array(
|
|
'friendly_name' => __('Search'),
|
|
'filter' => FILTER_CALLBACK,
|
|
'filter_options' => array('options' => 'sanitize_search_string'),
|
|
'placeholder' => __('Enter a search term'),
|
|
'size' => '30',
|
|
'default' => '',
|
|
'pageset' => true,
|
|
'max_length' => '120'
|
|
),
|
|
'rows' => array(
|
|
'friendly_name' => __('Rows'),
|
|
'filter' => FILTER_VALIDATE_INT,
|
|
'method' => 'drop_array',
|
|
'default' => '-1',
|
|
'pageset' => true,
|
|
'array' => $this->item_rows
|
|
),
|
|
'go' => array(
|
|
'display' => __('Go'),
|
|
'title' => __('Apply filter to table'),
|
|
'method' => 'submit',
|
|
),
|
|
'clear' => array(
|
|
'display' => __('Clear'),
|
|
'title' => __('Reset filter to default values'),
|
|
'method' => 'button',
|
|
)
|
|
)
|
|
),
|
|
'sort' => array(
|
|
'sort_column' => 'name',
|
|
'sort_direction' => 'ASC'
|
|
)
|
|
);
|
|
}
|
|
|
|
public function __destruct() {
|
|
return true;
|
|
}
|
|
|
|
public function set_filter_row($array, $index = false) {
|
|
if ($index === false) {
|
|
$this->filter_array['rows'][] = $array;
|
|
} else {
|
|
$this->filter_array['rows'][$index] = $array;
|
|
}
|
|
}
|
|
|
|
public function get_filter_row($index) {
|
|
if ($index === false ) {
|
|
return false;
|
|
} elseif (array_key_exists($this->filter_array['rows'][$index])) {
|
|
return $this->filter_array['rows'][$index];
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function set_filter_array($array) {
|
|
$this->filter_array = $array;
|
|
}
|
|
|
|
public function get_filter() {
|
|
return $this->filter_array;
|
|
}
|
|
|
|
public function set_sort_array($sort_column, $sort_direction) {
|
|
$this->filter_array['sort'] = array(
|
|
'sort_column' => $sort_column,
|
|
'sort_direction' => $sort_direction
|
|
);
|
|
}
|
|
|
|
public function filter_render() {
|
|
/* setup filter variables */
|
|
sanitize_filter_variables();
|
|
|
|
/* render the filter in the page */
|
|
create_filter();
|
|
|
|
/* create javascript to operate of the filter */
|
|
create_javascript();
|
|
|
|
return true;
|
|
}
|
|
|
|
private function create_filter() {
|
|
if (!sizeof($this->filter_array)) {
|
|
$this->filter_array = $this->default_filter;
|
|
}
|
|
|
|
html_start_box($this->form_header, $this->form_width, true, '3', 'center', $this->action_url, $this->action_label);
|
|
|
|
if (isset($this->form_array['rows'])) {
|
|
print "<form id='" . $this->filter_id . "' action='" . $this->filter_action . "'>\n";
|
|
|
|
foreach($this->form_array['rows'] as $index => $row) {
|
|
print "<div class='filterTable'>\n";
|
|
print "<div class='formRow'>\n";
|
|
|
|
foreach($row as $field_name => $field_array) {
|
|
switch($field_array['method']) {
|
|
case 'button':
|
|
print "<div class='formColumnButton'>\n";
|
|
print "<input type='button' id='" . $field_name . "' value='" . htmlspecialchars(get_request_var($field_name), ENT_QUOTES, 'UTF-8') . "'" . (isset($field_array->title) ? " title='" . htmlspecialchars($field_array->title, ENT_QUOTES, 'UTF-8'):'') . "'>";
|
|
print "</div>\n";
|
|
|
|
break;
|
|
case 'submit':
|
|
print "<div class='formColumnButton'>\n";
|
|
print "<input type='submit' id='" . $field_name . "' value='" . htmlspecialchars(get_request_var($field_name), ENT_QUOTES, 'UTF-8') . "'" . (isset($field_array->title) ? " title='" . htmlspecialchars($field_array->title, ENT_QUOTES, 'UTF-8'):'') . "'>";
|
|
print "</div>\n";
|
|
|
|
break;
|
|
case 'timespan':
|
|
print "<div class='formColumn'><div class='formFieldName'>" . __('Presets') . "</div></div>\n";
|
|
|
|
break;
|
|
default:
|
|
if (isset($field_array['friendly_name'])) {
|
|
print "<div class='formColumn'><div class='formFieldName'>" . $field_array['friendly_name'] . "</div></div>\n";
|
|
}
|
|
|
|
print "<div class='formColumn'>\n";
|
|
|
|
draw_edit_control($field_name, $field_array);
|
|
|
|
print "</div>\n";
|
|
}
|
|
}
|
|
|
|
print "</div>\n";
|
|
print "</div>\n";
|
|
}
|
|
|
|
print "</form>\n";
|
|
}
|
|
|
|
html_end_box(true, true);
|
|
}
|
|
|
|
private function create_javascript() {
|
|
$applyFilter = '"' . $this->form_action;
|
|
$clearFilter = $applyFilter;
|
|
|
|
if (strpos('?', $applyFilter) === false) {
|
|
$separator = '?';
|
|
} else {
|
|
$separator = '&';
|
|
}
|
|
|
|
$applyFilter .= $separator . 'header=false';
|
|
$clearFilter .= $separator . 'header=false&clear=true"';
|
|
$changeChain = '';
|
|
|
|
$separator = "\"+\"&";
|
|
|
|
if (isset($this->form_array['rows'])) {
|
|
foreach($this->form_array['rows'] as $index => $row) {
|
|
foreach($row as $field_name => $field_array) {
|
|
switch($field_array['method']) {
|
|
case 'button':
|
|
case 'submit':
|
|
break;
|
|
case 'checkbox':
|
|
$applyFilter .= $separator . $field_name . "=\"+\"$(\'#" . $field_name . "').is(':checked')";
|
|
break;
|
|
case 'textbox':
|
|
case 'drop_array':
|
|
case 'drop_files':
|
|
case 'drop_sql':
|
|
case 'drop_callback':
|
|
case 'drop_multi':
|
|
case 'drop_color':
|
|
case 'drop_tree':
|
|
if ($field_array['method'] != 'textbox') {
|
|
$changeChain .= ($changeChain != '' ? ', ':'') . '#' . $field_name;
|
|
}
|
|
$applyFilter .= $separator . $field_name . "=\"+\"$(\'#" . $field_name . "').val()";
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
|
|
$applyFilter .= '";';
|
|
}
|
|
|
|
?>
|
|
<script type='text/javascript'>
|
|
|
|
function applyFilter() {
|
|
strURL = <?php print $strURL;?>
|
|
loadPageNoHeader(strURL);
|
|
}
|
|
|
|
function clearFilter() {
|
|
loadPageNoHeader(<?php print $clearFilter;?>);
|
|
}
|
|
|
|
$(function() {
|
|
$('#<?php print $this->form_id;?>').submit(function(event) {
|
|
event.preventDefault();
|
|
applyFilter();
|
|
});
|
|
|
|
$('<?php print $changeChain;?>').change(function() {
|
|
applyFilter();
|
|
});
|
|
|
|
$('#clear').click(function() {
|
|
clearFilter();
|
|
})
|
|
});
|
|
|
|
<?php
|
|
}
|
|
|
|
private function sanitize_filter_variables() {
|
|
$filters = array();
|
|
|
|
if (isset($this->form_array['rows'])) {
|
|
foreach($this->form_array['rows'] as $index => $row) {
|
|
foreach($row as $field_name => $field_array) {
|
|
switch($field_array['method']) {
|
|
case 'button':
|
|
case 'submit':
|
|
break;
|
|
default:
|
|
$filters[$field_name]['filter'] = $field_array['filter'];
|
|
|
|
if (isset($field_array['filter_options'])) {
|
|
$filters[$field_name]['options'] = $field_array['filter_options'];
|
|
}
|
|
|
|
if (isset($field_array['pageset'])) {
|
|
$filters[$field_name]['pageset'] = $field_array['pageset'];
|
|
}
|
|
|
|
if (isset($field_array['default'])) {
|
|
$filters[$field_name]['default'] = $field_array['default'];
|
|
} else {
|
|
$filters[$field_name]['default'] = '';
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isset($this->form_array['sort'])) {
|
|
$filters['sort_column']['filter'] = FILTER_CALLBACK;
|
|
$filters['sort_column']['options'] = array('options' => 'sanitize_search_string');
|
|
$filters['sort_column']['default'] = $this->form_array['sort']['sort_column'];
|
|
|
|
$filters['sort_direction']['filter'] = FILTER_CALLBACK;
|
|
$filters['sort_direction']['options'] = array('options' => 'sanitize_search_string');
|
|
$filters['sort_direction']['default'] = $this->form_array['sort']['sort_direction'];
|
|
}
|
|
|
|
validate_store_request_vars($filters, $this->session_var);
|
|
}
|
|
}
|