summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2011-08-24 15:36:48 +0200
committerEndi S. Dewata <edewata@redhat.com>2011-08-25 00:51:28 +0000
commita6cf44bd6538788a20fd6021b802443d4b0c63d9 (patch)
tree8d27f73864b7a572024f0762e95110d082d80e67
parent5ba0be24e850fa924f8e36f579cfca3768607e4b (diff)
downloadfreeipa-test-patches-2-1.tar.gz
freeipa-test-patches-2-1.tar.xz
freeipa-test-patches-2-1.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.test-patches-2-1
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.
-rw-r--r--install/ui/details.js31
-rw-r--r--install/ui/test/data/ipa_init.json4
-rw-r--r--install/ui/widget.js12
-rw-r--r--ipalib/plugins/internal.py6
4 files changed, 43 insertions, 10 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];
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 785dc1680..0964d106c 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -355,12 +355,14 @@ class i18n_messages(Command):
"confirmation":_("Confirmation"),
"dirty_message":_("This page has unsaved changes. Please save or revert."),
"dirty_title":_("Unsaved Changes"),
- "hide_details":_("Hide details"),\
+ "hide_details":_("Hide details"),
"redirection":_("Redirection"),
"remove_empty":_("Select entries to be removed."),
"remove_title":_("Remove ${entity}"),
"prospective":_("Prospective"),
- "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:"),