Module: check_mk
Branch: master
Commit: 8dd4c899e9a0863f62d6d06a38cec5feebd2dd74
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=8dd4c899e9a086…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Mon Jan 14 09:07:00 2013 +0100
Updated bug entries #0884
---
.bugs/884 | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/.bugs/884 b/.bugs/884
new file mode 100644
index 0000000..d32bd5d
--- /dev/null
+++ b/.bugs/884
@@ -0,0 +1,10 @@
+Title: Rule editor: selection boxes must not be visible on 'ignore'
+Component: wato
+State: open
+Date: 2013-01-14 09:06:06
+Targetversion: 1.2.3
+Class: bug
+
+In the rule editor in the host tag section when the first selection
+box is "ignore", then the second should be hidden, but is visible
+when entering the dialog.
Module: check_mk
Branch: master
Commit: c326aa4efbe31461dcc4a0a84e8d9b887a0b2594
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c326aa4efbe314…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Jan 11 13:47:07 2013 +0100
Fixed some permission and page reload related handling
---
web/htdocs/views.py | 59 +++++++++++++----------------------------
web/plugins/views/layouts.py | 5 ++-
2 files changed, 22 insertions(+), 42 deletions(-)
diff --git a/web/htdocs/views.py b/web/htdocs/views.py
index e14ad40..c4b7774 100644
--- a/web/htdocs/views.py
+++ b/web/htdocs/views.py
@@ -1139,7 +1139,8 @@ def prepare_display_options():
display_options = html.var("_display_options", "")
display_options = apply_display_option_defaults(display_options)
html.display_options = display_options
- html.title_display_options = display_options
+ # Dont do this!! This garbles up the title links after a reload.
+ #html.title_display_options = display_options
# But there is one special case: The sorter links! These links need to know
# about the provided display_option parameter. The links could use
@@ -1355,9 +1356,16 @@ def render_view(view, rows, datasource, group_painters, painters,
# permissions or datasources without commands, the form is not rendered
command_form = should_show_command_form(display_options, datasource)
+ # Is the layout able to display checkboxes?
+ can_display_checkboxes = layout.get('checkboxes', False)
+
if show_buttons:
show_context_links(view, hide_filters, show_filters, display_options,
- painter_options, row_count > 0 and command_form, layout.get('checkboxes', False))
+ painter_options,
+ # Take into account: permissions, display_options
+ row_count > 0 and command_form,
+ # Take into account: layout capabilities
+ can_display_checkboxes)
# User errors in filters
html.show_user_errors()
@@ -1387,7 +1395,7 @@ def render_view(view, rows, datasource, group_painters, painters,
elif 'C' in display_options: # (*not* display open, if checkboxes are currently shown)
show_command_form(False, datasource)
-
+
# Also execute commands in cases without command form (needed for Python-
# web service e.g. for NagStaMon)
elif row_count > 0 and config.may("general.act") \
@@ -1420,7 +1428,11 @@ def render_view(view, rows, datasource, group_painters, painters,
# The number of rows might have changed to enable/disable actions and checkboxes
if show_buttons:
- update_context_links(row_count > 0, layout.get('checkboxes', False))
+ update_context_links(
+ # don't take display_options into account here ('c' is set during reload)
+ row_count > 0 and should_show_command_form('C', datasource),
+ can_display_checkboxes
+ )
# Play alarm sounds, if critical events have been displayed
if 'S' in display_options and view.get("play_sounds"):
@@ -1460,39 +1472,6 @@ def view_options(viewname):
v = vo.get(viewname, {})
must_save = False
- # NEW IMPLEMENTION: Options for columns, refresh and
- # checkboxes are switched via JS/AJAX, no longer via
- # the URL.
- # # Refresh rate
- # if config.may("general.view_option_refresh"):
- # if html.has_var("refresh"):
- # try:
- # v["refresh"] = int(html.var("refresh"))
- # except:
- # v["refresh"] = None
- # must_save = True
- # elif "refresh" in v:
- # del v["refresh"]
-
- # # Number of columns in layout
- # if config.may("general.view_option_columns"):
- # if html.has_var("num_columns"):
- # try:
- # v["num_columns"] = max(1, int(html.var("num_columns")))
- # except:
- # v["num_columns"] = 1
- # must_save = True
- # elif "num_columns" in v:
- # del v["num_columns"]
-
- # # Show checkboxes for commands
- # if config.may("general.act"):
- # if html.has_var("show_checkboxes"):
- # v["show_checkboxes"] = html.var("show_checkboxes", "") != ""
- # must_save = True
- # elif "show_checkboxes" in v:
- # del v["show_checkboxes"]
-
if config.may("general.painter_options"):
for on, opt in multisite_painter_options.items():
if html.has_var(on):
@@ -1754,9 +1733,9 @@ def show_context_links(thisview, active_filters, show_filters, display_options,
html.end_context_buttons()
-def update_context_links(enable_commands, show_checkboxes):
- html.javascript("update_togglebutton('commands', %d);" % enable_commands)
- html.javascript("update_togglebutton('checkbox', %d);" % (enable_commands and show_checkboxes, ))
+def update_context_links(enable_command_toggle, enable_checkbox_toggle):
+ html.javascript("update_togglebutton('commands', %d);" % enable_command_toggle)
+ html.javascript("update_togglebutton('checkbox', %d);" % (enable_command_toggle and enable_checkbox_toggle, ))
# Collect all views that share a context with thisview. For example
# if a view has an active filter variable specifying a host, then
diff --git a/web/plugins/views/layouts.py b/web/plugins/views/layouts.py
index ff397fb..0345739 100644
--- a/web/plugins/views/layouts.py
+++ b/web/plugins/views/layouts.py
@@ -34,8 +34,9 @@ def init_rowselect(view):
# In views do not use the persisted selection on initial rendering
# But use it when:
# a) rendering views for page reloads
- # b) some form has been submitted
- if 'U' in html.display_options and not html.form_submitted():
+ # b) the view is being sorted
+ # c) some form has been submitted
+ if 'U' in html.display_options and not html.has_var('sort') and not html.form_submitted():
weblib.set_rowselection('view-' + view['name'], [])
selected = [] # initial rendering
else:
Module: check_mk
Branch: master
Commit: 83eb80f74057a1e2f54e44a2d159b6367d5ff8cd
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=83eb80f74057a1…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Jan 10 14:42:57 2013 +0100
Improved view row selection handling
* When having row selections enabled and no selected and performing
actions an error message is displayed instead of performing the action on
all rows
---
.bugs/788 | 7 +++++--
ChangeLog | 3 +++
web/htdocs/js/checkmk.js | 32 ++++++++++++++++++++++++++------
web/htdocs/views.py | 17 +++++++++++------
4 files changed, 45 insertions(+), 14 deletions(-)
diff --git a/.bugs/788 b/.bugs/788
index 0d1f9bd..894d7ab 100644
--- a/.bugs/788
+++ b/.bugs/788
@@ -1,11 +1,14 @@
Title: Command while no row selected show not do any command
Component: multisite
-State: open
+Class: nastiness
+State: done
Date: 2012-07-29 23:00:06
Targetversion: 1.2.2
-Class: nastiness
Currently if no row is checked then it behaves like *all*
rows are selected. Better would be a warning message
that no row is selected. An no command executed.
+
+2013-01-10 14:42:01: changed state open -> done
+Has been implemented like written here.
diff --git a/ChangeLog b/ChangeLog
index 4df185b..44cb12c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,9 @@
Multisite:
* FIX: Fixed rendering of dashboard globes in opera
+ * When having row selections enabled and no selected and performing
+ actions an error message is displayed instead of performing the action on
+ all rows
1.2.1i4:
Core:
diff --git a/web/htdocs/js/checkmk.js b/web/htdocs/js/checkmk.js
index 1f135e6..7c99fea 100644
--- a/web/htdocs/js/checkmk.js
+++ b/web/htdocs/js/checkmk.js
@@ -1004,6 +1004,8 @@ function toggle_foldable_container(treename, id) {
* +----------------------------------------------------------------------+
*/
+// Tells us if the row selection is enabled at the moment
+var g_selection_enabled = false;
// Holds the row numbers of all selected rows
var g_selected_rows = [];
@@ -1362,18 +1364,31 @@ function init_rowselect() {
// Adds a hidden field with the selected rows to the form if
// some are selected
+// Send an empty field to tell the server code that the checkbox
+// handling is enabled in GUI but no row has been selected
function add_row_selections(form) {
- var num_selected = g_selected_rows.length;
- // Skip when none selected
- if(num_selected == 0)
+ // Skip when selection is not enabled
+ if(!g_selection_enabled) {
+ // Remove var from form before submission
+ if(form.elements['selected_rows'] !== undefined) {
+ form.removeChild(form.elements['selected_rows']);
+ }
return true;
+ }
+
+ var num_selected = g_selected_rows.length;
+
+ if(form.elements['selected_rows'] === undefined) {
+ var field = document.createElement('input');
+ form.appendChild(field);
+ } else {
+ var field = form.elements['selected_rows'];
+ }
- var field = document.createElement('input');
field.name = 'selected_rows';
field.type = 'hidden';
field.value = g_selected_rows.join(',');
- form.appendChild(field);
field = null;
}
@@ -1814,7 +1829,12 @@ function view_switch_option(oDiv, viewname, option, choices) {
get_url_sync("ajax_set_viewoption.py?view_name=" + viewname +
"&option=" + option + "&value=" + new_choice[0]);
- if (option == "refresh")
+
+ if (option == "refresh") {
setReload(new_choice[0]);
+ } else if (option == "show_checkboxes") {
+ g_selection_enabled = new_value;
+ }
+
handleReload('');
}
diff --git a/web/htdocs/views.py b/web/htdocs/views.py
index b6a0dbe..0b50323 100644
--- a/web/htdocs/views.py
+++ b/web/htdocs/views.py
@@ -1370,7 +1370,7 @@ def render_view(view, rows, datasource, group_painters, painters,
if command_form:
# If we are currently within an action (confirming or executing), then
# we display only the selected rows (if checkbox mode is active)
- if html.var("selected_rows", "") and html.do_actions():
+ if html.var("selected_rows", None) != None and html.do_actions():
rows = get_selected_rows(view, rows, html.var("selected_rows"))
if html.do_actions() and html.transaction_valid(): # submit button pressed, no reload
@@ -1614,7 +1614,7 @@ def view_optiondial(view, option, choices, help):
html.begin_context_buttons() # just to be sure
# Remove unicode strings
choices = [ [c[0], str(c[1])] for c in choices ]
- html.write('<div title="%s" id="optiondial_%s" class="optiondial %s val_%s"'
+ html.write('<div title="%s" id="optiondial_%s" class="optiondial %s val_%s" '
'onclick="view_dial_option(this, \'%s\', \'%s\', %r);"><div>%s</div></div>' % (
help, option, option, value, view["name"], option, choices, title))
html.final_javascript("init_optiondial('optiondial_%s');" % option)
@@ -1628,7 +1628,7 @@ def view_option_toggler(id, view, option, icon, help, hidden = False):
value = vo.get(option, view.get(option, False))
html.begin_context_buttons() # just to be sure
hide = hidden and ' style="display:none"' or ''
- html.write('<div id="%s_on" title="%s" class="togglebutton %s %s"'
+ html.write('<div id="%s_on" title="%s" class="togglebutton %s %s" '
'onclick="view_switch_option(this, \'%s\', \'%s\');"%s></div>' % (
id, help, icon, value and "down" or "up", view["name"], option, hide))
@@ -1699,10 +1699,12 @@ def show_context_links(thisview, active_filters, show_filters, display_options,
hidden = not enable_commands)
togglebutton_off("commands", "commands", hidden = enable_commands)
+ selection_enabled = enable_commands and enable_checkboxes
view_option_toggler("checkbox", thisview, "show_checkboxes", "checkbox",
_("Enable/Disable checkboxes for selecting rows for commands"),
- hidden = not enable_commands or not enable_checkboxes)
- togglebutton_off("checkbox", "checkbox", hidden = enable_commands and enable_checkboxes)
+ hidden = not selection_enabled)
+ togglebutton_off("checkbox", "checkbox", hidden = selection_enabled)
+ html.javascript('g_selection_enabled = %s;' % (selection_enabled and 'true' or 'false'))
if 'O' in display_options:
if config.may("general.view_option_columns"):
@@ -2162,7 +2164,10 @@ def do_actions(view, what, action_rows, backurl):
return False # no actions done
if not action_rows:
- html.show_error(_("No rows selected to perform actions for."))
+ message = _("No rows selected to perform actions for.")
+ if html.output_format == "html": # sorry for this hack
+ message += '<br><a href="%s">%s</a>' % (backurl, _('Back to view'))
+ html.show_error(message)
return False # no actions done
command = None