diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs
index 55f3099640..ed98d81551 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs
@@ -12,5 +12,12 @@ namespace Umbraco.Core.Persistence.Repositories
///
IEnumerable GetByMemberGroup(string groupName);
+ ///
+ /// Checks if a member with the username exists
+ ///
+ ///
+ ///
+ bool Exists(string username);
+
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
index d52526aa5b..eafaf74a4f 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
@@ -413,6 +413,16 @@ namespace Umbraco.Core.Persistence.Repositories
return BuildFromDtos(dtos);
}
+ public bool Exists(string username)
+ {
+ var sql = new Sql();
+ sql.Select("COUNT(*)")
+ .From()
+ .Where(x => x.LoginName == username);
+
+ return Database.ExecuteScalar(sql) > 0;
+ }
+
private IMember BuildFromDto(List dtos)
{
if (dtos == null || dtos.Any() == false)
diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs
index cc8e665eb0..feefb659fc 100644
--- a/src/Umbraco.Core/Services/IMemberService.cs
+++ b/src/Umbraco.Core/Services/IMemberService.cs
@@ -31,6 +31,13 @@ namespace Umbraco.Core.Services
///
internal interface IMembershipMemberService : IService
{
+ ///
+ /// Checks if a member with the username exists
+ ///
+ ///
+ ///
+ bool Exists(string username);
+
IMember CreateMember(string username, string email, string password, string memberTypeAlias, int userId = 0);
IMember GetById(object id);
diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index 5c9f77a3fd..61c0725ba8 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -35,6 +35,19 @@ namespace Umbraco.Core.Services
#region IMemberService Implementation
+ ///
+ /// Checks if a member with the username exists
+ ///
+ ///
+ ///
+ public bool Exists(string username)
+ {
+ using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork()))
+ {
+ return repository.Exists(username);
+ }
+ }
+
///
/// Checks if a member with the id exists
///
diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs
index 337eb6fb48..cf1f912bb1 100644
--- a/src/umbraco.cms/businesslogic/member/Member.cs
+++ b/src/umbraco.cms/businesslogic/member/Member.cs
@@ -9,7 +9,6 @@ using System.Xml;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
-using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
using umbraco.cms.businesslogic.cache;
using umbraco.BusinessLogic;
@@ -58,7 +57,6 @@ namespace umbraco.cms.businesslogic.member
private string _password;
private string _loginName;
private Hashtable _groups = null;
- protected internal IMember Content;
#endregion
#region Constructors
@@ -214,16 +212,16 @@ namespace umbraco.cms.businesslogic.member
{
if (mbt == null) throw new ArgumentNullException("mbt");
- var loginName = (!string.IsNullOrEmpty(LoginName)) ? LoginName : Name;
+ var loginName = (!String.IsNullOrEmpty(LoginName)) ? LoginName : Name;
- if (string.IsNullOrEmpty(loginName))
+ if (String.IsNullOrEmpty(loginName))
throw new ArgumentException("The loginname must be different from an empty string", "loginName");
// Test for e-mail
if (Email != "" && GetMemberFromEmail(Email) != null && Membership.Providers[UmbracoMemberProviderName].RequiresUniqueEmail)
- throw new Exception(string.Format("Duplicate Email! A member with the e-mail {0} already exists", Email));
+ throw new Exception(String.Format("Duplicate Email! A member with the e-mail {0} already exists", Email));
else if (GetMemberFromLoginName(loginName) != null)
- throw new Exception(string.Format("Duplicate User name! A member with the user name {0} already exists", loginName));
+ throw new Exception(String.Format("Duplicate User name! A member with the user name {0} already exists", loginName));
// Lowercased to prevent duplicates
Email = Email.ToLower();
@@ -267,7 +265,7 @@ namespace umbraco.cms.businesslogic.member
/// The member with the specified loginname - null if no Member with the login exists
public static Member GetMemberFromLoginName(string loginName)
{
- if (string.IsNullOrEmpty(loginName))
+ if (String.IsNullOrEmpty(loginName))
throw new ArgumentException("The username of a Member must be different from an emptry string", "loginName");
if (IsMember(loginName))
{
@@ -365,13 +363,14 @@ namespace umbraco.cms.businesslogic.member
}
else
{
- LogHelper.Debug("Incorrect login/password attempt or member is locked out or not approved (" + loginName + ")", true);
+ HttpContext.Current.Trace.Warn("Incorrect login/password");
return null;
}
}
else
{
- LogHelper.Debug("No member with loginname: " + loginName + " Exists", true);
+ HttpContext.Current.Trace.Warn("No member with loginname: " + loginName + " Exists");
+ // throw new ArgumentException("No member with Loginname: " + LoginName + " exists");
return null;
}
}
@@ -412,7 +411,7 @@ namespace umbraco.cms.businesslogic.member
public static bool IsMember(string loginName)
{
Mandate.ParameterNotNullOrEmpty(loginName, "loginName");
- return ApplicationContext.Current.Services.MemberService.GetByUsername(loginName) != null;
+ return ApplicationContext.Current.Services.MemberService.Exists(loginName);
}
///
@@ -506,7 +505,7 @@ namespace umbraco.cms.businesslogic.member
}
set
{
- if (string.IsNullOrEmpty(value))
+ if (String.IsNullOrEmpty(value))
throw new ArgumentException("The loginname must be different from an empty string", "LoginName");
if (value.Contains(","))
throw new ArgumentException("The parameter 'LoginName' must not contain commas.");
@@ -538,7 +537,7 @@ namespace umbraco.cms.businesslogic.member
{
get
{
- if (string.IsNullOrEmpty(_email))
+ if (String.IsNullOrEmpty(_email))
{
_email = SqlHelper.ExecuteScalar(
"select Email from cmsMember where nodeId = @id",
@@ -564,7 +563,7 @@ namespace umbraco.cms.businesslogic.member
{
// If the value hasn't changed and there are more than 1 member with that email, then throw
// If the value has changed and there are any member with that new email, then throw
- throw new Exception(string.Format("Duplicate Email! A member with the e-mail {0} already exists", newEmail));
+ throw new Exception(String.Format("Duplicate Email! A member with the e-mail {0} already exists", newEmail));
}
SqlHelper.ExecuteNonQuery(
"update cmsMember set Email = @email where nodeId = @id",
@@ -577,43 +576,28 @@ namespace umbraco.cms.businesslogic.member
#region Public Methods
- [Obsolete("Obsolete", false)]
protected override void setupNode()
{
- if (Id == -1)
+ base.setupNode();
+
+ using (var dr = SqlHelper.ExecuteReader(
+ @"SELECT Email, LoginName, Password FROM cmsMember WHERE nodeId=@nodeId",
+ SqlHelper.CreateParameter("@nodeId", this.Id)))
{
- base.setupNode();
- return;
+ if (dr.Read())
+ {
+ if (!dr.IsNull("Email"))
+ _email = dr.GetString("Email");
+ _loginName = dr.GetString("LoginName");
+ _password = dr.GetString("Password");
+ }
+ else
+ {
+ throw new ArgumentException(string.Format("No Member exists with Id '{0}'", this.Id));
+ }
}
-
- var content = ApplicationContext.Current.Services.MemberService.GetById(Id);
-
- if (content == null)
- throw new ArgumentException(string.Format("No Member exists with id '{0}'", Id));
-
- SetupNode(content);
}
- private void SetupNode(IMember content)
- {
- Content = content;
- //Also need to set the ContentBase item to this one so all the propery values load from it
- ContentBase = Content;
-
- //Setting private properties from IContentBase replacing CMSNode.setupNode() / CMSNode.PopulateCMSNodeFromReader()
- base.PopulateCMSNodeFromUmbracoEntity(Content, _objectType);
-
- //If the version is empty we update with the latest version from the current IContent.
- if (Version == Guid.Empty)
- Version = Content.Version;
-
- _email = Content.Email;
- _loginName = Content.Username;
- _password = Content.Password;
-
- }
-
-
///
/// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility
///