From 06bc8f688827af3efc8d9389db6eae07ac82eb32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Ros?= <>
Date: Tue, 27 Jul 2010 19:44:39 -0700
Subject: [PATCH 1/2] When a content item is modified the indexing events are
fired
--HG--
branch : dev
---
.../Handlers/CreateIndexingTaskHandler.cs | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs
index 48eea68d1..ac81239d5 100644
--- a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs
+++ b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs
@@ -2,6 +2,7 @@
using Orchard.ContentManagement;
using Orchard.Core.Common.Models;
using Orchard.Tasks.Indexing;
+using System.Collections.Generic;
namespace Orchard.Indexing.Handlers {
///
@@ -9,9 +10,14 @@ namespace Orchard.Indexing.Handlers {
/// is published, and to delete them when the content item is unpublished.
///
public class CreateIndexingTaskHandler : ContentHandler {
+ private const string SearchIndexName = "Search";
private readonly IIndexingTaskManager _indexingTaskManager;
+ private readonly IEnumerable _indexNotifierHandlers;
- public CreateIndexingTaskHandler(IIndexingTaskManager indexingTaskManager) {
+ public CreateIndexingTaskHandler(
+ IIndexingTaskManager indexingTaskManager,
+ IEnumerable indexNotifierHandlers
+ ) {
_indexingTaskManager = indexingTaskManager;
OnPublishing>(CreateIndexingTask);
@@ -26,5 +32,10 @@ namespace Orchard.Indexing.Handlers {
_indexingTaskManager.CreateDeleteIndexTask(context.ContentItem);
}
+ private void UpdateIndex() {
+ foreach (var handler in _indexNotifierHandlers) {
+ handler.UpdateIndex(SearchIndexName);
+ }
+ }
}
}
From 999369225ea9b308a88469a5a07c4faac7398b8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Ros?= <>
Date: Tue, 27 Jul 2010 19:46:07 -0700
Subject: [PATCH 2/2] When a search result doesn't exist, it is not displayed
- Might occur when a deleted content is searched before the index is updated (short time), eventually when the search is triggered on another server of a farm
--HG--
branch : dev
---
.../Modules/Orchard.Search/Controllers/SearchController.cs | 1 +
src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx | 2 +-
src/Orchard/ContentManagement/DefaultContentManager.cs | 3 +++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs
index eb6bbfb43..8d1c11747 100644
--- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs
+++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs
@@ -5,6 +5,7 @@ using Orchard.Search.Services;
using Orchard.Search.ViewModels;
using Orchard.Settings;
using Orchard.Search.Models;
+using System.Linq;
using System;
namespace Orchard.Search.Controllers {
diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx b/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx
index d51a45cfe..fd5b331c8 100644
--- a/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx
+++ b/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx
@@ -12,6 +12,6 @@ if (!string.IsNullOrWhiteSpace(Model.Query)) {
}
}
if (Model.PageOfResults != null && Model.PageOfResults.Count() > 0) { %>
-<%=Html.UnorderedList(Model.PageOfResults, (r, i) => Html.DisplayForItem(r.Content) , "search-results contentItems") %>
+<%=Html.UnorderedList(Model.PageOfResults.Where(hit => hit.Content != null), (r, i) => Html.DisplayForItem(r.Content), "search-results contentItems")%>
<%=Html.Pager(Model.PageOfResults, Model.PageOfResults.PageNumber, Model.DefaultPageSize, new {q = Model.Query}) %><%
} %>
\ No newline at end of file
diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs
index af8338985..f30e1e566 100644
--- a/src/Orchard/ContentManagement/DefaultContentManager.cs
+++ b/src/Orchard/ContentManagement/DefaultContentManager.cs
@@ -385,6 +385,9 @@ namespace Orchard.ContentManagement {
}
public ContentItemViewModel BuildDisplayModel(TContentPart content, string displayType) where TContentPart : IContent {
+ if (content == null)
+ return null;
+
var displayModel = new ContentItemViewModel(content);
var context = new BuildDisplayModelContext(displayModel, displayType);
foreach (var handler in Handlers) {