From 35558ee5d5870fd887c74f572fbf4303d50922fb Mon Sep 17 00:00:00 2001 From: skewed Date: Tue, 22 Dec 2009 21:52:51 +0000 Subject: [PATCH] Some fixes* that had to be made to (begin to) get running as an IIS application. *Pretty much pathing fixes and including "TheAdmin" theme and the themes Web.config (to get themes to work and the admin to not look like...) --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044465 --- .../Core/Common/Mvc/Filters/AdminFilter.cs | 4 ++-- .../Themes/Services/AdminThemeSelector.cs | 4 ++-- src/Orchard.Web/Orchard.Web.csproj | 14 +++++++++++ src/Orchard.Web/Web.config | 7 ++---- src/Orchard/Extensions/PackageFolders.cs | 2 ++ .../Mvc/Html/FileRegistrationContext.cs | 24 +++++++++++-------- .../Themes/ExtensionManagerExtensions.cs | 2 +- 7 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Mvc/Filters/AdminFilter.cs b/src/Orchard.Web/Core/Common/Mvc/Filters/AdminFilter.cs index 5ad1d77d1..bf45373ff 100644 --- a/src/Orchard.Web/Core/Common/Mvc/Filters/AdminFilter.cs +++ b/src/Orchard.Web/Core/Common/Mvc/Filters/AdminFilter.cs @@ -23,8 +23,8 @@ namespace Orchard.Core.Common.Mvc.Filters { { //todo: (heskew) get at the SiteUrl the "right" way. or is this the right way :| var siteUrl = _siteService.GetSiteSettings().ContentItem.As().Record.SiteUrl; - - if (filterContext.HttpContext.Request.RawUrl.StartsWith(Path.Combine(siteUrl, "admin"), true, CultureInfo.InvariantCulture) + //todo: (heskew) get at the admin path in a less hacky way + if (filterContext.HttpContext.Request.RawUrl.StartsWith(Path.Combine(siteUrl, "admin").Replace("\\", "/"), true, CultureInfo.InvariantCulture) && !_authorizer.Authorize(Permissions.AccessAdmin, "Can't access the admin")) { filterContext.Result = new HttpUnauthorizedResult(); } diff --git a/src/Orchard.Web/Core/Themes/Services/AdminThemeSelector.cs b/src/Orchard.Web/Core/Themes/Services/AdminThemeSelector.cs index 2cf143c4d..3592230db 100644 --- a/src/Orchard.Web/Core/Themes/Services/AdminThemeSelector.cs +++ b/src/Orchard.Web/Core/Themes/Services/AdminThemeSelector.cs @@ -17,8 +17,8 @@ namespace Orchard.Core.Themes.Services { public ThemeSelectorResult GetTheme(RequestContext context) { //todo: (heskew) get at the SiteUrl the "right" way. or is this the right way :| var siteUrl = _siteService.GetSiteSettings().ContentItem.As().Record.SiteUrl; - - if (!context.HttpContext.Request.Path.StartsWith(Path.Combine(siteUrl, "admin"), true, CultureInfo.InvariantCulture)) + //todo: (heskew) get at the admin path in a less hacky way + if (!context.HttpContext.Request.Path.StartsWith(Path.Combine(siteUrl, "admin").Replace("\\", "/"), true, CultureInfo.InvariantCulture)) return null; return new ThemeSelectorResult { Priority = 0, ThemeName = "TheAdmin" }; diff --git a/src/Orchard.Web/Orchard.Web.csproj b/src/Orchard.Web/Orchard.Web.csproj index ecd1e66fe..ea21e9314 100644 --- a/src/Orchard.Web/Orchard.Web.csproj +++ b/src/Orchard.Web/Orchard.Web.csproj @@ -165,10 +165,24 @@ + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Web.config b/src/Orchard.Web/Web.config index 4c9552bfe..019e40cb1 100644 --- a/src/Orchard.Web/Web.config +++ b/src/Orchard.Web/Web.config @@ -110,13 +110,10 @@ during the execution of a request. Specifically, it enables developers to configure html error pages to be displayed in place of a error stack trace. - - - - - --> + + diff --git a/src/Orchard/Extensions/PackageFolders.cs b/src/Orchard/Extensions/PackageFolders.cs index d36acb510..80ed0b97a 100644 --- a/src/Orchard/Extensions/PackageFolders.cs +++ b/src/Orchard/Extensions/PackageFolders.cs @@ -14,6 +14,8 @@ namespace Orchard.Extensions { public IEnumerable ListNames() { foreach (var path in _paths) { + if (!Directory.Exists(PathHelpers.GetPhysicalPath(path))) + continue; foreach (var directoryName in Directory.GetDirectories(PathHelpers.GetPhysicalPath(path))) { if (File.Exists(Path.Combine(directoryName, "Package.txt"))) yield return Path.GetFileName(directoryName); diff --git a/src/Orchard/Mvc/Html/FileRegistrationContext.cs b/src/Orchard/Mvc/Html/FileRegistrationContext.cs index 7c70342bd..45fa67a0e 100644 --- a/src/Orchard/Mvc/Html/FileRegistrationContext.cs +++ b/src/Orchard/Mvc/Html/FileRegistrationContext.cs @@ -7,14 +7,16 @@ namespace Orchard.Mvc.Html { public class FileRegistrationContext : RequestContext { public FileRegistrationContext(ViewContext viewContext, IViewDataContainer viewDataContainer, string fileName) : base(viewContext.HttpContext, viewContext.RouteData) { - TemplateControl container = viewDataContainer as TemplateControl; + Container = viewDataContainer as TemplateControl; - if (container != null) - ContainerVirtualPath = container.AppRelativeVirtualPath.Substring(0, - container.AppRelativeVirtualPath. - IndexOf("/Views", - StringComparison. - InvariantCultureIgnoreCase)); + if (Container != null) + ContainerVirtualPath = Container.AppRelativeVirtualPath.Substring( + 0, + Container.AppRelativeVirtualPath.IndexOf( + "/Views", + StringComparison.InvariantCultureIgnoreCase + ) + ); FileName = fileName; } @@ -28,13 +30,15 @@ namespace Orchard.Mvc.Html { FileRegistrationContext incoming = obj as FileRegistrationContext; return incoming != null && - string.Equals(ContainerVirtualPath, incoming.ContainerVirtualPath, - StringComparison.InvariantCultureIgnoreCase) && + string.Equals(ContainerVirtualPath, incoming.ContainerVirtualPath, StringComparison.InvariantCultureIgnoreCase) && string.Equals(FileName, incoming.FileName, StringComparison.InvariantCultureIgnoreCase); } internal string GetFilePath(string containerRelativePath) { - return ContainerVirtualPath.Replace("~/", "/") + containerRelativePath + FileName; + //todo: (heskew) maybe not here but file paths for non-app locations need to be taken into account + return Container != null + ? Container.ResolveUrl(ContainerVirtualPath + containerRelativePath + FileName) + : (ContainerVirtualPath + containerRelativePath + FileName); } } } \ No newline at end of file diff --git a/src/Orchard/Themes/ExtensionManagerExtensions.cs b/src/Orchard/Themes/ExtensionManagerExtensions.cs index 61e20ba88..7f75cc60b 100644 --- a/src/Orchard/Themes/ExtensionManagerExtensions.cs +++ b/src/Orchard/Themes/ExtensionManagerExtensions.cs @@ -13,7 +13,7 @@ namespace Orchard.Themes { public static string GetThemeLocation(this IExtensionManager extensionManager, ITheme theme) { ExtensionDescriptor descriptor = extensionManager.GetExtensionDescriptor("Theme", theme.ThemeName); - return descriptor != null ? Path.Combine(descriptor.Location, descriptor.Name) : null; + return descriptor != null ? Path.Combine(descriptor.Location, descriptor.Name) : "~"; } } } \ No newline at end of file