Added validation to the user edit-form in the backoffice

This commit is contained in:
Dennis Jørgensen
2016-10-15 22:00:03 +02:00
parent 3b43979a06
commit f1c8fb7b17
2 changed files with 86 additions and 7 deletions

View File

@@ -30,6 +30,8 @@ using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
using PropertyType = umbraco.cms.businesslogic.propertytype.PropertyType;
using System.Text.RegularExpressions;
using System.Text;
namespace umbraco.cms.presentation.user
{
@@ -43,11 +45,16 @@ namespace umbraco.cms.presentation.user
CurrentApp = DefaultApps.users.ToString();
}
protected HtmlTable macroProperties;
protected TextBox uname = new TextBox();
protected TextBox lname = new TextBox();
protected TextBox uname = new TextBox() { ID = "uname" };
protected RequiredFieldValidator unameValidator = new RequiredFieldValidator();
protected TextBox lname = new TextBox() { ID = "lname" };
protected RequiredFieldValidator lnameValidator = new RequiredFieldValidator();
protected CustomValidator lnameCustomValidator = new CustomValidator();
protected PlaceHolder passw = new PlaceHolder();
protected CheckBoxList lapps = new CheckBoxList();
protected TextBox email = new TextBox();
protected TextBox email = new TextBox() { ID = "email" };
protected RequiredFieldValidator emailValidator = new RequiredFieldValidator();
protected CustomValidator emailCustomValidator = new CustomValidator();
protected DropDownList userType = new DropDownList();
protected DropDownList userLanguage = new DropDownList();
protected CheckBox NoConsole = new CheckBox();
@@ -173,10 +180,10 @@ namespace umbraco.cms.presentation.user
passw.Controls.Add(passwordChanger);
passw.Controls.Add(validatorContainer);
pp.addProperty(ui.Text("user", "username", UmbracoUser), uname);
pp.addProperty(ui.Text("user", "loginname", UmbracoUser), lname);
pp.addProperty(ui.Text("user", "username", UmbracoUser), uname, unameValidator);
pp.addProperty(ui.Text("user", "loginname", UmbracoUser), lname, lnameValidator, lnameCustomValidator);
pp.addProperty(ui.Text("user", "password", UmbracoUser), passw);
pp.addProperty(ui.Text("email", UmbracoUser), email);
pp.addProperty(ui.Text("email", UmbracoUser), email, emailValidator, emailCustomValidator);
pp.addProperty(ui.Text("user", "usertype", UmbracoUser), userType);
pp.addProperty(ui.Text("user", "language", UmbracoUser), userLanguage);
@@ -219,6 +226,50 @@ namespace umbraco.cms.presentation.user
sectionValidator.CssClass = "error";
sectionValidator.Style.Add("color", "red");
unameValidator.ControlToValidate = uname.ID;
unameValidator.Display = ValidatorDisplay.Dynamic;
unameValidator.ErrorMessage = ui.Text("defaultdialogs", "requiredField", UmbracoUser);
unameValidator.CssClass = "error";
unameValidator.Style.Add("color", "red");
unameValidator.Style.Add("margin-left", "5px");
unameValidator.Style.Add("line-height", "28px");
lnameValidator.ControlToValidate = lname.ID;
lnameValidator.Display = ValidatorDisplay.Dynamic;
lnameValidator.ErrorMessage = ui.Text("defaultdialogs", "requiredField", UmbracoUser);
lnameValidator.CssClass = "error";
lnameValidator.Style.Add("color", "red");
lnameValidator.Style.Add("margin-left", "5px");
lnameValidator.Style.Add("line-height", "28px");
lnameCustomValidator.ServerValidate += LnameCustomValidator_ServerValidate;
lnameCustomValidator.Display = ValidatorDisplay.Dynamic;
lnameCustomValidator.ControlToValidate = lname.ID;
var localizedLname = ui.Text("user", "loginname", UmbracoUser);
lnameCustomValidator.ErrorMessage = ui.Text("errorHandling", "errorExistsWithoutTab", localizedLname, UmbracoUser);
lnameCustomValidator.CssClass = "error";
lnameCustomValidator.Style.Add("color", "red");
lnameCustomValidator.Style.Add("margin-left", "5px");
lnameCustomValidator.Style.Add("line-height", "28px");
emailValidator.ControlToValidate = email.ID;
emailValidator.Display = ValidatorDisplay.Dynamic;
emailValidator.ErrorMessage = ui.Text("defaultdialogs", "requiredField", UmbracoUser);
emailValidator.CssClass = "error";
emailValidator.Style.Add("color", "red");
emailValidator.Style.Add("margin-left", "5px");
emailValidator.Style.Add("line-height", "28px");
emailCustomValidator.ServerValidate += EmailCustomValidator_ServerValidate;
emailCustomValidator.Display = ValidatorDisplay.Dynamic;
emailCustomValidator.ControlToValidate = email.ID;
var localizedEmail = ui.Text("general", "email", UmbracoUser);
emailCustomValidator.ErrorMessage = ui.Text("errorHandling", "errorRegExpWithoutTab", localizedEmail, UmbracoUser);
emailCustomValidator.CssClass = "error";
emailCustomValidator.Style.Add("color", "red");
emailCustomValidator.Style.Add("margin-left", "5px");
emailCustomValidator.Style.Add("line-height", "28px");
SetupForm();
SetupChannel();
@@ -227,6 +278,16 @@ namespace umbraco.cms.presentation.user
.SyncTree(UID.ToString(), IsPostBack);
}
private void LnameCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
var usersWithLoginName = ApplicationContext.Services.UserService.GetByUsername(lname.Text);
args.IsValid = usersWithLoginName == null || usersWithLoginName.Id == u.Id;
}
private void EmailCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = Regex.IsMatch(email.Text.Trim(), @"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$");
}
void sectionValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
@@ -531,7 +592,9 @@ namespace umbraco.cms.presentation.user
}
else
{
ClientTools.ShowSpeechBubble(speechBubbleIcon.error, ui.Text("speechBubbles", "editUserError", UmbracoUser), "");
ClientTools.ShowSpeechBubble(speechBubbleIcon.error,
ui.Text("speechBubbles", "validationFailedHeader", UmbracoUser),
ui.Text("speechBubbles", "validationFailedMessage", UmbracoUser));
}
}

View File

@@ -36,6 +36,22 @@ namespace umbraco.uicontrols
set { m_title = value; }
}
public void addProperty(string Caption, Control C, params BaseValidator[] validators)
{
PropertyPanel pp = new PropertyPanel();
pp.Controls.Add(C);
foreach (var validator in validators)
{
validator.Display = ValidatorDisplay.Dynamic;
pp.Controls.Add(validator);
}
pp.Text = Caption;
this.Controls.Add(pp);
}
public void addProperty(string Caption, Control C)
{