mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Merge
--HG-- branch : dev
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
<add name="CaptureTraceMessages" />
|
||||
</listeners>
|
||||
</source>
|
||||
<source name="Orchard.Mvc.ViewEngines.WebFormsViewEngineProvider" switchValue="Warning">
|
||||
<source name="Orchard.Mvc.ViewEngines.WebFormViewEngineProvider" switchValue="Warning">
|
||||
<listeners>
|
||||
<add name="CaptureTraceMessages" />
|
||||
</listeners>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<system.diagnostics>
|
||||
<trace autoflush="true"/>
|
||||
<sources>
|
||||
<source name="Default" switchValue="Verbose">
|
||||
<source name="Default" switchValue="Warning">
|
||||
<listeners>
|
||||
<add name="OrchardDebugTextLog" />
|
||||
<add name="WebPageTrace"/>
|
||||
|
@@ -80,6 +80,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\IndexService.cs" />
|
||||
<Compile Include="Settings\IndexingSettings.cs" />
|
||||
<Compile Include="Settings\TypeIndexing.cs" />
|
||||
<Compile Include="ViewModels\IndexViewModel.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@@ -5,6 +5,7 @@ using JetBrains.Annotations;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.Data;
|
||||
using Orchard.Indexing.Models;
|
||||
using Orchard.Indexing.Settings;
|
||||
using Orchard.Logging;
|
||||
using Orchard.Services;
|
||||
using Orchard.Tasks.Indexing;
|
||||
@@ -45,7 +46,7 @@ namespace Orchard.Indexing.Services {
|
||||
public void UpdateIndex(string indexName) {
|
||||
var synLock = _indexSynLock.GetSynLock(SearchIndexName);
|
||||
|
||||
if ( !System.Threading.Monitor.TryEnter(synLock) ) {
|
||||
if (!System.Threading.Monitor.TryEnter(synLock)) {
|
||||
Logger.Information("Index was requested but was already running");
|
||||
return;
|
||||
}
|
||||
@@ -70,10 +71,15 @@ namespace Orchard.Indexing.Services {
|
||||
// get every existing content item to index it
|
||||
foreach (var contentItem in _contentManager.Query(VersionOptions.Published).List()) {
|
||||
try {
|
||||
var documentIndex = _indexProvider.New(contentItem.Id);
|
||||
// skip items which are not indexed
|
||||
var settings = GetTypeIndexingSettings(contentItem);
|
||||
if (!settings.Included)
|
||||
continue;
|
||||
|
||||
var documentIndex = _indexProvider.New(contentItem.Id);
|
||||
|
||||
_contentManager.Index(contentItem, documentIndex);
|
||||
if(documentIndex.IsDirty) {
|
||||
if (documentIndex.IsDirty) {
|
||||
updateIndexDocuments.Add(documentIndex);
|
||||
}
|
||||
}
|
||||
@@ -91,8 +97,10 @@ namespace Orchard.Indexing.Services {
|
||||
_indexProvider.SetLastIndexUtc(SearchIndexName, _clock.UtcNow);
|
||||
|
||||
// retrieve not yet processed tasks
|
||||
var taskRecords = _repository.Fetch(x => x.CreatedUtc > lastIndexing)
|
||||
.ToArray();
|
||||
var taskRecords = lastIndexing == DateTime.MinValue
|
||||
? _repository.Fetch(x => true).ToArray()
|
||||
: _repository.Fetch(x => x.CreatedUtc > lastIndexing).ToArray();
|
||||
|
||||
|
||||
// nothing to do ?
|
||||
if (taskRecords.Length + updateIndexDocuments.Count == 0)
|
||||
@@ -116,11 +124,15 @@ namespace Orchard.Indexing.Services {
|
||||
foreach (var taskRecord in taskRecords.Where(t => t.Action == IndexingTaskRecord.Update)) {
|
||||
var task = new IndexingTask(_contentManager, taskRecord);
|
||||
|
||||
// skip items which are not indexed
|
||||
var settings = GetTypeIndexingSettings(task.ContentItem);
|
||||
if (!settings.Included)
|
||||
continue;
|
||||
|
||||
try {
|
||||
var documentIndex = _indexProvider.New(task.ContentItem.Id);
|
||||
|
||||
_contentManager.Index(task.ContentItem, documentIndex);
|
||||
if ( documentIndex.IsDirty ) {
|
||||
if (documentIndex.IsDirty) {
|
||||
updateIndexDocuments.Add(documentIndex);
|
||||
}
|
||||
|
||||
@@ -143,5 +155,14 @@ namespace Orchard.Indexing.Services {
|
||||
System.Threading.Monitor.Exit(synLock);
|
||||
}
|
||||
}
|
||||
|
||||
static TypeIndexing GetTypeIndexingSettings(ContentItem contentItem) {
|
||||
if (contentItem == null ||
|
||||
contentItem.TypeDefinition == null ||
|
||||
contentItem.TypeDefinition.Settings == null) {
|
||||
return new TypeIndexing { Included = false };
|
||||
}
|
||||
return contentItem.TypeDefinition.Settings.GetModel<TypeIndexing>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.MetaData;
|
||||
using Orchard.ContentManagement.MetaData.Builders;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
using Orchard.ContentManagement.ViewModels;
|
||||
|
||||
namespace Orchard.Indexing.Settings {
|
||||
public class ContentDefinitionEditorEvents : ContentDefinitionEditorEventsBase {
|
||||
public override IEnumerable<TemplateViewModel> TypeEditor(ContentTypeDefinition definition) {
|
||||
var model = definition.Settings.GetModel<TypeIndexing>();
|
||||
yield return DefinitionTemplate(model);
|
||||
}
|
||||
|
||||
public override IEnumerable<TemplateViewModel> TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||
var model = new TypeIndexing();
|
||||
updateModel.TryUpdateModel(model, "TypeIndexing", null, null);
|
||||
builder
|
||||
.WithSetting("TypeIndexing.Included", model.Included ? true.ToString() : null);
|
||||
|
||||
yield return DefinitionTemplate(model);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
namespace Orchard.Indexing.Settings {
|
||||
public class TypeIndexing {
|
||||
public bool Included { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Indexing.Settings.TypeIndexing>" %>
|
||||
<%@ Import Namespace="Orchard.Mvc.Html" %>
|
||||
<fieldset>
|
||||
<%:Html.EditorFor(m=>m.Included) %>
|
||||
<label for="<%:Html.FieldIdFor(m => m.Included) %>" class="forcheckbox"><%:T("Index this content type for search") %></label>
|
||||
<%:Html.ValidationMessageFor(m=>m.Included) %>
|
||||
</fieldset>
|
@@ -18,6 +18,7 @@ using Orchard.Mvc.Filters;
|
||||
using Orchard.Mvc.ModelBinders;
|
||||
using Orchard.Mvc.Routes;
|
||||
using Orchard.Mvc.ViewEngines;
|
||||
using Orchard.Mvc.ViewEngines.WebForms;
|
||||
using Orchard.Settings;
|
||||
using Orchard.Setup.Commands;
|
||||
using Orchard.Themes;
|
||||
@@ -35,7 +36,7 @@ namespace Orchard.Setup {
|
||||
builder.RegisterModule(new CommandModule());
|
||||
builder.RegisterType<RoutePublisher>().As<IRoutePublisher>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<ModelBinderPublisher>().As<IModelBinderPublisher>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<WebFormsViewEngineProvider>().As<IViewEngineProvider>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<WebFormViewEngineProvider>().As<IViewEngineProvider>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<ViewEngineFilter>().As<IFilterProvider>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<ThemeFilter>().As<IFilterProvider>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<PageTitleBuilder>().As<IPageTitleBuilder>().InstancePerLifetimeScope();
|
||||
|
@@ -41,7 +41,7 @@ namespace Orchard.Environment {
|
||||
_routePublisher.Publish(_routeProviders.SelectMany(provider => provider.GetRoutes()));
|
||||
_modelBinderPublisher.Publish(_modelBinderProviders.SelectMany(provider => provider.GetModelBinders()));
|
||||
|
||||
AddOrchardLocationsFormats();
|
||||
//AddOrchardLocationsFormats();
|
||||
|
||||
using (var events = _eventsFactory()) {
|
||||
events.Value.Activated();
|
||||
|
@@ -31,7 +31,6 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
if (skipLayoutViewEngine)
|
||||
return new ViewEngineResult(Enumerable.Empty<string>());
|
||||
|
||||
|
||||
var bodyView = _viewEngines.FindPartialView(controllerContext, viewName);
|
||||
|
||||
ViewEngineResult layoutView = null;
|
||||
@@ -109,7 +108,6 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
return new ViewEngineResult(Enumerable.Empty<string>());
|
||||
}
|
||||
|
||||
|
||||
public ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) {
|
||||
var scope = Scope.From(controllerContext);
|
||||
if (scope != null && scope.LayoutViewEngine != null) {
|
||||
@@ -120,10 +118,7 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
return new ViewEngineResult(Enumerable.Empty<string>());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ReleaseView(ControllerContext controllerContext, IView view) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -63,7 +63,7 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
var requestViewEngines = new ViewEngineCollection(
|
||||
themeViewEngines
|
||||
.Concat(moduleViewEngines)
|
||||
.Concat(_viewEngines.Where(x => x.GetType().Assembly != typeof(LayoutViewEngine).Assembly))
|
||||
.Concat(_viewEngines.Where(ViewEngineIsForwarded))
|
||||
.ToArray());
|
||||
|
||||
var layoutViewEngine = new LayoutViewEngine(requestViewEngines);
|
||||
@@ -72,6 +72,14 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
viewResultBase.ViewEngineCollection.Insert(0, layoutViewEngine);
|
||||
}
|
||||
|
||||
static bool ViewEngineIsForwarded(IViewEngine x) {
|
||||
// default view engine, and layout view engine, are not forwarded to
|
||||
// be used for resolving partials
|
||||
return
|
||||
x.GetType().Assembly != typeof(LayoutViewEngine).Assembly &&
|
||||
x.GetType() != typeof(WebFormViewEngine);
|
||||
}
|
||||
|
||||
public void OnResultExecuted(ResultExecutedContext filterContext) {
|
||||
|
||||
}
|
||||
|
@@ -1,13 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Caching;
|
||||
using System.Web;
|
||||
using System.Web.Hosting;
|
||||
|
||||
namespace Orchard.Mvc.ViewEngines {
|
||||
namespace Orchard.Mvc.ViewEngines.WebForms {
|
||||
public class ThemeViewLocationCache : IViewLocationCache {
|
||||
private readonly string _requestTheme;
|
||||
|
@@ -0,0 +1,25 @@
|
||||
using System.Web;
|
||||
using System.Web.Compilation;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Orchard.Mvc.ViewEngines.WebForms {
|
||||
public class WebFormViewEngineForAspNet4 : WebFormViewEngine {
|
||||
protected override bool FileExists(ControllerContext controllerContext, string virtualPath) {
|
||||
try {
|
||||
|
||||
return BuildManager.GetObjectFactory(virtualPath, false) != null;
|
||||
}
|
||||
catch (HttpException exception) {
|
||||
// Reproducing base class behavior, however these this code path should
|
||||
// not be followed for "not found" cases
|
||||
if (exception is HttpParseException) {
|
||||
throw;
|
||||
}
|
||||
if ((exception.GetHttpCode() != 0x194) || base.FileExists(controllerContext, virtualPath)) {
|
||||
throw;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -2,9 +2,9 @@
|
||||
using System.Web.Mvc;
|
||||
using Orchard.Logging;
|
||||
|
||||
namespace Orchard.Mvc.ViewEngines {
|
||||
public class WebFormsViewEngineProvider : IViewEngineProvider {
|
||||
public WebFormsViewEngineProvider() {
|
||||
namespace Orchard.Mvc.ViewEngines.WebForms {
|
||||
public class WebFormViewEngineProvider : IViewEngineProvider {
|
||||
public WebFormViewEngineProvider() {
|
||||
Logger = NullLogger.Instance;
|
||||
}
|
||||
static string[] DisabledFormats = new[] { "~/Disabled" };
|
||||
@@ -22,35 +22,35 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
// Partial Paths -
|
||||
// {area}/{controller}/
|
||||
|
||||
|
||||
var viewEngine = new WebFormViewEngine {
|
||||
MasterLocationFormats = DisabledFormats,
|
||||
ViewLocationFormats = DisabledFormats,
|
||||
AreaMasterLocationFormats = DisabledFormats,
|
||||
AreaViewLocationFormats = DisabledFormats,
|
||||
AreaPartialViewLocationFormats = DisabledFormats,
|
||||
};
|
||||
|
||||
viewEngine.ViewLocationCache = new ThemeViewLocationCache(parameters.VirtualPath);
|
||||
// for "routed" request views...
|
||||
// enable /Views/{area}/{controller}/{viewName}
|
||||
|
||||
// enable /Views/{partialName}
|
||||
// enable /Views/"DisplayTemplates/"+{templateName}
|
||||
// enable /Views/"EditorTemplates/+{templateName}
|
||||
viewEngine.PartialViewLocationFormats = new[] {
|
||||
var partialViewLocationFormats = new[] {
|
||||
parameters.VirtualPath + "/Views/{0}.ascx",
|
||||
parameters.VirtualPath + "/Views/{0}.aspx",
|
||||
};
|
||||
|
||||
Logger.Debug("PartialViewLocationFormats (theme): \r\n\t-{0}", string.Join("\r\n\t-", viewEngine.PartialViewLocationFormats));
|
||||
//Logger.Debug("PartialViewLocationFormats (theme): \r\n\t-{0}", string.Join("\r\n\t-", partialViewLocationFormats));
|
||||
|
||||
// for "routed" request views...
|
||||
// enable /Views/{area}/{controller}/{viewName}
|
||||
viewEngine.AreaPartialViewLocationFormats = new[] {
|
||||
var areaPartialViewLocationFormats = new[] {
|
||||
parameters.VirtualPath + "/Views/{2}/{1}/{0}.ascx",
|
||||
parameters.VirtualPath + "/Views/{2}/{1}/{0}.aspx",
|
||||
};
|
||||
|
||||
Logger.Debug("AreaPartialViewLocationFormats (theme): \r\n\t-{0}", string.Join("\r\n\t-", viewEngine.AreaPartialViewLocationFormats));
|
||||
//Logger.Debug("AreaPartialViewLocationFormats (theme): \r\n\t-{0}", string.Join("\r\n\t-", areaPartialViewLocationFormats));
|
||||
|
||||
var viewEngine = new WebFormViewEngineForAspNet4 {
|
||||
MasterLocationFormats = DisabledFormats,
|
||||
ViewLocationFormats = DisabledFormats,
|
||||
PartialViewLocationFormats = partialViewLocationFormats,
|
||||
AreaMasterLocationFormats = DisabledFormats,
|
||||
AreaViewLocationFormats = DisabledFormats,
|
||||
AreaPartialViewLocationFormats = areaPartialViewLocationFormats,
|
||||
ViewLocationCache = new ThemeViewLocationCache(parameters.VirtualPath),
|
||||
};
|
||||
|
||||
return viewEngine;
|
||||
}
|
||||
@@ -63,7 +63,7 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
"~/Modules/{2}/Views/{1}/{0}.aspx",
|
||||
};
|
||||
|
||||
Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));
|
||||
//Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));
|
||||
|
||||
var universalFormats = parameters.VirtualPaths
|
||||
.SelectMany(x => new[] {
|
||||
@@ -72,9 +72,9 @@ namespace Orchard.Mvc.ViewEngines {
|
||||
})
|
||||
.ToArray();
|
||||
|
||||
Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));
|
||||
//Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));
|
||||
|
||||
var viewEngine = new WebFormViewEngine {
|
||||
var viewEngine = new WebFormViewEngineForAspNet4 {
|
||||
MasterLocationFormats = DisabledFormats,
|
||||
ViewLocationFormats = universalFormats,
|
||||
PartialViewLocationFormats = universalFormats,
|
@@ -463,6 +463,7 @@
|
||||
<Compile Include="Environment\DefaultOrchardHost.cs" />
|
||||
<Compile Include="Mvc\OrchardControllerFactory.cs" />
|
||||
<Compile Include="Environment\IOrchardHost.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\WebForms\WebFormViewEngineForAspNet4.cs" />
|
||||
<Compile Include="OrchardCoreException.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Indexing\IIndexDocument.cs" />
|
||||
@@ -557,7 +558,7 @@
|
||||
<Compile Include="Mvc\Routes\UrlPrefix.cs" />
|
||||
<Compile Include="Mvc\Routes\UrlPrefixAdjustedHttpContext.cs" />
|
||||
<Compile Include="Mvc\Routes\ShellRoute.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\ThemeViewLocationCache.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\WebForms\ThemeViewLocationCache.cs" />
|
||||
<Compile Include="Mvc\ViewModels\AdaptedViewModel.cs" />
|
||||
<Compile Include="Mvc\ViewUserControl.cs">
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
@@ -644,7 +645,7 @@
|
||||
<Compile Include="Mvc\ViewEngines\LayoutViewEngine.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\LayoutViewContext.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\ViewEngineFilter.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\WebFormsViewEngineProvider.cs" />
|
||||
<Compile Include="Mvc\ViewEngines\WebForms\WebFormViewEngineProvider.cs" />
|
||||
<Compile Include="Mvc\ViewModels\BaseViewModel.cs" />
|
||||
<Compile Include="UI\Admin\AdminThemeSelector.cs" />
|
||||
<Compile Include="UI\Navigation\INavigationManager.cs" />
|
||||
|
Reference in New Issue
Block a user