From a79e349f3de550f5dbd9d326f66756aeb331bf17 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 18 Jul 2013 11:00:56 +0200 Subject: [PATCH 1/3] U4-2467 v4.11.1: Membership search does not search on email address anymore --- .../umbraco/members/MemberSearch.ascx.cs | 87 +++++++++++-------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/MemberSearch.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/members/MemberSearch.ascx.cs index 46c9ff7f70..c165310b3c 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/MemberSearch.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/members/MemberSearch.ascx.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Web; using System.Web.UI; -using System.Web.UI.WebControls; using Examine.LuceneEngine.SearchCriteria; +using Examine.SearchCriteria; using umbraco.cms.businesslogic.member; using System.Web.Security; namespace umbraco.presentation.umbraco.members { - public partial class MemberSearch : System.Web.UI.UserControl + public partial class MemberSearch : UserControl { protected void Page_Load(object sender, EventArgs e) { @@ -19,46 +18,30 @@ namespace umbraco.presentation.umbraco.members ButtonSearch.Text = ui.Text("search"); } - protected void ButtonSearch_Click(object sender, System.EventArgs e) + protected void ButtonSearch_Click(object sender, EventArgs e) { resultsPane.Visible = true; - if (!Member.InUmbracoMemberMode()) + if (Member.InUmbracoMemberMode()) { - - IEnumerable results; - if (searchQuery.Text.Contains("@")) - { - results = from MembershipUser x in Membership.FindUsersByEmail(searchQuery.Text) - select new MemberSearchResult() { Id = x.UserName, Email = x.Email, LoginName = x.UserName, Name = x.UserName }; - } - else - { - results = from MembershipUser x in Membership.FindUsersByName(searchQuery.Text + "%") - select new MemberSearchResult() { Id = x.UserName, Email = x.Email, LoginName = x.UserName, Name = x.UserName }; - } - - rp_members.DataSource = results; - rp_members.DataBind(); - } - else - { - - string query = searchQuery.Text.ToLower(); + var query = searchQuery.Text.ToLower(); var internalSearcher = UmbracoContext.Current.InternalMemberSearchProvider; - IEnumerable results; - if (!String.IsNullOrEmpty(query)) + if (String.IsNullOrEmpty(query) == false) { - var criteria = internalSearcher.CreateSearchCriteria("member", Examine.SearchCriteria.BooleanOperation.And); - var operation = criteria.Field("__nodeName", query.MultipleCharacterWildcard()); - results = internalSearcher.Search(operation.Compile()).Select(x => new MemberSearchResult() - { - Id = x["id"], - Name = x["nodeName"], - Email = x["email"], - LoginName = x["loginName"] - }); + var criteria = internalSearcher.CreateSearchCriteria("member", BooleanOperation.Or); + var fields = new[] {"id", "__nodeName", "email"}; + var term = new[] {query.ToLower().Escape()}; + var operation = criteria.GroupedOr(fields, term).Compile(); + + var results = internalSearcher.Search(operation) + .Select(x => new MemberSearchResult + { + Id = x["id"], + Name = x["nodeName"], + Email = x["email"], + LoginName = x["loginName"] + }); rp_members.DataSource = results; rp_members.DataBind(); } @@ -67,7 +50,39 @@ namespace umbraco.presentation.umbraco.members resultsPane.Visible = false; } } + else + { + IEnumerable results; + if (searchQuery.Text.Contains("@")) + { + results = from MembershipUser x in Membership.FindUsersByEmail(searchQuery.Text) + select + new MemberSearchResult() + { + Id = x.UserName, + Email = x.Email, + LoginName = x.UserName, + Name = x.UserName + }; + } + else + { + results = from MembershipUser x in Membership.FindUsersByName(searchQuery.Text + "%") + select + new MemberSearchResult() + { + Id = x.UserName, + Email = x.Email, + LoginName = x.UserName, + Name = x.UserName + }; + } + + rp_members.DataSource = results; + rp_members.DataBind(); + } } + public class MemberSearchResult { public string Id { get; set; } From e48f08b6579b3698ec03b6d86c6bb8fbefadb471 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 18 Jul 2013 16:07:39 +0200 Subject: [PATCH 2/3] When using Public Access > Single User Protection the email of the member is empty, this caused errors because the result of GetMembersFromEmail is null --- .../umbraco/members/EditMember.aspx.cs | 9 ++++++++- src/umbraco.cms/businesslogic/member/Member.cs | 11 ++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs index f8c5e56cda..cf54379d96 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs @@ -1,5 +1,6 @@ using System; using System.Web.UI; +using System.Web.UI.Design.WebControls; using System.Web.UI.WebControls; using Umbraco.Core.IO; using umbraco.cms.businesslogic.member; @@ -144,8 +145,14 @@ namespace umbraco.cms.presentation.members { var oldEmail = _document.Email.ToLower(); var newEmail = MemberEmail.Text.ToLower(); + var requireUniqueEmail = Membership.Providers[Member.UmbracoMemberProviderName].RequiresUniqueEmail; - var howManyMembersWithEmail = Member.GetMembersFromEmail(newEmail).Length; + + var howManyMembersWithEmail = 0; + var membersWithEmail = Member.GetMembersFromEmail(newEmail); + if (membersWithEmail != null) + howManyMembersWithEmail = membersWithEmail.Length; + if (((oldEmail == newEmail && howManyMembersWithEmail > 1) || (oldEmail != newEmail && howManyMembersWithEmail > 0)) && requireUniqueEmail) diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs index dd78840be4..947330b292 100644 --- a/src/umbraco.cms/businesslogic/member/Member.cs +++ b/src/umbraco.cms/businesslogic/member/Member.cs @@ -551,14 +551,19 @@ namespace umbraco.cms.businesslogic.member SqlHelper.CreateParameter("@id", Id)); } - return m_Email.ToLower(); + return string.IsNullOrWhiteSpace(m_Email) ? m_Email : m_Email.ToLower(); } set { var oldEmail = Email; - var newEmail = value.ToLower(); + var newEmail = string.IsNullOrWhiteSpace(value) ? value : value.ToLower(); var requireUniqueEmail = Membership.Providers[UmbracoMemberProviderName].RequiresUniqueEmail; - var howManyMembersWithEmail = Member.GetMembersFromEmail(newEmail).Length; + + var howManyMembersWithEmail = 0; + var membersWithEmail = GetMembersFromEmail(newEmail); + if (membersWithEmail != null) + howManyMembersWithEmail = membersWithEmail.Length; + if (((oldEmail == newEmail && howManyMembersWithEmail > 1) || (oldEmail != newEmail && howManyMembersWithEmail > 0)) && requireUniqueEmail) From d88494e90ed2a096cc1cec4c43c7c5e1436acf79 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 18 Jul 2013 17:09:26 +0200 Subject: [PATCH 3/3] U4-638 Bug (and fix/solution): Saving inline base64 image (or any attribute value with equal sign at the end) --- src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs index ac8bb63ee3..437e0da9fe 100644 --- a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs +++ b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs @@ -31,7 +31,7 @@ namespace umbraco.editorControls.tinymce // gather all attributes // TODO: This should be replaced with a general helper method - but for now we'll wanna leave umbraco.dll alone for this patch var ht = new Hashtable(); - var matches = Regex.Matches(tag.Value.Replace(">", " >"), "(?\\S*)=\"(?[^\"]*)\"|(?\\S*)=(?[^\"|\\s]*)\\s", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + var matches = Regex.Matches(tag.Value.Replace(">", " >"), "(?\\S*?)=\"(?[^\"]*)\"|(?\\S*?)=(?[^\"|\\s]*)\\s", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); foreach (Match attributeSet in matches) { ht.Add(attributeSet.Groups["attributeName"].Value.ToLower(),