def _extend_display_dropdown(self, menu: PageMenu) -> None: display_dropdown = menu.get_dropdown_by_name("display", make_display_options_dropdown()) display_dropdown.topics.insert( 0, PageMenuTopic( title=_("Filter"), entries=[ PageMenuEntry( title=_("Filter view"), icon_name="filters_set" if html.form_submitted("options") else "filter", item=PageMenuSidePopup(self._render_filter_form()), name="filters", is_shortcut=True, ), ], )) display_dropdown.topics.insert( 0, PageMenuTopic( title=_("Details"), entries=[ PageMenuEntry( title=_("Show details"), icon_name="checked_checkbox" if self._show_details else "checkbox", item=make_simple_link( makeactionuri(request, transactions, [ ("show_details", "0" if self._show_details else "1"), ])), name="show_details", css_classes=["toggle"], ) ], ))
def render_availability_options(what): if html.request.var("_reset"): config.user.save_file("avoptions", {}) html.request.del_vars("avo_") html.request.del_var("avoptions") avoptions = availability.get_default_avoptions() # Users of older versions might not have all keys set. The following # trick will merge their options with our default options. avoptions.update(config.user.load_file("avoptions", {})) is_open = False html.begin_form("avoptions") html.hidden_field("avoptions", "set") avoption_entries = availability.get_avoption_entries(what) if html.request.var("avoptions") == "set": for name, height, _show_in_reporting, vs in avoption_entries: try: avoptions[name] = vs.from_html_vars("avo_" + name) vs.validate_value(avoptions[name], "avo_" + name) except MKUserError as e: html.add_user_error(e.varname, e) is_open = True if html.request.var("_unset_logrow_limit") == "1": avoptions["logrow_limit"] = 0 range_vs = None for name, height, _show_in_reporting, vs in avoption_entries: if name == 'rangespec': range_vs = vs try: range_, range_title = range_vs.compute_range(avoptions["rangespec"]) avoptions["range"] = range_, range_title except MKUserError as e: html.add_user_error(e.varname, e) if html.has_user_errors(): html.show_user_errors() html.begin_floating_options("avoptions", is_open) for name, height, _show_in_reporting, vs in avoption_entries: html.render_floating_option(name, height, "avo_", vs, avoptions.get(name)) html.end_floating_options(reset_url=html.makeuri( [("_reset", "1")], remove_prefix="avo_", delvars=["apply", "filled_in"], )) html.hidden_fields() html.end_form() if html.form_submitted(): config.user.save_file("avoptions", avoptions) return avoptions
def action(self) -> ActionResult: if html.form_submitted("search"): return None alias = html.request.get_unicode_input("alias") unique, info = watolib.is_alias_used("roles", self._role_id, alias) if not unique: raise MKUserError("alias", info) new_id = html.request.get_ascii_input_mandatory("id") if not new_id: raise MKUserError("id", "You have to provide a ID.") if not re.match("^[-a-z0-9A-Z_]*$", new_id): raise MKUserError( "id", _("Invalid role ID. Only the characters a-z, A-Z, 0-9, _ and - are allowed.")) if new_id != self._role_id: if new_id in self._roles: raise MKUserError("id", _("The ID is already used by another role")) self._role["alias"] = alias # based on if not self._role.get("builtin"): basedon = html.request.get_ascii_input_mandatory("basedon") if basedon not in config.builtin_role_ids: raise MKUserError("basedon", _("Invalid valid for based on. Must be id of builtin rule.")) self._role["basedon"] = basedon # Permissions permissions = self._role["permissions"] for var_name, value in html.request.itervars(prefix="perm_"): try: perm = permission_registry[var_name[5:]] except KeyError: continue if value == "yes": permissions[perm.name] = True elif value == "no": permissions[perm.name] = False elif value == "default": try: del permissions[perm.name] except KeyError: pass # Already at defaults if self._role_id != new_id: self._roles[new_id] = self._role del self._roles[self._role_id] self._rename_user_role(self._role_id, new_id) self._save_roles() watolib.add_change("edit-roles", _("Modified user role '%s'") % new_id, sites=config.get_login_sites()) return redirect(mode_url("roles"))
def _extend_display_dropdown(self, menu: PageMenu) -> None: display_dropdown = menu.get_dropdown_by_name("display", make_display_options_dropdown()) display_dropdown.topics.insert( 0, PageMenuTopic( title=_("Filter"), entries=[ PageMenuEntry( title=_("Filter view"), icon_name="filters_set" if html.form_submitted("options") else "filters", item=PageMenuPopup(self._render_filter_form()), name="filters", is_shortcut=True, ), ], ))
def page(self): # Show outcome of host validation. Do not validate new hosts errors = None if self._mode == "edit": errors = (watolib.validate_all_hosts([self._host.name()]).get( self._host.name(), []) + self._host.validation_errors()) if errors: html.open_div(class_="info") html.open_table(class_="validationerror", boder="0", cellspacing="0", cellpadding="0") html.open_tr() html.open_td(class_="img") html.icon("validation_error") html.close_td() html.open_td() html.open_p() html.h3(_("Warning: This host has an invalid configuration!")) html.open_ul() for error in errors: html.li(error) html.close_ul() html.close_p() if html.form_submitted(): html.br() html.b(_("Your changes have been saved nevertheless.")) html.close_td() html.close_tr() html.close_table() html.close_div() lock_message = "" locked_hosts = watolib.Folder.current().locked_hosts() if locked_hosts: if locked_hosts is True: lock_message = _( "Host attributes locked (You cannot edit this host)") elif isinstance(locked_hosts, str): lock_message = locked_hosts if lock_message: html.div(lock_message, class_="info") html.begin_form("edit_host", method="POST") html.prevent_password_auto_completion() basic_attributes = [ # attribute name, valuepec, default value ("host", self._vs_host_name(), self._host.name()), ] if self._is_cluster(): basic_attributes += [ # attribute name, valuepec, default value ( "nodes", self._vs_cluster_nodes(), self._host.cluster_nodes() if self._host else [], ), ] configure_attributes( new=self._mode != "edit", hosts={self._host.name(): self._host} if self._mode != "new" else {}, for_what="host" if not self._is_cluster() else "cluster", parent=watolib.Folder.current(), basic_attributes=basic_attributes, ) if self._mode != "edit": html.set_focus("host") forms.end() html.hidden_fields() html.end_form()
def textinput(valuespec, varprefix, defvalue): if html.form_submitted(html.form_name): value = valuespec.from_html_vars(varprefix) else: value = defvalue valuespec.render_input(varprefix, value)
def page(self): # Show outcome of host validation. Do not validate new hosts errors = None if self._mode != "edit": watolib.Folder.current().show_breadcrump() else: errors = watolib.validate_all_hosts([self._host.name()]).get( self._host.name(), []) + self._host.validation_errors() if errors: html.open_div(class_="info") html.open_table(class_="validationerror", boder=0, cellspacing=0, cellpadding=0) html.open_tr() html.open_td(class_="img") html.icon(title=None, icon="validation_error") html.close_td() html.open_td() html.open_p() html.h3(_("Warning: This host has an invalid configuration!")) html.open_ul() for error in errors: html.li(error) html.close_ul() html.close_p() if html.form_submitted(): html.br() html.b(_("Your changes have been saved nevertheless.")) html.close_td() html.close_tr() html.close_table() html.close_div() lock_message = "" if watolib.Folder.current().locked_hosts(): if watolib.Folder.current().locked_hosts() is True: lock_message = _( "Host attributes locked (You cannot edit this host)") else: lock_message = watolib.Folder.current().locked_hosts() if len(lock_message) > 0: html.div(lock_message, class_="info") html.begin_form("edit_host", method="POST") html.prevent_password_auto_completion() forms.header(_("General Properties")) self._show_host_name() # Cluster: nodes if self._is_cluster(): forms.section(_("Nodes")) self._vs_cluster_nodes().render_input( "nodes", self._host.cluster_nodes() if self._host else []) html.help( _('Enter the host names of the cluster nodes. These ' 'hosts must be present in WATO. ')) configure_attributes( new=self._mode != "edit", hosts={self._host.name(): self._host} if self._mode != "new" else {}, for_what="host" if not self._is_cluster() else "cluster", parent=watolib.Folder.current()) forms.end() if not watolib.Folder.current().locked_hosts(): html.button("services", _("Save & go to Services"), "submit") html.button("save", _("Save & Finish"), "submit") if not self._is_cluster(): html.button("diag_host", _("Save & Test"), "submit") html.hidden_fields() html.end_form()