diff --git a/src/Umbraco.Web/Editors/MemberController.cs b/src/Umbraco.Web/Editors/MemberController.cs index 5e246c0d59..5921b9c61c 100644 --- a/src/Umbraco.Web/Editors/MemberController.cs +++ b/src/Umbraco.Web/Editors/MemberController.cs @@ -555,7 +555,7 @@ namespace Umbraco.Web.Editors var builtInAliases = Constants.Conventions.Member.GetStandardPropertyTypeStubs().Select(x => x.Key).ToArray(); foreach (var p in contentItem.PersistedContent.Properties) { - var valueMapped = currProps.SingleOrDefault(x => x.Alias == p.Alias); + var valueMapped = currProps.FirstOrDefault(x => x.Alias == p.Alias); if (builtInAliases.Contains(p.Alias) == false && valueMapped != null) { p.Value = valueMapped.Value; diff --git a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs index 49669fd427..7a1913ce1a 100644 --- a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs +++ b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs @@ -97,17 +97,8 @@ namespace Umbraco.Web.WebApi.Binders if (member == null) { throw new InvalidOperationException("Could not find member with key " + key); - } + } - var standardProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); - - //remove all membership properties, these values are set with the membership provider. - var exclude = standardProps.Select(x => x.Value.Alias).ToArray(); - - foreach (var remove in exclude) - { - member.Properties.Remove(remove); - } return member; } diff --git a/src/UmbracoExamine/Config/IndexSetExtensions.cs b/src/UmbracoExamine/Config/IndexSetExtensions.cs index f4bd2e24b2..9c087694b7 100644 --- a/src/UmbracoExamine/Config/IndexSetExtensions.cs +++ b/src/UmbracoExamine/Config/IndexSetExtensions.cs @@ -13,10 +13,12 @@ namespace UmbracoExamine.Config /// public static class IndexSetExtensions { - internal static IIndexCriteria ToIndexCriteria(this IndexSet set, IDataService svc, - StaticFieldCollection indexFieldPolicies) + internal static IIndexCriteria ToIndexCriteria(this IndexSet set, + IDataService svc, + StaticFieldCollection indexFieldPolicies, + IEnumerable additionalUserFields = null) { - return new LazyIndexCriteria(set, svc, indexFieldPolicies); + return new LazyIndexCriteria(set, svc, indexFieldPolicies, additionalUserFields); } /// diff --git a/src/UmbracoExamine/Config/LazyIndexCriteria.cs b/src/UmbracoExamine/Config/LazyIndexCriteria.cs index ee58431930..7f7a9510f1 100644 --- a/src/UmbracoExamine/Config/LazyIndexCriteria.cs +++ b/src/UmbracoExamine/Config/LazyIndexCriteria.cs @@ -12,7 +12,8 @@ namespace UmbracoExamine.Config public LazyIndexCriteria( IndexSet set, IDataService svc, - StaticFieldCollection indexFieldPolicies) + StaticFieldCollection indexFieldPolicies, + IEnumerable additionalUserFields = null) { if (set == null) throw new ArgumentNullException("set"); if (indexFieldPolicies == null) throw new ArgumentNullException("indexFieldPolicies"); @@ -21,7 +22,7 @@ namespace UmbracoExamine.Config _lazyCriteria = new Lazy(() => { var attributeFields = set.IndexAttributeFields.Cast().ToArray(); - var userFields = set.IndexUserFields.Cast().ToArray(); + var userFields = set.IndexUserFields.Cast().ToList(); var includeNodeTypes = set.IncludeNodeTypes.Cast().Select(x => x.Name).ToArray(); var excludeNodeTypes = set.ExcludeNodeTypes.Cast().Select(x => x.Name).ToArray(); var parentId = set.IndexParentId; @@ -44,7 +45,7 @@ namespace UmbracoExamine.Config } fields.Add(field); } - userFields = fields.ToArray(); + userFields = fields.ToList(); } //if there are no attribute fields defined, we'll populate them from the data source (include them all) @@ -68,6 +69,19 @@ namespace UmbracoExamine.Config attributeFields = fields.ToArray(); } + //merge in the additional user fields if any are defined + if (additionalUserFields != null) + { + foreach (var field in additionalUserFields) + { + var f = field; //copy local + if (userFields.Any(x => x.Name == f.Name) == false) + { + userFields.Add(f); + } + } + + } return new IndexCriteria( attributeFields, diff --git a/src/UmbracoExamine/UmbracoMemberIndexer.cs b/src/UmbracoExamine/UmbracoMemberIndexer.cs index 1a3c9befd2..9ff608b3ee 100644 --- a/src/UmbracoExamine/UmbracoMemberIndexer.cs +++ b/src/UmbracoExamine/UmbracoMemberIndexer.cs @@ -108,34 +108,26 @@ namespace UmbracoExamine /// protected override IIndexCriteria GetIndexerData(IndexSet indexSet) { - var indexerData = base.GetIndexerData(indexSet); - if (CanInitialize()) { - //If the fields are missing a custom _searchEmail, then add it - - if (indexerData.UserFields.Any(x => x.Name == "_searchEmail") == false) + //Add a custom _searchEmail to the index criteria no matter what is in config + var field = new IndexField { Name = "_searchEmail" }; + StaticField policy; + if (IndexFieldPolicies.TryGetValue("_searchEmail", out policy)) { - var field = new IndexField { Name = "_searchEmail" }; - - StaticField policy; - if (IndexFieldPolicies.TryGetValue("_searchEmail", out policy)) - { - field.Type = policy.Type; - field.EnableSorting = policy.EnableSorting; - } - - return new IndexCriteria( - indexerData.StandardFields, - indexerData.UserFields.Concat(new[] { field }), - indexerData.IncludeNodeTypes, - indexerData.ExcludeNodeTypes, - indexerData.ParentNodeId - ); + field.Type = policy.Type; + field.EnableSorting = policy.EnableSorting; } - } - return indexerData; + return indexSet.ToIndexCriteria(DataService, IndexFieldPolicies, + //add additional explicit fields + new []{field}); + } + else + { + return base.GetIndexerData(indexSet); + } + } /// @@ -233,8 +225,8 @@ namespace UmbracoExamine protected override XDocument GetXDocument(string xPath, string type) { throw new NotSupportedException(); - } - + } + /// /// Add the special __key and _searchEmail fields ///