check for existing file content when creating/saving new template

This commit is contained in:
Nathan Woulfe
2018-06-29 20:27:28 +10:00
parent ed81214e87
commit e34926acd6
3 changed files with 58 additions and 2 deletions

View File

@@ -291,6 +291,14 @@ namespace Umbraco.Core.Services
{"ContentTypeAlias", contentTypeAlias},
};
// check that the template hasn't been created on disk before creating the content type
// if it exists, set the new template content to the existing file content
string content = GetViewContent(contentTypeAlias);
if (content.IsNullOrWhiteSpace() == false)
{
template.Content = content;
}
using (var uow = UowProvider.GetUnitOfWork())
{
var saveEventArgs = new SaveEventArgs<ITemplate>(template, true, evtMsgs, additionalData);
@@ -1045,6 +1053,19 @@ namespace Umbraco.Core.Services
: Attempt<string>.Fail();
}
internal Attempt<string> TryGetViewPath(string fileName)
{
if (fileName.EndsWith(".cshtml") == false)
{
fileName += ".cshtml";
}
string viewPath = IOHelper.MapPath(SystemDirectories.MvcViews + "/" + fileName);
return System.IO.File.Exists(viewPath)
? Attempt<string>.Succeed(viewPath)
: Attempt<string>.Fail();
}
private IPartialViewRepository GetPartialViewRepository(PartialViewType partialViewType, IUnitOfWork uow)
{
switch (partialViewType)
@@ -1076,6 +1097,23 @@ namespace Umbraco.Core.Services
return GetPartialViewMacroSnippetContent(snippetName, PartialViewType.PartialViewMacro);
}
public string GetViewContent(string filename)
{
if (filename.IsNullOrWhiteSpace())
throw new ArgumentNullException(nameof(filename));
Attempt<string> viewAttempt = TryGetViewPath(filename);
if (viewAttempt.Success == false)
{
return string.Empty;
}
using (var view = new StreamReader(System.IO.File.OpenRead(viewAttempt.Result)))
{
return view.ReadToEnd().Trim();
}
}
private string GetPartialViewMacroSnippetContent(string snippetName, PartialViewType partialViewType)
{
if (snippetName.IsNullOrWhiteSpace())
@@ -1265,4 +1303,4 @@ namespace Umbraco.Core.Services
#endregion
}
}
}

View File

@@ -427,5 +427,12 @@ namespace Umbraco.Core.Services
/// <param name="filepath">The filesystem path to the partial view.</param>
/// <returns>The size of the partial view.</returns>
long GetPartialViewFileSize(string filepath);
/// <summary>
/// Gets the content of a view.
/// </summary>
/// <param name="filename">The name of the view.</param>
/// <returns></returns>
string GetViewContent(string filename);
}
}
}

View File

@@ -1,9 +1,12 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using AutoMapper;
using Umbraco.Core;
using Umbraco.Core.IO;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
@@ -178,6 +181,14 @@ namespace Umbraco.Web.Editors
else
{
//create
// file might already be on disk, if so grab the content to avoid overwriting
string content = Services.FileService.GetViewContent(display.Alias);
if (string.IsNullOrEmpty(content) == false)
{
display.Content = content;
}
ITemplate master = null;
if (string.IsNullOrEmpty(display.MasterTemplateAlias) == false)
{