merge fixing and cleanup

This commit is contained in:
Shannon
2018-07-18 13:19:48 +10:00
parent 390514cd9d
commit 66f9eb01c7
7 changed files with 58 additions and 255 deletions

View File

@@ -144,7 +144,7 @@ namespace Umbraco.Core.Models.Identity
public override DateTime? LastPasswordChangeDateUtc
{
get { return _lastPasswordChangeDateUtc; }
set { _tracker.SetPropertyValueAndDetectChanges(value, ref _lastPasswordChangeDateUtc, Ps.Value.LastPasswordChangeDateUtcSelector); }
set { _beingDirty.SetPropertyValueAndDetectChanges(value, ref _lastPasswordChangeDateUtc, Ps.Value.LastPasswordChangeDateUtcSelector); }
}
/// <summary>

View File

@@ -359,12 +359,5 @@ namespace Umbraco.Core.Services
/// <returns>The content of the partial view.</returns>
string GetPartialViewSnippetContent(string snippetName);
/// <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

@@ -332,16 +332,23 @@ namespace Umbraco.Core.Services.Implement
var evtMsgs = EventMessagesFactory.Get();
//NOTE: This isn't pretty but we need to maintain backwards compatibility so we cannot change
//fixme: This isn't pretty because we we're required to maintain backwards compatibility so we could not change
// the event args here. The other option is to create a different event with different event
// args specifically for this method... which also isn't pretty. So for now, we'll use this
// dictionary approach to store 'additional data' in.
// args specifically for this method... which also isn't pretty. So fix this in v8!
var additionalData = new Dictionary<string, object>
{
{ "CreateTemplateForContentType", true },
{ "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 scope = ScopeProvider.CreateScope())
{
var saveEventArgs = new SaveEventArgs<ITemplate>(template, true, evtMsgs, additionalData);
@@ -368,6 +375,15 @@ namespace Umbraco.Core.Services.Implement
{
Content = content
};
// 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 existingContent = GetViewContent(template.Alias);
if (existingContent.IsNullOrWhiteSpace() == false)
{
template.Content = content;
}
if (masterTemplate != null)
{
template.SetMasterTemplate(masterTemplate);
@@ -659,10 +675,26 @@ namespace Umbraco.Core.Services.Implement
return _templateRepository.GetFileSize(filepath);
}
}
private string GetViewContent(string fileName)
{
if (fileName.IsNullOrWhiteSpace())
throw new ArgumentNullException(nameof(fileName));
#endregion
if (!fileName.EndsWith(".cshtml"))
fileName = string.Concat(fileName, ".cshtml");
#region Partial Views
var fs = _templateRepository.GetFileContentStream(fileName);
if (fs == null) return string.Empty;
using (var view = new StreamReader(fs))
{
return view.ReadToEnd().Trim();
}
}
#endregion
#region Partial Views
public IEnumerable<string> GetPartialViewSnippetNames(params string[] filterNames)
{

View File

@@ -404,225 +404,6 @@ namespace Umbraco.Tests.FrontEnd
Assert.That(result, Is.Null);
}
// ------- Int32 conversion tests
[Test]
public static void Converting_Boxed_34_To_An_Int_Returns_34()
{
// Arrange
const int sample = 34;
// Act
bool success = UmbracoHelper.ConvertIdObjectToInt(
sample,
out int result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(34));
}
[Test]
public static void Converting_String_54_To_An_Int_Returns_54()
{
// Arrange
const string sample = "54";
// Act
bool success = UmbracoHelper.ConvertIdObjectToInt(
sample,
out int result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(54));
}
[Test]
public static void Converting_Hello_To_An_Int_Returns_False()
{
// Arrange
const string sample = "Hello";
// Act
bool success = UmbracoHelper.ConvertIdObjectToInt(
sample,
out int result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.EqualTo(0));
}
[Test]
public static void Converting_Unsupported_Object_To_An_Int_Returns_False()
{
// Arrange
var clearlyWillNotConvertToInt = new StringBuilder(0);
// Act
bool success = UmbracoHelper.ConvertIdObjectToInt(
clearlyWillNotConvertToInt,
out int result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.EqualTo(0));
}
// ------- GUID conversion tests
[Test]
public static void Converting_Boxed_Guid_To_A_Guid_Returns_Original_Guid_Value()
{
// Arrange
Guid sample = Guid.NewGuid();
// Act
bool success = UmbracoHelper.ConvertIdObjectToGuid(
sample,
out Guid result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(sample));
}
[Test]
public static void Converting_String_Guid_To_A_Guid_Returns_Original_Guid_Value()
{
// Arrange
Guid sample = Guid.NewGuid();
// Act
bool success = UmbracoHelper.ConvertIdObjectToGuid(
sample.ToString(),
out Guid result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(sample));
}
[Test]
public static void Converting_Hello_To_A_Guid_Returns_False()
{
// Arrange
const string sample = "Hello";
// Act
bool success = UmbracoHelper.ConvertIdObjectToGuid(
sample,
out Guid result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000")));
}
[Test]
public static void Converting_Unsupported_Object_To_A_Guid_Returns_False()
{
// Arrange
var clearlyWillNotConvertToGuid = new StringBuilder(0);
// Act
bool success = UmbracoHelper.ConvertIdObjectToGuid(
clearlyWillNotConvertToGuid,
out Guid result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000")));
}
// ------- UDI Conversion Tests
[Test]
public void Converting_Boxed_Udi_To_A_Udi_Returns_Original_Udi_Value()
{
// Arrange
SetUpDependencyContainer();
Udi.ResetUdiTypes();
Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid());
// Act
bool success = UmbracoHelper.ConvertIdObjectToUdi(
sample,
out Udi result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(sample));
}
[Test]
public void Converting_String_Udi_To_A_Udi_Returns_Original_Udi_Value()
{
// Arrange
SetUpDependencyContainer();
Udi.ResetUdiTypes();
Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid());
// Act
bool success = UmbracoHelper.ConvertIdObjectToUdi(
sample.ToString(),
out Udi result
);
// Assert
Assert.IsTrue(success);
Assert.That(result, Is.EqualTo(sample));
}
[Test]
public void Converting_Hello_To_A_Udi_Returns_False()
{
// Arrange
SetUpDependencyContainer();
Udi.ResetUdiTypes();
const string SAMPLE = "Hello";
// Act
bool success = UmbracoHelper.ConvertIdObjectToUdi(
SAMPLE,
out Udi result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.Null);
}
[Test]
public void Converting_Unsupported_Object_To_A_Udi_Returns_False()
{
// Arrange
SetUpDependencyContainer();
Udi.ResetUdiTypes();
var clearlyWillNotConvertToGuid = new StringBuilder(0);
// Act
bool success = UmbracoHelper.ConvertIdObjectToUdi(
clearlyWillNotConvertToGuid,
out Udi result
);
// Assert
Assert.IsFalse(success);
Assert.That(result, Is.Null);
}
private void SetUpDependencyContainer()
{
// fixme - bad in a unit test - but Udi has a static ctor that wants it?!

View File

@@ -281,6 +281,11 @@ namespace Umbraco.Web.Editors
{
HandleContentNotFound(id);
return null;//irrelevant since the above throws
}
var content = MapToDisplay(foundContent, culture);
return content;
}
/// <summary>
/// Gets the content json for the content id
/// </summary>
@@ -288,15 +293,16 @@ namespace Umbraco.Web.Editors
/// <returns></returns>
[OutgoingEditorModelEvent]
[EnsureUserPermissionForContent("id")]
public ContentItemDisplay GetById(Guid id)
public ContentItemDisplay GetById(Guid id, string culture = null)
{
var foundContent = GetObjectFromRequest(() => Services.ContentService.GetById(id));
if (foundContent == null)
{
HandleContentNotFound(id);
return null;//irrelevant since the above throws
}
var content = AutoMapperExtensions.MapWithUmbracoContext<IContent, ContentItemDisplay>(foundContent, UmbracoContext);
var content = MapToDisplay(foundContent, culture);
return content;
}
@@ -307,22 +313,16 @@ namespace Umbraco.Web.Editors
/// <returns></returns>
[OutgoingEditorModelEvent]
[EnsureUserPermissionForContent("id")]
public ContentItemDisplay GetById(Udi id)
public ContentItemDisplay GetById(Udi id, string culture = null)
{
var guidUdi = id as GuidUdi;
if (guidUdi != null)
{
return GetById(guidUdi.Guid);
return GetById(guidUdi.Guid, culture);
}
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
var content = MapToDisplay(foundContent, culture);
return content;
}
}
/// <summary>
/// Gets an empty content item for the

View File

@@ -176,14 +176,6 @@ 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)
{

View File

@@ -6,6 +6,8 @@ using Umbraco.Core.Exceptions;
using Umbraco.Web.Composing;
using Umbraco.Web.Editors;
using Umbraco.Web._Legacy.Actions;
using Umbraco.Core;
using Umbraco.Core.Models;
namespace Umbraco.Web.WebApi.Filters
{
@@ -77,13 +79,15 @@ namespace Umbraco.Web.WebApi.Filters
nodeId = parsedId;
}
else if (Udi.TryParse(argument, true, out Udi udi))
{
nodeId = ApplicationContext.Current.Services.EntityService.GetIdForUdi(udi).Result;
{
//fixme: inject? we can't because this is an attribute but we could provide ctors and empty ctors that pass in the required services
nodeId = Current.Services.EntityService.GetId(udi).Result;
}
else
{
Guid.TryParse(argument, out Guid key);
nodeId = ApplicationContext.Current.Services.EntityService.GetIdForKey(key, UmbracoObjectTypes.Document).Result;
//fixme: inject? we can't because this is an attribute but we could provide ctors and empty ctors that pass in the required services
nodeId = Current.Services.EntityService.GetId(key, UmbracoObjectTypes.Document).Result;
}
}
else
@@ -105,7 +109,8 @@ namespace Umbraco.Web.WebApi.Filters
if (ContentController.CheckPermissions(
actionContext.Request.Properties,
UmbracoContext.Current.Security.CurrentUser,
//fixme: inject? we can't because this is an attribute but we could provide ctors and empty ctors that pass in the required services
Current.UmbracoContext.Security.CurrentUser,
Current.Services.UserService,
Current.Services.ContentService,
Current.Services.EntityService,