diff --git a/src/Umbraco.Core/IO/SystemDirectories.cs b/src/Umbraco.Core/IO/SystemDirectories.cs index 2dfad2d103..9c815504c7 100644 --- a/src/Umbraco.Core/IO/SystemDirectories.cs +++ b/src/Umbraco.Core/IO/SystemDirectories.cs @@ -96,7 +96,23 @@ namespace Umbraco.Core.IO } } - + public static string PartialViews + { + get + { + return MvcViews + "/Partials/"; + } + } + + public static string MacroPartials + { + get + { + return MvcViews + "/MacroPartials/"; + + } + } + public static string Media { get diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IPartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IPartialViewRepository.cs index 3fbcdd3283..7c8391a77a 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IPartialViewRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IPartialViewRepository.cs @@ -1,4 +1,5 @@ -using Umbraco.Core.Models; +using System.IO; +using Umbraco.Core.Models; namespace Umbraco.Core.Persistence.Repositories { @@ -7,5 +8,7 @@ namespace Umbraco.Core.Persistence.Repositories void AddFolder(string folderPath); void DeleteFolder(string folderPath); bool ValidatePartialView(IPartialView partialView); + Stream GetFileContentStream(string filepath); + void SetFileContent(string filepath, Stream content); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/PartialViewMacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/PartialViewMacroRepository.cs index e055c3dd93..277e0daf30 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PartialViewMacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PartialViewMacroRepository.cs @@ -1,5 +1,4 @@ -using System.Threading; -using Umbraco.Core.IO; +using Umbraco.Core.IO; using Umbraco.Core.Models; using Umbraco.Core.Persistence.UnitOfWork; @@ -8,7 +7,7 @@ namespace Umbraco.Core.Persistence.Repositories internal class PartialViewMacroRepository : PartialViewRepository { public PartialViewMacroRepository(IUnitOfWork work) - : this(work, new PhysicalFileSystem(SystemDirectories.MvcViews + "/MacroPartials/")) + : this(work, new PhysicalFileSystem(SystemDirectories.MacroPartials)) { } diff --git a/src/Umbraco.Core/Persistence/Repositories/PartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/PartialViewRepository.cs index e9352a945f..6631adc13b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PartialViewRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PartialViewRepository.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; @@ -12,7 +11,7 @@ namespace Umbraco.Core.Persistence.Repositories internal class PartialViewRepository : FileRepository, IPartialViewRepository { public PartialViewRepository(IUnitOfWork work) - : this(work, new PhysicalFileSystem(SystemDirectories.MvcViews + "/Partials/")) + : this(work, new PhysicalFileSystem(SystemDirectories.PartialViews)) { } @@ -113,6 +112,25 @@ namespace Umbraco.Core.Persistence.Repositories return isValidPath && isValidExtension; } + public Stream GetFileContentStream(string filepath) + { + if (FileSystem.FileExists(filepath) == false) return null; + + try + { + return FileSystem.OpenFile(filepath); + } + catch + { + return null; // deal with race conds + } + } + + public void SetFileContent(string filepath, Stream content) + { + FileSystem.AddFile(filepath, content, true); + } + /// /// Gets a stream that is used to write to the file /// diff --git a/src/Umbraco.Core/Services/FileService.cs b/src/Umbraco.Core/Services/FileService.cs index 583d26294a..326d450c93 100644 --- a/src/Umbraco.Core/Services/FileService.cs +++ b/src/Umbraco.Core/Services/FileService.cs @@ -3,12 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; -using System.Runtime.Remoting.Messaging; using System.Text.RegularExpressions; -using System.Web; -using Umbraco.Core.Auditing; -using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Events; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -574,6 +569,8 @@ namespace Umbraco.Core.Services } } + #endregion + public Stream GetStylesheetFileContentStream(string filepath) { using (var repository = RepositoryFactory.CreateStylesheetRepository(UowProvider.GetUnitOfWork())) @@ -606,8 +603,6 @@ namespace Umbraco.Core.Services } } - #endregion - #region Partial Views public IEnumerable GetPartialViewSnippetNames(params string[] filterNames) @@ -662,6 +657,14 @@ namespace Umbraco.Core.Services } } + public IEnumerable GetPartialViewMacros(params string[] names) + { + using (var repository = RepositoryFactory.CreatePartialViewMacroRepository(_fileUowProvider.GetUnitOfWork())) + { + return repository.GetAll(names).OrderBy(x => x.Name); + } + } + public Attempt CreatePartialView(IPartialView partialView, string snippetName = null, int userId = 0) { return CreatePartialViewMacro(partialView, PartialViewType.PartialView, snippetName, userId); @@ -839,6 +842,22 @@ namespace Umbraco.Core.Services throw new ArgumentOutOfRangeException("partialViewType"); } + public Stream GetPartialViewMacroFileContentStream(string filepath) + { + using (var repository = GetPartialViewRepository(PartialViewType.PartialViewMacro, UowProvider.GetUnitOfWork())) + { + return repository.GetFileContentStream(filepath); + } + } + + public void SetPartialViewMacroFileContent(string filepath, Stream content) + { + using (var repository = GetPartialViewRepository(PartialViewType.PartialViewMacro, UowProvider.GetUnitOfWork())) + { + repository.SetFileContent(filepath, content); + } + } + #endregion private void Audit(AuditType type, string message, int userId, int objectId) diff --git a/src/Umbraco.Core/Services/IFileService.cs b/src/Umbraco.Core/Services/IFileService.cs index 9521b47311..03ebdac029 100644 --- a/src/Umbraco.Core/Services/IFileService.cs +++ b/src/Umbraco.Core/Services/IFileService.cs @@ -15,6 +15,7 @@ namespace Umbraco.Core.Services void DeletePartialViewMacroFolder(string folderPath); IPartialView GetPartialView(string path); IPartialView GetPartialViewMacro(string path); + IEnumerable GetPartialViewMacros(params string[] names); Attempt CreatePartialView(IPartialView partialView, string snippetName = null, int userId = 0); Attempt CreatePartialViewMacro(IPartialView partialView, string snippetName = null, int userId = 0); bool DeletePartialView(string path, int userId = 0); @@ -279,5 +280,18 @@ namespace Umbraco.Core.Services /// The content of the script file. void SetScriptFileContent(string filepath, Stream content); + /// + /// Gets the content of a macro partial view as a stream. + /// + /// The filesystem path to the macro partial view. + /// The content of the macro partial view. + Stream GetPartialViewMacroFileContentStream(string filepath); + + /// + /// Sets the content of a macro partial view. + /// + /// The filesystem path to the macro partial view. + /// The content of the macro partial view. + void SetPartialViewMacroFileContent(string filepath, Stream content); } } \ No newline at end of file