authn: Fix handling of form errors and default values.
This commit is contained in:
parent
34e4405019
commit
18376347ca
2 changed files with 15 additions and 11 deletions
|
|
@ -45,19 +45,21 @@ class AuthnPluginViewBase(object):
|
|||
self.context = context
|
||||
self.plugin = context.plugin
|
||||
|
||||
def settings_get(self, errors={}):
|
||||
def settings_get(self, defaults=None, errors=None):
|
||||
"""
|
||||
View that displays the plugin settings as a form.
|
||||
"""
|
||||
defaults = defaults or {}
|
||||
errors = errors or {}
|
||||
schema = self.plugin.get_settings_schema()
|
||||
|
||||
# Get default values for the form.
|
||||
for node in schema.children:
|
||||
value = self.plugin.get_setting_by_name(node.name)
|
||||
if value:
|
||||
node.default = value
|
||||
for node in schema:
|
||||
db_value = self.plugin.get_setting_by_name(node.name)
|
||||
defaults.setdefault(node.name, db_value)
|
||||
|
||||
template_context = {
|
||||
'defaults': defaults,
|
||||
'errors': errors,
|
||||
'plugin': self.context.plugin,
|
||||
'resource': self.context,
|
||||
|
|
@ -78,7 +80,8 @@ class AuthnPluginViewBase(object):
|
|||
_('Errors exist when saving plugin settings. '
|
||||
'Please check the form inputs.'),
|
||||
queue='error')
|
||||
return self.settings_get(errors=e.asdict())
|
||||
defaults = schema.flatten(self.request.params)
|
||||
return self.settings_get(errors=e.asdict(), defaults=defaults)
|
||||
|
||||
# Store validated data.
|
||||
for name, value in valid_data.items():
|
||||
|
|
@ -110,7 +113,8 @@ class AuthSettingsView(object):
|
|||
|
||||
@LoginRequired()
|
||||
@HasPermissionAllDecorator('hg.admin')
|
||||
def index(self, defaults={}, errors=None, prefix_error=False):
|
||||
def index(self, defaults=None, errors=None, prefix_error=False):
|
||||
defaults = defaults or {}
|
||||
authn_registry = self.request.registry.getUtility(IAuthnPluginRegistry)
|
||||
enabled_plugins = SettingsModel().get_auth_plugins()
|
||||
|
||||
|
|
|
|||
|
|
@ -56,13 +56,13 @@
|
|||
<div class="label ${label_css_class}"><label for="${node.name}">${node.title}</label></div>
|
||||
<div class="input">
|
||||
%if node.widget in ["string", "int", "unicode"]:
|
||||
${h.text(node.name, node.default, class_="medium")}
|
||||
${h.text(node.name, defaults.get(node.name), class_="medium")}
|
||||
%elif node.widget == "password":
|
||||
${h.password(node.name, node.default, class_="medium")}
|
||||
${h.password(node.name, defaults.get(node.name), class_="medium")}
|
||||
%elif node.widget == "bool":
|
||||
<div class="checkbox">${h.checkbox(node.name, node.default)}</div>
|
||||
<div class="checkbox">${h.checkbox(node.name, True, checked=defaults.get(node.name))}</div>
|
||||
%elif node.widget == "select":
|
||||
${h.select(node.name, node.default, node.validator.choices)}
|
||||
${h.select(node.name, defaults.get(node.name), node.validator.choices)}
|
||||
%elif node.widget == "readonly":
|
||||
${node.default}
|
||||
%else:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue