diff --git a/src/Umbraco.Core/Trees/ISearchableTreeWithCulture.cs b/src/Umbraco.Core/Trees/ISearchableTreeWithCulture.cs
new file mode 100644
index 0000000000..6ac4ea3be1
--- /dev/null
+++ b/src/Umbraco.Core/Trees/ISearchableTreeWithCulture.cs
@@ -0,0 +1,21 @@
+using Umbraco.Cms.Core.Models.ContentEditing;
+
+namespace Umbraco.Cms.Core.Trees
+{
+ [Obsolete("This interface will be merged into ISearchableTree in Umbraco 12")]
+ public interface ISearchableTreeWithCulture : ISearchableTree
+ {
+ ///
+ /// Searches for results based on the entity type
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// A starting point for the search, generally a node id, but for members this is a member type alias
+ ///
+ ///
+ ///
+ Task SearchAsync(string query, int pageSize, long pageIndex, string? searchFrom = null, string? culture = null);
+ }
+}
diff --git a/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs b/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
index a3716f53aa..08286108c7 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
@@ -204,6 +204,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
return result;
}
+ var culture = ClientCulture();
var allowedSections = _backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.AllowedSections.ToArray();
var searchTasks = new List();
@@ -221,7 +222,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
var rootNodeDisplayName = Tree.GetRootNodeDisplayName(tree, _localizedTextService);
if (rootNodeDisplayName is not null)
{
- searchTasks.Add(ExecuteSearchAsync(query, searchableTree, rootNodeDisplayName,result));
+ searchTasks.Add(ExecuteSearchAsync(query, culture, searchableTree, rootNodeDisplayName,result));
}
}
}
@@ -232,13 +233,22 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
private static async Task ExecuteSearchAsync(
string query,
+ string? culture,
KeyValuePair searchableTree,
string rootNodeDisplayName,
ConcurrentDictionary result)
{
+ ISearchableTree searcher = searchableTree.Value.SearchableTree;
+ const int pageSize = 200;
+ IEnumerable results = (
+ searcher is ISearchableTreeWithCulture searcherWithCulture
+ ? await searcherWithCulture.SearchAsync(query, pageSize, 0, culture: culture)
+ : await searcher.SearchAsync(query, pageSize, 0))
+ .WhereNotNull();
+
var searchResult = new TreeSearchResult
{
- Results = (await searchableTree.Value.SearchableTree.SearchAsync(query, 200, 0)).WhereNotNull(),
+ Results = results,
TreeAlias = searchableTree.Key,
AppAlias = searchableTree.Value.AppAlias,
JsFormatterService = searchableTree.Value.FormatterService,
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
index 4b61ef2e17..4fccfb6e24 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
@@ -32,7 +32,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
[PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
[SearchableTree("searchResultFormatter", "configureContentResult", 10)]
- public class ContentTreeController : ContentTreeControllerBase, ISearchableTree
+ public class ContentTreeController : ContentTreeControllerBase, ISearchableTreeWithCulture
{
private readonly UmbracoTreeSearcher _treeSearcher;
private readonly ActionCollection _actions;
@@ -369,8 +369,11 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
}
public async Task SearchAsync(string query, int pageSize, long pageIndex, string? searchFrom = null)
+ => await SearchAsync(query, pageSize, pageIndex, searchFrom, null);
+
+ public async Task SearchAsync(string query, int pageSize, long pageIndex, string? searchFrom = null, string? culture = null)
{
- var results = _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Document, pageSize, pageIndex, out long totalFound, searchFrom);
+ var results = _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Document, pageSize, pageIndex, out long totalFound, culture: culture, searchFrom: searchFrom);
return new EntitySearchResults(results, totalFound);
}
}