diff --git a/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs index eb936c5ad..da6e8b96c 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs @@ -5,7 +5,7 @@ using Orchard.Localization; namespace Orchard.Email.Drivers { - // We define a specific driver instead of using a TemplateFilterForRecord, because we need the ;odel to be the part and not the record. + // We define a specific driver instead of using a TemplateFilterForRecord, because we need the model to be the part and not the record. // Thus the encryption/decryption will be done when accessing the part's property public class SmtpSettingsPartDriver : ContentPartDriver { @@ -17,13 +17,13 @@ namespace Orchard.Email.Drivers { protected override string Prefix { get { return "SmtpSettings"; } } - protected override DriverResult Editor(SmtpSettingsPart termPart) { - return ContentPartTemplate(termPart, "Parts/Smtp.SiteSettings"); + protected override DriverResult Editor(SmtpSettingsPart part) { + return ContentPartTemplate(part, "Parts/Smtp.SiteSettings"); } - protected override DriverResult Editor(SmtpSettingsPart termPart, IUpdateModel updater) { - updater.TryUpdateModel(termPart, Prefix, null, null); - return Editor(termPart); + protected override DriverResult Editor(SmtpSettingsPart part, IUpdateModel updater) { + updater.TryUpdateModel(part, Prefix, null, null); + return Editor(part); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs index da2f13e4b..abd4ad485 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs @@ -24,7 +24,7 @@ namespace Orchard.Search.Controllers { protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } public ActionResult Index(string q, int page = 1, int pageSize = 10) { - var searchFields = CurrentSite.As().Record.SearchedFields.Split(new[] {',', ' '}, StringSplitOptions.RemoveEmptyEntries); + var searchFields = CurrentSite.As().SearchedFields; var searchHits = _searchService.Query(q, page, pageSize, CurrentSite.As().Record.FilterCulture, diff --git a/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs new file mode 100644 index 000000000..ef0c6121f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Indexing; +using Orchard.Localization; +using Orchard.Search.Models; +using Orchard.Search.ViewModels; + +namespace Orchard.Search.Drivers { + + public class SearchSettingsPartDriver : ContentPartDriver { + private const string SearchIndexName = "Search"; + private readonly IIndexManager _indexManager; + + public SearchSettingsPartDriver(IIndexManager indexManager) { + _indexManager = indexManager; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + protected override string Prefix { get { return "SearchSettings"; } } + + protected override DriverResult Editor(SearchSettingsPart part) { + var model = new SearchSettingsViewModel(); + var searchedFields = part.SearchedFields; + + if (_indexManager.HasIndexProvider()) { + model.Entries = new List(); + foreach (var field in _indexManager.GetSearchIndexProvider().GetFields(SearchIndexName)) { + model.Entries.Add(new SearchSettingsEntry { Field = field, Selected = searchedFields.Contains(field) }); + } + } + + return ContentPartTemplate(model, "Parts/Search.SiteSettings"); + } + + protected override DriverResult Editor(SearchSettingsPart part, IUpdateModel updater) { + var model = new SearchSettingsViewModel(); + + if(updater.TryUpdateModel(model, Prefix, null, null)) { + part.SearchedFields = model.Entries.Where(e => e.Selected).Select(e => e.Field).ToArray(); + } + + return Editor(part); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Search/Handlers/SearchSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Search/Handlers/SearchSettingsPartHandler.cs index 882d389f4..12da0a748 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Handlers/SearchSettingsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Handlers/SearchSettingsPartHandler.cs @@ -9,7 +9,6 @@ namespace Orchard.Search.Handlers { public SearchSettingsPartHandler(IRepository repository) { Filters.Add(new ActivatingFilter("Site")); Filters.Add(StorageFilter.For(repository)); - Filters.Add(new TemplateFilterForRecord("CommentSettings", "Parts/Search.SiteSettings")); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs index c5d4ecec5..8ad179ab7 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs @@ -1,6 +1,11 @@ -using Orchard.ContentManagement; +using System; +using Orchard.ContentManagement; namespace Orchard.Search.Models { public class SearchSettingsPart : ContentPart { + public string[] SearchedFields { + get { return Record.SearchedFields.Split(new[] {',', ' '}, StringSplitOptions.RemoveEmptyEntries); } + set { Record.SearchedFields = String.Join(", ", value); } + } } } diff --git a/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj b/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj new file mode 100644 index 000000000..22128d21f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj @@ -0,0 +1,128 @@ + + + + Debug + AnyCPU + + + 2.0 + {4BE4EB01-AC56-4048-924E-2CA77F509ABA} + {F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Orchard.Search + Orchard.Search + v4.0 + false + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + 3.5 + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + {2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6} + Orchard.Framework + + + + + + + + + + + + + + + + + + + + + + + + + False + True + 47866 + / + + + False + True + http://orchard.codeplex.com + False + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs index c73336d73..eb30556f3 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs @@ -31,7 +31,7 @@ namespace Orchard.Search.Services { IPageOfItems ISearchService.Query(string query, int page, int? pageSize, bool filterCulture, string[] searchFields, Func shapeResult) { if (string.IsNullOrWhiteSpace(query)) - return null; + return new PageOfItems(Enumerable.Empty()); var searchBuilder = Search().Parse(searchFields, query); diff --git a/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs b/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs new file mode 100644 index 000000000..1511b3d46 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs @@ -0,0 +1,14 @@ +using Orchard.Mvc.ViewModels; +using System.Collections.Generic; + +namespace Orchard.Search.ViewModels { + public class SearchSettingsViewModel : BaseViewModel { + public IList Entries { get; set; } + } + + public class SearchSettingsEntry { + public string Field { get; set; } + public bool Selected { get; set; } + public int Weight { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx b/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx index 859b38720..fbe72ea8d 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx +++ b/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx @@ -1,5 +1,5 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.Search.Models"%> +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Search.ViewModels"%>
<%: T("Search")%> <%-- TODO: (sebros) Implementation details after Alpha @@ -10,8 +10,14 @@ --%>
- - <%: Html.EditorFor(m => m.SearchedFields)%> - <%: Html.ValidationMessage("SearchedFields", "*")%> + <% + for(var i=0; i + checked="checked" <% } %> + name="<%:Html.FieldNameFor(m => m.Entries[j].Selected)%>" id="<%:Html.FieldIdFor(m => m.Entries[j].Selected)%>"/> + <%: Html.HiddenFor(m => m.Entries[j].Field)%> + + <% + }%>
\ No newline at end of file