Show required service configuration parameters as required
Because we don't want the fields to *actually* be required in the particular form, instead of making them required they have been made aware of their parameter and that is used in the overridden field template to set the proper css class. Change-Id: I4fdf3d0df712e1c2a4bd86a8acbc6eecc88186d3 Co-Authored-By: Ryan Brady <rbrady@redhat.com>
This commit is contained in:
parent
0006a339b7
commit
cfabb4656f
@ -46,6 +46,10 @@ CINDER_ISCSI_HELPER_CHOICES = [
|
||||
]
|
||||
|
||||
|
||||
class ParameterAwareMixin(object):
|
||||
parameter = None
|
||||
|
||||
|
||||
def parameter_fields(request, prefix=None, read_only=False):
|
||||
fields = SortedDict()
|
||||
plan = api.tuskar.Plan.get_the_plan(request)
|
||||
@ -54,18 +58,17 @@ def parameter_fields(request, prefix=None, read_only=False):
|
||||
for p in parameters:
|
||||
if prefix and not p.name.startswith(prefix):
|
||||
continue
|
||||
kwargs = {}
|
||||
Field = django.forms.CharField
|
||||
field_kwargs = {}
|
||||
widget = None
|
||||
if read_only:
|
||||
if p.hidden:
|
||||
kwargs['widget'] = tuskar_ui.forms.StaticTextPasswordWidget
|
||||
widget = tuskar_ui.forms.StaticTextPasswordWidget
|
||||
else:
|
||||
kwargs['widget'] = tuskar_ui.forms.StaticTextWidget
|
||||
Field = django.forms.CharField
|
||||
widget = tuskar_ui.forms.StaticTextWidget
|
||||
else:
|
||||
if p.hidden:
|
||||
Field = django.forms.CharField
|
||||
kwargs['widget'] = (
|
||||
django.forms.PasswordInput(render_value=True))
|
||||
widget = django.forms.PasswordInput(render_value=True)
|
||||
elif p.type == 'number':
|
||||
Field = django.forms.IntegerField
|
||||
elif p.type == 'boolean':
|
||||
@ -73,18 +76,22 @@ def parameter_fields(request, prefix=None, read_only=False):
|
||||
elif (p.type == 'string' and
|
||||
p.constraints['allowed_values']['definition']):
|
||||
Field = django.forms.ChoiceField
|
||||
kwargs['choices'] = (
|
||||
field_kwargs['choices'] = (
|
||||
p.constraints['allowed_values']['definition'])
|
||||
else:
|
||||
if (p.type in ['json', 'comma_delimited_list'] or
|
||||
'Certificate' in p.name):
|
||||
kwargs['widget'] = django.forms.Textarea
|
||||
Field = django.forms.CharField
|
||||
elif (p.type in ['json', 'comma_delimited_list'] or
|
||||
'Certificate' in p.name):
|
||||
widget = django.forms.Textarea
|
||||
|
||||
fields[p.name] = Field(required=False,
|
||||
label=_parameter_label(p),
|
||||
initial=p.value,
|
||||
**kwargs)
|
||||
fields[p.name] = Field(
|
||||
required=False,
|
||||
label=_parameter_label(p),
|
||||
initial=p.value,
|
||||
widget=widget,
|
||||
**field_kwargs
|
||||
)
|
||||
fields[p.name].__class__ = type('ParameterAwareField',
|
||||
(ParameterAwareMixin, Field), {})
|
||||
fields[p.name].parameter = p
|
||||
return fields
|
||||
|
||||
|
||||
|
@ -0,0 +1,20 @@
|
||||
{% load form_helpers %}
|
||||
|
||||
<div class="form-group{% if field.errors %} has-error{% endif %} {{ field.css_classes }}">
|
||||
<label class="control-label col-sm-3 {% if field.field.required or field.field.parameter.is_required %}{{ form.required_css_class }}{% endif %}" for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||||
<div class="col-sm-9 {{ classes.value }} {{ field|wrapper_classes }}">
|
||||
{{ field|add_bootstrap_class }}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block alert alert-danger {{ form.error_css_class }}">{{ error }}</span>
|
||||
{% empty %}
|
||||
{% comment %}
|
||||
Escape help_text a second time here, to avoid an XSS issue in bootstrap.js.
|
||||
This can most likely be removed once we upgrade bootstrap.js past 2.0.2.
|
||||
Note: the spaces are necessary here.
|
||||
{% endcomment %}
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{% filter force_escape %} {{ field.help_text }} {% endfilter %} </span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
Loading…
x
Reference in New Issue
Block a user