From 7b19ab005bff9a80f40638fe1e39ecc9481648ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gregersen?= Date: Wed, 13 Nov 2019 21:00:54 +0100 Subject: [PATCH 01/16] first round of refactoring --- .../Compose/ManifestWatcherComponent.cs | 6 +- .../CompositionExtensions/FileSystems.cs | 2 +- .../CompositionExtensions/Services.cs | 12 +- src/Umbraco.Core/Composing/Current.cs | 1 + src/Umbraco.Core/ConfigsExtensions.cs | 6 +- .../Configuration/GlobalSettings.cs | 18 +- src/Umbraco.Core/ContentExtensions.cs | 4 +- src/Umbraco.Core/Diagnostics/MiniDump.cs | 9 +- src/Umbraco.Core/IO/FileSystems.cs | 26 +-- src/Umbraco.Core/IO/MediaFileSystem.cs | 8 +- src/Umbraco.Core/IO/PhysicalFileSystem.cs | 24 ++- src/Umbraco.Core/IO/ShadowWrapper.cs | 14 +- src/Umbraco.Core/IO/SystemDirectories.cs | 10 +- .../Logging/Viewer/JsonLogViewer.cs | 3 +- .../Logging/Viewer/LogViewerComposer.cs | 3 +- .../Logging/Viewer/LogViewerSourceBase.cs | 18 +- src/Umbraco.Core/Manifest/ManifestParser.cs | 14 +- .../Migrations/Install/DatabaseBuilder.cs | 24 +-- .../Packaging/PackageFileInstallation.cs | 10 +- .../Packaging/PackagesRepository.cs | 26 +-- .../Implement/PartialViewMacroRepository.cs | 4 +- .../Implement/PartialViewRepository.cs | 20 +- .../Implement/TemplateRepository.cs | 8 +- .../PropertyEditors/ConfigurationField.cs | 2 +- .../PropertyEditors/GridEditor.cs | 8 +- .../Runtime/CoreInitialComponent.cs | 17 +- src/Umbraco.Core/Runtime/CoreRuntime.cs | 2 +- .../Services/Implement/FileService.cs | 8 +- .../Services/Implement/NotificationService.cs | 8 +- .../Services/Implement/PackagingService.cs | 7 +- src/Umbraco.Core/StringExtensions.cs | 4 +- src/Umbraco.Core/UriExtensions.cs | 4 +- .../Components/ComponentTests.cs | 3 +- .../IO/PhysicalFileSystemTests.cs | 2 +- src/Umbraco.Tests/IO/ShadowFileSystemTests.cs | 177 +++++++++++------- src/Umbraco.Tests/Logging/LogviewerTests.cs | 7 +- .../Manifest/ManifestParserTests.cs | 3 +- src/Umbraco.Tests/Models/MediaXmlTest.cs | 3 +- .../Packaging/PackageInstallationTest.cs | 20 +- .../PartialViewRepositoryTests.cs | 4 +- .../Repositories/ScriptRepositoryTest.cs | 2 +- .../Repositories/StylesheetRepositoryTest.cs | 2 +- .../Repositories/TemplateRepositoryTest.cs | 6 +- .../PropertyEditors/ImageCropperTest.cs | 3 +- .../Scoping/ScopeEventDispatcherTests.cs | 2 +- .../Scoping/ScopeFileSystemsTests.cs | 16 +- src/Umbraco.Tests/TestHelpers/TestObjects.cs | 23 +-- src/Umbraco.Tests/Testing/UmbracoTestBase.cs | 3 +- .../Editors/BackOfficeAssetsController.cs | 9 +- src/Umbraco.Web/Trees/FilesTreeController.cs | 11 +- .../WebApi/HttpActionContextExtensions.cs | 4 +- 51 files changed, 388 insertions(+), 242 deletions(-) diff --git a/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs b/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs index 97e27e9e23..bb6df42c13 100644 --- a/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs +++ b/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs @@ -10,15 +10,17 @@ namespace Umbraco.Core.Compose { private readonly IRuntimeState _runtimeState; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; // if configured and in debug mode, a ManifestWatcher watches App_Plugins folders for // package.manifest chances and restarts the application on any change private ManifestWatcher _mw; - public ManifestWatcherComponent(IRuntimeState runtimeState, ILogger logger) + public ManifestWatcherComponent(IRuntimeState runtimeState, ILogger logger, IIOHelper ioHelper) { _runtimeState = runtimeState; _logger = logger; + _ioHelper = ioHelper; } public void Initialize() @@ -28,7 +30,7 @@ namespace Umbraco.Core.Compose //if (ApplicationContext.Current.IsConfigured == false || GlobalSettings.DebugMode == false) // return; - var appPlugins = Current.IOHelper.MapPath("~/App_Plugins/"); + var appPlugins = _ioHelper.MapPath("~/App_Plugins/"); if (Directory.Exists(appPlugins) == false) return; _mw = new ManifestWatcher(_logger); diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs index 8518d907b5..cb83db5db0 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs @@ -90,7 +90,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions // register the IFileSystem supporting the IMediaFileSystem // THIS IS THE ONLY THING THAT NEEDS TO CHANGE, IN ORDER TO REPLACE THE UNDERLYING FILESYSTEM // and, SupportingFileSystem.For() returns the underlying filesystem - composition.SetMediaFileSystem(() => new PhysicalFileSystem(SystemDirectories.Media)); + composition.SetMediaFileSystem(factory => new PhysicalFileSystem(SystemDirectories.Media, factory.GetInstance())); return composition; } diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs index 9d7d0a191d..04028e4f31 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs @@ -71,7 +71,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions new PackageInstallation( factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), - new DirectoryInfo(Current.IOHelper.GetRootDirectorySafe()))); + new DirectoryInfo( factory.GetInstance().GetRootDirectorySafe()))); return composition; } @@ -84,14 +84,16 @@ namespace Umbraco.Core.Composing.CompositionExtensions /// private static PackagesRepository CreatePackageRepository(IFactory factory, string packageRepoFileName) => new PackagesRepository( - factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), + factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), packageRepoFileName); private static LocalizedTextServiceFileSources SourcesFactory(IFactory container) { - var mainLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); - var appPlugins = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.Config + "/lang/")); + var ioHelper = container.GetInstance(); + + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs index 3f9c4db288..2b3cf30301 100644 --- a/src/Umbraco.Core/Composing/Current.cs +++ b/src/Umbraco.Core/Composing/Current.cs @@ -205,6 +205,7 @@ namespace Umbraco.Core.Composing public static IVariationContextAccessor VariationContextAccessor => Factory.GetInstance(); + [Obsolete("being removed...", true)] public static readonly IIOHelper IOHelper = new IOHelper(); #endregion diff --git a/src/Umbraco.Core/ConfigsExtensions.cs b/src/Umbraco.Core/ConfigsExtensions.cs index 10293d1171..87f0216b51 100644 --- a/src/Umbraco.Core/ConfigsExtensions.cs +++ b/src/Umbraco.Core/ConfigsExtensions.cs @@ -33,9 +33,11 @@ namespace Umbraco.Core public static void AddCoreConfigs(this Configs configs) { - var configDir = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.Config)); + var ioHelper = Current.Factory.GetInstance(); - configs.Add(() => new GlobalSettings()); + var configDir = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Config)); + + configs.Add(() => new GlobalSettings(ioHelper)); configs.Add("umbracoConfiguration/settings"); configs.Add("umbracoConfiguration/HealthChecks"); diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs index f2438065a4..a0cf20b2e1 100644 --- a/src/Umbraco.Core/Configuration/GlobalSettings.cs +++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs @@ -19,6 +19,7 @@ namespace Umbraco.Core.Configuration /// public class GlobalSettings : IGlobalSettings { + private readonly IIOHelper _ioHelper; private string _localTempPath; // TODO these should not be static @@ -29,6 +30,11 @@ namespace Umbraco.Core.Configuration internal const string StaticReservedPaths = "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; //must end with a comma! internal const string StaticReservedUrls = "~/config/splashes/noNodes.aspx,~/.well-known,"; //must end with a comma! + public GlobalSettings(IIOHelper ioHelper) + { + _ioHelper = ioHelper; + } + /// /// Used in unit testing to reset all config items that were set with property setters (i.e. did not come from config) /// @@ -141,7 +147,7 @@ namespace Umbraco.Core.Configuration get { return ConfigurationManager.AppSettings.ContainsKey(Constants.AppSettings.Path) - ? Current.IOHelper.ResolveUrl(ConfigurationManager.AppSettings[Constants.AppSettings.Path]) + ? _ioHelper.ResolveUrl(ConfigurationManager.AppSettings[Constants.AppSettings.Path]) : string.Empty; } } @@ -171,7 +177,9 @@ namespace Umbraco.Core.Configuration /// Value of the setting to be saved. internal static void SaveSetting(string key, string value) { - var fileName = Current.IOHelper.MapPath(string.Format("{0}/web.config", SystemDirectories.Root)); + var ioHelper = Current.Factory.GetInstance(); + + var fileName = ioHelper.MapPath(string.Format("{0}/web.config", SystemDirectories.Root)); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); var appSettings = xml.Root.DescendantsAndSelf("appSettings").Single(); @@ -191,9 +199,9 @@ namespace Umbraco.Core.Configuration /// Removes a setting from the configuration file. /// /// Key of the setting to be removed. - internal static void RemoveSetting(string key) + internal static void RemoveSetting(string key, IIOHelper ioHelper) { - var fileName = Current.IOHelper.MapPath(string.Format("{0}/web.config", SystemDirectories.Root)); + var fileName = ioHelper.MapPath(string.Format("{0}/web.config", SystemDirectories.Root)); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); var appSettings = xml.Root.DescendantsAndSelf("appSettings").Single(); @@ -320,7 +328,7 @@ namespace Umbraco.Core.Configuration //case LocalTempStorage.Default: //case LocalTempStorage.Unknown: default: - return _localTempPath = Current.IOHelper.MapPath("~/App_Data/TEMP"); + return _localTempPath = _ioHelper.MapPath("~/App_Data/TEMP"); } } } diff --git a/src/Umbraco.Core/ContentExtensions.cs b/src/Umbraco.Core/ContentExtensions.cs index 8e404402d0..6195d68a13 100644 --- a/src/Umbraco.Core/ContentExtensions.cs +++ b/src/Umbraco.Core/ContentExtensions.cs @@ -148,7 +148,9 @@ namespace Umbraco.Core if (filename == null || filestream == null) return; // get a safe & clean filename - filename = Current.IOHelper.SafeFileName(filename); + var ioHelper = Current.Factory.GetInstance(); + + filename = ioHelper.SafeFileName(filename); if (string.IsNullOrWhiteSpace(filename)) return; filename = filename.ToLower(); diff --git a/src/Umbraco.Core/Diagnostics/MiniDump.cs b/src/Umbraco.Core/Diagnostics/MiniDump.cs index 92b6e8cbda..6534ad705c 100644 --- a/src/Umbraco.Core/Diagnostics/MiniDump.cs +++ b/src/Umbraco.Core/Diagnostics/MiniDump.cs @@ -110,11 +110,13 @@ namespace Umbraco.Core.Diagnostics // filter everywhere in our code = not! var stacktrace = withException ? Environment.StackTrace : string.Empty; - var filepath = Current.IOHelper.MapPath("~/App_Data/MiniDump"); + var ioHelper = Current.Factory.GetInstance(); + + var filepath = ioHelper.MapPath("~/App_Data/MiniDump"); if (Directory.Exists(filepath) == false) Directory.CreateDirectory(filepath); - var filename = Path.Combine(filepath, string.Format("{0:yyyyMMddTHHmmss}.{1}.dmp", DateTime.UtcNow, Guid.NewGuid().ToString("N").Substring(0, 4))); + var filename = Path.Combine(filepath, $"{DateTime.UtcNow:yyyyMMddTHHmmss}.{Guid.NewGuid().ToString("N").Substring(0, 4)}.dmp"); using (var stream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.Write)) { return Write(stream.SafeFileHandle, options, withException); @@ -126,7 +128,8 @@ namespace Umbraco.Core.Diagnostics { lock (LockO) { - var filepath = Current.IOHelper.MapPath("~/App_Data/MiniDump"); + var ioHelper = Current.Factory.GetInstance(); + var filepath = ioHelper.MapPath("~/App_Data/MiniDump"); if (Directory.Exists(filepath) == false) return true; var count = Directory.GetFiles(filepath, "*.dmp").Length; return count < 8; diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs index 8906752dd1..0350c3a606 100644 --- a/src/Umbraco.Core/IO/FileSystems.cs +++ b/src/Umbraco.Core/IO/FileSystems.cs @@ -11,6 +11,7 @@ namespace Umbraco.Core.IO { private readonly IFactory _container; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private readonly ConcurrentDictionary> _filesystems = new ConcurrentDictionary>(); @@ -33,10 +34,11 @@ namespace Umbraco.Core.IO #region Constructor // DI wants a public ctor - public FileSystems(IFactory container, ILogger logger) + public FileSystems(IFactory container, ILogger logger, IIOHelper ioHelper) { _container = container; _logger = logger; + _ioHelper = ioHelper; } // for tests only, totally unsafe @@ -120,17 +122,17 @@ namespace Umbraco.Core.IO // but it does not really matter what we return - here, null private object CreateWellKnownFileSystems() { - var macroPartialFileSystem = new PhysicalFileSystem(SystemDirectories.MacroPartials); - var partialViewsFileSystem = new PhysicalFileSystem(SystemDirectories.PartialViews); - var stylesheetsFileSystem = new PhysicalFileSystem(SystemDirectories.Css); - var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts); - var mvcViewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews); + var macroPartialFileSystem = new PhysicalFileSystem(SystemDirectories.MacroPartials, _ioHelper); + var partialViewsFileSystem = new PhysicalFileSystem(SystemDirectories.PartialViews, _ioHelper); + var stylesheetsFileSystem = new PhysicalFileSystem(SystemDirectories.Css, _ioHelper); + var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts, _ioHelper); + var mvcViewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews, _ioHelper); - _macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "macro-partials", IsScoped); - _partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "partials", IsScoped); - _stylesheetsFileSystem = new ShadowWrapper(stylesheetsFileSystem, "css", IsScoped); - _scriptsFileSystem = new ShadowWrapper(scriptsFileSystem, "scripts", IsScoped); - _mvcViewsFileSystem = new ShadowWrapper(mvcViewsFileSystem, "views", IsScoped); + _macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "macro-partials", _ioHelper, IsScoped); + _partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "partials", _ioHelper, IsScoped); + _stylesheetsFileSystem = new ShadowWrapper(stylesheetsFileSystem, "css", _ioHelper, IsScoped); + _scriptsFileSystem = new ShadowWrapper(scriptsFileSystem, "scripts", _ioHelper, IsScoped); + _mvcViewsFileSystem = new ShadowWrapper(mvcViewsFileSystem, "views", _ioHelper, IsScoped); // TODO: do we need a lock here? _shadowWrappers.Add(_macroPartialFileSystem); @@ -269,7 +271,7 @@ namespace Umbraco.Core.IO { lock (_shadowLocker) { - var wrapper = new ShadowWrapper(filesystem, shadowPath, IsScoped); + var wrapper = new ShadowWrapper(filesystem, shadowPath, _ioHelper, IsScoped); if (_shadowCurrentId != null) wrapper.Shadow(_shadowCurrentId); _shadowWrappers.Add(wrapper); diff --git a/src/Umbraco.Core/IO/MediaFileSystem.cs b/src/Umbraco.Core/IO/MediaFileSystem.cs index 2de7bc2f81..4ac9ca99b0 100644 --- a/src/Umbraco.Core/IO/MediaFileSystem.cs +++ b/src/Umbraco.Core/IO/MediaFileSystem.cs @@ -22,16 +22,18 @@ namespace Umbraco.Core.IO private readonly IMediaPathScheme _mediaPathScheme; private readonly IContentSection _contentConfig; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; /// /// Initializes a new instance of the class. /// - public MediaFileSystem(IFileSystem innerFileSystem, IContentSection contentConfig, IMediaPathScheme mediaPathScheme, ILogger logger) + public MediaFileSystem(IFileSystem innerFileSystem, IContentSection contentConfig, IMediaPathScheme mediaPathScheme, ILogger logger, IIOHelper ioHelper) : base(innerFileSystem) { _contentConfig = contentConfig; _mediaPathScheme = mediaPathScheme; _logger = logger; + _ioHelper = ioHelper; } /// @@ -68,7 +70,7 @@ namespace Umbraco.Core.IO { filename = Path.GetFileName(filename); if (filename == null) throw new ArgumentException("Cannot become a safe filename.", nameof(filename)); - filename = Current.IOHelper.SafeFileName(filename.ToLowerInvariant()); + filename = _ioHelper.SafeFileName(filename.ToLowerInvariant()); return _mediaPathScheme.GetFilePath(this, cuid, puid, filename); } @@ -78,7 +80,7 @@ namespace Umbraco.Core.IO { filename = Path.GetFileName(filename); if (filename == null) throw new ArgumentException("Cannot become a safe filename.", nameof(filename)); - filename = Current.IOHelper.SafeFileName(filename.ToLowerInvariant()); + filename = _ioHelper.SafeFileName(filename.ToLowerInvariant()); return _mediaPathScheme.GetFilePath(this, cuid, puid, filename, prevpath); } diff --git a/src/Umbraco.Core/IO/PhysicalFileSystem.cs b/src/Umbraco.Core/IO/PhysicalFileSystem.cs index 2e133a03c3..4fc502e63f 100644 --- a/src/Umbraco.Core/IO/PhysicalFileSystem.cs +++ b/src/Umbraco.Core/IO/PhysicalFileSystem.cs @@ -11,6 +11,8 @@ namespace Umbraco.Core.IO { public class PhysicalFileSystem : IFileSystem { + private readonly IIOHelper _ioHelper; + // the rooted, filesystem path, using directory separator chars, NOT ending with a separator // eg "c:" or "c:\path\to\site" or "\\server\path" private readonly string _rootPath; @@ -26,28 +28,32 @@ namespace Umbraco.Core.IO // virtualRoot should be "~/path/to/root" eg "~/Views" // the "~/" is mandatory. - public PhysicalFileSystem(string virtualRoot) + public PhysicalFileSystem(string virtualRoot, IIOHelper ioHelper) { if (virtualRoot == null) throw new ArgumentNullException("virtualRoot"); if (virtualRoot.StartsWith("~/") == false) throw new ArgumentException("The virtualRoot argument must be a virtual path and start with '~/'"); - _rootPath = EnsureDirectorySeparatorChar(Current.IOHelper.MapPath(virtualRoot)).TrimEnd(Path.DirectorySeparatorChar); + _ioHelper = ioHelper; + + _rootPath = EnsureDirectorySeparatorChar(ioHelper.MapPath(virtualRoot)).TrimEnd(Path.DirectorySeparatorChar); _rootPathFwd = EnsureUrlSeparatorChar(_rootPath); - _rootUrl = EnsureUrlSeparatorChar(Current.IOHelper.ResolveUrl(virtualRoot)).TrimEnd('/'); + _rootUrl = EnsureUrlSeparatorChar(ioHelper.ResolveUrl(virtualRoot)).TrimEnd('/'); } - public PhysicalFileSystem(string rootPath, string rootUrl) + public PhysicalFileSystem(string rootPath, string rootUrl, IIOHelper ioHelper) { if (string.IsNullOrEmpty(rootPath)) throw new ArgumentNullOrEmptyException(nameof(rootPath)); if (string.IsNullOrEmpty(rootUrl)) throw new ArgumentNullOrEmptyException(nameof(rootUrl)); if (rootPath.StartsWith("~/")) throw new ArgumentException("The rootPath argument cannot be a virtual path and cannot start with '~/'"); + _ioHelper = ioHelper; + // rootPath should be... rooted, as in, it's a root path! if (Path.IsPathRooted(rootPath) == false) { // but the test suite App.config cannot really "root" anything so we have to do it here - var localRoot = Current.IOHelper.GetRootDirectorySafe(); + var localRoot = _ioHelper.GetRootDirectorySafe(); rootPath = Path.Combine(localRoot, rootPath); } @@ -257,12 +263,12 @@ namespace Umbraco.Core.IO // if it starts with the root url, strip it and trim the starting slash to make it relative // eg "/Media/1234/img.jpg" => "1234/img.jpg" - if (Current.IOHelper.PathStartsWith(path, _rootUrl, '/')) + if (_ioHelper.PathStartsWith(path, _rootUrl, '/')) return path.Substring(_rootUrl.Length).TrimStart('/'); // if it starts with the root path, strip it and trim the starting slash to make it relative // eg "c:/websites/test/root/Media/1234/img.jpg" => "1234/img.jpg" - if (Current.IOHelper.PathStartsWith(path, _rootPathFwd, '/')) + if (_ioHelper.PathStartsWith(path, _rootPathFwd, '/')) return path.Substring(_rootPathFwd.Length).TrimStart('/'); // unchanged - what else? @@ -292,7 +298,7 @@ namespace Umbraco.Core.IO path = GetRelativePath(path); // if not already rooted, combine with the root path - if (Current.IOHelper.PathStartsWith(path, _rootPath, Path.DirectorySeparatorChar) == false) + if (_ioHelper.PathStartsWith(path, _rootPath, Path.DirectorySeparatorChar) == false) path = Path.Combine(_rootPath, path); // sanitize - GetFullPath will take care of any relative @@ -303,7 +309,7 @@ namespace Umbraco.Core.IO // at that point, path is within legal parts of the filesystem, ie we have // permissions to reach that path, but it may nevertheless be outside of // our root path, due to relative segments, so better check - if (Current.IOHelper.PathStartsWith(path, _rootPath, Path.DirectorySeparatorChar)) + if (_ioHelper.PathStartsWith(path, _rootPath, Path.DirectorySeparatorChar)) { // this says that 4.7.2 supports long paths - but Windows does not // https://docs.microsoft.com/en-us/dotnet/api/system.io.pathtoolongexception?view=netframework-4.7.2 diff --git a/src/Umbraco.Core/IO/ShadowWrapper.cs b/src/Umbraco.Core/IO/ShadowWrapper.cs index 44152d7c1a..641e3845b6 100644 --- a/src/Umbraco.Core/IO/ShadowWrapper.cs +++ b/src/Umbraco.Core/IO/ShadowWrapper.cs @@ -12,14 +12,16 @@ namespace Umbraco.Core.IO private readonly Func _isScoped; private readonly IFileSystem _innerFileSystem; + private readonly IIOHelper _ioHelper; private readonly string _shadowPath; private ShadowFileSystem _shadowFileSystem; private string _shadowDir; - public ShadowWrapper(IFileSystem innerFileSystem, string shadowPath, Func isScoped = null) + public ShadowWrapper(IFileSystem innerFileSystem, string shadowPath, IIOHelper ioHelper, Func isScoped = null) { _innerFileSystem = innerFileSystem; _shadowPath = shadowPath; + _ioHelper = ioHelper; _isScoped = isScoped; } @@ -33,12 +35,14 @@ namespace Umbraco.Core.IO // we should end up with a unique identifier eventually - but just // detect infinite loops (just in case) + var ioHelper = Current.Factory.GetInstance(); + for (var i = 0; i < retries; i++) { var id = GuidUtils.ToBase32String(Guid.NewGuid(), idLength); var virt = ShadowFsPath + "/" + id; - var shadowDir = Current.IOHelper.MapPath(virt); + var shadowDir = ioHelper.MapPath(virt); if (Directory.Exists(shadowDir)) continue; @@ -56,9 +60,9 @@ namespace Umbraco.Core.IO // in a single thread anyways var virt = ShadowFsPath + "/" + id + "/" + _shadowPath; - _shadowDir = Current.IOHelper.MapPath(virt); + _shadowDir = _ioHelper.MapPath(virt); Directory.CreateDirectory(_shadowDir); - var tempfs = new PhysicalFileSystem(virt); + var tempfs = new PhysicalFileSystem(virt, _ioHelper); _shadowFileSystem = new ShadowFileSystem(_innerFileSystem, tempfs); } @@ -83,7 +87,7 @@ namespace Umbraco.Core.IO // shadowPath make be path/to/dir, remove each dir = dir.Replace("/", "\\"); - var min = Current.IOHelper.MapPath(ShadowFsPath).Length; + var min = _ioHelper.MapPath(ShadowFsPath).Length; var pos = dir.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase); while (pos > min) { diff --git a/src/Umbraco.Core/IO/SystemDirectories.cs b/src/Umbraco.Core/IO/SystemDirectories.cs index c5c410ff3f..d6c9e961b9 100644 --- a/src/Umbraco.Core/IO/SystemDirectories.cs +++ b/src/Umbraco.Core/IO/SystemDirectories.cs @@ -6,6 +6,8 @@ namespace Umbraco.Core.IO //all paths has a starting but no trailing / public class SystemDirectories { + private static IIOHelper IOHelper => Current.Factory.GetInstance(); + public static string Bin => "~/bin"; public static string Config => "~/config"; @@ -30,13 +32,13 @@ namespace Umbraco.Core.IO public static string MacroPartials => MvcViews + "/MacroPartials/"; - public static string Media => Current.IOHelper.ReturnPath("umbracoMediaPath", "~/media"); + public static string Media => IOHelper.ReturnPath("umbracoMediaPath", "~/media"); - public static string Scripts => Current.IOHelper.ReturnPath("umbracoScriptsPath", "~/scripts"); + public static string Scripts => IOHelper.ReturnPath("umbracoScriptsPath", "~/scripts"); - public static string Css => Current.IOHelper.ReturnPath("umbracoCssPath", "~/css"); + public static string Css => IOHelper.ReturnPath("umbracoCssPath", "~/css"); - public static string Umbraco => Current.IOHelper.ReturnPath("umbracoPath", "~/umbraco"); + public static string Umbraco => IOHelper.ReturnPath("umbracoPath", "~/umbraco"); public static string Packages => Data + "/packages"; diff --git a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs index bbe2f3704d..aea1c8fae4 100644 --- a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs @@ -5,6 +5,7 @@ using System.Linq; using Newtonsoft.Json; using Serilog.Events; using Serilog.Formatting.Compact.Reader; +using Umbraco.Core.IO; namespace Umbraco.Core.Logging.Viewer { @@ -13,7 +14,7 @@ namespace Umbraco.Core.Logging.Viewer private readonly string _logsPath; private readonly ILogger _logger; - public JsonLogViewer(ILogger logger, string logsPath = "", string searchPath = "") : base(searchPath) + public JsonLogViewer(ILogger logger, IIOHelper ioHelper, string logsPath = "", string searchPath = "") : base(ioHelper, searchPath) { if (string.IsNullOrEmpty(logsPath)) logsPath = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\"; diff --git a/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs b/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs index 8eb835b4d9..f92ca0140a 100644 --- a/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs +++ b/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs @@ -1,5 +1,6 @@ using Umbraco.Core.Compose; using Umbraco.Core.Composing; +using Umbraco.Core.IO; namespace Umbraco.Core.Logging.Viewer { @@ -9,7 +10,7 @@ namespace Umbraco.Core.Logging.Viewer { public void Compose(Composition composition) { - composition.SetLogViewer(_ => new JsonLogViewer(composition.Logger)); + composition.SetLogViewer(factory => new JsonLogViewer(composition.Logger, factory.GetInstance())); } } } diff --git a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs index c2d9dbb46c..4cc70eaf42 100644 --- a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs +++ b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs @@ -15,17 +15,19 @@ namespace Umbraco.Core.Logging.Viewer { public abstract class LogViewerSourceBase : ILogViewer { - protected LogViewerSourceBase(string pathToSearches = "") + private readonly string _searchesConfigPath; + private readonly IIOHelper _ioHelper; + + protected LogViewerSourceBase(IIOHelper ioHelper, string pathToSearches = "") { if (string.IsNullOrEmpty(pathToSearches)) // ReSharper disable once StringLiteralTypo - pathToSearches = Current.IOHelper.MapPath("~/Config/logviewer.searches.config.js"); + pathToSearches = ioHelper.MapPath("~/Config/logviewer.searches.config.js"); _searchesConfigPath = pathToSearches; + _ioHelper = ioHelper; } - private readonly string _searchesConfigPath; - public abstract bool CanHandleLargeLogs { get; } /// @@ -40,7 +42,7 @@ namespace Umbraco.Core.Logging.Viewer //Our default implementation //If file does not exist - lets create it with an empty array - EnsureFileExists(_searchesConfigPath, "[]"); + EnsureFileExists(_searchesConfigPath, "[]", _ioHelper); var rawJson = System.IO.File.ReadAllText(_searchesConfigPath); return JsonConvert.DeserializeObject(rawJson); @@ -58,7 +60,7 @@ namespace Umbraco.Core.Logging.Viewer var rawJson = JsonConvert.SerializeObject(searches, Formatting.Indented); //If file does not exist - lets create it with an empty array - EnsureFileExists(_searchesConfigPath, "[]"); + EnsureFileExists(_searchesConfigPath, "[]", _ioHelper); //Write it back down to file System.IO.File.WriteAllText(_searchesConfigPath, rawJson); @@ -180,9 +182,9 @@ namespace Umbraco.Core.Logging.Viewer }; } - private static void EnsureFileExists(string path, string contents) + private static void EnsureFileExists(string path, string contents, IIOHelper ioHelper) { - var absolutePath = Current.IOHelper.MapPath(path); + var absolutePath = ioHelper.MapPath(path); if (System.IO.File.Exists(absolutePath)) return; using (var writer = System.IO.File.CreateText(absolutePath)) diff --git a/src/Umbraco.Core/Manifest/ManifestParser.cs b/src/Umbraco.Core/Manifest/ManifestParser.cs index cac904a520..9a34735987 100644 --- a/src/Umbraco.Core/Manifest/ManifestParser.cs +++ b/src/Umbraco.Core/Manifest/ManifestParser.cs @@ -22,6 +22,7 @@ namespace Umbraco.Core.Manifest private readonly IAppPolicyCache _cache; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private readonly ManifestValueValidatorCollection _validators; private readonly ManifestFilterCollection _filters; @@ -30,14 +31,14 @@ namespace Umbraco.Core.Manifest /// /// Initializes a new instance of the class. /// - public ManifestParser(AppCaches appCaches, ManifestValueValidatorCollection validators, ManifestFilterCollection filters, ILogger logger) - : this(appCaches, validators, filters, "~/App_Plugins", logger) + public ManifestParser(AppCaches appCaches, ManifestValueValidatorCollection validators, ManifestFilterCollection filters, ILogger logger, IIOHelper ioHelper) + : this(appCaches, validators, filters, "~/App_Plugins", logger, ioHelper) { } /// /// Initializes a new instance of the class. /// - private ManifestParser(AppCaches appCaches, ManifestValueValidatorCollection validators, ManifestFilterCollection filters, string path, ILogger logger) + private ManifestParser(AppCaches appCaches, ManifestValueValidatorCollection validators, ManifestFilterCollection filters, string path, ILogger logger, IIOHelper ioHelper) { if (appCaches == null) throw new ArgumentNullException(nameof(appCaches)); _cache = appCaches.RuntimeCache; @@ -46,12 +47,13 @@ namespace Umbraco.Core.Manifest if (string.IsNullOrWhiteSpace(path)) throw new ArgumentNullOrEmptyException(nameof(path)); Path = path; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _ioHelper = ioHelper; } public string Path { get => _path; - set => _path = value.StartsWith("~/") ? Current.IOHelper.MapPath(value) : value; + set => _path = value.StartsWith("~/") ? _ioHelper.MapPath(value) : value; } /// @@ -166,9 +168,9 @@ namespace Umbraco.Core.Manifest // scripts and stylesheets are raw string, must process here for (var i = 0; i < manifest.Scripts.Length; i++) - manifest.Scripts[i] = Current.IOHelper.ResolveVirtualUrl(manifest.Scripts[i]); + manifest.Scripts[i] = _ioHelper.ResolveVirtualUrl(manifest.Scripts[i]); for (var i = 0; i < manifest.Stylesheets.Length; i++) - manifest.Stylesheets[i] = Current.IOHelper.ResolveVirtualUrl(manifest.Stylesheets[i]); + manifest.Stylesheets[i] = _ioHelper.ResolveVirtualUrl(manifest.Stylesheets[i]); // add property editors that are also parameter editors, to the parameter editors list // (the manifest format is kinda legacy) diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs index a0c87ce510..5d0e3246fc 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs @@ -29,13 +29,14 @@ namespace Umbraco.Core.Migrations.Install private readonly IMigrationBuilder _migrationBuilder; private readonly IKeyValueService _keyValueService; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private DatabaseSchemaResult _databaseSchemaValidationResult; /// /// Initializes a new instance of the class. /// - public DatabaseBuilder(IScopeProvider scopeProvider, IGlobalSettings globalSettings, IUmbracoDatabaseFactory databaseFactory, IRuntimeState runtime, ILogger logger, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService) + public DatabaseBuilder(IScopeProvider scopeProvider, IGlobalSettings globalSettings, IUmbracoDatabaseFactory databaseFactory, IRuntimeState runtime, ILogger logger, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, IIOHelper ioHelper) { _scopeProvider = scopeProvider; _globalSettings = globalSettings; @@ -44,6 +45,7 @@ namespace Umbraco.Core.Migrations.Install _logger = logger; _migrationBuilder = migrationBuilder; _keyValueService = keyValueService; + _ioHelper = ioHelper; } #region Status @@ -125,14 +127,14 @@ namespace Umbraco.Core.Migrations.Install /// public void ConfigureEmbeddedDatabaseConnection() { - ConfigureEmbeddedDatabaseConnection(_databaseFactory, _logger); + ConfigureEmbeddedDatabaseConnection(_databaseFactory, _ioHelper, _logger); } - private static void ConfigureEmbeddedDatabaseConnection(IUmbracoDatabaseFactory factory, ILogger logger) + private static void ConfigureEmbeddedDatabaseConnection(IUmbracoDatabaseFactory factory, IIOHelper ioHelper, ILogger logger) { - SaveConnectionString(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe, logger); + SaveConnectionString(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe, ioHelper, logger); - var path = Path.Combine(Current.IOHelper.GetRootDirectorySafe(), "App_Data", "Umbraco.sdf"); + var path = Path.Combine(ioHelper.GetRootDirectorySafe(), "App_Data", "Umbraco.sdf"); if (File.Exists(path) == false) { // this should probably be in a "using (new SqlCeEngine)" clause but not sure @@ -154,7 +156,7 @@ namespace Umbraco.Core.Migrations.Install { const string providerName = Constants.DbProviderNames.SqlServer; - SaveConnectionString(connectionString, providerName, _logger); + SaveConnectionString(connectionString, providerName, _ioHelper, _logger); _databaseFactory.Configure(connectionString, providerName); } @@ -170,7 +172,7 @@ namespace Umbraco.Core.Migrations.Install { var connectionString = GetDatabaseConnectionString(server, databaseName, user, password, databaseProvider, out var providerName); - SaveConnectionString(connectionString, providerName, _logger); + SaveConnectionString(connectionString, providerName, _ioHelper, _logger); _databaseFactory.Configure(connectionString, providerName); } @@ -201,7 +203,7 @@ namespace Umbraco.Core.Migrations.Install public void ConfigureIntegratedSecurityDatabaseConnection(string server, string databaseName) { var connectionString = GetIntegratedSecurityDatabaseConnectionString(server, databaseName); - SaveConnectionString(connectionString, Constants.DbProviderNames.SqlServer, _logger); + SaveConnectionString(connectionString, Constants.DbProviderNames.SqlServer, _ioHelper, _logger); _databaseFactory.Configure(connectionString, Constants.DbProviderNames.SqlServer); } @@ -277,13 +279,13 @@ namespace Umbraco.Core.Migrations.Install /// The connection string. /// The provider name. /// A logger. - private static void SaveConnectionString(string connectionString, string providerName, ILogger logger) + private static void SaveConnectionString(string connectionString, string providerName, IIOHelper ioHelper, ILogger logger) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullOrEmptyException(nameof(connectionString)); if (string.IsNullOrWhiteSpace(providerName)) throw new ArgumentNullOrEmptyException(nameof(providerName)); var fileSource = "web.config"; - var fileName = Current.IOHelper.MapPath(SystemDirectories.Root +"/" + fileSource); + var fileName = ioHelper.MapPath(SystemDirectories.Root +"/" + fileSource); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); if (xml.Root == null) throw new Exception($"Invalid {fileSource} file (no root)."); @@ -296,7 +298,7 @@ namespace Umbraco.Core.Migrations.Install if (configSourceAttribute != null) { fileSource = configSourceAttribute.Value; - fileName = Current.IOHelper.MapPath(SystemDirectories.Root + "/" + fileSource); + fileName = ioHelper.MapPath(SystemDirectories.Root + "/" + fileSource); if (!File.Exists(fileName)) throw new Exception($"Invalid configSource \"{fileSource}\" (no such file)."); diff --git a/src/Umbraco.Core/Packaging/PackageFileInstallation.cs b/src/Umbraco.Core/Packaging/PackageFileInstallation.cs index 45e40b8e5f..01bb316612 100644 --- a/src/Umbraco.Core/Packaging/PackageFileInstallation.cs +++ b/src/Umbraco.Core/Packaging/PackageFileInstallation.cs @@ -20,12 +20,14 @@ namespace Umbraco.Core.Packaging internal class PackageFileInstallation { private readonly CompiledPackageXmlParser _parser; + private readonly IIOHelper _ioHelper; private readonly IProfilingLogger _logger; private readonly PackageExtraction _packageExtraction; - public PackageFileInstallation(CompiledPackageXmlParser parser, IProfilingLogger logger) + public PackageFileInstallation(CompiledPackageXmlParser parser, IIOHelper ioHelper, IProfilingLogger logger) { _parser = parser; + _ioHelper = ioHelper; _logger = logger; _packageExtraction = new PackageExtraction(); } @@ -60,15 +62,15 @@ namespace Umbraco.Core.Packaging foreach (var item in package.Files.ToArray()) { - removedFiles.Add(Current.IOHelper.GetRelativePath(item)); + removedFiles.Add(_ioHelper.GetRelativePath(item)); //here we need to try to find the file in question as most packages does not support the tilde char - var file = Current.IOHelper.FindFile(item); + var file = _ioHelper.FindFile(item); if (file != null) { // TODO: Surely this should be ~/ ? file = file.EnsureStartsWith("/"); - var filePath = Current.IOHelper.MapPath(file); + var filePath = _ioHelper.MapPath(file); if (File.Exists(filePath)) File.Delete(filePath); diff --git a/src/Umbraco.Core/Packaging/PackagesRepository.cs b/src/Umbraco.Core/Packaging/PackagesRepository.cs index 458a239cc0..7ae3462b87 100644 --- a/src/Umbraco.Core/Packaging/PackagesRepository.cs +++ b/src/Umbraco.Core/Packaging/PackagesRepository.cs @@ -29,6 +29,7 @@ namespace Umbraco.Core.Packaging private readonly ILocalizationService _languageService; private readonly IEntityXmlSerializer _serializer; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private readonly string _packageRepositoryFileName; private readonly string _mediaFolderPath; private readonly string _packagesFolderPath; @@ -44,6 +45,7 @@ namespace Umbraco.Core.Packaging /// /// /// + /// /// /// /// @@ -55,6 +57,7 @@ namespace Umbraco.Core.Packaging public PackagesRepository(IContentService contentService, IContentTypeService contentTypeService, IDataTypeService dataTypeService, IFileService fileService, IMacroService macroService, ILocalizationService languageService, + IIOHelper ioHelper, IEntityXmlSerializer serializer, ILogger logger, string packageRepositoryFileName, string tempFolderPath = null, string packagesFolderPath = null, string mediaFolderPath = null) @@ -68,6 +71,7 @@ namespace Umbraco.Core.Packaging _languageService = languageService; _serializer = serializer; _logger = logger; + _ioHelper = ioHelper; _packageRepositoryFileName = packageRepositoryFileName; _tempFolderPath = tempFolderPath ?? SystemDirectories.TempData.EnsureEndsWith('/') + "PackageFiles"; @@ -155,7 +159,7 @@ namespace Umbraco.Core.Packaging ValidatePackage(definition); //Create a folder for building this package - var temporaryPath = Current.IOHelper.MapPath(_tempFolderPath.EnsureEndsWith('/') + Guid.NewGuid()); + var temporaryPath = _ioHelper.MapPath(_tempFolderPath.EnsureEndsWith('/') + Guid.NewGuid()); if (Directory.Exists(temporaryPath) == false) Directory.CreateDirectory(temporaryPath); @@ -178,13 +182,13 @@ namespace Umbraco.Core.Packaging //Files foreach (var fileName in definition.Files) - AppendFileToPackage(fileName, temporaryPath, filesXml); + AppendFileToPackage(fileName, temporaryPath, filesXml, _ioHelper); //Load view on install... if (!string.IsNullOrEmpty(definition.PackageView)) { var control = new XElement("view", definition.PackageView); - AppendFileToPackage(definition.PackageView, temporaryPath, filesXml); + AppendFileToPackage(definition.PackageView, temporaryPath, filesXml, _ioHelper); root.Add(control); } @@ -214,11 +218,11 @@ namespace Umbraco.Core.Packaging // check if there's a packages directory below media - if (Directory.Exists(Current.IOHelper.MapPath(_mediaFolderPath)) == false) - Directory.CreateDirectory(Current.IOHelper.MapPath(_mediaFolderPath)); + if (Directory.Exists(_ioHelper.MapPath(_mediaFolderPath)) == false) + Directory.CreateDirectory(_ioHelper.MapPath(_mediaFolderPath)); var packPath = _mediaFolderPath.EnsureEndsWith('/') + (definition.Name + "_" + definition.Version).Replace(' ', '_') + ".zip"; - ZipPackage(temporaryPath, Current.IOHelper.MapPath(packPath)); + ZipPackage(temporaryPath, _ioHelper.MapPath(packPath)); //we need to update the package path and save it definition.PackagePath = packPath; @@ -294,7 +298,7 @@ namespace Umbraco.Core.Packaging macros.Add(macroXml); //if the macro has a file copy it to the xml if (!string.IsNullOrEmpty(macro.MacroSource)) - AppendFileToPackage(macro.MacroSource, temporaryPath, filesXml); + AppendFileToPackage(macro.MacroSource, temporaryPath, filesXml,_ioHelper); } root.Add(macros); } @@ -444,12 +448,12 @@ namespace Umbraco.Core.Packaging /// The path. /// The package directory. /// The files xml node - private static void AppendFileToPackage(string path, string packageDirectory, XContainer filesXml) + private static void AppendFileToPackage(string path, string packageDirectory, XContainer filesXml, IIOHelper ioHelper) { if (!path.StartsWith("~/") && !path.StartsWith("/")) path = "~/" + path; - var serverPath = Current.IOHelper.MapPath(path); + var serverPath = ioHelper.MapPath(path); if (File.Exists(serverPath)) AppendFileXml(new FileInfo(serverPath), path, packageDirectory, filesXml); @@ -608,11 +612,11 @@ namespace Umbraco.Core.Packaging private XDocument EnsureStorage(out string packagesFile) { - var packagesFolder = Current.IOHelper.MapPath(_packagesFolderPath); + var packagesFolder = _ioHelper.MapPath(_packagesFolderPath); //ensure it exists Directory.CreateDirectory(packagesFolder); - packagesFile = Current.IOHelper.MapPath(CreatedPackagesFile); + packagesFile = _ioHelper.MapPath(CreatedPackagesFile); if (!File.Exists(packagesFile)) { var xml = new XDocument(new XElement("packages")); diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs index d707bcee10..03de23004e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs @@ -5,8 +5,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { internal class PartialViewMacroRepository : PartialViewRepository, IPartialViewMacroRepository { - public PartialViewMacroRepository(IFileSystems fileSystems) - : base(fileSystems.MacroPartialsFileSystem) + public PartialViewMacroRepository(IFileSystems fileSystems, IIOHelper ioHelper) + : base(fileSystems.MacroPartialsFileSystem, ioHelper) { } protected override PartialViewType ViewType => PartialViewType.PartialViewMacro; diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs index d7d1be55c7..1d5cd15ce8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs @@ -10,13 +10,19 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { internal class PartialViewRepository : FileRepository, IPartialViewRepository { - public PartialViewRepository(IFileSystems fileSystems) - : base(fileSystems.PartialViewsFileSystem) - { } + private readonly IIOHelper _ioHelper; - protected PartialViewRepository(IFileSystem fileSystem) + public PartialViewRepository(IFileSystems fileSystems, IIOHelper ioHelper) + : base(fileSystems.PartialViewsFileSystem) + { + _ioHelper = ioHelper; + } + + protected PartialViewRepository(IFileSystem fileSystem, IIOHelper ioHelper) : base(fileSystem) - { } + { + _ioHelper = ioHelper; + } protected virtual PartialViewType ViewType => PartialViewType.PartialView; @@ -104,8 +110,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement // validate path & extension var validDir = SystemDirectories.MvcViews; - var isValidPath = Current.IOHelper.VerifyEditPath(fullPath, validDir); - var isValidExtension = Current.IOHelper.VerifyFileExtension(fullPath, ValidExtensions); + var isValidPath = _ioHelper.VerifyEditPath(fullPath, validDir); + var isValidExtension = _ioHelper.VerifyFileExtension(fullPath, ValidExtensions); return isValidPath && isValidExtension; } diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs index 5fd319e4d4..3d1d7aa786 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs @@ -23,12 +23,14 @@ namespace Umbraco.Core.Persistence.Repositories.Implement /// internal class TemplateRepository : NPocoRepositoryBase, ITemplateRepository { + private readonly IIOHelper _ioHelper; private readonly IFileSystem _viewsFileSystem; private readonly ViewHelper _viewHelper; - public TemplateRepository(IScopeAccessor scopeAccessor, AppCaches cache, ILogger logger, IFileSystems fileSystems) + public TemplateRepository(IScopeAccessor scopeAccessor, AppCaches cache, ILogger logger, IFileSystems fileSystems, IIOHelper ioHelper) : base(scopeAccessor, cache, logger) { + _ioHelper = ioHelper; _viewsFileSystem = fileSystems.MvcViewsFileSystem; _viewHelper = new ViewHelper(_viewsFileSystem); } @@ -593,8 +595,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement validExts.Add("vbhtml"); // validate path and extension - var validFile = Current.IOHelper.VerifyEditPath(path, validDirs); - var validExtension = Current.IOHelper.VerifyFileExtension(path, validExts); + var validFile = _ioHelper.VerifyEditPath(path, validDirs); + var validExtension = _ioHelper.VerifyFileExtension(path, validExts); return validFile && validExtension; } diff --git a/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs b/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs index ee07f8dcef..bf692d1c98 100644 --- a/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs +++ b/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs @@ -94,7 +94,7 @@ namespace Umbraco.Core.PropertyEditors public string View { get => _view; - set => _view = Current.IOHelper.ResolveVirtualUrl(value); + set => _view = Current.Factory.GetInstance().ResolveVirtualUrl(value); } /// diff --git a/src/Umbraco.Core/PropertyEditors/GridEditor.cs b/src/Umbraco.Core/PropertyEditors/GridEditor.cs index 388e79675c..869e427e49 100644 --- a/src/Umbraco.Core/PropertyEditors/GridEditor.cs +++ b/src/Umbraco.Core/PropertyEditors/GridEditor.cs @@ -8,11 +8,13 @@ namespace Umbraco.Core.PropertyEditors { public class GridEditor : IGridEditorConfig { + private readonly IIOHelper _ioHelper; private string _view; private string _render; - public GridEditor() + public GridEditor(IIOHelper ioHelper) { + _ioHelper = ioHelper; Config = new Dictionary(); } @@ -29,14 +31,14 @@ namespace Umbraco.Core.PropertyEditors public string View { get => _view; - set => _view = Current.IOHelper.ResolveVirtualUrl(value); + set => _view = _ioHelper.ResolveVirtualUrl(value); } [JsonProperty("render")] public string Render { get => _render; - set => _render = Current.IOHelper.ResolveVirtualUrl(value); + set => _render = _ioHelper.ResolveVirtualUrl(value); } [JsonProperty("icon", Required = Required.Always)] diff --git a/src/Umbraco.Core/Runtime/CoreInitialComponent.cs b/src/Umbraco.Core/Runtime/CoreInitialComponent.cs index f88417948b..e90ad41155 100644 --- a/src/Umbraco.Core/Runtime/CoreInitialComponent.cs +++ b/src/Umbraco.Core/Runtime/CoreInitialComponent.cs @@ -5,15 +5,22 @@ namespace Umbraco.Core.Runtime { public class CoreInitialComponent : IComponent { + private readonly IIOHelper _ioHelper; + + public CoreInitialComponent(IIOHelper ioHelper) + { + _ioHelper = ioHelper; + } + public void Initialize() { // ensure we have some essential directories // every other component can then initialize safely - Current.IOHelper.EnsurePathExists("~/App_Data"); - Current.IOHelper.EnsurePathExists(SystemDirectories.Media); - Current.IOHelper.EnsurePathExists(SystemDirectories.MvcViews); - Current.IOHelper.EnsurePathExists(SystemDirectories.MvcViews + "/Partials"); - Current.IOHelper.EnsurePathExists(SystemDirectories.MvcViews + "/MacroPartials"); + _ioHelper.EnsurePathExists("~/App_Data"); + _ioHelper.EnsurePathExists(SystemDirectories.Media); + _ioHelper.EnsurePathExists(SystemDirectories.MvcViews); + _ioHelper.EnsurePathExists(SystemDirectories.MvcViews + "/Partials"); + _ioHelper.EnsurePathExists(SystemDirectories.MvcViews + "/MacroPartials"); } public void Terminate() diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs index 90dbbe666c..efecb539cb 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntime.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs @@ -239,7 +239,7 @@ namespace Umbraco.Core.Runtime { var path = GetApplicationRootPath(); if (string.IsNullOrWhiteSpace(path) == false) - Current.IOHelper.SetRootDirectory(path); + IOHelper.SetRootDirectory(path); } private bool AcquireMainDom(MainDom mainDom) diff --git a/src/Umbraco.Core/Services/Implement/FileService.cs b/src/Umbraco.Core/Services/Implement/FileService.cs index cde8ed30fe..00a95fced6 100644 --- a/src/Umbraco.Core/Services/Implement/FileService.cs +++ b/src/Umbraco.Core/Services/Implement/FileService.cs @@ -19,6 +19,7 @@ namespace Umbraco.Core.Services.Implement /// public class FileService : ScopeRepositoryService, IFileService { + private readonly IIOHelper _ioHelper; private readonly IStylesheetRepository _stylesheetRepository; private readonly IScriptRepository _scriptRepository; private readonly ITemplateRepository _templateRepository; @@ -29,12 +30,13 @@ namespace Umbraco.Core.Services.Implement private const string PartialViewHeader = "@inherits Umbraco.Web.Mvc.UmbracoViewPage"; private const string PartialViewMacroHeader = "@inherits Umbraco.Web.Macros.PartialViewMacroPage"; - public FileService(IScopeProvider uowProvider, ILogger logger, IEventMessagesFactory eventMessagesFactory, + public FileService(IScopeProvider uowProvider, IIOHelper ioHelper, ILogger logger, IEventMessagesFactory eventMessagesFactory, IStylesheetRepository stylesheetRepository, IScriptRepository scriptRepository, ITemplateRepository templateRepository, IPartialViewRepository partialViewRepository, IPartialViewMacroRepository partialViewMacroRepository, IAuditRepository auditRepository) : base(uowProvider, logger, eventMessagesFactory) { + _ioHelper = ioHelper; _stylesheetRepository = stylesheetRepository; _scriptRepository = scriptRepository; _templateRepository = templateRepository; @@ -664,7 +666,7 @@ namespace Umbraco.Core.Services.Implement public IEnumerable GetPartialViewSnippetNames(params string[] filterNames) { - var snippetPath = Current.IOHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/"); + var snippetPath = _ioHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/"); var files = Directory.GetFiles(snippetPath, "*.cshtml") .Select(Path.GetFileNameWithoutExtension) .Except(filterNames, StringComparer.InvariantCultureIgnoreCase) @@ -898,7 +900,7 @@ namespace Umbraco.Core.Services.Implement fileName += ".cshtml"; } - var snippetPath = Current.IOHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/{fileName}"); + var snippetPath = _ioHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/{fileName}"); return System.IO.File.Exists(snippetPath) ? Attempt.Succeed(snippetPath) : Attempt.Fail(); diff --git a/src/Umbraco.Core/Services/Implement/NotificationService.cs b/src/Umbraco.Core/Services/Implement/NotificationService.cs index 65040f625a..3a42e576de 100644 --- a/src/Umbraco.Core/Services/Implement/NotificationService.cs +++ b/src/Umbraco.Core/Services/Implement/NotificationService.cs @@ -30,9 +30,10 @@ namespace Umbraco.Core.Services.Implement private readonly IGlobalSettings _globalSettings; private readonly IContentSection _contentSection; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; public NotificationService(IScopeProvider provider, IUserService userService, IContentService contentService, ILocalizationService localizationService, - ILogger logger, INotificationsRepository notificationsRepository, IGlobalSettings globalSettings, IContentSection contentSection) + ILogger logger, IIOHelper ioHelper, INotificationsRepository notificationsRepository, IGlobalSettings globalSettings, IContentSection contentSection) { _notificationsRepository = notificationsRepository; _globalSettings = globalSettings; @@ -42,6 +43,7 @@ namespace Umbraco.Core.Services.Implement _contentService = contentService ?? throw new ArgumentNullException(nameof(contentService)); _localizationService = localizationService; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _ioHelper = ioHelper; } /// @@ -384,7 +386,7 @@ namespace Umbraco.Core.Services.Implement var protocol = _globalSettings.UseHttps ? "https" : "http"; var subjectVars = new NotificationEmailSubjectParams( - string.Concat(siteUri.Authority, Current.IOHelper.ResolveUrl(SystemDirectories.Umbraco)), + string.Concat(siteUri.Authority, _ioHelper.ResolveUrl(SystemDirectories.Umbraco)), actionName, content.Name); @@ -400,7 +402,7 @@ namespace Umbraco.Core.Services.Implement string.Concat(content.Id, ".aspx"), protocol), performingUser.Name, - string.Concat(siteUri.Authority, Current.IOHelper.ResolveUrl(SystemDirectories.Umbraco)), + string.Concat(siteUri.Authority, _ioHelper.ResolveUrl(SystemDirectories.Umbraco)), summary.ToString()); // create the mail message diff --git a/src/Umbraco.Core/Services/Implement/PackagingService.cs b/src/Umbraco.Core/Services/Implement/PackagingService.cs index c0946e4468..3636705f8b 100644 --- a/src/Umbraco.Core/Services/Implement/PackagingService.cs +++ b/src/Umbraco.Core/Services/Implement/PackagingService.cs @@ -23,6 +23,7 @@ namespace Umbraco.Core.Services.Implement { private readonly IPackageInstallation _packageInstallation; + private readonly IIOHelper _ioHelper; private readonly IAuditService _auditService; private readonly ICreatedPackagesRepository _createdPackages; private readonly IInstalledPackagesRepository _installedPackages; @@ -32,12 +33,14 @@ namespace Umbraco.Core.Services.Implement IAuditService auditService, ICreatedPackagesRepository createdPackages, IInstalledPackagesRepository installedPackages, - IPackageInstallation packageInstallation) + IPackageInstallation packageInstallation, + IIOHelper ioHelper) { _auditService = auditService; _createdPackages = createdPackages; _installedPackages = installedPackages; _packageInstallation = packageInstallation; + _ioHelper = ioHelper; } #region Package Files @@ -64,7 +67,7 @@ namespace Umbraco.Core.Services.Implement //successful if (bytes.Length > 0) { - var packagePath = Current.IOHelper.MapPath(SystemDirectories.Packages); + var packagePath = _ioHelper.MapPath(SystemDirectories.Packages); // Check for package directory if (Directory.Exists(packagePath) == false) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index 027b5fc928..854a96a51f 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -112,7 +112,9 @@ namespace Umbraco.Core if (isValid) { - var resolvedUrlResult = Current.IOHelper.TryResolveUrl(input); + var ioHelper = Current.Factory.GetInstance(); + + var resolvedUrlResult = ioHelper.TryResolveUrl(input); //if the resolution was success, return it, otherwise just return the path, we've detected // it's a path but maybe it's relative and resolution has failed, etc... in which case we're just // returning what was given to us. diff --git a/src/Umbraco.Core/UriExtensions.cs b/src/Umbraco.Core/UriExtensions.cs index 9fd1bf46dc..97c350f0b4 100644 --- a/src/Umbraco.Core/UriExtensions.cs +++ b/src/Umbraco.Core/UriExtensions.cs @@ -114,8 +114,10 @@ namespace Umbraco.Core .TrimStart(authority) .TrimStart("/"); + var ioHelper = Current.Factory.GetInstance(); + //check if this is in the umbraco back office - return afterAuthority.InvariantStartsWith(Current.IOHelper.ResolveUrl("~/install").TrimStart("/")); + return afterAuthority.InvariantStartsWith(ioHelper.ResolveUrl("~/install").TrimStart("/")); } /// diff --git a/src/Umbraco.Tests/Components/ComponentTests.cs b/src/Umbraco.Tests/Components/ComponentTests.cs index 5a437e402f..365a10224b 100644 --- a/src/Umbraco.Tests/Components/ComponentTests.cs +++ b/src/Umbraco.Tests/Components/ComponentTests.cs @@ -32,9 +32,10 @@ namespace Umbraco.Tests.Components var mock = new Mock(); var logger = Mock.Of(); + var ioHelper = Mock.Of(); var typeFinder = new TypeFinder(logger); var f = new UmbracoDatabaseFactory(logger, new Lazy(() => new MapperCollection(Enumerable.Empty()))); - var fs = new FileSystems(mock.Object, logger); + var fs = new FileSystems(mock.Object, logger, ioHelper); var p = new ScopeProvider(f, fs, logger, typeFinder); mock.Setup(x => x.GetInstance(typeof (ILogger))).Returns(logger); diff --git a/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs b/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs index ab9b2cf73d..85c10b4005 100644 --- a/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs @@ -14,7 +14,7 @@ namespace Umbraco.Tests.IO { public PhysicalFileSystemTests() : base(new PhysicalFileSystem(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FileSysTests"), - "/Media/")) + "/Media/", new IOHelper())) { } [SetUp] diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index 409fae6081..ef5bf33824 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -40,8 +40,9 @@ namespace Umbraco.Tests.IO private static void ClearFiles() { - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("FileSysTests")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); + var ioHelper = new IOHelper(); + TestHelper.DeleteDirectory(ioHelper.MapPath("FileSysTests")); + TestHelper.DeleteDirectory(ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); } private static string NormPath(string path) @@ -52,13 +53,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteDirectory() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/d1"); @@ -86,13 +89,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteDirectoryInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub"); @@ -135,13 +140,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); File.WriteAllText(path + "/ShadowTests/f1.txt", "foo"); @@ -174,13 +181,16 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteFileInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); + Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub"); @@ -229,13 +239,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCantCreateFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); Assert.Throws(() => @@ -248,13 +260,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCreateFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); File.WriteAllText(path + "/ShadowTests/f2.txt", "foo"); @@ -287,13 +301,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCreateFileInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) @@ -327,13 +343,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowAbort() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) @@ -349,13 +367,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowComplete() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub/sub"); @@ -386,18 +406,19 @@ namespace Umbraco.Tests.IO public void ShadowScopeComplete() { var logger = Mock.Of(); + var ioHelper = new IOHelper(); - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); Directory.CreateDirectory(shadowfs); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(path, "ignore"); + var phy = new PhysicalFileSystem(path, "ignore", ioHelper); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem(phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -481,17 +502,18 @@ namespace Umbraco.Tests.IO public void ShadowScopeCompleteWithFileConflict() { var logger = Mock.Of(); + var ioHelper = new IOHelper(); - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(path, "ignore"); + var phy = new PhysicalFileSystem(path, "ignore", ioHelper); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -534,17 +556,18 @@ namespace Umbraco.Tests.IO public void ShadowScopeCompleteWithDirectoryConflict() { var logger = Mock.Of(); + var ioHelper = new IOHelper(); - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(path, "ignore"); + var phy = new PhysicalFileSystem(path, "ignore", ioHelper); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper)fs.InnerFileSystem; @@ -603,7 +626,9 @@ namespace Umbraco.Tests.IO [Test] public void GetFilesReturnsChildrenOnly() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); File.WriteAllText(path + "/f1.txt", "foo"); Directory.CreateDirectory(path + "/test"); @@ -625,7 +650,9 @@ namespace Umbraco.Tests.IO [Test] public void DeleteDirectoryAndFiles() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); File.WriteAllText(path + "/f1.txt", "foo"); Directory.CreateDirectory(path + "/test"); @@ -646,13 +673,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFiles() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -678,13 +707,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingEmptyFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -713,13 +744,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingNullFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -745,13 +778,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingWildcardFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -780,13 +815,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingSingleCharacterFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -827,13 +864,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFullPath() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -861,13 +900,15 @@ namespace Umbraco.Tests.IO public void ShadowGetRelativePath() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "ignore", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "ignore", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -900,13 +941,15 @@ namespace Umbraco.Tests.IO public void ShadowGetUrl() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = new IOHelper(); + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(path + "/ShadowTests/", "rootUrl"); - var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "rootUrl"); + var fs = new PhysicalFileSystem(path + "/ShadowTests/", "rootUrl", ioHelper); + var sfs = new PhysicalFileSystem(path + "/ShadowSystem/", "rootUrl", ioHelper); var ss = new ShadowFileSystem(fs, sfs); // Act diff --git a/src/Umbraco.Tests/Logging/LogviewerTests.cs b/src/Umbraco.Tests/Logging/LogviewerTests.cs index 96a68beccb..d6e1c7ffae 100644 --- a/src/Umbraco.Tests/Logging/LogviewerTests.cs +++ b/src/Umbraco.Tests/Logging/LogviewerTests.cs @@ -33,6 +33,7 @@ namespace Umbraco.Tests.Logging { //Create an example JSON log file to check results //As a one time setup for all tets in this class/fixture + var ioHelper = new IOHelper(); var exampleLogfilePath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"Logging\", _logfileName); _newLogfileDirPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"App_Data\Logs\"); @@ -43,15 +44,15 @@ namespace Umbraco.Tests.Logging _newSearchfilePath = Path.Combine(_newSearchfileDirPath, _searchfileName); //Create/ensure Directory exists - Current.IOHelper.EnsurePathExists(_newLogfileDirPath); - Current.IOHelper.EnsurePathExists(_newSearchfileDirPath); + ioHelper.EnsurePathExists(_newLogfileDirPath); + ioHelper.EnsurePathExists(_newSearchfileDirPath); //Copy the sample files File.Copy(exampleLogfilePath, _newLogfilePath, true); File.Copy(exampleSearchfilePath, _newSearchfilePath, true); var logger = Mock.Of(); - _logViewer = new JsonLogViewer(logger, logsPath: _newLogfileDirPath, searchPath: _newSearchfilePath); + _logViewer = new JsonLogViewer(logger, ioHelper, logsPath: _newLogfileDirPath, searchPath: _newSearchfilePath); } [OneTimeTearDown] diff --git a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs index 1c90f68d62..dff37edc74 100644 --- a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs +++ b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs @@ -13,6 +13,7 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.Validators; using Umbraco.Core.Services; using Umbraco.Core.Dashboards; +using Umbraco.Core.IO; namespace Umbraco.Tests.Manifest { @@ -44,7 +45,7 @@ namespace Umbraco.Tests.Manifest new RequiredValidator(Mock.Of()), new RegexValidator(Mock.Of(), null) }; - _parser = new ManifestParser(AppCaches.Disabled, new ManifestValueValidatorCollection(validators), new ManifestFilterCollection(Array.Empty()), Mock.Of()); + _parser = new ManifestParser(AppCaches.Disabled, new ManifestValueValidatorCollection(validators), new ManifestFilterCollection(Array.Empty()), Mock.Of(), Mock.Of()); } [Test] diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index 3ae9414dc1..d7daf35865 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -33,8 +33,9 @@ namespace Umbraco.Tests.Models var logger = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); + var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); var ignored = new FileUploadPropertyEditor(Mock.Of(), mediaFileSystem, config); var media = MockedMedia.CreateMediaImage(mediaType, -1); diff --git a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs index 14a7049195..8b33859e5b 100644 --- a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs +++ b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Packaging base.TearDown(); //clear out files/folders - var path = Current.IOHelper.MapPath("~/" + _testBaseFolder); + var path = IOHelper.MapPath("~/" + _testBaseFolder); if (Directory.Exists(path)) Directory.Delete(path, true); } @@ -51,9 +51,9 @@ namespace Umbraco.Tests.Packaging private IPackageInstallation PackageInstallation => new PackageInstallation( PackageDataInstallation, - new PackageFileInstallation(Parser, ProfilingLogger), + new PackageFileInstallation(Parser, IOHelper, ProfilingLogger), Parser, Mock.Of(), - applicationRootFolder: new DirectoryInfo(Current.IOHelper.MapPath("~/" + _testBaseFolder))); //we don't want to extract package files to the real root, so extract to a test folder + applicationRootFolder: new DirectoryInfo(IOHelper.MapPath("~/" + _testBaseFolder))); //we don't want to extract package files to the real root, so extract to a test folder private const string DocumentTypePickerPackage = "Document_Type_Picker_1.1.umb"; private const string HelloPackage = "Hello_1.0.0.zip"; @@ -63,7 +63,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); Assert.IsNotNull(package); Assert.AreEqual(1, package.Files.Count); Assert.AreEqual("095e064b-ba4d-442d-9006-3050983c13d8.dll", package.Files[0].UniqueFileName); @@ -86,7 +86,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), HelloPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), HelloPackage))); Assert.IsNotNull(package); Assert.AreEqual(0, package.Files.Count); Assert.AreEqual("Hello", package.Name); @@ -111,7 +111,7 @@ namespace Umbraco.Tests.Packaging public void Can_Read_Compiled_Package_Warnings() { //copy a file to the same path that the package will install so we can detect file conflicts - var path = Current.IOHelper.MapPath("~/" + _testBaseFolder); + var path = IOHelper.MapPath("~/" + _testBaseFolder); Console.WriteLine(path); var filePath = Path.Combine(path, "bin", "Auros.DocumentTypePicker.dll"); @@ -119,7 +119,7 @@ namespace Umbraco.Tests.Packaging File.WriteAllText(filePath, "test"); //this is where our test zip file is - var packageFile = Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage); + var packageFile = Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage); Console.WriteLine(packageFile); var package = PackageInstallation.ReadPackage(new FileInfo(packageFile)); @@ -137,7 +137,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); var def = PackageDefinition.FromCompiledPackage(package); def.Id = 1; @@ -148,7 +148,7 @@ namespace Umbraco.Tests.Packaging Assert.AreEqual(1, result.Count); Assert.AreEqual("bin\\Auros.DocumentTypePicker.dll", result[0]); - Assert.IsTrue(File.Exists(Path.Combine(Current.IOHelper.MapPath("~/" + _testBaseFolder), result[0]))); + Assert.IsTrue(File.Exists(Path.Combine(IOHelper.MapPath("~/" + _testBaseFolder), result[0]))); //make sure the def is updated too Assert.AreEqual(result.Count, def.Files.Count); @@ -159,7 +159,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); var def = PackageDefinition.FromCompiledPackage(package); def.Id = 1; def.PackageId = Guid.NewGuid(); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs index 9c326b3ddc..970e078d41 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs @@ -20,7 +20,7 @@ namespace Umbraco.Tests.Persistence.Repositories { base.SetUp(); - _fileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews + "/Partials/"); + _fileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews + "/Partials/", new IOHelper()); } protected override void Compose() @@ -41,7 +41,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = new PartialViewRepository(fileSystems); + var repository = new PartialViewRepository(fileSystems, IOHelper); var partialView = new PartialView(PartialViewType.PartialView, "test-path-1.cshtml") { Content = "// partialView" }; repository.Save(partialView); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index ae0c71a5b3..d1aa20db66 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(SystemDirectories.Scripts); + _fileSystem = new PhysicalFileSystem(SystemDirectories.Scripts, new IOHelper()); Mock.Get(_fileSystems).Setup(x => x.ScriptsFileSystem).Returns(_fileSystem); using (var stream = CreateStream("Umbraco.Sys.registerNamespace(\"Umbraco.Utils\");")) { diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index 2358fb257d..5443ca52ec 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -25,7 +25,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(SystemDirectories.Css); + _fileSystem = new PhysicalFileSystem(SystemDirectories.Css, new IOHelper()); Mock.Get(_fileSystems).Setup(x => x.StylesheetsFileSystem).Returns(_fileSystem); var stream = CreateStream("body {background:#EE7600; color:#FFF;}"); _fileSystem.AddFile("styles.css", stream); diff --git a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs index b0f9a5335b..2d6c42ef06 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs @@ -27,7 +27,7 @@ namespace Umbraco.Tests.Persistence.Repositories private ITemplateRepository CreateRepository(IScopeProvider provider) { - return new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, _fileSystems); + return new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, _fileSystems, IOHelper); } public override void SetUp() @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - var viewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews); + var viewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews, IOHelper); Mock.Get(_fileSystems).Setup(x => x.MvcViewsFileSystem).Returns(viewsFileSystem); } @@ -526,7 +526,7 @@ namespace Umbraco.Tests.Persistence.Repositories _fileSystems = null; //Delete all files - var fsViews = new PhysicalFileSystem(SystemDirectories.MvcViews); + var fsViews = new PhysicalFileSystem(SystemDirectories.MvcViews, new IOHelper()); var views = fsViews.GetFiles("", "*.cshtml"); foreach (var file in views) fsViews.DeleteFile(file); diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 5bea491973..01486d70c8 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -79,8 +79,9 @@ namespace Umbraco.Tests.PropertyEditors var logger = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); + var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); var dataTypeService = new TestObjects.TestDataTypeService( new DataType(new ImageCropperPropertyEditor(Mock.Of(), mediaFileSystem, Mock.Of(), Mock.Of())) { Id = 1 }); diff --git a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs index 74e79c4ce3..2ede62f81e 100644 --- a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Scoping _testObjects = new TestObjects(register); - composition.RegisterUnique(factory => new FileSystems(factory, factory.TryGetInstance())); + composition.RegisterUnique(factory => new FileSystems(factory, factory.TryGetInstance(), factory.TryGetInstance())); composition.WithCollectionBuilder(); composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); diff --git a/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs b/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs index 305ae70be9..7abf8eece3 100644 --- a/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.Scoping base.SetUp(); SafeCallContext.Clear(); - ClearFiles(); + ClearFiles(this.IOHelper); } protected override void ComposeApplication(bool withApplication) @@ -39,21 +39,21 @@ namespace Umbraco.Tests.Scoping base.TearDown(); SafeCallContext.Clear(); FileSystems.ResetShadowId(); - ClearFiles(); + ClearFiles(this.IOHelper); } - private static void ClearFiles() + private static void ClearFiles(IIOHelper ioHelper) { - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("media")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("FileSysTests")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); + TestHelper.DeleteDirectory(ioHelper.MapPath("media")); + TestHelper.DeleteDirectory(ioHelper.MapPath("FileSysTests")); + TestHelper.DeleteDirectory(ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); } [TestCase(true)] [TestCase(false)] public void CreateMediaTest(bool complete) { - var physMediaFileSystem = new PhysicalFileSystem(Current.IOHelper.MapPath("media"), "ignore"); + var physMediaFileSystem = new PhysicalFileSystem(IOHelper.MapPath("media"), "ignore", IOHelper); var mediaFileSystem = Current.MediaFileSystem; Assert.IsFalse(physMediaFileSystem.FileExists("f1.txt")); @@ -86,7 +86,7 @@ namespace Umbraco.Tests.Scoping [Test] public void MultiThread() { - var physMediaFileSystem = new PhysicalFileSystem(Current.IOHelper.MapPath("media"), "ignore"); + var physMediaFileSystem = new PhysicalFileSystem(IOHelper.MapPath("media"), "ignore", new IOHelper()); var mediaFileSystem = Current.MediaFileSystem; var scopeProvider = ScopeProvider; diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 280632fdae..eaade28c2e 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -107,8 +107,9 @@ namespace Umbraco.Tests.TestHelpers var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); + var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); var externalLoginService = GetLazyService(factory, c => new ExternalLoginService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var publicAccessService = GetLazyService(factory, c => new PublicAccessService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); @@ -118,9 +119,9 @@ namespace Umbraco.Tests.TestHelpers var localizedTextService = GetLazyService(factory, c => new LocalizedTextService( new Lazy(() => { - var mainLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); - var appPlugins = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(SystemDirectories.Config + "/lang/")); + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() @@ -154,14 +155,14 @@ namespace Umbraco.Tests.TestHelpers var userService = GetLazyService(factory, c => new UserService(scopeProvider, logger, eventMessagesFactory, runtimeState, GetRepo(c), GetRepo(c),globalSettings)); var dataTypeService = GetLazyService(factory, c => new DataTypeService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var contentService = GetLazyService(factory, c => new ContentService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var notificationService = GetLazyService(factory, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, GetRepo(c), globalSettings, umbracoSettings.Content)); + var notificationService = GetLazyService(factory, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, ioHelper, GetRepo(c), globalSettings, umbracoSettings.Content)); var serverRegistrationService = GetLazyService(factory, c => new ServerRegistrationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var memberGroupService = GetLazyService(factory, c => new MemberGroupService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var memberService = GetLazyService(factory, c => new MemberService(scopeProvider, logger, eventMessagesFactory, memberGroupService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var mediaService = GetLazyService(factory, c => new MediaService(scopeProvider, mediaFileSystem, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var contentTypeService = GetLazyService(factory, c => new ContentTypeService(scopeProvider, logger, eventMessagesFactory, contentService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var mediaTypeService = GetLazyService(factory, c => new MediaTypeService(scopeProvider, logger, eventMessagesFactory, mediaService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var fileService = GetLazyService(factory, c => new FileService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var fileService = GetLazyService(factory, c => new FileService(scopeProvider, ioHelper, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var memberTypeService = GetLazyService(factory, c => new MemberTypeService(scopeProvider, logger, eventMessagesFactory, memberService.Value, GetRepo(c), GetRepo(c), GetRepo(c))); var entityService = GetLazyService(factory, c => new EntityService(scopeProvider, logger, eventMessagesFactory, idkMap, GetRepo(c))); @@ -173,15 +174,15 @@ namespace Umbraco.Tests.TestHelpers var compiledPackageXmlParser = new CompiledPackageXmlParser(new ConflictingPackageData(macroService.Value, fileService.Value)); return new PackagingService( auditService.Value, - new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, + new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "createdPackages.config"), - new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, + new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "installedPackages.config"), new PackageInstallation( new PackageDataInstallation(logger, fileService.Value, macroService.Value, localizationService.Value, dataTypeService.Value, entityService.Value, contentTypeService.Value, contentService.Value, propertyEditorCollection, scopeProvider), - new PackageFileInstallation(compiledPackageXmlParser, new ProfilingLogger(logger, new TestProfiler())), + new PackageFileInstallation(compiledPackageXmlParser, ioHelper, new ProfilingLogger(logger, new TestProfiler())), compiledPackageXmlParser, Mock.Of(), - new DirectoryInfo(Current.IOHelper.GetRootDirectorySafe()))); + new DirectoryInfo(ioHelper.GetRootDirectorySafe())), ioHelper); }); var relationService = GetLazyService(factory, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo(c), GetRepo(c))); var tagService = GetLazyService(factory, c => new TagService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); @@ -242,7 +243,7 @@ namespace Umbraco.Tests.TestHelpers } typeFinder = typeFinder ?? new TypeFinder(logger); - fileSystems = fileSystems ?? new FileSystems(Current.Factory, logger); + fileSystems = fileSystems ?? new FileSystems(Current.Factory, logger, new IOHelper()); var scopeProvider = new ScopeProvider(databaseFactory, fileSystems, logger, typeFinder); return scopeProvider; } diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index d1e2ab2f6d..1dec01a4e9 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -342,8 +342,9 @@ namespace Umbraco.Tests.Testing var logger = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); + var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); Composition.RegisterUnique(factory => mediaFileSystem); // no factory (noop) diff --git a/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs b/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs index 6b1b12ab63..e1302d7e5a 100644 --- a/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs @@ -11,7 +11,14 @@ namespace Umbraco.Web.Editors [PluginController("UmbracoApi")] public class BackOfficeAssetsController : UmbracoAuthorizedJsonController { - private readonly IFileSystem _jsLibFileSystem = new PhysicalFileSystem(SystemDirectories.Umbraco + Current.IOHelper.DirSepChar + "lib"); + private readonly IIOHelper _ioHelper; + private readonly IFileSystem _jsLibFileSystem; + + public BackOfficeAssetsController(IFileSystem jsLibFileSystem, IIOHelper ioHelper) + { + _ioHelper = ioHelper; + _jsLibFileSystem = new PhysicalFileSystem(SystemDirectories.Umbraco + _ioHelper.DirSepChar + "lib", _ioHelper); + } [HttpGet] public object GetSupportedLocales() diff --git a/src/Umbraco.Web/Trees/FilesTreeController.cs b/src/Umbraco.Web/Trees/FilesTreeController.cs index ae951bebf4..0a15ae32ea 100644 --- a/src/Umbraco.Web/Trees/FilesTreeController.cs +++ b/src/Umbraco.Web/Trees/FilesTreeController.cs @@ -8,10 +8,19 @@ namespace Umbraco.Web.Trees [CoreTree] public class FilesTreeController : FileSystemTreeController { - protected override IFileSystem FileSystem => new PhysicalFileSystem("~/"); + private readonly IIOHelper _ioHelper; + private readonly IFileSystem _fileSystem; + + protected override IFileSystem FileSystem => _fileSystem; private static readonly string[] ExtensionsStatic = { "*" }; + public FilesTreeController(IIOHelper ioHelper) + { + _ioHelper = ioHelper; + _fileSystem = new PhysicalFileSystem("~/", _ioHelper); + } + protected override string[] Extensions => ExtensionsStatic; protected override string FileIcon => Constants.Icons.MediaFile; diff --git a/src/Umbraco.Web/WebApi/HttpActionContextExtensions.cs b/src/Umbraco.Web/WebApi/HttpActionContextExtensions.cs index 8896e3ff7a..979e3d7892 100644 --- a/src/Umbraco.Web/WebApi/HttpActionContextExtensions.cs +++ b/src/Umbraco.Web/WebApi/HttpActionContextExtensions.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using System.Web.Http; using System.Web.Http.Controllers; using Newtonsoft.Json; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.IO; @@ -59,7 +60,8 @@ namespace Umbraco.Web.WebApi throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } - var root = Current.IOHelper.MapPath(rootVirtualPath); + var ioHelper = Current.Factory.GetInstance(); + var root = ioHelper.MapPath(rootVirtualPath); //ensure it exists Directory.CreateDirectory(root); var provider = new MultipartFormDataStreamProvider(root); From 5c160f6390c2f63d861746ff07782cd2d01d153b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 18 Nov 2019 14:20:44 +0100 Subject: [PATCH 02/16] Only replace content by EmbedItem if the selected content is of type EmbedItem. --- .../src/common/services/tinymce.service.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index 4d4f8792cf..f6c0f94edd 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -543,11 +543,11 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s 'contenteditable': false }, embed.preview); - - if (activeElement) { + + // Only replace if actieElement is an Embed element. + if (activeElement && activeElement.nodeName.toUpperCase() === "DIV" && activeElement.classList.contains("embeditem")){ activeElement.replaceWith(wrapper); // directly replaces the html node - } - else { + } else { editor.selection.setNode(wrapper); } }, From c1ecfbefd5a2b4022e8264614b5a61c7d3158ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gregersen?= Date: Mon, 18 Nov 2019 17:40:15 +0100 Subject: [PATCH 03/16] fix: reverted a few placed, passing tests --- src/Umbraco.Core/Composing/Current.cs | 2 +- src/Umbraco.Core/ConfigsExtensions.cs | 2 +- .../Configuration/GlobalSettings.cs | 4 ++- src/Umbraco.Core/IO/FileSystems.cs | 2 +- src/Umbraco.Core/IO/ShadowWrapper.cs | 4 +-- src/Umbraco.Core/IO/SystemDirectories.cs | 10 +++--- src/Umbraco.Core/Manifest/ManifestParser.cs | 4 +-- .../PropertyEditors/ConfigurationField.cs | 2 +- .../PropertyEditors/GridEditor.cs | 8 ++--- src/Umbraco.Core/UriExtensions.cs | 4 +-- src/Umbraco.Tests/IO/FileSystemsTests.cs | 4 ++- src/Umbraco.Tests/IO/IoHelperTests.cs | 31 +++++++++++-------- src/Umbraco.Tests/IO/ShadowFileSystemTests.cs | 14 ++++----- .../Manifest/ManifestParserTests.cs | 2 +- .../CreatedPackagesRepositoryTests.cs | 3 +- .../Repositories/ContentTypeRepositoryTest.cs | 8 ++--- .../Repositories/DocumentRepositoryTest.cs | 2 +- .../Repositories/DomainRepositoryTest.cs | 2 +- .../Repositories/MediaRepositoryTest.cs | 2 +- .../Repositories/MediaTypeRepositoryTest.cs | 2 +- .../PublicAccessRepositoryTest.cs | 2 +- .../Repositories/TagRepositoryTest.cs | 4 +-- .../Repositories/UserRepositoryTest.cs | 4 +-- .../PublishedContent/NuCacheChildrenTests.cs | 4 ++- .../PublishedContent/NuCacheTests.cs | 3 +- .../Services/ContentServicePerformanceTest.cs | 8 ++--- .../Services/ContentServiceTests.cs | 2 +- 27 files changed, 72 insertions(+), 67 deletions(-) diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs index 2b3cf30301..f1856d9962 100644 --- a/src/Umbraco.Core/Composing/Current.cs +++ b/src/Umbraco.Core/Composing/Current.cs @@ -205,7 +205,7 @@ namespace Umbraco.Core.Composing public static IVariationContextAccessor VariationContextAccessor => Factory.GetInstance(); - [Obsolete("being removed...", true)] + [Obsolete("being removed...", false)] public static readonly IIOHelper IOHelper = new IOHelper(); #endregion diff --git a/src/Umbraco.Core/ConfigsExtensions.cs b/src/Umbraco.Core/ConfigsExtensions.cs index 87f0216b51..c9809ce9f8 100644 --- a/src/Umbraco.Core/ConfigsExtensions.cs +++ b/src/Umbraco.Core/ConfigsExtensions.cs @@ -33,7 +33,7 @@ namespace Umbraco.Core public static void AddCoreConfigs(this Configs configs) { - var ioHelper = Current.Factory.GetInstance(); + var ioHelper = Umbraco.Core.IO.IOHelper.Default; var configDir = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Config)); diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs index a0cf20b2e1..579ffffa66 100644 --- a/src/Umbraco.Core/Configuration/GlobalSettings.cs +++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs @@ -199,8 +199,10 @@ namespace Umbraco.Core.Configuration /// Removes a setting from the configuration file. /// /// Key of the setting to be removed. - internal static void RemoveSetting(string key, IIOHelper ioHelper) + internal static void RemoveSetting(string key) { + var ioHelper = Current.Factory.GetInstance(); + var fileName = ioHelper.MapPath(string.Format("{0}/web.config", SystemDirectories.Root)); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs index 0350c3a606..920fa67ba2 100644 --- a/src/Umbraco.Core/IO/FileSystems.cs +++ b/src/Umbraco.Core/IO/FileSystems.cs @@ -213,7 +213,7 @@ namespace Umbraco.Core.IO { if (Volatile.Read(ref _wkfsInitialized) == false) EnsureWellKnownFileSystems(); - var id = ShadowWrapper.CreateShadowId(); + var id = ShadowWrapper.CreateShadowId(_ioHelper); return new ShadowFileSystems(this, id); // will invoke BeginShadow and EndShadow } diff --git a/src/Umbraco.Core/IO/ShadowWrapper.cs b/src/Umbraco.Core/IO/ShadowWrapper.cs index 641e3845b6..def5ce5358 100644 --- a/src/Umbraco.Core/IO/ShadowWrapper.cs +++ b/src/Umbraco.Core/IO/ShadowWrapper.cs @@ -25,7 +25,7 @@ namespace Umbraco.Core.IO _isScoped = isScoped; } - public static string CreateShadowId() + public static string CreateShadowId(IIOHelper ioHelper) { const int retries = 50; // avoid infinite loop const int idLength = 8; // 6 chars @@ -35,8 +35,6 @@ namespace Umbraco.Core.IO // we should end up with a unique identifier eventually - but just // detect infinite loops (just in case) - var ioHelper = Current.Factory.GetInstance(); - for (var i = 0; i < retries; i++) { var id = GuidUtils.ToBase32String(Guid.NewGuid(), idLength); diff --git a/src/Umbraco.Core/IO/SystemDirectories.cs b/src/Umbraco.Core/IO/SystemDirectories.cs index d6c9e961b9..c5c410ff3f 100644 --- a/src/Umbraco.Core/IO/SystemDirectories.cs +++ b/src/Umbraco.Core/IO/SystemDirectories.cs @@ -6,8 +6,6 @@ namespace Umbraco.Core.IO //all paths has a starting but no trailing / public class SystemDirectories { - private static IIOHelper IOHelper => Current.Factory.GetInstance(); - public static string Bin => "~/bin"; public static string Config => "~/config"; @@ -32,13 +30,13 @@ namespace Umbraco.Core.IO public static string MacroPartials => MvcViews + "/MacroPartials/"; - public static string Media => IOHelper.ReturnPath("umbracoMediaPath", "~/media"); + public static string Media => Current.IOHelper.ReturnPath("umbracoMediaPath", "~/media"); - public static string Scripts => IOHelper.ReturnPath("umbracoScriptsPath", "~/scripts"); + public static string Scripts => Current.IOHelper.ReturnPath("umbracoScriptsPath", "~/scripts"); - public static string Css => IOHelper.ReturnPath("umbracoCssPath", "~/css"); + public static string Css => Current.IOHelper.ReturnPath("umbracoCssPath", "~/css"); - public static string Umbraco => IOHelper.ReturnPath("umbracoPath", "~/umbraco"); + public static string Umbraco => Current.IOHelper.ReturnPath("umbracoPath", "~/umbraco"); public static string Packages => Data + "/packages"; diff --git a/src/Umbraco.Core/Manifest/ManifestParser.cs b/src/Umbraco.Core/Manifest/ManifestParser.cs index 9a34735987..4045ffd370 100644 --- a/src/Umbraco.Core/Manifest/ManifestParser.cs +++ b/src/Umbraco.Core/Manifest/ManifestParser.cs @@ -44,10 +44,10 @@ namespace Umbraco.Core.Manifest _cache = appCaches.RuntimeCache; _validators = validators ?? throw new ArgumentNullException(nameof(validators)); _filters = filters ?? throw new ArgumentNullException(nameof(filters)); - if (string.IsNullOrWhiteSpace(path)) throw new ArgumentNullOrEmptyException(nameof(path)); - Path = path; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _ioHelper = ioHelper; + if (string.IsNullOrWhiteSpace(path)) throw new ArgumentNullOrEmptyException(nameof(path)); + Path = path; } public string Path diff --git a/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs b/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs index bf692d1c98..ee07f8dcef 100644 --- a/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs +++ b/src/Umbraco.Core/PropertyEditors/ConfigurationField.cs @@ -94,7 +94,7 @@ namespace Umbraco.Core.PropertyEditors public string View { get => _view; - set => _view = Current.Factory.GetInstance().ResolveVirtualUrl(value); + set => _view = Current.IOHelper.ResolveVirtualUrl(value); } /// diff --git a/src/Umbraco.Core/PropertyEditors/GridEditor.cs b/src/Umbraco.Core/PropertyEditors/GridEditor.cs index 869e427e49..388e79675c 100644 --- a/src/Umbraco.Core/PropertyEditors/GridEditor.cs +++ b/src/Umbraco.Core/PropertyEditors/GridEditor.cs @@ -8,13 +8,11 @@ namespace Umbraco.Core.PropertyEditors { public class GridEditor : IGridEditorConfig { - private readonly IIOHelper _ioHelper; private string _view; private string _render; - public GridEditor(IIOHelper ioHelper) + public GridEditor() { - _ioHelper = ioHelper; Config = new Dictionary(); } @@ -31,14 +29,14 @@ namespace Umbraco.Core.PropertyEditors public string View { get => _view; - set => _view = _ioHelper.ResolveVirtualUrl(value); + set => _view = Current.IOHelper.ResolveVirtualUrl(value); } [JsonProperty("render")] public string Render { get => _render; - set => _render = _ioHelper.ResolveVirtualUrl(value); + set => _render = Current.IOHelper.ResolveVirtualUrl(value); } [JsonProperty("icon", Required = Required.Always)] diff --git a/src/Umbraco.Core/UriExtensions.cs b/src/Umbraco.Core/UriExtensions.cs index 97c350f0b4..9fd1bf46dc 100644 --- a/src/Umbraco.Core/UriExtensions.cs +++ b/src/Umbraco.Core/UriExtensions.cs @@ -114,10 +114,8 @@ namespace Umbraco.Core .TrimStart(authority) .TrimStart("/"); - var ioHelper = Current.Factory.GetInstance(); - //check if this is in the umbraco back office - return afterAuthority.InvariantStartsWith(ioHelper.ResolveUrl("~/install").TrimStart("/")); + return afterAuthority.InvariantStartsWith(Current.IOHelper.ResolveUrl("~/install").TrimStart("/")); } /// diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index 254371ae32..27e3cf3e3a 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -33,6 +33,7 @@ namespace Umbraco.Tests.IO composition.Register(_ => Mock.Of()); composition.Register(_ => Mock.Of()); composition.Register(_ => Mock.Of()); + composition.Register(_ => IOHelper.Default); composition.RegisterUnique(); composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); @@ -105,7 +106,8 @@ namespace Umbraco.Tests.IO fs.AddFile(virtPath, ms); // ~/media/1234/file.txt exists - var physPath = Current.IOHelper.MapPath(Path.Combine("media", virtPath)); + var ioHelper = _factory.GetInstance(); + var physPath = ioHelper.MapPath(Path.Combine("media", virtPath)); Assert.IsTrue(File.Exists(physPath)); // ~/media/1234/file.txt is gone diff --git a/src/Umbraco.Tests/IO/IoHelperTests.cs b/src/Umbraco.Tests/IO/IoHelperTests.cs index 2a7e633e4f..8828866030 100644 --- a/src/Umbraco.Tests/IO/IoHelperTests.cs +++ b/src/Umbraco.Tests/IO/IoHelperTests.cs @@ -14,13 +14,15 @@ namespace Umbraco.Tests.IO [TestCase("../Scripts", "/Scripts", typeof(ArgumentException))] public void IOHelper_ResolveUrl(string input, string expected, Type expectedExceptionType) { + var ioHelper = new IOHelper(); + if (expectedExceptionType != null) { - Assert.Throws(expectedExceptionType, () => Current.IOHelper.ResolveUrl(input)); + Assert.Throws(expectedExceptionType, () =>ioHelper.ResolveUrl(input)); } else { - var result = Current.IOHelper.ResolveUrl(input); + var result = ioHelper.ResolveUrl(input); Assert.AreEqual(expected, result); } } @@ -33,17 +35,20 @@ namespace Umbraco.Tests.IO { //System.Diagnostics.Debugger.Break(); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Bin, true), Current.IOHelper.MapPath(SystemDirectories.Bin, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Config, true), Current.IOHelper.MapPath(SystemDirectories.Config, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Css, true), Current.IOHelper.MapPath(SystemDirectories.Css, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Data, true), Current.IOHelper.MapPath(SystemDirectories.Data, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Install, true), Current.IOHelper.MapPath(SystemDirectories.Install, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Media, true), Current.IOHelper.MapPath(SystemDirectories.Media, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Packages, true), Current.IOHelper.MapPath(SystemDirectories.Packages, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Preview, true), Current.IOHelper.MapPath(SystemDirectories.Preview, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Root, true), Current.IOHelper.MapPath(SystemDirectories.Root, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Scripts, true), Current.IOHelper.MapPath(SystemDirectories.Scripts, false)); - Assert.AreEqual(Current.IOHelper.MapPath(SystemDirectories.Umbraco, true), Current.IOHelper.MapPath(SystemDirectories.Umbraco, false)); + var ioHelper = new IOHelper(); + + + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Bin, true), ioHelper.MapPath(SystemDirectories.Bin, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Config, true), ioHelper.MapPath(SystemDirectories.Config, false)); + //Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Css, true), ioHelper.MapPath(SystemDirectories.Css, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Data, true), ioHelper.MapPath(SystemDirectories.Data, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Install, true), ioHelper.MapPath(SystemDirectories.Install, false)); + //Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Media, true), ioHelper.MapPath(SystemDirectories.Media, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Packages, true), ioHelper.MapPath(SystemDirectories.Packages, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Preview, true), ioHelper.MapPath(SystemDirectories.Preview, false)); + Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Root, true), ioHelper.MapPath(SystemDirectories.Root, false)); + //Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Scripts, true), ioHelper.MapPath(SystemDirectories.Scripts, false)); + //Assert.AreEqual(ioHelper.MapPath(SystemDirectories.Umbraco, true), ioHelper.MapPath(SystemDirectories.Umbraco, false)); } [Test] diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index ef5bf33824..f75635ed3c 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -406,7 +406,7 @@ namespace Umbraco.Tests.IO public void ShadowScopeComplete() { var logger = Mock.Of(); - var ioHelper = new IOHelper(); + var ioHelper = IOHelper.Default; var path = ioHelper.MapPath("FileSysTests"); var shadowfs = ioHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); @@ -429,7 +429,7 @@ namespace Umbraco.Tests.IO string id; // explicit shadow without scope does not work - sw.Shadow(id = ShadowWrapper.CreateShadowId()); + sw.Shadow(id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); @@ -440,7 +440,7 @@ namespace Umbraco.Tests.IO // shadow with scope but no complete does not complete scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId()); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f3.txt", ms); @@ -462,7 +462,7 @@ namespace Umbraco.Tests.IO // shadow with scope and complete does complete scopedFileSystems = true; // pretend we have a scope - scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId()); + scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f4.txt", ms); @@ -478,7 +478,7 @@ namespace Umbraco.Tests.IO // test scope for "another thread" scopedFileSystems = true; // pretend we have a scope - scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId()); + scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f5.txt", ms); @@ -524,7 +524,7 @@ namespace Umbraco.Tests.IO string id; scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId()); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); @@ -578,7 +578,7 @@ namespace Umbraco.Tests.IO string id; scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId()); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); diff --git a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs index dff37edc74..5cde51d69e 100644 --- a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs +++ b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs @@ -45,7 +45,7 @@ namespace Umbraco.Tests.Manifest new RequiredValidator(Mock.Of()), new RegexValidator(Mock.Of(), null) }; - _parser = new ManifestParser(AppCaches.Disabled, new ManifestValueValidatorCollection(validators), new ManifestFilterCollection(Array.Empty()), Mock.Of(), Mock.Of()); + _parser = new ManifestParser(AppCaches.Disabled, new ManifestValueValidatorCollection(validators), new ManifestFilterCollection(Array.Empty()), Mock.Of(), IOHelper.Default); } [Test] diff --git a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs index ffa90e57da..f2b97b521e 100644 --- a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs +++ b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs @@ -34,12 +34,13 @@ namespace Umbraco.Tests.Packaging base.TearDown(); //clear out files/folders - Directory.Delete(Current.IOHelper.MapPath("~/" + _testBaseFolder), true); + Directory.Delete(IOHelper.MapPath("~/" + _testBaseFolder), true); } public ICreatedPackagesRepository PackageBuilder => new PackagesRepository( ServiceContext.ContentService, ServiceContext.ContentTypeService, ServiceContext.DataTypeService, ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService, + IOHelper, Factory.GetInstance(), Logger, "createdPackages.config", //temp paths diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index f953b9cce6..4a9c8d4b71 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -30,7 +30,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeAccessor scopeAccessor, out ContentTypeRepository contentTypeRepository) { var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(scopeAccessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); contentTypeRepository = new ContentTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories private ContentTypeRepository CreateRepository(IScopeAccessor scopeAccessor) { var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); var contentTypeRepository = new ContentTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); return contentTypeRepository; @@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaTypeRepository CreateMediaTypeRepository(IScopeAccessor scopeAccessor) { - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); var contentTypeRepository = new MediaTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); @@ -71,7 +71,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var templateRepo = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepo = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var repository = CreateRepository((IScopeAccessor) provider); var templates = new[] { diff --git a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs index af27d47f97..85588cbbdb 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs @@ -64,7 +64,7 @@ namespace Umbraco.Tests.Persistence.Repositories { appCaches = appCaches ?? AppCaches; - templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock()); + templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(scopeAccessor, appCaches, Logger); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, appCaches); var languageRepository = new LanguageRepository(scopeAccessor, appCaches, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs index 628f8d75a7..a8be4f5c2a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs @@ -20,7 +20,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DomainRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository, out DocumentRepository documentRepository, out LanguageRepository languageRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, Core.Cache.AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, Core.Cache.AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, Core.Cache.AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); languageRepository = new LanguageRepository(accessor, Core.Cache.AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index fa916b554d..56db88419a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -34,7 +34,7 @@ namespace Umbraco.Tests.Persistence.Repositories appCaches = appCaches ?? AppCaches; var scopeAccessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, appCaches); var languageRepository = new LanguageRepository(scopeAccessor, appCaches, Logger); mediaTypeRepository = new MediaTypeRepository(scopeAccessor, appCaches, Logger, commonRepository, languageRepository); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index bc23762fa9..4bda37c15c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaTypeRepository CreateRepository(IScopeProvider provider) { var cacheHelper = AppCaches.Disabled; - var templateRepository = new TemplateRepository((IScopeAccessor)provider, cacheHelper, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository((IScopeAccessor)provider, cacheHelper, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, templateRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches, Logger); return new MediaTypeRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, commonRepository, languageRepository); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs index 56041c24aa..66d6bb9619 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs @@ -305,7 +305,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs index e3de2c2892..b186e344ae 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs @@ -953,7 +953,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateContentRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); @@ -965,7 +965,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out MediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 3e5919d7f3..e856cedbd6 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out IMediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); mediaTypeRepository = new MediaTypeRepository(accessor, AppCaches, Mock.Of(), commonRepository, languageRepository); @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateContentRepository(IScopeProvider provider, out IContentTypeRepository contentTypeRepository, out ITemplateRepository templateRepository) { var accessor = (IScopeAccessor) provider; - templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock()); + templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs index 564e129650..86cba62bd9 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs @@ -10,6 +10,7 @@ using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Events; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -56,7 +57,8 @@ namespace Umbraco.Tests.PublishedContent var configs = new Configs(); Mock.Get(factory).Setup(x => x.GetInstance(typeof(Configs))).Returns(configs); - var globalSettings = new GlobalSettings(); + + var globalSettings = new GlobalSettings(Mock.Of()); configs.Add(SettingsForTests.GenerateMockUmbracoSettings); configs.Add(() => globalSettings); diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs index d3a4a0d082..81cee15869 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs @@ -8,6 +8,7 @@ using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Events; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -51,7 +52,7 @@ namespace Umbraco.Tests.PublishedContent var configs = new Configs(); Mock.Get(factory).Setup(x => x.GetInstance(typeof(Configs))).Returns(configs); - var globalSettings = new GlobalSettings(); + var globalSettings = new GlobalSettings(Mock.Of()); configs.Add(SettingsForTests.GenerateMockUmbracoSettings); configs.Add(() => globalSettings); diff --git a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs index ef80672baf..968698b3b6 100644 --- a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs +++ b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs @@ -163,7 +163,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); @@ -197,7 +197,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); @@ -229,7 +229,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor) provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Logger); @@ -264,7 +264,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index b5f63bbc15..fbcfd751cf 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -3161,7 +3161,7 @@ namespace Umbraco.Tests.Services private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); From be7c1f6eb131a7276f7983a0810399732e3f8e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gregersen?= Date: Mon, 18 Nov 2019 20:43:38 +0100 Subject: [PATCH 04/16] fixed (almost all) tests --- .../CompositionExtensions/FileSystems.cs | 2 +- src/Umbraco.Core/ConfigsExtensions.cs | 2 +- src/Umbraco.Core/IO/FileSystems.cs | 15 +++++++++------ .../Migrations/Install/DatabaseBuilder.cs | 4 ++-- .../Services/Implement/FileService.cs | 4 ++-- .../Services/Implement/PackagingService.cs | 2 +- src/Umbraco.Tests/Models/MediaXmlTest.cs | 2 +- .../Repositories/ScriptRepositoryTest.cs | 2 +- .../Repositories/StylesheetRepositoryTest.cs | 2 +- .../Repositories/TemplateRepositoryTest.cs | 4 ++-- src/Umbraco.Tests/TestHelpers/TestHelper.cs | 4 ++-- src/Umbraco.Tests/TestHelpers/TestObjects.cs | 6 +++--- .../Editors/BackOfficeAssetsController.cs | 9 ++++++++- 13 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs index cb83db5db0..f9ce213d65 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs @@ -90,7 +90,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions // register the IFileSystem supporting the IMediaFileSystem // THIS IS THE ONLY THING THAT NEEDS TO CHANGE, IN ORDER TO REPLACE THE UNDERLYING FILESYSTEM // and, SupportingFileSystem.For() returns the underlying filesystem - composition.SetMediaFileSystem(factory => new PhysicalFileSystem(SystemDirectories.Media, factory.GetInstance())); + composition.SetMediaFileSystem(() => new PhysicalFileSystem(Current.Configs.Global().UmbracoMediaPath, Current.IOHelper)); return composition; } diff --git a/src/Umbraco.Core/ConfigsExtensions.cs b/src/Umbraco.Core/ConfigsExtensions.cs index a75972bba5..70af1d3cdb 100644 --- a/src/Umbraco.Core/ConfigsExtensions.cs +++ b/src/Umbraco.Core/ConfigsExtensions.cs @@ -35,7 +35,7 @@ namespace Umbraco.Core { var configDir = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.Config)); - configs.Add(() => new GlobalSettings(ioHelper)); + configs.Add(() => new GlobalSettings(Current.IOHelper)); configs.Add("umbracoConfiguration/settings"); configs.Add("umbracoConfiguration/HealthChecks"); diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs index 920fa67ba2..339256789f 100644 --- a/src/Umbraco.Core/IO/FileSystems.cs +++ b/src/Umbraco.Core/IO/FileSystems.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Threading; using Umbraco.Core.Logging; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; namespace Umbraco.Core.IO { @@ -34,11 +35,12 @@ namespace Umbraco.Core.IO #region Constructor // DI wants a public ctor - public FileSystems(IFactory container, ILogger logger, IIOHelper ioHelper) + public FileSystems(IFactory container, ILogger logger, IIOHelper ioHelper, IGlobalSettings globalSettings) { _container = container; _logger = logger; _ioHelper = ioHelper; + _globalSettings = globalSettings; } // for tests only, totally unsafe @@ -122,11 +124,11 @@ namespace Umbraco.Core.IO // but it does not really matter what we return - here, null private object CreateWellKnownFileSystems() { - var macroPartialFileSystem = new PhysicalFileSystem(SystemDirectories.MacroPartials, _ioHelper); - var partialViewsFileSystem = new PhysicalFileSystem(SystemDirectories.PartialViews, _ioHelper); - var stylesheetsFileSystem = new PhysicalFileSystem(SystemDirectories.Css, _ioHelper); - var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts, _ioHelper); - var mvcViewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews, _ioHelper); + var macroPartialFileSystem = new PhysicalFileSystem(Constants.SystemDirectories.MacroPartials, _ioHelper); + var partialViewsFileSystem = new PhysicalFileSystem(Constants.SystemDirectories.PartialViews, _ioHelper); + var stylesheetsFileSystem = new PhysicalFileSystem(_globalSettings.UmbracoCssPath, _ioHelper); + var scriptsFileSystem = new PhysicalFileSystem(_globalSettings.UmbracoScriptsPath, _ioHelper); + var mvcViewsFileSystem = new PhysicalFileSystem(Constants.SystemDirectories.MvcViews, _ioHelper); _macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "macro-partials", _ioHelper, IsScoped); _partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "partials", _ioHelper, IsScoped); @@ -152,6 +154,7 @@ namespace Umbraco.Core.IO // internal for tests internal IReadOnlyDictionary Paths => _paths; + private IGlobalSettings _globalSettings; /// /// Gets a strongly-typed filesystem. diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs index 5d0e3246fc..9f62e8c355 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs @@ -285,7 +285,7 @@ namespace Umbraco.Core.Migrations.Install if (string.IsNullOrWhiteSpace(providerName)) throw new ArgumentNullOrEmptyException(nameof(providerName)); var fileSource = "web.config"; - var fileName = ioHelper.MapPath(SystemDirectories.Root +"/" + fileSource); + var fileName = ioHelper.MapPath(ioHelper.Root +"/" + fileSource); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); if (xml.Root == null) throw new Exception($"Invalid {fileSource} file (no root)."); @@ -298,7 +298,7 @@ namespace Umbraco.Core.Migrations.Install if (configSourceAttribute != null) { fileSource = configSourceAttribute.Value; - fileName = ioHelper.MapPath(SystemDirectories.Root + "/" + fileSource); + fileName = ioHelper.MapPath(ioHelper.Root + "/" + fileSource); if (!File.Exists(fileName)) throw new Exception($"Invalid configSource \"{fileSource}\" (no such file)."); diff --git a/src/Umbraco.Core/Services/Implement/FileService.cs b/src/Umbraco.Core/Services/Implement/FileService.cs index 00a95fced6..bf6fd6bb74 100644 --- a/src/Umbraco.Core/Services/Implement/FileService.cs +++ b/src/Umbraco.Core/Services/Implement/FileService.cs @@ -666,7 +666,7 @@ namespace Umbraco.Core.Services.Implement public IEnumerable GetPartialViewSnippetNames(params string[] filterNames) { - var snippetPath = _ioHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/"); + var snippetPath = _ioHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/"); var files = Directory.GetFiles(snippetPath, "*.cshtml") .Select(Path.GetFileNameWithoutExtension) .Except(filterNames, StringComparer.InvariantCultureIgnoreCase) @@ -900,7 +900,7 @@ namespace Umbraco.Core.Services.Implement fileName += ".cshtml"; } - var snippetPath = _ioHelper.MapPath($"{SystemDirectories.Umbraco}/PartialViewMacros/Templates/{fileName}"); + var snippetPath = _ioHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/{fileName}"); return System.IO.File.Exists(snippetPath) ? Attempt.Succeed(snippetPath) : Attempt.Fail(); diff --git a/src/Umbraco.Core/Services/Implement/PackagingService.cs b/src/Umbraco.Core/Services/Implement/PackagingService.cs index 3636705f8b..7fd9be6dee 100644 --- a/src/Umbraco.Core/Services/Implement/PackagingService.cs +++ b/src/Umbraco.Core/Services/Implement/PackagingService.cs @@ -67,7 +67,7 @@ namespace Umbraco.Core.Services.Implement //successful if (bytes.Length > 0) { - var packagePath = _ioHelper.MapPath(SystemDirectories.Packages); + var packagePath = _ioHelper.MapPath(Constants.SystemDirectories.Packages); // Check for package directory if (Directory.Exists(packagePath) == false) diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index b4eb0efb73..92b97f8ca5 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -38,7 +38,7 @@ namespace Umbraco.Tests.Models var ioHelper = Mock.Of(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); - var ignored = new FileUploadPropertyEditor(Mock.Of(), mediaFileSystem, config); + var ignored = new FileUploadPropertyEditor(Mock.Of(), mediaFileSystem, config, dataTypeService, localizationService); var media = MockedMedia.CreateMediaImage(mediaType, -1); media.WriterId = -1; // else it's zero and that's not a user and it breaks the tests diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 1c82287842..787853e4cb 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(new GlobalSettings().UmbracoScriptsPath); + _fileSystem = new PhysicalFileSystem(new GlobalSettings(IOHelper).UmbracoScriptsPath, IOHelper); Mock.Get(_fileSystems).Setup(x => x.ScriptsFileSystem).Returns(_fileSystem); using (var stream = CreateStream("Umbraco.Sys.registerNamespace(\"Umbraco.Utils\");")) { diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index ef28b42f05..2e8682d181 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(new GlobalSettings().UmbracoCssPath); + _fileSystem = new PhysicalFileSystem(new GlobalSettings(IOHelper).UmbracoCssPath, IOHelper); Mock.Get(_fileSystems).Setup(x => x.StylesheetsFileSystem).Returns(_fileSystem); var stream = CreateStream("body {background:#EE7600; color:#FFF;}"); _fileSystem.AddFile("styles.css", stream); diff --git a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs index 200a1c8687..522a8c78f6 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - var viewsFileSystem = new PhysicalFileSystem(Constants.SystemDirectories.MvcViews); + var viewsFileSystem = new PhysicalFileSystem(Constants.SystemDirectories.MvcViews, IOHelper); Mock.Get(_fileSystems).Setup(x => x.MvcViewsFileSystem).Returns(viewsFileSystem); } @@ -527,7 +527,7 @@ namespace Umbraco.Tests.Persistence.Repositories _fileSystems = null; //Delete all files - var fsViews = new PhysicalFileSystem(Constants.SystemDirectories.MvcViews); + var fsViews = new PhysicalFileSystem(Constants.SystemDirectories.MvcViews, IOHelper); var views = fsViews.GetFiles("", "*.cshtml"); foreach (var file in views) fsViews.DeleteFile(file); diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 975cf72bfb..671d7fe8ab 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -64,12 +64,12 @@ namespace Umbraco.Tests.TestHelpers public static void InitializeContentDirectories() { - CreateDirectories(new[] { Constants.SystemDirectories.MvcViews, new GlobalSettings().UmbracoMediaPath, Constants.SystemDirectories.AppPlugins }); + CreateDirectories(new[] { Constants.SystemDirectories.MvcViews, new GlobalSettings(IOHelper.Default).UmbracoMediaPath, Constants.SystemDirectories.AppPlugins }); } public static void CleanContentDirectories() { - CleanDirectories(new[] { Constants.SystemDirectories.MvcViews, new GlobalSettings().UmbracoMediaPath }); + CleanDirectories(new[] { Constants.SystemDirectories.MvcViews, new GlobalSettings(IOHelper.Default).UmbracoMediaPath }); } public static void CreateDirectories(string[] directories) diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 29c0a7328a..1962a0085b 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -120,9 +120,9 @@ namespace Umbraco.Tests.TestHelpers var localizedTextService = GetLazyService(factory, c => new LocalizedTextService( new Lazy(() => { - var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); - var appPlugins = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(ioHelper.MapPath(SystemDirectories.Config + "/lang/")); + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(Current.Configs.Global().UmbracoPath + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() diff --git a/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs b/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs index 53ba7e08ef..c2eea32d79 100644 --- a/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeAssetsController.cs @@ -12,7 +12,14 @@ namespace Umbraco.Web.Editors [PluginController("UmbracoApi")] public class BackOfficeAssetsController : UmbracoAuthorizedJsonController { - private readonly IFileSystem _jsLibFileSystem = new PhysicalFileSystem(Current.Configs.Global().UmbracoPath + Current.IOHelper.DirSepChar + "lib"); + private readonly IFileSystem _jsLibFileSystem; + + public BackOfficeAssetsController(IIOHelper ioHelper) + { + _jsLibFileSystem = + new PhysicalFileSystem(Current.Configs.Global().UmbracoPath + Current.IOHelper.DirSepChar + "lib", + ioHelper); + } [HttpGet] public object GetSupportedLocales() From 6faa5d79d37e8f8e7fbc775ad4ff4ab215a89205 Mon Sep 17 00:00:00 2001 From: mikkelhm Date: Mon, 18 Nov 2019 22:17:39 +0100 Subject: [PATCH 05/16] Close unclosed key element in italian language file --- src/Umbraco.Web.UI/Umbraco/config/lang/it.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml index a7735fba79..d2a1d75ee7 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml @@ -339,7 +339,7 @@ Larghezza Si Riordina - Ho finito di ordinare/key> + Ho finito di ordinare Colore di sfondo From 282973f1e2e6b07644508a107be3ae1049ee8619 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 08:52:39 +0100 Subject: [PATCH 06/16] More injections of IIOHelper --- src/Umbraco.Configuration/GlobalSettings.cs | 6 ------ .../Composing/CompositionExtensions/FileSystems.cs | 3 ++- .../Composing/CompositionExtensions/Services.cs | 9 ++++++--- .../Migrations/Install/DatabaseBuilder.cs | 1 + .../Implement/PartialViewRepository.cs | 4 ++-- src/Umbraco.Core/Runtime/CoreInitialComposer.cs | 4 +++- src/Umbraco.Core/Sync/DatabaseServerMessenger.cs | 6 ++++-- src/Umbraco.Examine/LuceneIndexCreator.cs | 6 ++++-- src/Umbraco.Examine/LuceneIndexDiagnostics.cs | 4 ++-- src/Umbraco.Examine/UmbracoContentIndex.cs | 5 ++++- src/Umbraco.Examine/UmbracoExamineIndex.cs | 6 ++++-- .../UmbracoExamineIndexDiagnostics.cs | 4 ++-- src/Umbraco.Examine/UmbracoMemberIndex.cs | 5 ++++- .../Repositories/ScriptRepositoryTest.cs | 2 +- .../Repositories/StylesheetRepositoryTest.cs | 2 +- .../PublishedContent/PublishedMediaTests.cs | 14 +++++++------- src/Umbraco.Tests/UmbracoExamine/EventsTest.cs | 2 +- .../UmbracoExamine/IndexInitializer.cs | 3 +++ src/Umbraco.Tests/UmbracoExamine/IndexTest.cs | 14 +++++++------- src/Umbraco.Tests/UmbracoExamine/SearchTests.cs | 2 +- src/Umbraco.Web/BatchedDatabaseServerMessenger.cs | 12 +++--------- .../Editors/ExamineManagementController.cs | 7 +++++-- src/Umbraco.Web/Search/UmbracoIndexesCreator.cs | 10 +++++++++- 23 files changed, 76 insertions(+), 55 deletions(-) diff --git a/src/Umbraco.Configuration/GlobalSettings.cs b/src/Umbraco.Configuration/GlobalSettings.cs index 8ade096c4a..440940cb85 100644 --- a/src/Umbraco.Configuration/GlobalSettings.cs +++ b/src/Umbraco.Configuration/GlobalSettings.cs @@ -1,12 +1,7 @@ using System; using System.Configuration; using System.Linq; -using System.Net.Configuration; -using System.Web; -using System.Web.Configuration; -using System.Web.Hosting; using System.Xml.Linq; -using Umbraco.Core.Composing; using Umbraco.Core.IO; namespace Umbraco.Core.Configuration @@ -20,7 +15,6 @@ namespace Umbraco.Core.Configuration public class GlobalSettings : IGlobalSettings { private readonly IIOHelper _ioHelper; - private string _localTempPath; // TODO these should not be static private static string _reservedPaths; diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs index f9ce213d65..62c9e0ae0c 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs @@ -1,4 +1,5 @@ using Umbraco.Core.Compose; +using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.IO.MediaPathSchemes; @@ -90,7 +91,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions // register the IFileSystem supporting the IMediaFileSystem // THIS IS THE ONLY THING THAT NEEDS TO CHANGE, IN ORDER TO REPLACE THE UNDERLYING FILESYSTEM // and, SupportingFileSystem.For() returns the underlying filesystem - composition.SetMediaFileSystem(() => new PhysicalFileSystem(Current.Configs.Global().UmbracoMediaPath, Current.IOHelper)); + composition.SetMediaFileSystem(factory => new PhysicalFileSystem(factory.GetInstance().UmbracoMediaPath, factory.GetInstance())); return composition; } diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs index b79e957c9c..4ed2fb5b2e 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs @@ -2,6 +2,7 @@ using System.IO; using System.Linq; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Events; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -89,9 +90,11 @@ namespace Umbraco.Core.Composing.CompositionExtensions private static LocalizedTextServiceFileSources SourcesFactory(IFactory container) { - var mainLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Current.Configs.Global().UmbracoPath + "/config/lang/")); - var appPlugins = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); + var ioHelper = container.GetInstance(); + var globalSettings = container.GetInstance(); + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(globalSettings.UmbracoPath + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs index af39b6c7c5..cf4dd923de 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs @@ -6,6 +6,7 @@ using System.Xml.Linq; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Exceptions; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Upgrade; using Umbraco.Core.Persistence; diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs index 238f121964..d327cdd78c 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs @@ -110,8 +110,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement // validate path & extension var validDir = Constants.SystemDirectories.MvcViews; - var isValidPath = Current.IOHelper.VerifyEditPath(fullPath, validDir); - var isValidExtension = Current.IOHelper.VerifyFileExtension(fullPath, ValidExtensions); + var isValidPath = _ioHelper.VerifyEditPath(fullPath, validDir); + var isValidExtension = _ioHelper.VerifyFileExtension(fullPath, ValidExtensions); return isValidPath && isValidExtension; } diff --git a/src/Umbraco.Core/Runtime/CoreInitialComposer.cs b/src/Umbraco.Core/Runtime/CoreInitialComposer.cs index 61a9f472fe..2ab0de14ce 100644 --- a/src/Umbraco.Core/Runtime/CoreInitialComposer.cs +++ b/src/Umbraco.Core/Runtime/CoreInitialComposer.cs @@ -4,6 +4,7 @@ using Umbraco.Core.Composing; using Umbraco.Core.Composing.CompositionExtensions; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Manifest; using Umbraco.Core.Migrations; @@ -102,7 +103,8 @@ namespace Umbraco.Core.Runtime factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), - true, new DatabaseServerMessengerOptions())); + true, new DatabaseServerMessengerOptions(), + factory.GetInstance())); composition.WithCollectionBuilder() .Add(() => composition.TypeLoader.GetCacheRefreshers()); diff --git a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs index 118080feb6..f616007f73 100644 --- a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs +++ b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs @@ -34,6 +34,7 @@ namespace Umbraco.Core.Sync private readonly ManualResetEvent _syncIdle; private readonly object _locko = new object(); private readonly IProfilingLogger _profilingLogger; + private readonly IIOHelper _ioHelper; private readonly ISqlContext _sqlContext; private readonly Lazy _distCacheFilePath; private int _lastId = -1; @@ -47,13 +48,14 @@ namespace Umbraco.Core.Sync public DatabaseServerMessenger( IRuntimeState runtime, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, - bool distributedEnabled, DatabaseServerMessengerOptions options) + bool distributedEnabled, DatabaseServerMessengerOptions options, IIOHelper ioHelper) : base(distributedEnabled) { ScopeProvider = scopeProvider ?? throw new ArgumentNullException(nameof(scopeProvider)); _sqlContext = sqlContext; _runtime = runtime; _profilingLogger = proflog ?? throw new ArgumentNullException(nameof(proflog)); + _ioHelper = ioHelper; Logger = proflog; Options = options ?? throw new ArgumentNullException(nameof(options)); _lastPruned = _lastSync = DateTime.UtcNow; @@ -534,7 +536,7 @@ namespace Umbraco.Core.Sync { var fileName = HttpRuntime.AppDomainAppId.ReplaceNonAlphanumericChars(string.Empty) + "-lastsynced.txt"; - var distCacheFilePath = Path.Combine(globalSettings.LocalTempPath(Current.IOHelper), "DistCache", fileName); + var distCacheFilePath = Path.Combine(globalSettings.LocalTempPath(_ioHelper), "DistCache", fileName); //ensure the folder exists var folder = Path.GetDirectoryName(distCacheFilePath); diff --git a/src/Umbraco.Examine/LuceneIndexCreator.cs b/src/Umbraco.Examine/LuceneIndexCreator.cs index d6bf8c262c..ccc0248868 100644 --- a/src/Umbraco.Examine/LuceneIndexCreator.cs +++ b/src/Umbraco.Examine/LuceneIndexCreator.cs @@ -18,10 +18,12 @@ namespace Umbraco.Examine public abstract class LuceneIndexCreator : IIndexCreator { private readonly ITypeFinder _typeFinder; + private readonly IIOHelper _ioHelper; - protected LuceneIndexCreator(ITypeFinder typeFinder) + protected LuceneIndexCreator(ITypeFinder typeFinder, IIOHelper ioHelper) { _typeFinder = typeFinder; + _ioHelper = ioHelper; } public abstract IEnumerable Create(); @@ -36,7 +38,7 @@ namespace Umbraco.Examine public virtual Lucene.Net.Store.Directory CreateFileSystemLuceneDirectory(string folderName) { - var dirInfo = new DirectoryInfo(Path.Combine(Current.IOHelper.MapPath(Constants.SystemDirectories.TempData), "ExamineIndexes", folderName)); + var dirInfo = new DirectoryInfo(Path.Combine(_ioHelper.MapPath(Constants.SystemDirectories.TempData), "ExamineIndexes", folderName)); if (!dirInfo.Exists) System.IO.Directory.CreateDirectory(dirInfo.FullName); diff --git a/src/Umbraco.Examine/LuceneIndexDiagnostics.cs b/src/Umbraco.Examine/LuceneIndexDiagnostics.cs index 3b23b57709..81ec7e3dcb 100644 --- a/src/Umbraco.Examine/LuceneIndexDiagnostics.cs +++ b/src/Umbraco.Examine/LuceneIndexDiagnostics.cs @@ -13,11 +13,11 @@ namespace Umbraco.Examine { private IIOHelper _ioHelper; - public LuceneIndexDiagnostics(LuceneIndex index, ILogger logger) + public LuceneIndexDiagnostics(LuceneIndex index, ILogger logger, IIOHelper ioHelper) { Index = index; Logger = logger; - _ioHelper = Current.IOHelper; + _ioHelper = ioHelper; } public LuceneIndex Index { get; } diff --git a/src/Umbraco.Examine/UmbracoContentIndex.cs b/src/Umbraco.Examine/UmbracoContentIndex.cs index e266ca789d..f160e56a41 100644 --- a/src/Umbraco.Examine/UmbracoContentIndex.cs +++ b/src/Umbraco.Examine/UmbracoContentIndex.cs @@ -11,6 +11,7 @@ using Lucene.Net.Store; using Umbraco.Core.Composing; using Umbraco.Core.Logging; using Examine.LuceneEngine; +using Umbraco.Core.IO; namespace Umbraco.Examine { @@ -32,6 +33,7 @@ namespace Umbraco.Examine /// /// /// + /// /// /// /// @@ -41,10 +43,11 @@ namespace Umbraco.Examine FieldDefinitionCollection fieldDefinitions, Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, ILocalizationService languageService, IContentValueSetValidator validator, IReadOnlyDictionary indexValueTypes = null) - : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, validator, indexValueTypes) + : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, validator, indexValueTypes) { if (validator == null) throw new ArgumentNullException(nameof(validator)); LanguageService = languageService ?? throw new ArgumentNullException(nameof(languageService)); diff --git a/src/Umbraco.Examine/UmbracoExamineIndex.cs b/src/Umbraco.Examine/UmbracoExamineIndex.cs index e1dd77b994..bfc6189a13 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndex.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndex.cs @@ -10,6 +10,7 @@ using Examine; using Examine.LuceneEngine; using Lucene.Net.Store; using Umbraco.Core.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -57,6 +58,7 @@ namespace Umbraco.Examine FieldDefinitionCollection fieldDefinitions, Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, IValueSetValidator validator = null, IReadOnlyDictionary indexValueTypes = null) : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, validator, indexValueTypes) @@ -67,7 +69,7 @@ namespace Umbraco.Examine if (luceneDirectory is FSDirectory fsDir) LuceneIndexFolder = fsDir.Directory; - _diagnostics = new UmbracoExamineIndexDiagnostics(this, ProfilingLogger); + _diagnostics = new UmbracoExamineIndexDiagnostics(this, ProfilingLogger, ioHelper); } private readonly bool _configBased = false; @@ -185,7 +187,7 @@ namespace Umbraco.Examine e.ValueSet.Values[IconFieldName] = icon; } } - + #region IIndexDiagnostics private readonly UmbracoExamineIndexDiagnostics _diagnostics; diff --git a/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs b/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs index 4a926deebe..2ac8fde960 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs @@ -11,8 +11,8 @@ namespace Umbraco.Examine { private readonly UmbracoExamineIndex _index; - public UmbracoExamineIndexDiagnostics(UmbracoExamineIndex index, ILogger logger) - : base(index, logger) + public UmbracoExamineIndexDiagnostics(UmbracoExamineIndex index, ILogger logger, IIOHelper ioHelper) + : base(index, logger, ioHelper) { _index = index; } diff --git a/src/Umbraco.Examine/UmbracoMemberIndex.cs b/src/Umbraco.Examine/UmbracoMemberIndex.cs index 445707ab0c..69071855e3 100644 --- a/src/Umbraco.Examine/UmbracoMemberIndex.cs +++ b/src/Umbraco.Examine/UmbracoMemberIndex.cs @@ -2,6 +2,7 @@ using Examine; using Examine.LuceneEngine; using Lucene.Net.Analysis; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -20,6 +21,7 @@ namespace Umbraco.Examine /// /// /// + /// /// /// public UmbracoMemberIndex( @@ -28,8 +30,9 @@ namespace Umbraco.Examine Directory luceneDirectory, Analyzer analyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, IValueSetValidator validator = null) : - base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, validator) + base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, validator) { } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 997b275655..2d1c92f1b4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(SettingsForTests.GenerateMockGlobalSettings().UmbracoScriptsPath); + _fileSystem = new PhysicalFileSystem(SettingsForTests.GenerateMockGlobalSettings().UmbracoScriptsPath, IOHelper); Mock.Get(_fileSystems).Setup(x => x.ScriptsFileSystem).Returns(_fileSystem); using (var stream = CreateStream("Umbraco.Sys.registerNamespace(\"Umbraco.Utils\");")) { diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index a1f0662ebd..d076734037 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(SettingsForTests.GenerateMockGlobalSettings().UmbracoCssPath); + _fileSystem = new PhysicalFileSystem(SettingsForTests.GenerateMockGlobalSettings().UmbracoCssPath, IOHelper); Mock.Get(_fileSystems).Setup(x => x.StylesheetsFileSystem).Returns(_fileSystem); var stream = CreateStream("body {background:#EE7600; color:#FFF;}"); _fileSystem.AddFile("styles.css", stream); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index f801d02c5b..f2959c7e31 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -120,7 +120,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -149,7 +149,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, //include unpublished content since this uses the 'internal' indexer, it's up to the media cache to filter validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) @@ -197,7 +197,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -225,7 +225,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -253,7 +253,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -282,7 +282,7 @@ namespace Umbraco.Tests.PublishedContent using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -307,7 +307,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { diff --git a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs index ed5ae07fc0..2f4208ab2b 100644 --- a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs @@ -19,7 +19,7 @@ namespace Umbraco.Tests.UmbracoExamine public void Events_Ignoring_Node() { using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, //make parent id 999 so all are ignored validator: new ContentValueSetValidator(false, 999))) using (indexer.ProcessNonAsync()) diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs index 1653de827d..03178f85ac 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs @@ -8,6 +8,7 @@ using Lucene.Net.Analysis.Standard; using Lucene.Net.Store; using Moq; using Umbraco.Core; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; @@ -153,6 +154,7 @@ namespace Umbraco.Tests.UmbracoExamine public static UmbracoContentIndex GetUmbracoIndexer( IProfilingLogger profilingLogger, + IIOHelper ioHelper, Directory luceneDir, Analyzer analyzer = null, ILocalizationService languageService = null, @@ -173,6 +175,7 @@ namespace Umbraco.Tests.UmbracoExamine new UmbracoFieldDefinitionCollection(), analyzer, profilingLogger, + ioHelper, languageService, validator); diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs index 9e59422310..e0a4f84486 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs @@ -32,7 +32,7 @@ namespace Umbraco.Tests.UmbracoExamine var contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(Factory.GetInstance(), false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -125,7 +125,7 @@ namespace Umbraco.Tests.UmbracoExamine var mediaRebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -153,7 +153,7 @@ namespace Umbraco.Tests.UmbracoExamine using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) using (indexer.ProcessNonAsync()) using (var searcher = ((LuceneSearcher)indexer.GetSearcher()).GetLuceneSearcher()) { @@ -190,7 +190,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 1116); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, validator: validator)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); @@ -233,7 +233,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 2222); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, validator: validator)) + using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) using (indexer1.ProcessNonAsync()) { var searcher = indexer1.GetSearcher(); @@ -276,7 +276,7 @@ namespace Umbraco.Tests.UmbracoExamine { var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -318,7 +318,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); diff --git a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs index a45a33ec00..91a7eb9799 100644 --- a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs +++ b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs @@ -58,7 +58,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(propertyEditors, contentService, ScopeProvider.SqlContext, true); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) using (indexer.ProcessNonAsync()) { indexer.CreateIndex(); diff --git a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs index 6596fee245..e9fcd6b305 100644 --- a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs +++ b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs @@ -14,6 +14,7 @@ using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Scoping; using Umbraco.Web.Composing; using System.ComponentModel; +using Umbraco.Core.IO; namespace Umbraco.Web { @@ -27,16 +28,9 @@ namespace Umbraco.Web { private readonly IUmbracoDatabaseFactory _databaseFactory; - [Obsolete("This overload should not be used, enableDistCalls has no effect")] - [EditorBrowsable(EditorBrowsableState.Never)] public BatchedDatabaseServerMessenger( - IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, bool enableDistCalls, DatabaseServerMessengerOptions options) - : this(runtime, databaseFactory, scopeProvider, sqlContext, proflog, globalSettings, options) - { } - - public BatchedDatabaseServerMessenger( - IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, DatabaseServerMessengerOptions options) - : base(runtime, scopeProvider, sqlContext, proflog, globalSettings, true, options) + IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, DatabaseServerMessengerOptions options, IIOHelper ioHelper) + : base(runtime, scopeProvider, sqlContext, proflog, globalSettings, true, options, ioHelper) { _databaseFactory = databaseFactory; } diff --git a/src/Umbraco.Web/Editors/ExamineManagementController.cs b/src/Umbraco.Web/Editors/ExamineManagementController.cs index 0953b41cac..16bf071445 100644 --- a/src/Umbraco.Web/Editors/ExamineManagementController.cs +++ b/src/Umbraco.Web/Editors/ExamineManagementController.cs @@ -8,6 +8,7 @@ using Examine; using Examine.LuceneEngine.Providers; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Examine; using Umbraco.Web.Models.ContentEditing; @@ -22,16 +23,18 @@ namespace Umbraco.Web.Editors { private readonly IExamineManager _examineManager; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private readonly IAppPolicyCache _runtimeCache; private readonly IndexRebuilder _indexRebuilder; - public ExamineManagementController(IExamineManager examineManager, ILogger logger, + public ExamineManagementController(IExamineManager examineManager, ILogger logger, IIOHelper ioHelper, AppCaches appCaches, IndexRebuilder indexRebuilder) { _examineManager = examineManager; _logger = logger; + _ioHelper = ioHelper; _runtimeCache = appCaches.RuntimeCache; _indexRebuilder = indexRebuilder; } @@ -179,7 +182,7 @@ namespace Umbraco.Web.Editors if (!(index is IIndexDiagnostics indexDiag)) { if (index is LuceneIndex luceneIndex) - indexDiag = new LuceneIndexDiagnostics(luceneIndex, Logger); + indexDiag = new LuceneIndexDiagnostics(luceneIndex, Logger, _ioHelper); else indexDiag = new GenericIndexDiagnostics(index); } diff --git a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs index b9dbc7d996..feeea2a12e 100644 --- a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs +++ b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs @@ -8,6 +8,7 @@ using Examine.LuceneEngine; using Examine; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.IO; namespace Umbraco.Web.Search { @@ -23,8 +24,11 @@ namespace Umbraco.Web.Search IProfilingLogger profilingLogger, ILocalizationService languageService, IPublicAccessService publicAccessService, - IMemberService memberService, IUmbracoIndexConfig umbracoIndexConfig) : base(typeFinder) + IMemberService memberService, + IUmbracoIndexConfig umbracoIndexConfig, + IIOHelper ioHelper) : base(typeFinder, ioHelper) { + IOHelper = ioHelper; ProfilingLogger = profilingLogger ?? throw new System.ArgumentNullException(nameof(profilingLogger)); LanguageService = languageService ?? throw new System.ArgumentNullException(nameof(languageService)); PublicAccessService = publicAccessService ?? throw new System.ArgumentNullException(nameof(publicAccessService)); @@ -33,6 +37,7 @@ namespace Umbraco.Web.Search } protected IProfilingLogger ProfilingLogger { get; } + protected IIOHelper IOHelper { get; } protected ILocalizationService LanguageService { get; } protected IPublicAccessService PublicAccessService { get; } protected IMemberService MemberService { get; } @@ -60,6 +65,7 @@ namespace Umbraco.Web.Search new UmbracoFieldDefinitionCollection(), new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, + IOHelper, LanguageService, GetContentValueSetValidator() ); @@ -74,6 +80,7 @@ namespace Umbraco.Web.Search new UmbracoFieldDefinitionCollection(), new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), ProfilingLogger, + IOHelper, LanguageService, GetPublishedContentValueSetValidator()); return index; @@ -87,6 +94,7 @@ namespace Umbraco.Web.Search CreateFileSystemLuceneDirectory(Constants.UmbracoIndexes.MembersIndexPath), new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, + IOHelper, GetMemberValueSetValidator() ); return index; From 3ee18b89752e992921d4b74bc3a3adfb7a914cb0 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 09:46:51 +0100 Subject: [PATCH 07/16] AB3743 - Moved the remaining Udi stuff and the required deploy stuff --- .../Deploy/ArtifactDependency.cs | 0 .../Deploy/ArtifactDependencyCollection.cs | 0 .../Deploy/ArtifactDependencyMode.cs | 0 .../Deploy/ArtifactDeployState.cs | 0 .../ArtifactDeployStateOfTArtifactTEntity.cs | 0 .../Deploy/Difference.cs | 0 .../Deploy/IArtifact.cs | 0 .../Deploy/IArtifactSignature.cs | 0 .../Deploy/IDeployContext.cs | 0 .../Deploy/IFileSource.cs | 0 .../Deploy/IFileType.cs | 0 .../Deploy/IFileTypeCollection.cs | 0 .../Deploy/IServiceConnector.cs | 0 .../GuidUtils.cs | 2 +- src/Umbraco.Abstractions/TypeExtensions.cs | 23 +++++++++++++++++++ .../UdiEntityTypeHelper.cs | 0 .../UdiGetterExtensions.cs | 0 .../UdiParserServiceConnectors.cs | 0 src/Umbraco.Core/TypeExtensions.cs | 14 +---------- src/Umbraco.Core/Umbraco.Core.csproj | 17 -------------- 20 files changed, 25 insertions(+), 31 deletions(-) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactDependency.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactDependencyCollection.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactDependencyMode.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactDeployState.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/Difference.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IArtifact.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IArtifactSignature.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IDeployContext.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IFileSource.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IFileType.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IFileTypeCollection.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IServiceConnector.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/GuidUtils.cs (99%) create mode 100644 src/Umbraco.Abstractions/TypeExtensions.cs rename src/{Umbraco.Core => Umbraco.Abstractions}/UdiEntityTypeHelper.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/UdiGetterExtensions.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/UdiParserServiceConnectors.cs (100%) diff --git a/src/Umbraco.Core/Deploy/ArtifactDependency.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependency.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependency.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependency.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDependencyCollection.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependencyCollection.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependencyCollection.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependencyCollection.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDependencyMode.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependencyMode.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependencyMode.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependencyMode.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDeployState.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDeployState.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDeployState.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDeployState.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs diff --git a/src/Umbraco.Core/Deploy/Difference.cs b/src/Umbraco.Abstractions/Deploy/Difference.cs similarity index 100% rename from src/Umbraco.Core/Deploy/Difference.cs rename to src/Umbraco.Abstractions/Deploy/Difference.cs diff --git a/src/Umbraco.Core/Deploy/IArtifact.cs b/src/Umbraco.Abstractions/Deploy/IArtifact.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IArtifact.cs rename to src/Umbraco.Abstractions/Deploy/IArtifact.cs diff --git a/src/Umbraco.Core/Deploy/IArtifactSignature.cs b/src/Umbraco.Abstractions/Deploy/IArtifactSignature.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IArtifactSignature.cs rename to src/Umbraco.Abstractions/Deploy/IArtifactSignature.cs diff --git a/src/Umbraco.Core/Deploy/IDeployContext.cs b/src/Umbraco.Abstractions/Deploy/IDeployContext.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IDeployContext.cs rename to src/Umbraco.Abstractions/Deploy/IDeployContext.cs diff --git a/src/Umbraco.Core/Deploy/IFileSource.cs b/src/Umbraco.Abstractions/Deploy/IFileSource.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileSource.cs rename to src/Umbraco.Abstractions/Deploy/IFileSource.cs diff --git a/src/Umbraco.Core/Deploy/IFileType.cs b/src/Umbraco.Abstractions/Deploy/IFileType.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileType.cs rename to src/Umbraco.Abstractions/Deploy/IFileType.cs diff --git a/src/Umbraco.Core/Deploy/IFileTypeCollection.cs b/src/Umbraco.Abstractions/Deploy/IFileTypeCollection.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileTypeCollection.cs rename to src/Umbraco.Abstractions/Deploy/IFileTypeCollection.cs diff --git a/src/Umbraco.Core/Deploy/IServiceConnector.cs b/src/Umbraco.Abstractions/Deploy/IServiceConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IServiceConnector.cs rename to src/Umbraco.Abstractions/Deploy/IServiceConnector.cs diff --git a/src/Umbraco.Core/GuidUtils.cs b/src/Umbraco.Abstractions/GuidUtils.cs similarity index 99% rename from src/Umbraco.Core/GuidUtils.cs rename to src/Umbraco.Abstractions/GuidUtils.cs index d878cee16b..ba07d09236 100644 --- a/src/Umbraco.Core/GuidUtils.cs +++ b/src/Umbraco.Abstractions/GuidUtils.cs @@ -7,7 +7,7 @@ namespace Umbraco.Core /// /// Utility methods for the struct. /// - internal static class GuidUtils + public static class GuidUtils { /// /// Combines two guid instances utilizing an exclusive disjunction. diff --git a/src/Umbraco.Abstractions/TypeExtensions.cs b/src/Umbraco.Abstractions/TypeExtensions.cs new file mode 100644 index 0000000000..4f55b6458c --- /dev/null +++ b/src/Umbraco.Abstractions/TypeExtensions.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Umbraco.Core +{ + public static class TypeExtensions + { + public static T GetCustomAttribute(this Type type, bool inherit) + where T : Attribute + { + return type.GetCustomAttributes(inherit).SingleOrDefault(); + } + + public static IEnumerable GetCustomAttributes(this Type type, bool inherited) + where T : Attribute + { + if (type == null) return Enumerable.Empty(); + return type.GetCustomAttributes(typeof (T), inherited).OfType(); + } + + } +} diff --git a/src/Umbraco.Core/UdiEntityTypeHelper.cs b/src/Umbraco.Abstractions/UdiEntityTypeHelper.cs similarity index 100% rename from src/Umbraco.Core/UdiEntityTypeHelper.cs rename to src/Umbraco.Abstractions/UdiEntityTypeHelper.cs diff --git a/src/Umbraco.Core/UdiGetterExtensions.cs b/src/Umbraco.Abstractions/UdiGetterExtensions.cs similarity index 100% rename from src/Umbraco.Core/UdiGetterExtensions.cs rename to src/Umbraco.Abstractions/UdiGetterExtensions.cs diff --git a/src/Umbraco.Core/UdiParserServiceConnectors.cs b/src/Umbraco.Abstractions/UdiParserServiceConnectors.cs similarity index 100% rename from src/Umbraco.Core/UdiParserServiceConnectors.cs rename to src/Umbraco.Abstractions/UdiParserServiceConnectors.cs diff --git a/src/Umbraco.Core/TypeExtensions.cs b/src/Umbraco.Core/TypeExtensions.cs index f867b1cd14..9d4d196bb5 100644 --- a/src/Umbraco.Core/TypeExtensions.cs +++ b/src/Umbraco.Core/TypeExtensions.cs @@ -97,19 +97,7 @@ namespace Umbraco.Core && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic; } - public static T GetCustomAttribute(this Type type, bool inherit) - where T : Attribute - { - return type.GetCustomAttributes(inherit).SingleOrDefault(); - } - - public static IEnumerable GetCustomAttributes(this Type type, bool inherited) - where T : Attribute - { - if (type == null) return Enumerable.Empty(); - return type.GetCustomAttributes(typeof (T), inherited).OfType(); - } - + /// /// Determines whether the specified type is enumerable. diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index b02a7df78c..da5da1f88c 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -252,7 +252,6 @@ - @@ -377,25 +376,12 @@ - - - - - - - - - - - - - @@ -927,9 +913,6 @@ - - - Component From d9d267a48985628ac317a873ba0bd47b8e016032 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 09:50:18 +0100 Subject: [PATCH 08/16] AB3743 - Moved more deploy stuff --- .../Deploy/ArtifactSignature.cs | 0 .../Deploy/Direction.cs | 0 .../Deploy/IDataTypeConfigurationConnector.cs | 0 .../Deploy/IImageSourceParser.cs | 0 .../Deploy/ILocalLinkParser.cs | 0 .../Deploy/IMacroParser.cs | 0 .../Deploy/IUniqueIdentifyingServiceConnector.cs | 0 .../Deploy/IValueConnector.cs | 4 ++-- src/Umbraco.Core/Umbraco.Core.csproj | 10 +--------- 9 files changed, 3 insertions(+), 11 deletions(-) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ArtifactSignature.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/Direction.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IDataTypeConfigurationConnector.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IImageSourceParser.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/ILocalLinkParser.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IMacroParser.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IUniqueIdentifyingServiceConnector.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Deploy/IValueConnector.cs (88%) diff --git a/src/Umbraco.Core/Deploy/ArtifactSignature.cs b/src/Umbraco.Abstractions/Deploy/ArtifactSignature.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactSignature.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactSignature.cs diff --git a/src/Umbraco.Core/Deploy/Direction.cs b/src/Umbraco.Abstractions/Deploy/Direction.cs similarity index 100% rename from src/Umbraco.Core/Deploy/Direction.cs rename to src/Umbraco.Abstractions/Deploy/Direction.cs diff --git a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs b/src/Umbraco.Abstractions/Deploy/IDataTypeConfigurationConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs rename to src/Umbraco.Abstractions/Deploy/IDataTypeConfigurationConnector.cs diff --git a/src/Umbraco.Core/Deploy/IImageSourceParser.cs b/src/Umbraco.Abstractions/Deploy/IImageSourceParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IImageSourceParser.cs rename to src/Umbraco.Abstractions/Deploy/IImageSourceParser.cs diff --git a/src/Umbraco.Core/Deploy/ILocalLinkParser.cs b/src/Umbraco.Abstractions/Deploy/ILocalLinkParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ILocalLinkParser.cs rename to src/Umbraco.Abstractions/Deploy/ILocalLinkParser.cs diff --git a/src/Umbraco.Core/Deploy/IMacroParser.cs b/src/Umbraco.Abstractions/Deploy/IMacroParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IMacroParser.cs rename to src/Umbraco.Abstractions/Deploy/IMacroParser.cs diff --git a/src/Umbraco.Core/Deploy/IUniqueIdentifyingServiceConnector.cs b/src/Umbraco.Abstractions/Deploy/IUniqueIdentifyingServiceConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IUniqueIdentifyingServiceConnector.cs rename to src/Umbraco.Abstractions/Deploy/IUniqueIdentifyingServiceConnector.cs diff --git a/src/Umbraco.Core/Deploy/IValueConnector.cs b/src/Umbraco.Abstractions/Deploy/IValueConnector.cs similarity index 88% rename from src/Umbraco.Core/Deploy/IValueConnector.cs rename to src/Umbraco.Abstractions/Deploy/IValueConnector.cs index 7d9f43b5fe..5329725663 100644 --- a/src/Umbraco.Core/Deploy/IValueConnector.cs +++ b/src/Umbraco.Abstractions/Deploy/IValueConnector.cs @@ -23,7 +23,7 @@ namespace Umbraco.Core.Deploy /// The value property type /// The content dependencies. /// The deploy property value. - string ToArtifact(object value, PropertyType propertyType, ICollection dependencies); + string ToArtifact(object value, IPropertyType propertyType, ICollection dependencies); /// /// Gets the content property value corresponding to a deploy property value. @@ -32,6 +32,6 @@ namespace Umbraco.Core.Deploy /// The value property type< /// The current content property value. /// The content property value. - object FromArtifact(string value, PropertyType propertyType, object currentValue); + object FromArtifact(string value, IPropertyType propertyType, object currentValue); } } diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index da5da1f88c..5bf1736612 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -151,6 +151,7 @@ + @@ -251,7 +252,6 @@ - @@ -376,14 +376,6 @@ - - - - - - - - From 7c1af34b3e36ef38943da096597b05f7bc5e545f Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Tue, 19 Nov 2019 08:58:00 +0000 Subject: [PATCH 09/16] Update src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js --- .../src/common/services/tinymce.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index f6c0f94edd..b0941bd5ad 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -544,7 +544,7 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s }, embed.preview); - // Only replace if actieElement is an Embed element. + // Only replace if activeElement is an Embed element. if (activeElement && activeElement.nodeName.toUpperCase() === "DIV" && activeElement.classList.contains("embeditem")){ activeElement.replaceWith(wrapper); // directly replaces the html node } else { From 9ab6c5fe7bc6152ab5818c2aa40c6d7ec2bc5526 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 11:44:34 +0100 Subject: [PATCH 10/16] Injecting RuntimeState instead of using Current --- src/Umbraco.Examine/Umbraco.Examine.csproj | 2 +- src/Umbraco.Examine/UmbracoContentIndex.cs | 4 +++- src/Umbraco.Examine/UmbracoExamineIndex.cs | 8 ++++++-- src/Umbraco.Examine/UmbracoIndexConfig.cs | 1 - src/Umbraco.Examine/UmbracoMemberIndex.cs | 4 +++- .../PublishedContent/PublishedMediaTests.cs | 14 +++++++------- src/Umbraco.Tests/TestHelpers/TestHelper.cs | 12 ++++++++++++ src/Umbraco.Tests/Testing/UmbracoTestBase.cs | 1 + src/Umbraco.Tests/UmbracoExamine/EventsTest.cs | 2 +- .../UmbracoExamine/ExamineBaseTest.cs | 5 +++++ .../UmbracoExamine/IndexInitializer.cs | 2 ++ src/Umbraco.Tests/UmbracoExamine/IndexTest.cs | 14 +++++++------- src/Umbraco.Tests/UmbracoExamine/SearchTests.cs | 2 +- src/Umbraco.Web/Search/UmbracoIndexesCreator.cs | 11 +++++++++-- 14 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Examine/Umbraco.Examine.csproj b/src/Umbraco.Examine/Umbraco.Examine.csproj index 3b77b20d42..ca2a9cec22 100644 --- a/src/Umbraco.Examine/Umbraco.Examine.csproj +++ b/src/Umbraco.Examine/Umbraco.Examine.csproj @@ -116,4 +116,4 @@ - + \ No newline at end of file diff --git a/src/Umbraco.Examine/UmbracoContentIndex.cs b/src/Umbraco.Examine/UmbracoContentIndex.cs index f160e56a41..33fd2d0ee7 100644 --- a/src/Umbraco.Examine/UmbracoContentIndex.cs +++ b/src/Umbraco.Examine/UmbracoContentIndex.cs @@ -34,6 +34,7 @@ namespace Umbraco.Examine /// /// /// + /// /// /// /// @@ -44,10 +45,11 @@ namespace Umbraco.Examine Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, ILocalizationService languageService, IContentValueSetValidator validator, IReadOnlyDictionary indexValueTypes = null) - : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, validator, indexValueTypes) + : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, runtimeState, validator, indexValueTypes) { if (validator == null) throw new ArgumentNullException(nameof(validator)); LanguageService = languageService ?? throw new ArgumentNullException(nameof(languageService)); diff --git a/src/Umbraco.Examine/UmbracoExamineIndex.cs b/src/Umbraco.Examine/UmbracoExamineIndex.cs index bfc6189a13..f7dfcf6375 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndex.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndex.cs @@ -9,7 +9,6 @@ using Umbraco.Core; using Examine; using Examine.LuceneEngine; using Lucene.Net.Store; -using Umbraco.Core.Composing; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -22,6 +21,7 @@ namespace Umbraco.Examine /// public abstract class UmbracoExamineIndex : LuceneIndex, IUmbracoIndex, IIndexDiagnostics { + private readonly IRuntimeState _runtimeState; // note // wrapping all operations that end up calling base.SafelyProcessQueueItems in a safe call // context because they will fork a thread/task/whatever which should *not* capture our @@ -50,6 +50,8 @@ namespace Umbraco.Examine /// /// /// + /// + /// /// /// protected UmbracoExamineIndex( @@ -59,10 +61,12 @@ namespace Umbraco.Examine Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null, IReadOnlyDictionary indexValueTypes = null) : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, validator, indexValueTypes) { + _runtimeState = runtimeState; ProfilingLogger = profilingLogger ?? throw new ArgumentNullException(nameof(profilingLogger)); //try to set the value of `LuceneIndexFolder` for diagnostic reasons @@ -116,7 +120,7 @@ namespace Umbraco.Examine { // only affects indexers that are config file based, if an index was created via code then // this has no effect, it is assumed the index would not be created if it could not be initialized - return _configBased == false || Current.RuntimeState.Level == RuntimeLevel.Run; + return _configBased == false || _runtimeState.Level == RuntimeLevel.Run; } /// diff --git a/src/Umbraco.Examine/UmbracoIndexConfig.cs b/src/Umbraco.Examine/UmbracoIndexConfig.cs index 7ad9c638d3..a840c730ea 100644 --- a/src/Umbraco.Examine/UmbracoIndexConfig.cs +++ b/src/Umbraco.Examine/UmbracoIndexConfig.cs @@ -1,6 +1,5 @@ using Examine; using Umbraco.Core.Services; -using Umbraco.Core.Services.Implement; namespace Umbraco.Examine { diff --git a/src/Umbraco.Examine/UmbracoMemberIndex.cs b/src/Umbraco.Examine/UmbracoMemberIndex.cs index 69071855e3..494c661062 100644 --- a/src/Umbraco.Examine/UmbracoMemberIndex.cs +++ b/src/Umbraco.Examine/UmbracoMemberIndex.cs @@ -2,6 +2,7 @@ using Examine; using Examine.LuceneEngine; using Lucene.Net.Analysis; +using Umbraco.Core; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -31,8 +32,9 @@ namespace Umbraco.Examine Analyzer analyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null) : - base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, validator) + base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, runtimeState, validator) { } diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index f2959c7e31..8122113516 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -120,7 +120,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -149,7 +149,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //include unpublished content since this uses the 'internal' indexer, it's up to the media cache to filter validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) @@ -197,7 +197,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -225,7 +225,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -253,7 +253,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -282,7 +282,7 @@ namespace Umbraco.Tests.PublishedContent using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -307,7 +307,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 9bcbf687d4..64794fcea9 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -12,12 +12,14 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; +using Umbraco.Core.Sync; using File = System.IO.File; namespace Umbraco.Tests.TestHelpers @@ -37,6 +39,16 @@ namespace Umbraco.Tests.TestHelpers { return GetConfigsFactory().Create(); } + public static IRuntimeState GetRuntimeState() + { + return new RuntimeState( + Mock.Of(), + Mock.Of(), + Mock.Of(), + new Lazy(), + new Lazy(), + TestHelper.GetUmbracoVersion()); + } public static IConfigsFactory GetConfigsFactory() { diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 85e57df451..44f19f4540 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -115,6 +115,7 @@ namespace Umbraco.Tests.Testing protected IMapperCollection Mappers => Factory.GetInstance(); protected UmbracoMapper Mapper => Factory.GetInstance(); + protected IRuntimeState RuntimeState => ComponentTests.MockRuntimeState(RuntimeLevel.Run); #endregion diff --git a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs index 2f4208ab2b..20e774c78a 100644 --- a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs @@ -19,7 +19,7 @@ namespace Umbraco.Tests.UmbracoExamine public void Events_Ignoring_Node() { using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //make parent id 999 so all are ignored validator: new ContentValueSetValidator(false, 999))) using (indexer.ProcessNonAsync()) diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs index 5be3fe2e7e..ce3e45c23f 100644 --- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs @@ -1,9 +1,12 @@ using System.IO; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Logging; using Umbraco.Core.Logging.Serilog; using Umbraco.Core.Strings; +using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.UmbracoExamine @@ -21,6 +24,8 @@ namespace Umbraco.Tests.UmbracoExamine private IProfilingLogger _profilingLogger; protected override IProfilingLogger ProfilingLogger => _profilingLogger; + + /// /// sets up resolvers before resolution is frozen /// diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs index 03178f85ac..6dc96da007 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs @@ -155,6 +155,7 @@ namespace Umbraco.Tests.UmbracoExamine public static UmbracoContentIndex GetUmbracoIndexer( IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, Directory luceneDir, Analyzer analyzer = null, ILocalizationService languageService = null, @@ -176,6 +177,7 @@ namespace Umbraco.Tests.UmbracoExamine analyzer, profilingLogger, ioHelper, + runtimeState, languageService, validator); diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs index e0a4f84486..f2d9ff626d 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs @@ -32,7 +32,7 @@ namespace Umbraco.Tests.UmbracoExamine var contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(Factory.GetInstance(), false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -125,7 +125,7 @@ namespace Umbraco.Tests.UmbracoExamine var mediaRebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -153,7 +153,7 @@ namespace Umbraco.Tests.UmbracoExamine using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) using (var searcher = ((LuceneSearcher)indexer.GetSearcher()).GetLuceneSearcher()) { @@ -190,7 +190,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 1116); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); @@ -233,7 +233,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 2222); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) + using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer1.ProcessNonAsync()) { var searcher = indexer1.GetSearcher(); @@ -276,7 +276,7 @@ namespace Umbraco.Tests.UmbracoExamine { var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -318,7 +318,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); diff --git a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs index 91a7eb9799..fb6fa4c0c1 100644 --- a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs +++ b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs @@ -58,7 +58,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(propertyEditors, contentService, ScopeProvider.SqlContext, true); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { indexer.CreateIndex(); diff --git a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs index feeea2a12e..aad8303f40 100644 --- a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs +++ b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs @@ -9,6 +9,7 @@ using Examine; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.IO; +using Umbraco.Web.PublishedCache.NuCache; namespace Umbraco.Web.Search { @@ -26,18 +27,21 @@ namespace Umbraco.Web.Search IPublicAccessService publicAccessService, IMemberService memberService, IUmbracoIndexConfig umbracoIndexConfig, - IIOHelper ioHelper) : base(typeFinder, ioHelper) + IIOHelper ioHelper, + IRuntimeState runtimeState) : base(typeFinder, ioHelper) { - IOHelper = ioHelper; ProfilingLogger = profilingLogger ?? throw new System.ArgumentNullException(nameof(profilingLogger)); LanguageService = languageService ?? throw new System.ArgumentNullException(nameof(languageService)); PublicAccessService = publicAccessService ?? throw new System.ArgumentNullException(nameof(publicAccessService)); MemberService = memberService ?? throw new System.ArgumentNullException(nameof(memberService)); UmbracoIndexConfig = umbracoIndexConfig; + IOHelper = ioHelper ?? throw new System.ArgumentNullException(nameof(ioHelper)); + RuntimeState = runtimeState ?? throw new System.ArgumentNullException(nameof(runtimeState)); } protected IProfilingLogger ProfilingLogger { get; } protected IIOHelper IOHelper { get; } + protected IRuntimeState RuntimeState { get; } protected ILocalizationService LanguageService { get; } protected IPublicAccessService PublicAccessService { get; } protected IMemberService MemberService { get; } @@ -66,6 +70,7 @@ namespace Umbraco.Web.Search new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, IOHelper, + RuntimeState, LanguageService, GetContentValueSetValidator() ); @@ -81,6 +86,7 @@ namespace Umbraco.Web.Search new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), ProfilingLogger, IOHelper, + RuntimeState, LanguageService, GetPublishedContentValueSetValidator()); return index; @@ -95,6 +101,7 @@ namespace Umbraco.Web.Search new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, IOHelper, + RuntimeState, GetMemberValueSetValidator() ); return index; From 00ce1f389aacdd29c7354c5ce2d988ddcae52bda Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 13:40:38 +0100 Subject: [PATCH 11/16] Simple moved files from core to abstractions --- .../ContentTypeAvailableCompositionsResult.cs | 0 .../ContentTypeAvailableCompositionsResults.cs | 0 .../Models/DataTypeExtensions.cs | 0 .../Services/ContentServiceExtensions.cs | 0 .../Services/ContentTypeServiceExtensions.cs | 0 .../Services/DateTypeServiceExtensions.cs | 0 .../Services/IContentTypeBaseServiceProvider.cs | 0 .../Services/IContentTypeService.cs | 0 .../Services/IContentTypeServiceBase.cs | 0 .../Services/IDataTypeService.cs | 0 .../Services/IEntityXmlSerializer.cs | 0 .../Services/IMediaService.cs | 3 --- .../Services/IMediaTypeService.cs | 0 .../Services/IMemberTypeService.cs | 0 .../Services/MediaServiceExtensions.cs | 0 src/Umbraco.Core/Umbraco.Core.csproj | 16 +--------------- 16 files changed, 1 insertion(+), 18 deletions(-) rename src/{Umbraco.Core => Umbraco.Abstractions}/Models/ContentTypeAvailableCompositionsResult.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Models/ContentTypeAvailableCompositionsResults.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Models/DataTypeExtensions.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/ContentServiceExtensions.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/ContentTypeServiceExtensions.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/DateTypeServiceExtensions.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IContentTypeBaseServiceProvider.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IContentTypeService.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IContentTypeServiceBase.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IDataTypeService.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IEntityXmlSerializer.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IMediaService.cs (99%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IMediaTypeService.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/IMemberTypeService.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Services/MediaServiceExtensions.cs (100%) diff --git a/src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResult.cs b/src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResult.cs similarity index 100% rename from src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResult.cs rename to src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResult.cs diff --git a/src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResults.cs b/src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResults.cs similarity index 100% rename from src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResults.cs rename to src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResults.cs diff --git a/src/Umbraco.Core/Models/DataTypeExtensions.cs b/src/Umbraco.Abstractions/Models/DataTypeExtensions.cs similarity index 100% rename from src/Umbraco.Core/Models/DataTypeExtensions.cs rename to src/Umbraco.Abstractions/Models/DataTypeExtensions.cs diff --git a/src/Umbraco.Core/Services/ContentServiceExtensions.cs b/src/Umbraco.Abstractions/Services/ContentServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/ContentServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/ContentServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/ContentTypeServiceExtensions.cs b/src/Umbraco.Abstractions/Services/ContentTypeServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/ContentTypeServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/ContentTypeServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/DateTypeServiceExtensions.cs b/src/Umbraco.Abstractions/Services/DateTypeServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/DateTypeServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/DateTypeServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/IContentTypeBaseServiceProvider.cs b/src/Umbraco.Abstractions/Services/IContentTypeBaseServiceProvider.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeBaseServiceProvider.cs rename to src/Umbraco.Abstractions/Services/IContentTypeBaseServiceProvider.cs diff --git a/src/Umbraco.Core/Services/IContentTypeService.cs b/src/Umbraco.Abstractions/Services/IContentTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeService.cs rename to src/Umbraco.Abstractions/Services/IContentTypeService.cs diff --git a/src/Umbraco.Core/Services/IContentTypeServiceBase.cs b/src/Umbraco.Abstractions/Services/IContentTypeServiceBase.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeServiceBase.cs rename to src/Umbraco.Abstractions/Services/IContentTypeServiceBase.cs diff --git a/src/Umbraco.Core/Services/IDataTypeService.cs b/src/Umbraco.Abstractions/Services/IDataTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IDataTypeService.cs rename to src/Umbraco.Abstractions/Services/IDataTypeService.cs diff --git a/src/Umbraco.Core/Services/IEntityXmlSerializer.cs b/src/Umbraco.Abstractions/Services/IEntityXmlSerializer.cs similarity index 100% rename from src/Umbraco.Core/Services/IEntityXmlSerializer.cs rename to src/Umbraco.Abstractions/Services/IEntityXmlSerializer.cs diff --git a/src/Umbraco.Core/Services/IMediaService.cs b/src/Umbraco.Abstractions/Services/IMediaService.cs similarity index 99% rename from src/Umbraco.Core/Services/IMediaService.cs rename to src/Umbraco.Abstractions/Services/IMediaService.cs index 48345bc88c..6de2765644 100644 --- a/src/Umbraco.Core/Services/IMediaService.cs +++ b/src/Umbraco.Abstractions/Services/IMediaService.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Xml.Linq; -using Umbraco.Core.Configuration; using System.IO; using Umbraco.Core.Models; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Querying; namespace Umbraco.Core.Services diff --git a/src/Umbraco.Core/Services/IMediaTypeService.cs b/src/Umbraco.Abstractions/Services/IMediaTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IMediaTypeService.cs rename to src/Umbraco.Abstractions/Services/IMediaTypeService.cs diff --git a/src/Umbraco.Core/Services/IMemberTypeService.cs b/src/Umbraco.Abstractions/Services/IMemberTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IMemberTypeService.cs rename to src/Umbraco.Abstractions/Services/IMemberTypeService.cs diff --git a/src/Umbraco.Core/Services/MediaServiceExtensions.cs b/src/Umbraco.Abstractions/Services/MediaServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/MediaServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/MediaServiceExtensions.cs diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 8b0732d3eb..61a657732d 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -238,11 +238,10 @@ - + - @@ -314,7 +313,6 @@ - @@ -410,8 +408,6 @@ - - @@ -847,17 +843,13 @@ - - - - @@ -865,13 +857,7 @@ - - - - - - From 97ade695a7c089911d5a2ea82678df3a60d25954 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 19 Nov 2019 14:12:11 +0100 Subject: [PATCH 12/16] Move more code without lot of changes --- .../ContentVariationExtensions.cs | 2 +- .../Models/ContentBase.cs | 8 +-- .../Models/ContentExtensions.cs | 19 ++++++ .../Models/ContentRepositoryExtensions.cs | 58 +++++++++++++++++++ .../Models/SimpleContentType.cs | 0 .../PublishedModelFactoryExtensions.cs | 0 src/Umbraco.Core/ContentExtensions.cs | 8 --- .../Models/ContentRepositoryExtensions.cs | 50 +--------------- src/Umbraco.Core/Models/Media.cs | 4 +- src/Umbraco.Core/Umbraco.Core.csproj | 8 +-- 10 files changed, 89 insertions(+), 68 deletions(-) rename src/{Umbraco.Core => Umbraco.Abstractions}/ContentVariationExtensions.cs (98%) rename src/{Umbraco.Core => Umbraco.Abstractions}/Models/ContentBase.cs (98%) create mode 100644 src/Umbraco.Abstractions/Models/ContentExtensions.cs create mode 100644 src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs rename src/{Umbraco.Core => Umbraco.Abstractions}/Models/SimpleContentType.cs (100%) rename src/{Umbraco.Core => Umbraco.Abstractions}/PublishedModelFactoryExtensions.cs (100%) diff --git a/src/Umbraco.Core/ContentVariationExtensions.cs b/src/Umbraco.Abstractions/ContentVariationExtensions.cs similarity index 98% rename from src/Umbraco.Core/ContentVariationExtensions.cs rename to src/Umbraco.Abstractions/ContentVariationExtensions.cs index bdcf300f3f..f3e8943172 100644 --- a/src/Umbraco.Core/ContentVariationExtensions.cs +++ b/src/Umbraco.Abstractions/ContentVariationExtensions.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core /// /// Determines whether the property type is invariant. /// - public static bool VariesByNothing(this PropertyType propertyType) => propertyType.Variations.VariesByNothing(); + public static bool VariesByNothing(this IPropertyType propertyType) => propertyType.Variations.VariesByNothing(); /// /// Determines whether the property type varies by culture. diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Abstractions/Models/ContentBase.cs similarity index 98% rename from src/Umbraco.Core/Models/ContentBase.cs rename to src/Umbraco.Abstractions/Models/ContentBase.cs index e5adddad72..59693efe53 100644 --- a/src/Umbraco.Core/Models/ContentBase.cs +++ b/src/Umbraco.Abstractions/Models/ContentBase.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, int parentId, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + protected ContentBase(string name, int parentId, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) : this(name, contentType, properties, culture) { if (parentId == 0) throw new ArgumentOutOfRangeException(nameof(parentId)); @@ -54,14 +54,14 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) : this(name, contentType, properties, culture) { if (parent == null) throw new ArgumentNullException(nameof(parent)); SetParent(parent); } - private ContentBase(string name, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + private ContentBase(string name, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) { ContentType = contentType?.ToSimple() ?? throw new ArgumentNullException(nameof(contentType)); @@ -84,7 +84,7 @@ namespace Umbraco.Core.Models [IgnoreDataMember] public ISimpleContentType ContentType { get; private set; } - internal void ChangeContentType(ISimpleContentType contentType) + public void ChangeContentType(ISimpleContentType contentType) { ContentType = contentType; ContentTypeId = contentType.Id; diff --git a/src/Umbraco.Abstractions/Models/ContentExtensions.cs b/src/Umbraco.Abstractions/Models/ContentExtensions.cs new file mode 100644 index 0000000000..5fd5e576b8 --- /dev/null +++ b/src/Umbraco.Abstractions/Models/ContentExtensions.cs @@ -0,0 +1,19 @@ +using System.Linq; + +namespace Umbraco.Core.Models +{ + public static class ContentExtensions + { + public static bool IsAnyUserPropertyDirty(this IContentBase entity) + { + return entity.Properties.Any(x => x.IsDirty()); + } + + public static bool WasAnyUserPropertyDirty(this IContentBase entity) + { + return entity.Properties.Any(x => x.WasDirty()); + } + + + } +} diff --git a/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs b/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs new file mode 100644 index 0000000000..8bc41e1190 --- /dev/null +++ b/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs @@ -0,0 +1,58 @@ +using System; +using System.Linq; +using Umbraco.Core.Exceptions; + +namespace Umbraco.Core.Models +{ + public static class ContentRepositoryExtensions + { + public static void SetCultureInfo(this IContentBase content, string culture, string name, DateTime date) + { + if (name.IsNullOrWhiteSpace()) + throw new ArgumentNullOrEmptyException(nameof(name)); + + if (culture.IsNullOrWhiteSpace()) + throw new ArgumentNullOrEmptyException(nameof(culture)); + + content.CultureInfos.AddOrUpdate(culture, name, date); + } + + /// + /// Updates a culture date, if the culture exists. + /// + public static void TouchCulture(this IContentBase content, string culture) + { + if (culture.IsNullOrWhiteSpace()) return; + if (!content.CultureInfos.TryGetValue(culture, out var infos)) return; + content.CultureInfos.AddOrUpdate(culture, infos.Name, DateTime.Now); + } + + /// + /// Used to synchronize all culture dates to the same date if they've been modified + /// + /// + /// + /// + /// This is so that in an operation where (for example) 2 languages are updates like french and english, it is possible that + /// these dates assigned to them differ by a couple of Ticks, but we need to ensure they are persisted at the exact same time. + /// + public static void AdjustDates(this IContent content, DateTime date) + { + foreach (var culture in content.PublishedCultures.ToList()) + { + if (!content.PublishCultureInfos.TryGetValue(culture, out var publishInfos)) + continue; + + // if it's not dirty, it means it hasn't changed so there's nothing to adjust + if (!publishInfos.IsDirty()) + continue; + + content.PublishCultureInfos.AddOrUpdate(culture, publishInfos.Name, date); + + if (content.CultureInfos.TryGetValue(culture, out var infos)) + SetCultureInfo(content, culture, infos.Name, date); + } + } + } + +} diff --git a/src/Umbraco.Core/Models/SimpleContentType.cs b/src/Umbraco.Abstractions/Models/SimpleContentType.cs similarity index 100% rename from src/Umbraco.Core/Models/SimpleContentType.cs rename to src/Umbraco.Abstractions/Models/SimpleContentType.cs diff --git a/src/Umbraco.Core/PublishedModelFactoryExtensions.cs b/src/Umbraco.Abstractions/PublishedModelFactoryExtensions.cs similarity index 100% rename from src/Umbraco.Core/PublishedModelFactoryExtensions.cs rename to src/Umbraco.Abstractions/PublishedModelFactoryExtensions.cs diff --git a/src/Umbraco.Core/ContentExtensions.cs b/src/Umbraco.Core/ContentExtensions.cs index 07fc2757ea..f9d06b70a3 100644 --- a/src/Umbraco.Core/ContentExtensions.cs +++ b/src/Umbraco.Core/ContentExtensions.cs @@ -328,15 +328,7 @@ namespace Umbraco.Core return entity.Properties.Where(x => x.IsDirty()).Select(x => x.Alias); } - public static bool IsAnyUserPropertyDirty(this IContentBase entity) - { - return entity.Properties.Any(x => x.IsDirty()); - } - public static bool WasAnyUserPropertyDirty(this IContentBase entity) - { - return entity.Properties.Any(x => x.WasDirty()); - } #endregion } diff --git a/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs b/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs index f9efc60142..db557e1905 100644 --- a/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs +++ b/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs @@ -88,7 +88,7 @@ namespace Umbraco.Core.Models { content.CultureInfos.Clear(); content.CultureInfos = null; - } + } if (culture == null || culture == "*") content.Name = other.Name; @@ -112,32 +112,7 @@ namespace Umbraco.Core.Models content.PublishCultureInfos.AddOrUpdate(culture, name, date); } - /// - /// Used to synchronize all culture dates to the same date if they've been modified - /// - /// - /// - /// - /// This is so that in an operation where (for example) 2 languages are updates like french and english, it is possible that - /// these dates assigned to them differ by a couple of Ticks, but we need to ensure they are persisted at the exact same time. - /// - public static void AdjustDates(this IContent content, DateTime date) - { - foreach (var culture in content.PublishedCultures.ToList()) - { - if (!content.PublishCultureInfos.TryGetValue(culture, out var publishInfos)) - continue; - // if it's not dirty, it means it hasn't changed so there's nothing to adjust - if (!publishInfos.IsDirty()) - continue; - - content.PublishCultureInfos.AddOrUpdate(culture, publishInfos.Name, date); - - if (content.CultureInfos.TryGetValue(culture, out var infos)) - SetCultureInfo(content, culture, infos.Name, date); - } - } // sets the edited cultures on the content public static void SetCultureEdited(this IContent content, IEnumerable cultures) @@ -151,17 +126,6 @@ namespace Umbraco.Core.Models } } - public static void SetCultureInfo(this IContentBase content, string culture, string name, DateTime date) - { - if (name.IsNullOrWhiteSpace()) - throw new ArgumentNullOrEmptyException(nameof(name)); - - if (culture.IsNullOrWhiteSpace()) - throw new ArgumentNullOrEmptyException(nameof(culture)); - - content.CultureInfos.AddOrUpdate(culture, name, date); - } - /// /// Sets the publishing values for names and properties. /// @@ -249,7 +213,7 @@ namespace Umbraco.Core.Models // one single culture keepProcessing = content.ClearPublishInfo(culture); } - + if (keepProcessing) { @@ -288,14 +252,6 @@ namespace Umbraco.Core.Models return removed; } - /// - /// Updates a culture date, if the culture exists. - /// - public static void TouchCulture(this IContentBase content, string culture) - { - if (culture.IsNullOrWhiteSpace()) return; - if (!content.CultureInfos.TryGetValue(culture, out var infos)) return; - content.CultureInfos.AddOrUpdate(culture, infos.Name, DateTime.Now); - } + } } diff --git a/src/Umbraco.Core/Models/Media.cs b/src/Umbraco.Core/Models/Media.cs index 002611c09c..452bb615d1 100644 --- a/src/Umbraco.Core/Models/Media.cs +++ b/src/Umbraco.Core/Models/Media.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Models /// Parent object /// MediaType for the current Media object /// Collection of properties - public Media(string name, IMedia parent, IMediaType contentType, PropertyCollection properties) + public Media(string name, IMedia parent, IMediaType contentType, IPropertyCollection properties) : base(name, parent, contentType, properties) { } @@ -48,7 +48,7 @@ namespace Umbraco.Core.Models /// Id of the Parent IMedia /// MediaType for the current Media object /// Collection of properties - public Media(string name, int parentId, IMediaType contentType, PropertyCollection properties) + public Media(string name, int parentId, IMediaType contentType, IPropertyCollection properties) : base(name, parentId, contentType, properties) { } diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 61a657732d..10dc253789 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -203,6 +203,7 @@ + @@ -222,7 +223,6 @@ - @@ -234,7 +234,7 @@ - + @@ -250,7 +250,6 @@ - @@ -315,7 +314,6 @@ - @@ -405,7 +403,6 @@ - @@ -414,7 +411,6 @@ - From 015d5882184b0ae43d9745cc42dc54c614941b3e Mon Sep 17 00:00:00 2001 From: Carole Rennie Logan Date: Tue, 19 Nov 2019 22:37:14 +0000 Subject: [PATCH 13/16] First comimt changing IUmbracoVersion --- .../CompositionExtensions/Services.cs | 2 +- .../Packaging/PackagesRepository.cs | 13 +++++---- .../CreatedPackagesRepositoryTests.cs | 1 + src/Umbraco.Tests/TestHelpers/TestObjects.cs | 5 ++-- src/Umbraco.Web.UI.Client/package-lock.json | 28 ++++++++++++++----- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs index 4ed2fb5b2e..c9fa8d1304 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs @@ -85,7 +85,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions /// private static PackagesRepository CreatePackageRepository(IFactory factory, string packageRepoFileName) => new PackagesRepository( - factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), + factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), packageRepoFileName); private static LocalizedTextServiceFileSources SourcesFactory(IFactory container) diff --git a/src/Umbraco.Core/Packaging/PackagesRepository.cs b/src/Umbraco.Core/Packaging/PackagesRepository.cs index 26f68c6262..50a8ba6769 100644 --- a/src/Umbraco.Core/Packaging/PackagesRepository.cs +++ b/src/Umbraco.Core/Packaging/PackagesRepository.cs @@ -35,6 +35,7 @@ namespace Umbraco.Core.Packaging private readonly string _packagesFolderPath; private readonly string _tempFolderPath; private readonly PackageDefinitionXmlParser _parser; + private readonly IUmbracoVersion _umbracoVersion; /// /// Constructor @@ -59,6 +60,7 @@ namespace Umbraco.Core.Packaging ILocalizationService languageService, IIOHelper ioHelper, IEntityXmlSerializer serializer, ILogger logger, + IUmbracoVersion umbracoVersion, string packageRepositoryFileName, string tempFolderPath = null, string packagesFolderPath = null, string mediaFolderPath = null) { @@ -79,6 +81,7 @@ namespace Umbraco.Core.Packaging _mediaFolderPath = mediaFolderPath ?? Current.Configs.Global().UmbracoMediaPath + "/created-packages"; _parser = new PackageDefinitionXmlParser(logger); + _umbracoVersion = umbracoVersion; } private string CreatedPackagesFile => _packagesFolderPath.EnsureEndsWith('/') + _packageRepositoryFileName; @@ -169,7 +172,7 @@ namespace Umbraco.Core.Packaging var compiledPackageXml = CreateCompiledPackageXml(out var root, out var filesXml); //Info section - root.Add(GetPackageInfoXml(definition)); + root.Add(GetPackageInfoXml(definition, _umbracoVersion)); PackageDocumentsAndTags(definition, root); PackageDocumentTypes(definition, root); @@ -550,7 +553,7 @@ namespace Umbraco.Core.Packaging dtl.Add(dt); } - private static XElement GetPackageInfoXml(PackageDefinition definition) + private static XElement GetPackageInfoXml(PackageDefinition definition, IUmbracoVersion umbracoVersion) { var info = new XElement("info"); @@ -569,9 +572,9 @@ namespace Umbraco.Core.Packaging var requirements = new XElement("requirements"); - requirements.Add(new XElement("major", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Major.ToInvariantString() : definition.UmbracoVersion.Major.ToInvariantString())); - requirements.Add(new XElement("minor", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Minor.ToInvariantString() : definition.UmbracoVersion.Minor.ToInvariantString())); - requirements.Add(new XElement("patch", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Patch.ToInvariantString() : definition.UmbracoVersion.Build.ToInvariantString())); + requirements.Add(new XElement("major", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Major.ToInvariantString() : definition.UmbracoVersion.Major.ToInvariantString())); + requirements.Add(new XElement("minor", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Minor.ToInvariantString() : definition.UmbracoVersion.Minor.ToInvariantString())); + requirements.Add(new XElement("patch", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Patch.ToInvariantString() : definition.UmbracoVersion.Build.ToInvariantString())); if (definition.UmbracoVersion != null) requirements.Add(new XAttribute("type", RequirementsType.Strict.ToString())); diff --git a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs index f2b97b521e..b101f9f7fe 100644 --- a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs +++ b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs @@ -42,6 +42,7 @@ namespace Umbraco.Tests.Packaging ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService, IOHelper, Factory.GetInstance(), Logger, + UmbracoVersion, "createdPackages.config", //temp paths tempFolderPath: "~/" + _testBaseFolder + "/temp", diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index d06951d3be..5b7ab0504d 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -99,6 +99,7 @@ namespace Umbraco.Tests.TestHelpers IEventMessagesFactory eventMessagesFactory, UrlSegmentProviderCollection urlSegmentProviders, TypeLoader typeLoader, + IUmbracoVersion umbracoVersion, IFactory factory = null) { if (scopeProvider == null) throw new ArgumentNullException(nameof(scopeProvider)); @@ -176,9 +177,9 @@ namespace Umbraco.Tests.TestHelpers return new PackagingService( auditService.Value, new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, - new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "createdPackages.config"), + new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, umbracoVersion, "createdPackages.config"), new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, - new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "installedPackages.config"), + new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, umbracoVersion, "installedPackages.config"), new PackageInstallation( new PackageDataInstallation(logger, fileService.Value, macroService.Value, localizationService.Value, dataTypeService.Value, entityService.Value, contentTypeService.Value, contentService.Value, propertyEditorCollection, scopeProvider), new PackageFileInstallation(compiledPackageXmlParser, ioHelper, new ProfilingLogger(logger, new TestProfiler())), diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 2652368819..072e2277b7 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -5309,12 +5309,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5329,17 +5331,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5456,7 +5461,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5468,6 +5474,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5482,6 +5489,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5489,12 +5497,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5513,6 +5523,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5593,7 +5604,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5605,6 +5617,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5726,6 +5739,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", From b69d14da5e330f0695519746556d9c05f7593328 Mon Sep 17 00:00:00 2001 From: Carole Rennie Logan Date: Tue, 19 Nov 2019 23:15:11 +0000 Subject: [PATCH 14/16] IUmbracoVersion updates --- src/Umbraco.Web/Editors/BackOfficeController.cs | 5 ++--- .../Editors/BackOfficeServerVariables.cs | 11 +++++------ src/Umbraco.Web/Editors/DashboardController.cs | 6 ++++-- .../Editors/PackageInstallController.cs | 14 +++++++++----- src/Umbraco.Web/Editors/UpdateCheckController.cs | 15 +++++++++++---- src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs | 4 ++-- .../Install/Controllers/InstallController.cs | 8 ++++---- .../Install/InstallSteps/UpgradeStep.cs | 10 ++++++++-- 8 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 1276cc41d5..08cb8fa4d5 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Configuration; -using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Manifest; using Umbraco.Core.Models.Identity; @@ -44,6 +42,7 @@ namespace Umbraco.Web.Editors private readonly IRuntimeState _runtimeState; private BackOfficeUserManager _userManager; private BackOfficeSignInManager _signInManager; + private IUmbracoVersion _umbracoVersion; public BackOfficeController(IManifestParser manifestParser, UmbracoFeatures features, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper) : base(globalSettings, umbracoContextAccessor, services, appCaches, profilingLogger, umbracoHelper) @@ -258,7 +257,7 @@ namespace Umbraco.Web.Editors [MinifyJavaScriptResult(Order = 1)] public JavaScriptResult ServerVariables() { - var serverVars = new BackOfficeServerVariables(Url, _runtimeState, _features, GlobalSettings); + var serverVars = new BackOfficeServerVariables(Url, _runtimeState, _features, GlobalSettings, _umbracoVersion); //cache the result if debugging is disabled var result = HttpContext.IsDebuggingEnabled diff --git a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs index 1b963f1a62..a15b5bf63b 100644 --- a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs +++ b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs @@ -13,9 +13,6 @@ using Microsoft.Owin.Security; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.IO; -using Umbraco.Web.Controllers; using Umbraco.Web.Features; using Umbraco.Web.HealthCheck; using Umbraco.Web.Models.ContentEditing; @@ -38,8 +35,9 @@ namespace Umbraco.Web.Editors private readonly IGlobalSettings _globalSettings; private readonly HttpContextBase _httpContext; private readonly IOwinContext _owinContext; + private readonly IUmbracoVersion _umbracoVersion; - internal BackOfficeServerVariables(UrlHelper urlHelper, IRuntimeState runtimeState, UmbracoFeatures features, IGlobalSettings globalSettings) + internal BackOfficeServerVariables(UrlHelper urlHelper, IRuntimeState runtimeState, UmbracoFeatures features, IGlobalSettings globalSettings, IUmbracoVersion umbracoVersion) { _urlHelper = urlHelper; _runtimeState = runtimeState; @@ -47,6 +45,7 @@ namespace Umbraco.Web.Editors _globalSettings = globalSettings; _httpContext = _urlHelper.RequestContext.HttpContext; _owinContext = _httpContext.GetOwinContext(); + _umbracoVersion = umbracoVersion; } /// @@ -442,10 +441,10 @@ namespace Umbraco.Web.Editors // add versions - see UmbracoVersion for details & differences // the complete application version (eg "8.1.2-alpha.25") - { "version", Current.UmbracoVersion.SemanticVersion.ToSemanticString() }, + { "version", _umbracoVersion.SemanticVersion.ToSemanticString() }, // the assembly version (eg "8.0.0") - { "assemblyVersion", Current.UmbracoVersion.AssemblyVersion.ToString() } + { "assemblyVersion", _umbracoVersion.AssemblyVersion.ToString() } }; var version = _runtimeState.SemanticVersion.ToSemanticString(); diff --git a/src/Umbraco.Web/Editors/DashboardController.cs b/src/Umbraco.Web/Editors/DashboardController.cs index cfa92003bd..70b21e4a97 100644 --- a/src/Umbraco.Web/Editors/DashboardController.cs +++ b/src/Umbraco.Web/Editors/DashboardController.cs @@ -32,14 +32,16 @@ namespace Umbraco.Web.Editors public class DashboardController : UmbracoApiController { private readonly IDashboardService _dashboardService; + private readonly IUmbracoVersion _umbracoVersion; /// /// Initializes a new instance of the with all its dependencies. /// - public DashboardController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, IDashboardService dashboardService, UmbracoHelper umbracoHelper) + public DashboardController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, IDashboardService dashboardService, UmbracoHelper umbracoHelper, IUmbracoVersion umbracoVersion) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper) { _dashboardService = dashboardService; + _umbracoVersion = umbracoVersion; } //we have just one instance of HttpClient shared for the entire application @@ -52,7 +54,7 @@ namespace Umbraco.Web.Editors var user = Security.CurrentUser; var allowedSections = string.Join(",", user.AllowedSections); var language = user.Language; - var version = Current.UmbracoVersion.SemanticVersion.ToSemanticString(); + var version = _umbracoVersion.SemanticVersion.ToSemanticString(); var url = string.Format(baseUrl + "{0}?section={0}&allowed={1}&lang={2}&version={3}", section, allowedSections, language, version); var key = "umbraco-dynamic-dashboard-" + language + allowedSections.Replace(",", "-") + section; diff --git a/src/Umbraco.Web/Editors/PackageInstallController.cs b/src/Umbraco.Web/Editors/PackageInstallController.cs index 932a86c082..a6e9034739 100644 --- a/src/Umbraco.Web/Editors/PackageInstallController.cs +++ b/src/Umbraco.Web/Editors/PackageInstallController.cs @@ -35,11 +35,15 @@ namespace Umbraco.Web.Editors [UmbracoApplicationAuthorize(Core.Constants.Applications.Packages)] public class PackageInstallController : UmbracoAuthorizedJsonController { + + private readonly IUmbracoVersion _umbracoVersion; public PackageInstallController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, - IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper) + IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IUmbracoVersion umbracoVersion) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper) { + _umbracoVersion = umbracoVersion; + } /// @@ -118,7 +122,7 @@ namespace Umbraco.Web.Editors if (ins.UmbracoVersionRequirementsType == RequirementsType.Strict) { var packageMinVersion = ins.UmbracoVersion; - if (Current.UmbracoVersion.Current < packageMinVersion) + if (_umbracoVersion.Current < packageMinVersion) { model.IsCompatible = false; } @@ -215,7 +219,7 @@ namespace Umbraco.Web.Editors { var packageFile = await Services.PackagingService.FetchPackageFileAsync( Guid.Parse(packageGuid), - Current.UmbracoVersion.Current, + _umbracoVersion.Current, Security.GetUserId().ResultOr(0)); fileName = packageFile.Name; @@ -259,7 +263,7 @@ namespace Umbraco.Web.Editors if (packageInfo.UmbracoVersionRequirementsType == RequirementsType.Strict) { var packageMinVersion = packageInfo.UmbracoVersion; - if (Current.UmbracoVersion.Current < packageMinVersion) + if (_umbracoVersion.Current < packageMinVersion) throw new HttpResponseException(Request.CreateNotificationValidationErrorResponse( Services.TextService.Localize("packager/targetVersionMismatch", new[] {packageMinVersion.ToString()}))); } @@ -366,7 +370,7 @@ namespace Umbraco.Web.Editors //bump cdf to be safe var clientDependencyConfig = new ClientDependencyConfiguration(Logger); var clientDependencyUpdated = clientDependencyConfig.UpdateVersionNumber( - Current.UmbracoVersion.SemanticVersion, DateTime.UtcNow, "yyyyMMdd"); + _umbracoVersion.SemanticVersion, DateTime.UtcNow, "yyyyMMdd"); var redirectUrl = ""; if (!packageInfo.PackageView.IsNullOrWhiteSpace()) diff --git a/src/Umbraco.Web/Editors/UpdateCheckController.cs b/src/Umbraco.Web/Editors/UpdateCheckController.cs index b3f8676821..2b05008adf 100644 --- a/src/Umbraco.Web/Editors/UpdateCheckController.cs +++ b/src/Umbraco.Web/Editors/UpdateCheckController.cs @@ -15,6 +15,13 @@ namespace Umbraco.Web.Editors [PluginController("UmbracoApi")] public class UpdateCheckController : UmbracoAuthorizedJsonController { + private readonly IUmbracoVersion _umbracoVersion; + + public UpdateCheckController (IUmbracoVersion umbracoVersion) + { + _umbracoVersion = umbracoVersion; + } + [UpdateCheckResponseFilter] public UpgradeCheckResponse GetCheck() { @@ -26,10 +33,10 @@ namespace Umbraco.Web.Editors { var check = new org.umbraco.update.CheckForUpgrade { Timeout = 2000 }; - var result = check.CheckUpgrade(Current.UmbracoVersion.Current.Major, - Current.UmbracoVersion.Current.Minor, - Current.UmbracoVersion.Current.Build, - Current.UmbracoVersion.Comment); + var result = check.CheckUpgrade(_umbracoVersion.Current.Major, + _umbracoVersion.Current.Minor, + _umbracoVersion.Current.Build, + _umbracoVersion.Comment); return new UpgradeCheckResponse(result.UpgradeType.ToString(), result.Comment, result.UpgradeUrl); } diff --git a/src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs b/src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs index 1d518fa1d3..d9c2e2b881 100644 --- a/src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs @@ -36,9 +36,9 @@ namespace Umbraco.Web /// These are the bare minimal server variables that are required for the application to start without being authenticated, /// we will load the rest of the server vars after the user is authenticated. /// - public static IHtmlString BareMinimumServerVariablesScript(this HtmlHelper html, UrlHelper uri, string externalLoginsUrl, UmbracoFeatures features, IGlobalSettings globalSettings) + public static IHtmlString BareMinimumServerVariablesScript(this HtmlHelper html, UrlHelper uri, string externalLoginsUrl, UmbracoFeatures features, IGlobalSettings globalSettings, IUmbracoVersion umbracoVersion) { - var serverVars = new BackOfficeServerVariables(uri, Current.RuntimeState, features, globalSettings); + var serverVars = new BackOfficeServerVariables(uri, Current.RuntimeState, features, globalSettings, umbracoVersion); var minVars = serverVars.BareMinimumServerVariables(); var str = @"