Fixes more of #U4-1706 and adds another unit test. Ensures we never return items from the recycle bin even if the indexes exist. Updated logic to ensure
items don't get indexed even if they are saved and currently exist in the recycle bin and ensures that indexes are removed on both trashed and deleted.
This commit is contained in:
@@ -108,7 +108,44 @@ namespace Umbraco.Tests.PublishedContent
|
||||
return GetNode(id, GetUmbracoContext("/test", 1234));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test]
|
||||
public void Do_Not_Find_In_Recycle_Bin()
|
||||
{
|
||||
var newIndexFolder = new DirectoryInfo(Path.Combine("App_Data\\CWSIndexSetTest", Guid.NewGuid().ToString()));
|
||||
var indexInit = new IndexInitializer();
|
||||
var indexer = indexInit.GetUmbracoIndexer(newIndexFolder);
|
||||
indexer.RebuildIndex();
|
||||
var searcher = indexInit.GetUmbracoSearcher(newIndexFolder);
|
||||
var store = new DefaultPublishedMediaStore(searcher);
|
||||
var ctx = GetUmbracoContext("/test", 1234);
|
||||
|
||||
//ensure it is found
|
||||
var publishedMedia = store.GetDocumentById(ctx, 3113);
|
||||
Assert.IsNotNull(publishedMedia);
|
||||
|
||||
//move item to recycle bin
|
||||
var newXml = XElement.Parse(@"<node id='3113' version='5b3e46ab-3e37-4cfa-ab70-014234b5bd33' parentID='-21' level='1' writerID='0' nodeType='1032' template='0' sortOrder='2' createDate='2010-05-19T17:32:46' updateDate='2010-05-19T17:32:46' nodeName='Another Umbraco Image' urlName='acnestressscrub' writerName='Administrator' nodeTypeAlias='Image' path='-1,-21,3113'>
|
||||
<data alias='umbracoFile'><![CDATA[/media/1234/blah.pdf]]></data>
|
||||
<data alias='umbracoWidth'>115</data>
|
||||
<data alias='umbracoHeight'>268</data>
|
||||
<data alias='umbracoBytes'>10726</data>
|
||||
<data alias='umbracoExtension'>jpg</data>
|
||||
</node>");
|
||||
indexer.ReIndexNode(newXml, "media");
|
||||
|
||||
//ensure it still exists in the index (raw examine search)
|
||||
var criteria = searcher.CreateSearchCriteria();
|
||||
var filter = criteria.Id(3113);
|
||||
var found = searcher.Search(filter.Compile());
|
||||
Assert.IsNotNull(found);
|
||||
Assert.AreEqual(1, found.TotalItemCount);
|
||||
|
||||
//ensure it does not show up in the published media store
|
||||
var recycledMedia = store.GetDocumentById(ctx, 3113);
|
||||
Assert.IsNull(recycledMedia);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Children_With_Examine()
|
||||
{
|
||||
var newIndexFolder = new DirectoryInfo(Path.Combine("App_Data\\CWSIndexSetTest", Guid.NewGuid().ToString()));
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml.XPath;
|
||||
using Examine;
|
||||
using Examine.LuceneEngine.SearchCriteria;
|
||||
using Examine.Providers;
|
||||
using Lucene.Net.Documents;
|
||||
using Umbraco.Core;
|
||||
@@ -108,7 +109,11 @@ namespace Umbraco.Web
|
||||
{
|
||||
//first check in Examine as this is WAY faster
|
||||
var criteria = searchProvider.CreateSearchCriteria("media");
|
||||
var filter = criteria.Id(id).Not().Field(UmbracoContentIndexer.IndexPathFieldName, "-21");
|
||||
|
||||
var filter = criteria.Id(id).Not().Field(UmbracoContentIndexer.IndexPathFieldName, "-1,-21,".MultipleCharacterWildcard());
|
||||
//the above filter will create a query like this, NOTE: That since the use of the wildcard, it automatically escapes it in Lucene.
|
||||
//+(+__NodeId:3113 -__Path:-1,-21,*) +__IndexType:media
|
||||
|
||||
var results = searchProvider.Search(filter.Compile());
|
||||
if (results.Any())
|
||||
{
|
||||
|
||||
@@ -62,12 +62,12 @@ namespace umbraco.presentation.umbraco.Search
|
||||
|
||||
void ContentService_Trashed(IContentService sender, Umbraco.Core.Events.MoveEventArgs<IContent> e)
|
||||
{
|
||||
IndexContent(e.Entity);
|
||||
DeleteContent(e.Entity);
|
||||
}
|
||||
|
||||
void MediaService_Trashed(IMediaService sender, Umbraco.Core.Events.MoveEventArgs<IMedia> e)
|
||||
{
|
||||
IndexMedia(e.Entity);
|
||||
DeleteMedia(e.Entity);
|
||||
}
|
||||
|
||||
void ContentService_Moved(IContentService sender, Umbraco.Core.Events.MoveEventArgs<IContent> e)
|
||||
@@ -77,16 +77,13 @@ namespace umbraco.presentation.umbraco.Search
|
||||
|
||||
void ContentService_Deleted(IContentService sender, Umbraco.Core.Events.DeleteEventArgs<IContent> e)
|
||||
{
|
||||
e.DeletedEntities.ForEach(
|
||||
content =>
|
||||
ExamineManager.Instance.DeleteFromIndex(
|
||||
content.Id.ToString(),
|
||||
ExamineManager.Instance.IndexProviderCollection.OfType<BaseUmbracoIndexer>().Where(x => x.EnableDefaultEventHandler)));
|
||||
e.DeletedEntities.ForEach(DeleteContent);
|
||||
}
|
||||
|
||||
void ContentService_Saved(IContentService sender, Umbraco.Core.Events.SaveEventArgs<IContent> e)
|
||||
{
|
||||
e.SavedEntities.ForEach(IndexContent);
|
||||
//ensure we do not re-index it if it is in the bin
|
||||
e.SavedEntities.Where(x => !x.Trashed).ForEach(IndexContent);
|
||||
}
|
||||
|
||||
void MediaService_Moved(IMediaService sender, Umbraco.Core.Events.MoveEventArgs<IMedia> e)
|
||||
@@ -96,16 +93,13 @@ namespace umbraco.presentation.umbraco.Search
|
||||
|
||||
void MediaService_Deleted(IMediaService sender, Umbraco.Core.Events.DeleteEventArgs<IMedia> e)
|
||||
{
|
||||
e.DeletedEntities.ForEach(
|
||||
media =>
|
||||
ExamineManager.Instance.DeleteFromIndex(
|
||||
media.Id.ToString(),
|
||||
ExamineManager.Instance.IndexProviderCollection.OfType<BaseUmbracoIndexer>().Where(x => x.EnableDefaultEventHandler)));
|
||||
e.DeletedEntities.ForEach(DeleteMedia);
|
||||
}
|
||||
|
||||
void MediaService_Saved(IMediaService sender, Umbraco.Core.Events.SaveEventArgs<IMedia> e)
|
||||
{
|
||||
e.SavedEntities.ForEach(IndexMedia);
|
||||
//ensure we do not re-index it if it is in the bin
|
||||
e.SavedEntities.Where(x => !x.Trashed).ForEach(IndexMedia);
|
||||
}
|
||||
|
||||
private void IndexMedia(IMedia sender)
|
||||
@@ -115,6 +109,20 @@ namespace umbraco.presentation.umbraco.Search
|
||||
ExamineManager.Instance.IndexProviderCollection.OfType<BaseUmbracoIndexer>().Where(x => x.EnableDefaultEventHandler));
|
||||
}
|
||||
|
||||
private void DeleteContent(IContent sender)
|
||||
{
|
||||
ExamineManager.Instance.DeleteFromIndex(
|
||||
sender.Id.ToString(),
|
||||
ExamineManager.Instance.IndexProviderCollection.OfType<BaseUmbracoIndexer>().Where(x => x.EnableDefaultEventHandler));
|
||||
}
|
||||
|
||||
private void DeleteMedia(IMedia sender)
|
||||
{
|
||||
ExamineManager.Instance.DeleteFromIndex(
|
||||
sender.Id.ToString(),
|
||||
ExamineManager.Instance.IndexProviderCollection.OfType<BaseUmbracoIndexer>().Where(x => x.EnableDefaultEventHandler));
|
||||
}
|
||||
|
||||
private void IndexContent(IContent sender)
|
||||
{
|
||||
ExamineManager.Instance.ReIndexNode(
|
||||
|
||||
Reference in New Issue
Block a user