|
|
|
|
@@ -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), "");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|