From 5aee883bd25c6ef876af2955cf8dc1901f5b6774 Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Thu, 18 Oct 2012 08:00:07 +0500 Subject: [PATCH] Added TypedSearch methods to UmbracoHelper and Search extension methods to the IPublishedContent. Added GetTemplateAlias() extension method to IPublishedContent and to DynamicPublishedContent. --- ...DynamicPublishedContentSearchExtensions.cs | 62 ------------------- src/Umbraco.Web/ExamineExtensions.cs | 12 ++-- .../Models/DynamicPublishedContent.cs | 33 ++++++++++ src/Umbraco.Web/PublishedContentExtensions.cs | 61 ++++++++++++++++++ src/Umbraco.Web/Umbraco.Web.csproj | 1 - src/Umbraco.Web/UmbracoHelper.cs | 39 +++++++++--- 6 files changed, 131 insertions(+), 77 deletions(-) delete mode 100644 src/Umbraco.Web/DynamicPublishedContentSearchExtensions.cs diff --git a/src/Umbraco.Web/DynamicPublishedContentSearchExtensions.cs b/src/Umbraco.Web/DynamicPublishedContentSearchExtensions.cs deleted file mode 100644 index 5b48aa2573..0000000000 --- a/src/Umbraco.Web/DynamicPublishedContentSearchExtensions.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Examine.LuceneEngine.SearchCriteria; -using Umbraco.Core.Dynamics; -using Umbraco.Core.Models; -using Umbraco.Web.Models; - -namespace Umbraco.Web -{ - /// - /// DynamicPublishedContent extension methods for searching using Examine - /// - public static class DynamicPublishedContentSearchExtensions - { - public static DynamicPublishedContentList Search(this DynamicPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) - { - var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; - if (!string.IsNullOrEmpty(searchProvider)) - searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; - - var t = term.Escape().Value; - if (useWildCards) - t = term.MultipleCharacterWildcard().Value; - - string luceneQuery = "+__Path:(" + d.Path.Replace("-", "\\-") + "*) +" + t; - var crit = searcher.CreateSearchCriteria().RawQuery(luceneQuery); - - return d.Search(crit, searcher); - } - - public static DynamicPublishedContentList SearchDescendants(this DynamicPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) - { - return d.Search(term, useWildCards, searchProvider); - } - - public static DynamicPublishedContentList SearchChildren(this DynamicPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) - { - var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; - if (!string.IsNullOrEmpty(searchProvider)) - searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; - - var t = term.Escape().Value; - if (useWildCards) - t = term.MultipleCharacterWildcard().Value; - - string luceneQuery = "+parentID:" + d.Id.ToString() + " +" + t; - var crit = searcher.CreateSearchCriteria().RawQuery(luceneQuery); - - return d.Search(crit, searcher); - } - - public static DynamicPublishedContentList Search(this DynamicPublishedContent d, Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) - { - var s = Examine.ExamineManager.Instance.DefaultSearchProvider; - if (searchProvider != null) - s = searchProvider; - - var results = s.Search(criteria); - return results.ConvertSearchResultToDynamicDocument(PublishedContentStoreResolver.Current.PublishedContentStore); - } - - - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/ExamineExtensions.cs b/src/Umbraco.Web/ExamineExtensions.cs index 7ae2911f43..2dce84adb0 100644 --- a/src/Umbraco.Web/ExamineExtensions.cs +++ b/src/Umbraco.Web/ExamineExtensions.cs @@ -14,7 +14,7 @@ namespace Umbraco.Web /// internal static class ExamineExtensions { - internal static DynamicPublishedContentList ConvertSearchResultToDynamicDocument( + internal static IEnumerable ConvertSearchResultToPublishedContent( this IEnumerable results, IPublishedStore store) { @@ -22,9 +22,8 @@ namespace Umbraco.Web // however thsi is currently not the case: // http://examine.codeplex.com/workitem/10350 - var list = new DynamicPublishedContentList(); - var xd = new XmlDocument(); - + var list = new List(); + foreach (var result in results.OrderByDescending(x => x.Score)) { var doc = store.GetDocumentById( @@ -32,9 +31,8 @@ namespace Umbraco.Web result.Id); if (doc == null) continue; //skip if this doesn't exist in the cache doc.Properties.Add( - new PropertyResult("examineScore", result.Score.ToString(), Guid.Empty, PropertyResultType.CustomProperty)); - var dynamicDoc = new DynamicPublishedContent(doc); - list.Add(dynamicDoc); + new PropertyResult("examineScore", result.Score.ToString(), Guid.Empty, PropertyResultType.CustomProperty)); + list.Add(doc); } return list; } diff --git a/src/Umbraco.Web/Models/DynamicPublishedContent.cs b/src/Umbraco.Web/Models/DynamicPublishedContent.cs index 61b4706274..16dbb80e0b 100644 --- a/src/Umbraco.Web/Models/DynamicPublishedContent.cs +++ b/src/Umbraco.Web/Models/DynamicPublishedContent.cs @@ -624,6 +624,39 @@ namespace Umbraco.Web.Models } #endregion + public string GetTemplateAlias() + { + return PublishedContentExtensions.GetTemplateAlias(this); + } + + #region Search + + public DynamicPublishedContentList Search(string term, bool useWildCards = true, string searchProvider = null) + { + return new DynamicPublishedContentList( + PublishedContentExtensions.Search(this, term, useWildCards, searchProvider)); + } + + public DynamicPublishedContentList SearchDescendants(string term, bool useWildCards = true, string searchProvider = null) + { + return new DynamicPublishedContentList( + PublishedContentExtensions.SearchDescendants(this, term, useWildCards, searchProvider)); + } + + public DynamicPublishedContentList SearchChildren(string term, bool useWildCards = true, string searchProvider = null) + { + return new DynamicPublishedContentList( + PublishedContentExtensions.SearchChildren(this, term, useWildCards, searchProvider)); + } + + public DynamicPublishedContentList Search(Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) + { + return new DynamicPublishedContentList( + PublishedContentExtensions.Search(this, criteria, searchProvider)); + } + + #endregion + #region GetProperty methods which can be used with the dynamic object public IPublishedContentProperty GetProperty(string alias) diff --git a/src/Umbraco.Web/PublishedContentExtensions.cs b/src/Umbraco.Web/PublishedContentExtensions.cs index 268ea79df7..6680bbeedc 100644 --- a/src/Umbraco.Web/PublishedContentExtensions.cs +++ b/src/Umbraco.Web/PublishedContentExtensions.cs @@ -3,10 +3,12 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; +using Examine.LuceneEngine.SearchCriteria; using Umbraco.Core.Dynamics; using Umbraco.Core.Models; using Umbraco.Web.Models; using Umbraco.Web.Routing; +using umbraco; using umbraco.cms.businesslogic; using Umbraco.Core; @@ -21,6 +23,65 @@ namespace Umbraco.Web /// public static class PublishedContentExtensions { + /// + /// Returns the current template Alias + /// + /// + /// + public static string GetTemplateAlias(this IPublishedContent doc) + { + var template = new template(doc.TemplateId); + return template.TemplateAlias; + } + + #region Search + public static IEnumerable Search(this IPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) + { + var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; + if (!string.IsNullOrEmpty(searchProvider)) + searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; + + var t = term.Escape().Value; + if (useWildCards) + t = term.MultipleCharacterWildcard().Value; + + string luceneQuery = "+__Path:(" + d.Path.Replace("-", "\\-") + "*) +" + t; + var crit = searcher.CreateSearchCriteria().RawQuery(luceneQuery); + + return d.Search(crit, searcher); + } + + public static IEnumerable SearchDescendants(this IPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) + { + return d.Search(term, useWildCards, searchProvider); + } + + public static IEnumerable SearchChildren(this IPublishedContent d, string term, bool useWildCards = true, string searchProvider = null) + { + var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; + if (!string.IsNullOrEmpty(searchProvider)) + searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; + + var t = term.Escape().Value; + if (useWildCards) + t = term.MultipleCharacterWildcard().Value; + + string luceneQuery = "+parentID:" + d.Id.ToString() + " +" + t; + var crit = searcher.CreateSearchCriteria().RawQuery(luceneQuery); + + return d.Search(crit, searcher); + } + + public static IEnumerable Search(this IPublishedContent d, Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) + { + var s = Examine.ExamineManager.Instance.DefaultSearchProvider; + if (searchProvider != null) + s = searchProvider; + + var results = s.Search(criteria); + return results.ConvertSearchResultToPublishedContent(PublishedContentStoreResolver.Current.PublishedContentStore); + } + #endregion #region List Extensions diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 7d40291c08..389e13db63 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -266,7 +266,6 @@ - ASPXCodeBehind diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 37fca9c3e0..77ed3ba2e2 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -547,12 +547,8 @@ namespace Umbraco.Web /// public dynamic Search(string term, bool useWildCards = true, string searchProvider = null) { - var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; - if (!string.IsNullOrEmpty(searchProvider)) - searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; - - var results = searcher.Search(term, useWildCards); - return results.ConvertSearchResultToDynamicDocument(PublishedContentStoreResolver.Current.PublishedContentStore); + return new DynamicPublishedContentList( + TypedSearch(term, useWildCards, searchProvider)); } /// @@ -562,13 +558,42 @@ namespace Umbraco.Web /// /// public dynamic Search(Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) + { + return new DynamicPublishedContentList( + TypedSearch(criteria, searchProvider)); + } + + /// + /// Searches content + /// + /// + /// + /// + /// + public IEnumerable TypedSearch(string term, bool useWildCards = true, string searchProvider = null) + { + var searcher = Examine.ExamineManager.Instance.DefaultSearchProvider; + if (!string.IsNullOrEmpty(searchProvider)) + searcher = Examine.ExamineManager.Instance.SearchProviderCollection[searchProvider]; + + var results = searcher.Search(term, useWildCards); + return results.ConvertSearchResultToPublishedContent(PublishedContentStoreResolver.Current.PublishedContentStore); + } + + /// + /// Searhes content + /// + /// + /// + /// + public IEnumerable TypedSearch(Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) { var s = Examine.ExamineManager.Instance.DefaultSearchProvider; if (searchProvider != null) s = searchProvider; var results = s.Search(criteria); - return results.ConvertSearchResultToDynamicDocument(PublishedContentStoreResolver.Current.PublishedContentStore); + return results.ConvertSearchResultToPublishedContent(PublishedContentStoreResolver.Current.PublishedContentStore); } #endregion