Module: check_mk
Branch: master
Commit: e03d8fc39eda827b871aecbbd497afa7a6ab9874
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=e03d8fc39eda82…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Jun 30 08:39:39 2017 +0200
4924 Rulesets: Cloning rules opens the edit dialog
When cloning rules in a WATO ruleset you nearly always want to edit
the ruleset after cloning.
Previously you had to clone the rule, find the cloned rule in the list
again and open it for editing. This workflow has now been simplified:
Like in other places of WATO you now click on clone which opens up the
editor with the values of the origin rule. Once you save the editor
the rule will be saved with the just edited values.
Change-Id: I114cab0c81ee987f2715940469179ffa960efd35
---
.werks/4924 | 18 +++++++++++++++++
web/htdocs/wato.py | 56 +++++++++++++++++++++++++++++++++++++++++----------
web/htdocs/watolib.py | 10 ++++-----
3 files changed, 68 insertions(+), 16 deletions(-)
diff --git a/.werks/4924 b/.werks/4924
new file mode 100644
index 0000000..8262000
--- /dev/null
+++ b/.werks/4924
@@ -0,0 +1,18 @@
+Title: Rulesets: Cloning rules opens the edit dialog
+Level: 1
+Component: wato
+Compatible: compat
+Edition: cre
+Version: 1.5.0i1
+Date: 1498804589
+Class: feature
+
+When cloning rules in a WATO ruleset you nearly always want to edit
+the ruleset after cloning.
+
+Previously you had to clone the rule, find the cloned rule in the list
+again and open it for editing. This workflow has now been simplified:
+
+Like in other places of WATO you now click on clone which opens up the
+editor with the values of the origin rule. Once you save the editor
+the rule will be saved with the just edited values.
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 3bd031e..d2c6df8 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -12610,13 +12610,6 @@ class ModeEditRuleset(WatoMode):
else:
return None # browser reload
- elif action == "insert": # Clone a rule
- if not html.check_transaction():
- return None # browser reload
- ruleset.clone_rule(rule)
- rulesets.save()
- return
-
else:
if not html.check_transaction():
return None # browser reload
@@ -12784,8 +12777,18 @@ class ModeEditRuleset(WatoMode):
("rule_folder", folder.path()),
])
html.icon_button(edit_url, _("Edit this rule"), "edit")
- self._rule_button("insert", _("Insert a copy of this rule in
current folder"),
- folder, rulenr)
+
+ clone_url = folder_preserving_link([
+ ("mode", "clone_rule"),
+ ("ruleset_back_mode", self._back_mode),
+ ("varname", self._name),
+ ("rulenr", rulenr),
+ ("host", self._hostname),
+ ("item", mk_repr(self._item)),
+ ("rule_folder", folder.path()),
+ ])
+ html.icon_button(clone_url, _("Create a copy of this rule"),
"clone")
+
html.element_dragger("tr",
base_url=self._action_url("move_to", folder, rulenr))
self._rule_button("delete", _("Delete this rule"),
folder, rulenr)
@@ -13337,8 +13340,7 @@ class ModeEditRule(WatoMode):
else:
# Move rule to new folder during editing
- self._ruleset.delete_rule(self._rule)
- self._rulesets.save()
+ self._remove_from_orig_folder()
# Set new folder
self._rule.folder = new_rule_folder
@@ -13383,6 +13385,11 @@ class ModeEditRule(WatoMode):
self._rulesets.save()
+ def _remove_from_orig_folder(self):
+ self._ruleset.delete_rule(self._rule)
+ self._rulesets.save()
+
+
def _success_message(self):
return _("Edited rule in ruleset \"%s\" in folder
\"%s\"") % \
(self._ruleset.title(), self._folder.alias_path())
@@ -13596,6 +13603,32 @@ class ModeEditRule(WatoMode):
+class ModeCloneRule(ModeEditRule):
+ def __init__(self):
+ super(ModeCloneRule, self).__init__()
+
+
+ def _set_rule(self):
+ super(ModeCloneRule, self)._set_rule()
+
+ self._orig_rule = self._rule
+ self._rule = self._orig_rule.clone()
+
+
+ def _save_rule(self):
+ if self._rule.folder == self._orig_rule.folder:
+ self._ruleset.insert_rule_after(self._rule, self._orig_rule)
+ else:
+ self._ruleset.append_rule(self._rule.folder(), self._rule)
+
+ self._rulesets.save()
+
+
+ def _remove_from_orig_folder(self):
+ pass # Cloned rule is not yet in folder, don't try to remove
+
+
+
class ModeNewRule(ModeEditRule):
_new = True
@@ -16982,6 +17015,7 @@ modes = {
"edit_ruleset" : ([], ModeEditRuleset),
"new_rule" : ([], ModeNewRule),
"edit_rule" : ([], ModeEditRule),
+ "clone_rule" : ([], ModeCloneRule),
"host_groups" : (["groups"], ModeHostgroups),
"service_groups" : (["groups"], ModeServicegroups),
diff --git a/web/htdocs/watolib.py b/web/htdocs/watolib.py
index fbf56ea..c977998 100644
--- a/web/htdocs/watolib.py
+++ b/web/htdocs/watolib.py
@@ -7470,11 +7470,11 @@ class Ruleset(object):
self._on_change()
- def clone_rule(self, rule):
- index = self._rules[rule.folder.path()].index(rule)
- self._rules[rule.folder.path()].insert(index, rule.clone())
- add_change("edit-ruleset",
- _("Inserted new rule in ruleset '%s'") % self.title(),
+ def insert_rule_after(self, rule, after):
+ index = self._rules[rule.folder.path()].index(after) + 1
+ self._rules[rule.folder.path()].insert(index, rule)
+ add_change("clone-ruleset",
+ _("Cloned rule in ruleset '%s'") % self.title(),
sites=rule.folder.all_site_ids())
self._on_change()