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