Module: check_mk
Branch: master
Commit: d2a05dc798df4c976f1fb9512b6c49bcd482aadd
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d2a05dc798df4c…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Apr 10 09:33:43 2019 +0200
Fixed broken BI state filters
All filters are used by default since 1.6 in views just like it is
done in reports for a long time. Since then it is important that
the filters detect on their own whether or not they are active.
This is especially important for the filters that only use checkboxes
as values. In these filters all checkboxes can be unchecked which makes
the HTTP variables for this filter vanish. As a result the filter does
not know whether or not it has been used (with all checkboxes unchecked)
or it has not be used and should not filter.
To fix this problem there is now a hidden field which is always set when
the filter has been submitted with a form. This makes the filter know
whether or not to do it's work.
Also cleaned up the checkbox processing to use the generic
get_checkbox() logic.
CMK-1869
Change-Id: I0c2ceef836aa1e9ae9c4c115681020170973446d
---
cmk/gui/plugins/visuals/filters.py | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/cmk/gui/plugins/visuals/filters.py b/cmk/gui/plugins/visuals/filters.py
index e9cc5e5..2addd8b 100644
--- a/cmk/gui/plugins/visuals/filters.py
+++ b/cmk/gui/plugins/visuals/filters.py
@@ -3303,7 +3303,7 @@ class BIStatusFilter(Filter):
else:
self.code = what[0]
self.prefix = "bi%ss" % self.code
- vars_ = [self.prefix + str(x) for x in [-1, 0, 1, 2, 3]]
+ vars_ = ["%s%s" % (self.prefix, x) for x in [-1, 0, 1, 2, 3,
"_filled"]]
if self.code == 'a':
vars_.append(self.prefix + "n")
Filter.__init__(self, info="aggr", htmlvars=vars_, link_columns=[])
@@ -3314,11 +3314,12 @@ class BIStatusFilter(Filter):
def double_height(self):
return self.column == "aggr_assumed_state"
+ def _filter_used(self):
+ return html.request.has_var(self.prefix + "_filled")
+
def display(self):
- if html.request.var("filled_in"):
- defval = ""
- else:
- defval = "on"
+ html.hidden_field(self.prefix + "_filled", "1",
add_var=True)
+
for varend, text in [
('0', _('OK')),
('1', _('WARN')),
@@ -3332,17 +3333,12 @@ class BIStatusFilter(Filter):
if varend == 'n':
html.br()
var = self.prefix + varend
- html.checkbox(var, defval, label=text)
+ html.checkbox(var, defval=not self._filter_used(), label=text)
def filter_table(self, rows):
- if html.request.var("filled_in"):
- defval = ""
- else:
- defval = "on"
-
allowed_states = []
for i in ['0', '1', '2', '3', '-1',
'n']:
- if html.request.var(self.prefix + i, defval) == "on":
+ if html.get_checkbox(self.prefix + i):
if i == 'n':
s = None
else: