diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2011-08-24 15:36:48 +0200 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2011-08-25 00:50:52 +0000 |
commit | 950a5da34d3b89ae23cf8834d501233bda831f9e (patch) | |
tree | 4531eaffb80d6573e28b48c1a29cfd7c8a9b8b62 /install | |
parent | e5382885f589c45c96ba0ba04c89bdb1f1546ce5 (diff) | |
download | freeipa-950a5da34d3b89ae23cf8834d501233bda831f9e.tar.gz freeipa-950a5da34d3b89ae23cf8834d501233bda831f9e.tar.xz freeipa-950a5da34d3b89ae23cf8834d501233bda831f9e.zip |
Validation of details facet before update https://fedorahosted.org/freeipa/ticket/1676 The ticket is a duplicate of server error, but it revealed few UI errors.
Newly performs validation of details facet before update. If validation fails, notification dialog is shown and command isn't executed.
Fixed integer minimum and maximum value checking.
Read-only and non-writable fields are no longer considered required.
Diffstat (limited to 'install')
-rw-r--r-- | install/ui/details.js | 31 | ||||
-rw-r--r-- | install/ui/test/data/ipa_init.json | 4 | ||||
-rw-r--r-- | install/ui/widget.js | 12 |
3 files changed, 39 insertions, 8 deletions
diff --git a/install/ui/details.js b/install/ui/details.js index 564d848d4..4550c1abf 100644 --- a/install/ui/details.js +++ b/install/ui/details.js @@ -128,6 +128,18 @@ IPA.details_section = function(spec) { return false; }; + that.is_valid = function() { + var fields = that.fields.values; + var valid = true; + for (var i=0; i<fields.length; i++) { + var field = fields[i]; + if (!field.valid || !field.check_required()) { + valid = false; + } + } + return valid; + }; + // methods that should be invoked by subclasses that.section_create = that.create; that.section_setup = that.setup; @@ -458,12 +470,12 @@ IPA.details_facet = function(spec) { on_win(data, text_status, xhr); if (data.error) return; - + if (that.post_update_hook) { that.post_update_hook(data, text_status); return; } - + var result = data.result.result; that.load(result); } @@ -488,11 +500,17 @@ IPA.details_facet = function(spec) { }); var values; + var valid = true; var sections = that.sections.values; for (var i=0; i<sections.length; i++) { var section = sections[i]; + if(!section.is_valid() || !valid) { + valid = false; + continue; + } + if (section.save) { section.save(command.options); continue; @@ -528,6 +546,15 @@ IPA.details_facet = function(spec) { } } + if(!valid) { + var dialog = IPA.message_dialog({ + title: IPA.messages.dialogs.validation_title, + message: IPA.messages.dialogs.validation_message + }); + dialog.open(); + return; + } + //alert(JSON.stringify(command.to_json())); if (that.pre_execute_hook){ diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index 0738df061..9f31a7268 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -15907,7 +15907,9 @@ "prospective": "Prospective", "remove_empty": "Select entries to be removed.", "remove_title": "Remove ${entity}", - "show_details": "Show details" + "show_details": "Show details", + "validation_title": "Validation error", + "validation_message": "Input form contains invalid or missing values." }, "facet_groups": { "managedby": "${primary_key} is managed by:", diff --git a/install/ui/widget.js b/install/ui/widget.js index f88bba5c2..6ae6f5dfb 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -89,7 +89,7 @@ IPA.widget = function(spec) { return; } - if (meta.minvalue && value < meta.minvalue) { + if (meta.minvalue !== undefined && value < meta.minvalue) { that.valid = false; message = IPA.messages.widget.validation.min_value; message = message.replace('${value}', meta.minvalue); @@ -97,7 +97,7 @@ IPA.widget = function(spec) { return; } - if (meta.maxvalue && value > meta.maxvalue) { + if (meta.maxvalue !== undefined && value > meta.maxvalue) { that.valid = false; message = IPA.messages.widget.validation.max_value; message = message.replace('${value}', meta.maxvalue); @@ -131,7 +131,9 @@ IPA.widget = function(spec) { if (!values || !values.length || values[0] === '' ) { if (that.param_info && that.param_info.required && - !that.optional) { + !that.optional && + !that.read_only && + that.writable) { that.valid = false; that.show_error(IPA.messages.widget.validation.required); return false; @@ -148,10 +150,10 @@ IPA.widget = function(spec) { that.valid = true; var values = that.save(); - if (!values){ + if (!values) { return; } - if (values.length ===0 ){ + if (values.length === 0) { return; } var value = values[0]; |