diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/DefaultIndexingUpdater.cs b/src/Orchard.Web/Modules/Orchard.Indexing/DefaultIndexingUpdater.cs new file mode 100644 index 000000000..77c1d6f65 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Indexing/DefaultIndexingUpdater.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Orchard.Environment; +using Orchard.Tasks.Indexing; +using Orchard.ContentManagement; + +namespace Orchard.Indexing { + public class DefaultIndexingUpdater : IFeatureEventHandler { + + private readonly IIndexingTaskManager _indexingTaskManager; + private readonly IContentManager _contentManager; + + public DefaultIndexingUpdater (IIndexingTaskManager indexingTaskManager, IContentManager contentManager){ + _indexingTaskManager = indexingTaskManager; + _contentManager = contentManager; + } + + public void Install(Environment.Extensions.Models.Feature feature) { + } + + public void Enable(Environment.Extensions.Models.Feature feature) { + // create indexing tasks for all currently existing content, even when the module is enabled again + // as some content might have been created while this module was not active, and indexing tasks + // would not exist for them, resulting in an uncomplete index. + + foreach (var contentItem in _contentManager.Query(VersionOptions.Published).List()) { + _indexingTaskManager.CreateUpdateIndexTask(contentItem); + } + } + + public void Disable(Environment.Extensions.Models.Feature feature) { + } + + public void Uninstall(Environment.Extensions.Models.Feature feature) { + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Orchard.Indexing.csproj b/src/Orchard.Web/Modules/Orchard.Indexing/Orchard.Indexing.csproj index 27a1f975d..08de31784 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Orchard.Indexing.csproj +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Orchard.Indexing.csproj @@ -62,6 +62,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Settings/EditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Settings/EditorEvents.cs index 6183083ba..41d9dff15 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Settings/EditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Settings/EditorEvents.cs @@ -4,11 +4,24 @@ using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using Orchard.Tasks.Indexing; namespace Orchard.Indexing.Settings { public class EditorEvents : ContentDefinitionEditorEventsBase { + private readonly IIndexingTaskManager _indexingTaskManager; + private readonly IContentManager _contentManager; + + public EditorEvents(IIndexingTaskManager indexingTaskManager, IContentManager contentManager){ + _indexingTaskManager = indexingTaskManager; + _contentManager = contentManager; + } + + private string _contentTypeName; + private bool _tasksCreated = false; + public override IEnumerable TypeEditor(ContentTypeDefinition definition) { var model = definition.Settings.GetModel(); + _contentTypeName = definition.Name; yield return DefinitionTemplate(model); } @@ -16,9 +29,24 @@ namespace Orchard.Indexing.Settings { var model = new TypeIndexing(); updateModel.TryUpdateModel(model, "TypeIndexing", null, null); builder.WithSetting("TypeIndexing.Included", model.Included ? true.ToString() : null); + + CreateIndexingTasks(); + yield return DefinitionTemplate(model); } + /// + /// Creates new indexing tasks to update the index document for these content items + /// + private void CreateIndexingTasks() + { + if (!_tasksCreated) + { + CreateTasksForType(_contentTypeName); + _tasksCreated = true; + } + } + public override IEnumerable PartFieldEditor(ContentPartFieldDefinition definition) { var model = definition.Settings.GetModel(); yield return DefinitionTemplate(model); @@ -28,7 +56,16 @@ namespace Orchard.Indexing.Settings { var model = new FieldIndexing(); updateModel.TryUpdateModel(model, "FieldIndexing", null, null); builder.WithSetting("FieldIndexing.Included", model.Included ? true.ToString() : null); + + CreateIndexingTasks(); + yield return DefinitionTemplate(model); } + + private void CreateTasksForType(string type) { + foreach (var contentItem in _contentManager.Query(VersionOptions.Published, new [] { type }).List()) { + _indexingTaskManager.CreateUpdateIndexTask(contentItem); + } + } } } \ No newline at end of file