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 index 39fe7de64..22128d21f 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj +++ b/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj @@ -67,6 +67,7 @@ + @@ -74,6 +75,7 @@ + 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