V8: Use current client culture when searching content pickers (#7123)

* Use current client culture when searching content pickers

* Use string interpolation
This commit is contained in:
Kenn Jacobsen
2020-02-26 16:16:26 +01:00
committed by GitHub
parent 4dc5b02b89
commit 384746cd26
3 changed files with 28 additions and 6 deletions

View File

@@ -768,7 +768,8 @@ namespace Umbraco.Web.Editors
/// <returns></returns>
private IEnumerable<SearchResultEntity> ExamineSearch(string query, UmbracoEntityTypes entityType, string searchFrom = null, bool ignoreUserStartNodes = false)
{
return _treeSearcher.ExamineSearch(query, entityType, 200, 0, out _, searchFrom, ignoreUserStartNodes);
var culture = ClientCulture();
return _treeSearcher.ExamineSearch(query, entityType, 200, 0, culture, out _, searchFrom, ignoreUserStartNodes);
}
private IEnumerable<EntityBasic> GetResultForChildren(int id, UmbracoEntityTypes entityType)

View File

@@ -177,6 +177,12 @@ namespace Umbraco.Web.Models.Mapping
target.Name = source.Values.ContainsKey("nodeName") ? source.Values["nodeName"] : "[no name]";
var culture = context.GetCulture();
if(culture.IsNullOrWhiteSpace() == false)
{
target.Name = source.Values.ContainsKey($"nodeName_{culture}") ? source.Values[$"nodeName_{culture}"] : target.Name;
}
if (source.Values.TryGetValue(UmbracoExamineIndex.UmbracoFileFieldName, out var umbracoFile))
{
if (umbracoFile != null)

View File

@@ -12,6 +12,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Examine;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Models.Mapping;
using Umbraco.Web.Trees;
namespace Umbraco.Web.Search
@@ -65,6 +66,16 @@ namespace Umbraco.Web.Search
UmbracoEntityTypes entityType,
int pageSize,
long pageIndex, out long totalFound, string searchFrom = null, bool ignoreUserStartNodes = false)
{
return ExamineSearch(query, entityType, pageSize, pageIndex, culture: null, out totalFound, searchFrom, ignoreUserStartNodes);
}
public IEnumerable<SearchResultEntity> ExamineSearch(
string query,
UmbracoEntityTypes entityType,
int pageSize,
long pageIndex, string culture,
out long totalFound, string searchFrom = null, bool ignoreUserStartNodes = false)
{
var sb = new StringBuilder();
@@ -140,7 +151,7 @@ namespace Umbraco.Web.Search
case UmbracoEntityTypes.Media:
return MediaFromSearchResults(pagedResult);
case UmbracoEntityTypes.Document:
return ContentFromSearchResults(pagedResult);
return ContentFromSearchResults(pagedResult, culture);
default:
throw new NotSupportedException("The " + typeof(UmbracoTreeSearcher) + " currently does not support searching against object type " + entityType);
}
@@ -443,13 +454,17 @@ namespace Umbraco.Web.Search
/// </summary>
/// <param name="results"></param>
/// <returns></returns>
private IEnumerable<SearchResultEntity> ContentFromSearchResults(IEnumerable<ISearchResult> results)
private IEnumerable<SearchResultEntity> ContentFromSearchResults(IEnumerable<ISearchResult> results, string culture = null)
{
var defaultLang = _languageService.GetDefaultLanguageIsoCode();
foreach (var result in results)
{
var entity = _mapper.Map<SearchResultEntity>(result);
var entity = _mapper.Map<SearchResultEntity>(result, context => {
if(culture != null) {
context.SetCulture(culture);
}
}
);
var intId = entity.Id.TryConvertTo<int>();
if (intId.Success)
@@ -457,7 +472,7 @@ namespace Umbraco.Web.Search
//if it varies by culture, return the default language URL
if (result.Values.TryGetValue(UmbracoContentIndex.VariesByCultureFieldName, out var varies) && varies == "y")
{
entity.AdditionalData["Url"] = _umbracoContext.Url(intId.Result, defaultLang);
entity.AdditionalData["Url"] = _umbracoContext.Url(intId.Result, culture ?? defaultLang);
}
else
{