From e80963093daf7326157c3802750e2f4081dccdba Mon Sep 17 00:00:00 2001 From: Stephan Date: Tue, 18 Mar 2014 12:39:23 +0100 Subject: [PATCH 1/7] Fix MySql dictionary issue Conflicts: src/umbraco.cms/businesslogic/language/Item.cs --- src/umbraco.cms/businesslogic/language/Item.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/umbraco.cms/businesslogic/language/Item.cs b/src/umbraco.cms/businesslogic/language/Item.cs index 6d59b45ffa..514a19f0cc 100644 --- a/src/umbraco.cms/businesslogic/language/Item.cs +++ b/src/umbraco.cms/businesslogic/language/Item.cs @@ -133,9 +133,10 @@ namespace umbraco.cms.businesslogic.language public static void setText(int languageId, Guid key, string value) { if (!hasText(key, languageId)) throw new ArgumentException("Key does not exist"); - + + var v = ApplicationContext.Current.DatabaseContext.Database.EscapeSqlIdentifier("value"); ApplicationContext.Current.DatabaseContext.Database.Update( - "set [value] = @value where LanguageId = @languageId And UniqueId = @key", + "set " + v + " = @value where LanguageId = @languageId And UniqueId = @key", new { value = value, languageId = languageId, key = key }); } From 1a40ccc8389ec7d96166549a20f2ba2944ec8dd4 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 18 Mar 2014 17:51:33 +0100 Subject: [PATCH 2/7] Updating nuget targets files, like on v7. Also updates nuget author name. --- build/NuSpecs/UmbracoCms.Core.nuspec | 2 +- build/NuSpecs/UmbracoCms.nuspec | 4 ++-- build/NuSpecs/build/net40/UmbracoCms.targets | 11 ++++++++++- build/NuSpecs/build/net45/UmbracoCms.targets | 11 ++++++++++- build/NuSpecs/build/net451/UmbracoCms.targets | 11 ++++++++++- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec index a747183c1c..4a1dbfe961 100644 --- a/build/NuSpecs/UmbracoCms.Core.nuspec +++ b/build/NuSpecs/UmbracoCms.Core.nuspec @@ -4,7 +4,7 @@ UmbracoCms.Core 6.2.0 Umbraco Cms Core Binaries - Morten Christensen + Umbraco HQ Umbraco HQ http://umbraco.codeplex.com/license http://umbraco.com/ diff --git a/build/NuSpecs/UmbracoCms.nuspec b/build/NuSpecs/UmbracoCms.nuspec index babaf5f845..a53bef3b66 100644 --- a/build/NuSpecs/UmbracoCms.nuspec +++ b/build/NuSpecs/UmbracoCms.nuspec @@ -4,7 +4,7 @@ UmbracoCms 6.1.2 Umbraco Cms - Morten Christensen + Umbraco HQ Umbraco HQ http://umbraco.codeplex.com/license http://umbraco.com/ @@ -32,6 +32,7 @@ + @@ -40,7 +41,6 @@ - diff --git a/build/NuSpecs/build/net40/UmbracoCms.targets b/build/NuSpecs/build/net40/UmbracoCms.targets index d95c158818..f4fb27ba8c 100644 --- a/build/NuSpecs/build/net40/UmbracoCms.targets +++ b/build/NuSpecs/build/net40/UmbracoCms.targets @@ -2,9 +2,12 @@ - + + + + umbraco\%(RecursiveDir)%(Filename)%(Extension) @@ -14,6 +17,12 @@ App_Browsers\%(RecursiveDir)%(Filename)%(Extension) + + %(RecursiveDir)%(Filename)%(Extension) + + + Config\Splashes\%(RecursiveDir)%(Filename)%(Extension) + \ No newline at end of file diff --git a/build/NuSpecs/build/net45/UmbracoCms.targets b/build/NuSpecs/build/net45/UmbracoCms.targets index d95c158818..f4fb27ba8c 100644 --- a/build/NuSpecs/build/net45/UmbracoCms.targets +++ b/build/NuSpecs/build/net45/UmbracoCms.targets @@ -2,9 +2,12 @@ - + + + + umbraco\%(RecursiveDir)%(Filename)%(Extension) @@ -14,6 +17,12 @@ App_Browsers\%(RecursiveDir)%(Filename)%(Extension) + + %(RecursiveDir)%(Filename)%(Extension) + + + Config\Splashes\%(RecursiveDir)%(Filename)%(Extension) + \ No newline at end of file diff --git a/build/NuSpecs/build/net451/UmbracoCms.targets b/build/NuSpecs/build/net451/UmbracoCms.targets index d95c158818..f4fb27ba8c 100644 --- a/build/NuSpecs/build/net451/UmbracoCms.targets +++ b/build/NuSpecs/build/net451/UmbracoCms.targets @@ -2,9 +2,12 @@ - + + + + umbraco\%(RecursiveDir)%(Filename)%(Extension) @@ -14,6 +17,12 @@ App_Browsers\%(RecursiveDir)%(Filename)%(Extension) + + %(RecursiveDir)%(Filename)%(Extension) + + + Config\Splashes\%(RecursiveDir)%(Filename)%(Extension) + \ No newline at end of file From 4f008f58485ae010614150b12a96a0695f2c2403 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 18 Mar 2014 18:37:42 +0100 Subject: [PATCH 3/7] Bump version to RC --- build/Build.bat | 2 +- src/Umbraco.Core/Configuration/UmbracoVersion.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Build.bat b/build/Build.bat index bd583e3931..9ad1fd214d 100644 --- a/build/Build.bat +++ b/build/Build.bat @@ -1,6 +1,6 @@ @ECHO OFF SET release=6.2.0 -SET comment=beta +SET comment=RC SET version=%release% IF [%comment%] EQU [] (SET version=%release%) ELSE (SET version=%release%-%comment%) diff --git a/src/Umbraco.Core/Configuration/UmbracoVersion.cs b/src/Umbraco.Core/Configuration/UmbracoVersion.cs index 0b19d9f8ca..9823d31f6b 100644 --- a/src/Umbraco.Core/Configuration/UmbracoVersion.cs +++ b/src/Umbraco.Core/Configuration/UmbracoVersion.cs @@ -23,7 +23,7 @@ namespace Umbraco.Core.Configuration /// Gets the version comment (like beta or RC). /// /// The version comment. - public static string CurrentComment { get { return "beta"; } } + public static string CurrentComment { get { return "RC"; } } // Get the version of the umbraco.dll by looking at a class in that dll // Had to do it like this due to medium trust issues, see: http://haacked.com/archive/2010/11/04/assembly-location-and-medium-trust.aspx From 8b4d4e31896104e6b73567c5c8f35dbacb70bf19 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 18 Mar 2014 18:38:16 +0100 Subject: [PATCH 4/7] Update readme and remove non-functioning backups from install.ps1 --- build/NuSpecs/tools/Readme.txt | 11 ++++++----- build/NuSpecs/tools/install.ps1 | 16 ---------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/build/NuSpecs/tools/Readme.txt b/build/NuSpecs/tools/Readme.txt index 413da7442b..939ea026b6 100644 --- a/build/NuSpecs/tools/Readme.txt +++ b/build/NuSpecs/tools/Readme.txt @@ -1,8 +1,9 @@ A note about running Umbraco from Visual Studio. -When upgrading your website using nuget a backup of config files and web.config will be created. Only the web.config will -be overwritten by default to ensure that it has the necessary settings from the current release. This means that you'll -have to merge the files if you made any changes to the previous config files. +When upgrading your website using NuGet, make sure to backup all of your config files and web.config. +Only the web.config will be overwritten by default to ensure that it has the necessary settings from the current release. +This means that you'll have to merge the files if you made any changes to the previous config files. + The config files found in the config folder will usually not be changed for patch releases, so they can usually be skipped, but the web.config will have to have its previous "umbracoConfigurationStatus"-appsetting and "umbracoDbDSN" connection string copied over (as a minimum). @@ -10,8 +11,8 @@ copied over (as a minimum). This nuget package includes build targets that extends the creation of a deploy package, which is generated by Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use Publish this won't affect you. -These folders will now be automatically included when creating a deploy package or publishing to the file system: -umbraco and umbraco_client. +These things will now be automatically included when creating a deploy package or publishing to the file system: +umbraco, umbraco_client, config\splashes and global.asax. Please read the release notes on our.umbraco.org: http://our.umbraco.org/contribute/releases diff --git a/build/NuSpecs/tools/install.ps1 b/build/NuSpecs/tools/install.ps1 index 19af134c2a..aaba10d364 100644 --- a/build/NuSpecs/tools/install.ps1 +++ b/build/NuSpecs/tools/install.ps1 @@ -1,22 +1,6 @@ param($rootPath, $toolsPath, $package, $project) if ($project) { - # Create a backup of extisting umbraco config files - $configPath = Join-Path (Split-Path $project.FullName -Parent) "\config" - $backupPath = Join-Path $configPath "\backup" - Get-ChildItem -path $configPath | - Where -filterscript {($_.Name.EndsWith("config"))} | Foreach-Object { - $newFileName = Join-Path $backupPath $_.Name.replace(".config",".config.backup") - New-Item -ItemType File -Path $newFileName -Force - Copy-Item $_.FullName $newFileName -Force - } - - # Create a backup of original web.config - $projectDestinationPath = Split-Path $project.FullName -Parent - $webConfigSource = Join-Path $projectDestinationPath "web.config" - $webConfigDestination = Join-Path $projectDestinationPath "web.config.backup" - Copy-Item $webConfigSource $webConfigDestination - # Copy umbraco files from package to project folder $projectDestinationPath = Split-Path $project.FullName -Parent $umbracoFilesPath = Join-Path $rootPath "UmbracoFiles\*" From 7c5942b05f62f96e92e8e2045e2349a89745d109 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 18 Mar 2014 18:40:20 +0100 Subject: [PATCH 5/7] Updating minimum required versions of dependencies to be the same as v7. --- build/NuSpecs/UmbracoCms.Core.nuspec | 7 +++++-- build/NuSpecs/UmbracoCms.nuspec | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec index 4a1dbfe961..94e90ac258 100644 --- a/build/NuSpecs/UmbracoCms.Core.nuspec +++ b/build/NuSpecs/UmbracoCms.Core.nuspec @@ -15,9 +15,11 @@ en-US umbraco - - + + + + @@ -26,6 +28,7 @@ + diff --git a/build/NuSpecs/UmbracoCms.nuspec b/build/NuSpecs/UmbracoCms.nuspec index a53bef3b66..84d60e4fd4 100644 --- a/build/NuSpecs/UmbracoCms.nuspec +++ b/build/NuSpecs/UmbracoCms.nuspec @@ -23,7 +23,7 @@ - + From 14141fcaa5b73944cdf355bbca96ab181aa1ee0f Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 19 Mar 2014 09:24:57 +1100 Subject: [PATCH 6/7] Fixes the dictionary query syntax properly for all db's --- src/umbraco.cms/businesslogic/language/Item.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/umbraco.cms/businesslogic/language/Item.cs b/src/umbraco.cms/businesslogic/language/Item.cs index 514a19f0cc..b0f2dcbb66 100644 --- a/src/umbraco.cms/businesslogic/language/Item.cs +++ b/src/umbraco.cms/businesslogic/language/Item.cs @@ -5,7 +5,8 @@ using System.Data; using System.Linq; using Umbraco.Core; - +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; using umbraco.DataLayer; using umbraco.BusinessLogic; using System.Collections.Generic; @@ -133,11 +134,11 @@ namespace umbraco.cms.businesslogic.language public static void setText(int languageId, Guid key, string value) { if (!hasText(key, languageId)) throw new ArgumentException("Key does not exist"); - - var v = ApplicationContext.Current.DatabaseContext.Database.EscapeSqlIdentifier("value"); + ApplicationContext.Current.DatabaseContext.Database.Update( - "set " + v + " = @value where LanguageId = @languageId And UniqueId = @key", - new { value = value, languageId = languageId, key = key }); + string.Format("set {0} = @value where LanguageId = @languageId And UniqueId = @key", + SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName("value")), + new {value = value, languageId = languageId, key = key}); } /// From 668935548deb23bfff9dd4232782a149fb745cca Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 19 Mar 2014 09:28:13 +1100 Subject: [PATCH 7/7] Fixes: U4-4394 7.0.4: Inconsistency in member tree listings Conflicts: src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs src/Umbraco.Web/Trees/MemberTreeController.cs --- .../Querying/BaseExpressionHelper.cs | 35 +++++++++++++++++++ .../Querying/ModelToSqlExpressionHelper.cs | 35 ------------------- .../Querying/PocoToSqlExpressionHelper.cs | 25 +++++++++++-- .../Interfaces/IMemberRepository.cs | 4 +++ .../Repositories/MemberRepository.cs | 19 ++++++---- src/Umbraco.Core/Services/MemberService.cs | 34 +++++++++++++----- .../businesslogic/member/Member.cs | 3 +- 7 files changed, 102 insertions(+), 53 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs index 08a08e49d3..57f076064b 100644 --- a/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs +++ b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs @@ -9,6 +9,41 @@ namespace Umbraco.Core.Persistence.Querying /// internal class BaseExpressionHelper { + protected string HandleStringComparison(string col, string val, string verb, TextColumnType columnType) + { + switch (verb) + { + case "SqlWildcard": + return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnWildcardComparison(col, RemoveQuote(val), columnType); + case "Equals": + return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnEqualComparison(col, RemoveQuote(val), columnType); + case "StartsWith": + return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnStartsWithComparison(col, RemoveQuote(val), columnType); + case "EndsWith": + return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnEndsWithComparison(col, RemoveQuote(val), columnType); + case "Contains": + return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnContainsComparison(col, RemoveQuote(val), columnType); + case "InvariantEquals": + case "SqlEquals": + //recurse + return HandleStringComparison(col, val, "Equals", columnType); + case "InvariantStartsWith": + case "SqlStartsWith": + //recurse + return HandleStringComparison(col, val, "StartsWith", columnType); + case "InvariantEndsWith": + case "SqlEndsWith": + //recurse + return HandleStringComparison(col, val, "EndsWith", columnType); + case "InvariantContains": + case "SqlContains": + //recurse + return HandleStringComparison(col, val, "Contains", columnType); + default: + throw new ArgumentOutOfRangeException("verb"); + } + } + public virtual string GetQuotedValue(object value, Type fieldType, Func escapeCallback = null, Func shouldQuoteCallback = null) { if (value == null) return "NULL"; diff --git a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs index 6ab3fcc592..e3ff272cee 100644 --- a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs +++ b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs @@ -227,41 +227,6 @@ namespace Umbraco.Core.Persistence.Querying } - private string HandleStringComparison(string col, string val, string verb, TextColumnType columnType) - { - switch (verb) - { - case "SqlWildcard": - return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnWildcardComparison(col, RemoveQuote(val), columnType); - case "Equals": - return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnEqualComparison(col, RemoveQuote(val), columnType); - case "StartsWith": - return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnStartsWithComparison(col, RemoveQuote(val), columnType); - case "EndsWith": - return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnEndsWithComparison(col, RemoveQuote(val), columnType); - case "Contains": - return SqlSyntaxContext.SqlSyntaxProvider.GetStringColumnContainsComparison(col, RemoveQuote(val), columnType); - case "InvariantEquals": - case "SqlEquals": - //recurse - return HandleStringComparison(col, val, "Equals", columnType); - case "InvariantStartsWith": - case "SqlStartsWith": - //recurse - return HandleStringComparison(col, val, "StartsWith", columnType); - case "InvariantEndsWith": - case "SqlEndsWith": - //recurse - return HandleStringComparison(col, val, "EndsWith", columnType); - case "InvariantContains": - case "SqlContains": - //recurse - return HandleStringComparison(col, val, "Contains", columnType); - default: - throw new ArgumentOutOfRangeException("verb"); - } - } - protected virtual string VisitMethodCall(MethodCallExpression m) { List args = this.VisitExpressionList(m.Arguments); diff --git a/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs index ecd5bb0087..9a27cc8183 100644 --- a/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs +++ b/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs @@ -253,12 +253,31 @@ namespace Umbraco.Core.Persistence.Querying return string.Format("upper({0})", r); case "ToLower": return string.Format("lower({0})", r); + case "SqlWildcard": case "StartsWith": - return string.Format("upper({0}) like '{1}%'", r, RemoveQuote(args[0].ToString().ToUpper())); case "EndsWith": - return string.Format("upper({0}) like '%{1}'", r, RemoveQuote(args[0].ToString()).ToUpper()); case "Contains": - return string.Format("upper({0}) like '%{1}%'", r, RemoveQuote(args[0].ToString()).ToUpper()); + case "Equals": + case "SqlStartsWith": + case "SqlEndsWith": + case "SqlContains": + case "SqlEquals": + case "InvariantStartsWith": + case "InvariantEndsWith": + case "InvariantContains": + case "InvariantEquals": + //default + var colType = TextColumnType.NVarchar; + //then check if this arg has been passed in + if (m.Arguments.Count > 1) + { + var colTypeArg = m.Arguments.FirstOrDefault(x => x is ConstantExpression && x.Type == typeof(TextColumnType)); + if (colTypeArg != null) + { + colType = (TextColumnType)((ConstantExpression)colTypeArg).Value; + } + } + return HandleStringComparison(r.ToString(), args[0].ToString(), m.Method.Name, colType); case "Substring": var startIndex = Int32.Parse(args[0].ToString()) + 1; if (args.Count == 2) diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs index 2dd7a7f83b..9534aead90 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs @@ -50,5 +50,9 @@ namespace Umbraco.Core.Persistence.Repositories /// IEnumerable GetPagedResultsByQuery(IQuery query, int pageIndex, int pageSize, out int totalRecords, Expression> orderBy); + IEnumerable GetPagedResultsByQuery( + Sql sql, int pageIndex, int pageSize, out int totalRecords, + Func, int[]> resolveIds); + } } \ 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 4a206d1f61..c3da14da23 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -559,7 +559,6 @@ namespace Umbraco.Core.Persistence.Repositories resultQuery = sql; } - //get the referenced column name var expressionMember = ExpressionHelper.GetMemberInfo(orderBy); //now find the mapped column name @@ -571,8 +570,19 @@ namespace Umbraco.Core.Persistence.Repositories } //need to ensure the order by is in brackets, see: https://github.com/toptensoftware/PetaPoco/issues/177 resultQuery.OrderBy(string.Format("({0})", mappedField)); + + var result = GetPagedResultsByQuery(resultQuery, pageIndex, pageSize, out totalRecords, + dtos => dtos.Select(x => x.NodeId).ToArray()); + + //now we need to ensure this result is also ordered by the same order by clause + return result.OrderBy(orderBy.Compile()); + } - var pagedResult = Database.Page(pageIndex + 1, pageSize, resultQuery); + public IEnumerable GetPagedResultsByQuery( + Sql sql, int pageIndex, int pageSize, out int totalRecords, + Func, int[]> resolveIds) + { + var pagedResult = Database.Page(pageIndex + 1, pageSize, sql); totalRecords = Convert.ToInt32(pagedResult.TotalItems); @@ -581,10 +591,7 @@ namespace Umbraco.Core.Persistence.Repositories { return Enumerable.Empty(); } - var result = GetAll(pagedResult.Items.Select(x => x.NodeId).ToArray()); - - //now we need to ensure this result is also ordered by the same order by clause - return result.OrderBy(orderBy.Compile()); + return GetAll(resolveIds(pagedResult.Items)).ToArray(); } private IMember BuildFromDto(List dtos) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 5f47bb115e..f3e5f94691 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -251,30 +251,48 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) { - var query = new Query(); - + //var query = new Query(); + var sql = new Sql() + .Select("*") + .From() + .Where(dto => dto.NodeObjectType == new Guid(Constants.ObjectTypes.Member)); + switch (matchType) { case StringPropertyMatchType.Exact: - query.Where(member => member.Name.Equals(displayNameToMatch)); + sql.Where(dto => dto.Text.Equals(displayNameToMatch)); + + //query.Where(member => member.Name.Equals(displayNameToMatch)); break; case StringPropertyMatchType.Contains: - query.Where(member => member.Name.Contains(displayNameToMatch)); + sql.Where(dto => dto.Text.Contains(displayNameToMatch)); + + //query.Where(member => member.Name.Contains(displayNameToMatch)); break; case StringPropertyMatchType.StartsWith: - query.Where(member => member.Name.StartsWith(displayNameToMatch)); + sql.Where(dto => dto.Text.StartsWith(displayNameToMatch)); + + //query.Where(member => member.Name.StartsWith(displayNameToMatch)); break; case StringPropertyMatchType.EndsWith: - query.Where(member => member.Name.EndsWith(displayNameToMatch)); + sql.Where(dto => dto.Text.EndsWith(displayNameToMatch)); + + //query.Where(member => member.Name.EndsWith(displayNameToMatch)); break; case StringPropertyMatchType.Wildcard: - query.Where(member => member.Name.SqlWildcard(displayNameToMatch, TextColumnType.NVarchar)); + sql.Where(dto => dto.Text.SqlWildcard(displayNameToMatch, TextColumnType.NVarchar)); + + //query.Where(member => member.Name.SqlWildcard(displayNameToMatch, TextColumnType.NVarchar)); break; default: throw new ArgumentOutOfRangeException("matchType"); } - return repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalRecords, dto => dto.Name); + var result = repository.GetPagedResultsByQuery(sql, pageIndex, pageSize, out totalRecords, + dtos => dtos.Select(x => x.NodeId).ToArray()); + + //ensure this result is sorted correct just in case + return result.OrderBy(x => x.Name); } } diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs index 10419b8922..c0d102613e 100644 --- a/src/umbraco.cms/businesslogic/member/Member.cs +++ b/src/umbraco.cms/businesslogic/member/Member.cs @@ -159,7 +159,8 @@ namespace umbraco.cms.businesslogic.member public static Member[] getMemberFromFirstLetter(char letter) { int totalRecs; - return ApplicationContext.Current.Services.MemberService.FindByUsername( + + return ApplicationContext.Current.Services.MemberService.FindMembersByDisplayName( letter.ToString(CultureInfo.InvariantCulture), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.StartsWith) .Select(x => new Member(x)) .ToArray();