Fixes up password changer on postback, fixes up more of the edit user and edit member pages.
This commit is contained in:
@@ -25,6 +25,7 @@ namespace umbraco.presentation.umbraco.dashboard
|
||||
|
||||
protected void changePassword_Click(object sender, EventArgs e)
|
||||
{
|
||||
Page.Validate();
|
||||
if (Page.IsValid == false) return;
|
||||
|
||||
var u = User.GetCurrent();
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Web.UI.HtmlControls;
|
||||
using System.Web.UI.WebControls;
|
||||
using Umbraco.Core.IO;
|
||||
using Umbraco.Web;
|
||||
using Umbraco.Web.Security;
|
||||
using umbraco.cms.businesslogic.member;
|
||||
using System.Web.Security;
|
||||
using umbraco.controls;
|
||||
@@ -25,37 +26,24 @@ namespace umbraco.cms.presentation.members
|
||||
protected TextBox documentName;
|
||||
private Member _document;
|
||||
private MembershipUser _member;
|
||||
controls.ContentControl _contentControl;
|
||||
ContentControl _contentControl;
|
||||
protected uicontrols.UmbracoPanel m_MemberShipPanel = new uicontrols.UmbracoPanel();
|
||||
|
||||
protected TextBox MemberLoginNameTxt = new TextBox();
|
||||
protected RequiredFieldValidator MemberLoginNameVal = new RequiredFieldValidator();
|
||||
protected CustomValidator MemberLoginNameExistCheck = new CustomValidator();
|
||||
protected CustomValidator MemberLoginNameExistCheck = new CustomValidator();
|
||||
|
||||
protected PlaceHolder MemberPasswordTxt = new PlaceHolder();
|
||||
protected TextBox MemberEmail = new TextBox();
|
||||
protected CustomValidator MemberEmailExistCheck = new CustomValidator();
|
||||
protected controls.DualSelectbox _memberGroups = new controls.DualSelectbox();
|
||||
protected DualSelectbox _memberGroups = new DualSelectbox();
|
||||
|
||||
private MembershipProvider MemberProvider
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
get
|
||||
{
|
||||
var provider = Membership.Providers[Member.UmbracoMemberProviderName];
|
||||
if (provider == null)
|
||||
{
|
||||
throw new ProviderException("The membership provider " + UmbracoSettings.DefaultBackofficeProvider + " was not found");
|
||||
}
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
// Add password changer
|
||||
var passwordChanger = (passwordChanger) LoadControl(SystemDirectories.Umbraco + "/controls/passwordChanger.ascx");
|
||||
passwordChanger.MembershipProviderName = Membership.Provider.Name;
|
||||
var passwordChanger = (passwordChanger)LoadControl(SystemDirectories.Umbraco + "/controls/passwordChanger.ascx");
|
||||
passwordChanger.MembershipProviderName = Membership.Provider.Name;
|
||||
//Add a custom validation message for the password changer
|
||||
var passwordValidation = new CustomValidator
|
||||
{
|
||||
@@ -78,8 +66,8 @@ namespace umbraco.cms.presentation.members
|
||||
if (Member.InUmbracoMemberMode())
|
||||
{
|
||||
_document = new Member(int.Parse(Request.QueryString["id"]));
|
||||
_member = Membership.GetUser(_document.Id);
|
||||
_contentControl = new controls.ContentControl(_document, controls.ContentControl.publishModes.NoPublish, "TabView1");
|
||||
_member = Membership.GetUser(_document.LoginName, false);
|
||||
_contentControl = new ContentControl(_document, controls.ContentControl.publishModes.NoPublish, "TabView1");
|
||||
_contentControl.Width = Unit.Pixel(666);
|
||||
_contentControl.Height = Unit.Pixel(666);
|
||||
|
||||
@@ -130,7 +118,7 @@ namespace umbraco.cms.presentation.members
|
||||
menuSave.Click += new ImageClickEventHandler(MenuSaveClick);
|
||||
menuSave.AltText = ui.Text("buttons", "save", null);
|
||||
|
||||
_member = Membership.GetUser(Request.QueryString["id"]);
|
||||
_member = Membership.GetUser(Request.QueryString["id"], false);
|
||||
MemberLoginNameTxt.Text = _member.UserName;
|
||||
if (IsPostBack == false)
|
||||
{
|
||||
@@ -141,15 +129,7 @@ namespace umbraco.cms.presentation.members
|
||||
m_MemberShipPanel.Text = ui.Text("edit") + " " + _member.UserName;
|
||||
var props = new uicontrols.Pane();
|
||||
MemberLoginNameTxt.Enabled = false;
|
||||
|
||||
// check for pw support
|
||||
if (Membership.Provider.EnablePasswordRetrieval == false)
|
||||
{
|
||||
MemberPasswordTxt.Controls.Clear();
|
||||
MemberPasswordTxt.Controls.Add(
|
||||
new LiteralControl("<em>" + ui.Text("errorHandling", "errorChangingProviderPassword") + "</em>"));
|
||||
}
|
||||
|
||||
|
||||
props.Controls.Add(AddProperty(ui.Text("login"), MemberLoginNameTxt));
|
||||
props.Controls.Add(AddProperty(ui.Text("password"), MemberPasswordTxt));
|
||||
props.Controls.Add(AddProperty("Email", MemberEmail));
|
||||
@@ -197,21 +177,21 @@ namespace umbraco.cms.presentation.members
|
||||
|
||||
void MemberLoginNameExistCheck_ServerValidate(object source, ServerValidateEventArgs args)
|
||||
{
|
||||
var oldLoginName = _document.LoginName.Replace(" ", "").ToLower();
|
||||
var newLoginName = MemberLoginNameTxt.Text.Replace(" ", "").ToLower();
|
||||
var oldLoginName = _document.LoginName.Replace(" ", "").ToLower();
|
||||
var newLoginName = MemberLoginNameTxt.Text.Replace(" ", "").ToLower();
|
||||
|
||||
if (oldLoginName != newLoginName && newLoginName != "" && Member.GetMemberFromLoginName(newLoginName) != null)
|
||||
args.IsValid = false;
|
||||
else
|
||||
args.IsValid = true;
|
||||
if (oldLoginName != newLoginName && newLoginName != "" && Member.GetMemberFromLoginName(newLoginName) != null)
|
||||
args.IsValid = false;
|
||||
else
|
||||
args.IsValid = true;
|
||||
}
|
||||
|
||||
void MemberEmailExistCheck_ServerValidate(object source, ServerValidateEventArgs args)
|
||||
void MemberEmailExistCheck_ServerValidate(object source, ServerValidateEventArgs args)
|
||||
{
|
||||
var oldEmail = _document.Email.ToLower();
|
||||
var newEmail = MemberEmail.Text.ToLower();
|
||||
|
||||
var requireUniqueEmail = MemberProvider.RequiresUniqueEmail;
|
||||
var requireUniqueEmail = Membership.Provider.RequiresUniqueEmail;
|
||||
|
||||
var howManyMembersWithEmail = 0;
|
||||
var membersWithEmail = Member.GetMembersFromEmail(newEmail);
|
||||
@@ -235,10 +215,59 @@ namespace umbraco.cms.presentation.members
|
||||
|
||||
}
|
||||
|
||||
private void ChangePassword(passwordChanger passwordChangerControl, MembershipUser membershipUser, CustomValidator passwordChangerValidator)
|
||||
{
|
||||
//Change the password
|
||||
|
||||
if (passwordChangerControl.IsChangingPassword)
|
||||
{
|
||||
var changePassResult = UmbracoContext.Current.Security.ChangePassword(
|
||||
membershipUser.UserName, passwordChangerControl.ChangingPasswordModel, Membership.Provider);
|
||||
|
||||
if (changePassResult.Success)
|
||||
{
|
||||
//if it is successful, we need to show the generated password if there was one, so set
|
||||
//that back on the control
|
||||
passwordChangerControl.ChangingPasswordModel.GeneratedPassword = changePassResult.Result.ResetPassword;
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordChangerValidator.IsValid = false;
|
||||
passwordChangerValidator.ErrorMessage = changePassResult.Result.ChangeError.ErrorMessage;
|
||||
MemberPasswordTxt.Controls[1].Visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateMembershipProvider(MembershipUser membershipUser)
|
||||
{
|
||||
var membershipHelper = new MembershipHelper();
|
||||
//set the writable properties that we are editing
|
||||
membershipHelper.UpdateMember(membershipUser, Membership.Provider,
|
||||
MemberEmail.Text.Trim());
|
||||
}
|
||||
|
||||
private void UpdateRoles(MembershipUser membershipUser)
|
||||
{
|
||||
// Groups
|
||||
foreach (ListItem li in _memberGroups.Items)
|
||||
{
|
||||
if (("," + _memberGroups.Value + ",").IndexOf("," + li.Value + ",", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
if (Roles.IsUserInRole(membershipUser.UserName, li.Value) == false)
|
||||
Roles.AddUserToRole(membershipUser.UserName, li.Value);
|
||||
}
|
||||
else if (Roles.IsUserInRole(membershipUser.UserName, li.Value))
|
||||
{
|
||||
Roles.RemoveUserFromRole(membershipUser.UserName, li.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void tmp_save(object sender, EventArgs e)
|
||||
{
|
||||
Page.Validate();
|
||||
if (!Page.IsValid)
|
||||
if (Page.IsValid == false)
|
||||
{
|
||||
foreach (uicontrols.TabPage tp in _contentControl.GetPanels())
|
||||
{
|
||||
@@ -249,10 +278,9 @@ namespace umbraco.cms.presentation.members
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (Page.IsPostBack)
|
||||
{
|
||||
// hide validation summaries
|
||||
// hide validation summaries
|
||||
if (Member.InUmbracoMemberMode())
|
||||
{
|
||||
foreach (uicontrols.TabPage tp in _contentControl.GetPanels())
|
||||
{
|
||||
tp.ErrorControl.Visible = false;
|
||||
@@ -262,53 +290,27 @@ namespace umbraco.cms.presentation.members
|
||||
//Change the password
|
||||
var passwordChangerControl = (passwordChanger)MemberPasswordTxt.Controls[0];
|
||||
var passwordChangerValidator = (CustomValidator)MemberPasswordTxt.Controls[1].Controls[0].Controls[0];
|
||||
if (passwordChangerControl.IsChangingPassword)
|
||||
{
|
||||
var changePassResult = UmbracoContext.Current.Security.ChangePassword(
|
||||
_member.UserName, passwordChangerControl.ChangingPasswordModel, MemberProvider);
|
||||
ChangePassword(passwordChangerControl, _member, passwordChangerValidator);
|
||||
|
||||
if (changePassResult.Success)
|
||||
{
|
||||
//if it is successful, we need to show the generated password if there was one, so set
|
||||
//that back on the control
|
||||
passwordChangerControl.ChangingPasswordModel.GeneratedPassword = changePassResult.Result.ResetPassword;
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordChangerValidator.IsValid = false;
|
||||
passwordChangerValidator.ErrorMessage = changePassResult.Result.ChangeError.ErrorMessage;
|
||||
MemberPasswordTxt.Controls[1].Visible = true;
|
||||
}
|
||||
}
|
||||
//update the membership provider
|
||||
UpdateMembershipProvider(_member);
|
||||
|
||||
if (Member.InUmbracoMemberMode())
|
||||
{
|
||||
//TODO: This should really be done with the member provider too...
|
||||
//Hrm, with the membership provider you cannot change the login name - I guess this will do that
|
||||
// in the underlying data layer
|
||||
_document.LoginName = MemberLoginNameTxt.Text;
|
||||
_document.Email = MemberEmail.Text;
|
||||
|
||||
// Groups
|
||||
foreach (ListItem li in _memberGroups.Items)
|
||||
{
|
||||
if (("," + _memberGroups.Value + ",").IndexOf("," + li.Value + ",", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
if (Roles.IsUserInRole(_document.LoginName, li.Value) == false)
|
||||
Roles.AddUserToRole(_document.LoginName, li.Value);
|
||||
}
|
||||
else if (Roles.IsUserInRole(_document.LoginName, li.Value))
|
||||
{
|
||||
Roles.RemoveUserFromRole(_document.LoginName, li.Value);
|
||||
}
|
||||
}
|
||||
UpdateRoles(_member);
|
||||
|
||||
//The value of the properties has been set on IData through IDataEditor in the ContentControl
|
||||
//so we need to 'retrieve' that value and set it on the property of the new IContent object.
|
||||
//NOTE This is a workaround for the legacy approach to saving values through the DataType instead of the Property
|
||||
//- (The DataType shouldn't be responsible for saving the value - especically directly to the db).
|
||||
foreach (var item in _contentControl.DataTypes)
|
||||
{
|
||||
_document.getProperty(item.Key).Value = item.Value.Data.Value;
|
||||
}
|
||||
//The value of the properties has been set on IData through IDataEditor in the ContentControl
|
||||
//so we need to 'retrieve' that value and set it on the property of the new IContent object.
|
||||
//NOTE This is a workaround for the legacy approach to saving values through the DataType instead of the Property
|
||||
//- (The DataType shouldn't be responsible for saving the value - especically directly to the db).
|
||||
foreach (var item in _contentControl.DataTypes)
|
||||
{
|
||||
_document.getProperty(item.Key).Value = item.Value.Data.Value;
|
||||
}
|
||||
|
||||
// refresh cache
|
||||
_document.XmlGenerate(new System.Xml.XmlDocument());
|
||||
@@ -316,24 +318,10 @@ namespace umbraco.cms.presentation.members
|
||||
}
|
||||
else
|
||||
{
|
||||
_member.Email = MemberEmail.Text;
|
||||
Membership.UpdateUser(_member);
|
||||
// Groups
|
||||
foreach (ListItem li in _memberGroups.Items)
|
||||
{
|
||||
if (("," + _memberGroups.Value + ",").IndexOf("," + li.Value + ",", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
if (Roles.IsUserInRole(_member.UserName, li.Value) == false)
|
||||
Roles.AddUserToRole(_member.UserName, li.Value);
|
||||
}
|
||||
else if (Roles.IsUserInRole(_member.UserName, li.Value))
|
||||
{
|
||||
Roles.RemoveUserFromRole(_member.UserName, li.Value);
|
||||
}
|
||||
}
|
||||
UpdateRoles(_member);
|
||||
}
|
||||
|
||||
ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "editMemberSaved", base.getUser()), "");
|
||||
ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "editMemberSaved", UmbracoUser), "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ namespace umbraco.cms.presentation.user
|
||||
|
||||
if (!IsPostBack)
|
||||
{
|
||||
MembershipUser user = BackOfficeProvider.GetUser(u.LoginName, true);
|
||||
MembershipUser user = BackOfficeProvider.GetUser(u.LoginName, false);
|
||||
uname.Text = u.Name;
|
||||
lname.Text = (user == null) ? u.LoginName : user.UserName;
|
||||
email.Text = (user == null) ? u.Email : user.Email;
|
||||
@@ -480,7 +480,7 @@ namespace umbraco.cms.presentation.user
|
||||
{
|
||||
try
|
||||
{
|
||||
var membershipUser = BackOfficeProvider.GetUser(u.LoginName, true);
|
||||
var membershipUser = BackOfficeProvider.GetUser(u.LoginName, false);
|
||||
if (membershipUser == null)
|
||||
{
|
||||
throw new ProviderException("Could not find user in the membership provider with login name " + u.LoginName);
|
||||
|
||||
Reference in New Issue
Block a user