diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs index b52263e10..04bc91d8c 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs @@ -1,10 +1,14 @@ using System.Web.Mvc; +using System.Web.Query.Dynamic; using JetBrains.Annotations; using Orchard.ContentManagement; +using Orchard.Indexing; +using Orchard.Localization; using Orchard.Search.Services; using Orchard.Search.ViewModels; using Orchard.Settings; using Orchard.Search.Models; +using Orchard.UI.Notify; using System.Collections.Generic; using Orchard.Collections; using Orchard.Themes; @@ -15,20 +19,38 @@ namespace Orchard.Search.Controllers { private readonly ISearchService _searchService; private readonly IContentManager _contentManager; - public SearchController(ISearchService searchService, IContentManager contentManager) { + public SearchController( + IOrchardServices services, + ISearchService searchService, + IContentManager contentManager) { + + Services = services; _searchService = searchService; _contentManager = contentManager; + + T = NullLocalizer.Instance; } + private IOrchardServices Services { get; set; } + public Localizer T { get; set; } + protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } public ActionResult Index(string q, int page = 1, int pageSize = 10) { var searchFields = CurrentSite.As().SearchedFields; - var searchHits = _searchService.Query(q, page, pageSize, - CurrentSite.As().Record.FilterCulture, - searchFields, - searchHit => searchHit); + IPageOfItems searchHits; + + if (q.Trim().StartsWith("?") || q.Trim().StartsWith("*")) { + searchHits = new PageOfItems(new ISearchHit[] { }); + Services.Notifier.Error(T("'*' or '?' not allowed as first character in WildcardQuery")); + } + else { + searchHits = _searchService.Query(q, page, pageSize, + CurrentSite.As().Record.FilterCulture, + searchFields, + searchHit => searchHit); + } var searchResultViewModels = new List();