Merge branch '6.1.5' into 6.2.0
Conflicts: .gitignore build/Build.bat src/Umbraco.Core/Configuration/UmbracoVersion.cs src/Umbraco.Web.UI/Umbraco.Web.UI.csproj src/Umbraco.Web/Umbraco.Web.csproj src/Umbraco.Web/umbraco.presentation/umbraco/create/PartialViewTasks.cs
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -84,3 +84,4 @@ src/*.psess
|
||||
NDependOut/*
|
||||
*.ndproj
|
||||
QueryResult.htm
|
||||
*.ndproj
|
||||
|
||||
@@ -170,11 +170,31 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
return content;
|
||||
}
|
||||
|
||||
public override void DeleteVersion(Guid versionId)
|
||||
{
|
||||
var sql = new Sql()
|
||||
.Select("*")
|
||||
.From<DocumentDto>()
|
||||
.InnerJoin<ContentVersionDto>().On<ContentVersionDto, DocumentDto>(left => left.VersionId, right => right.VersionId)
|
||||
.Where<ContentVersionDto>(x => x.VersionId == versionId)
|
||||
.Where<DocumentDto>(x => x.Newest == true);
|
||||
var dto = Database.Fetch<DocumentDto, ContentVersionDto>(sql).FirstOrDefault();
|
||||
|
||||
if(dto == null) return;
|
||||
|
||||
using (var transaction = Database.GetTransaction())
|
||||
{
|
||||
PerformDeleteVersion(dto.NodeId, versionId);
|
||||
|
||||
transaction.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void PerformDeleteVersion(int id, Guid versionId)
|
||||
{
|
||||
Database.Delete<PreviewXmlDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<PropertyDataDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<ContentVersionDto>("WHERE nodeId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<PropertyDataDto>("WHERE contentNodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<ContentVersionDto>("WHERE ContentId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<DocumentDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
}
|
||||
|
||||
@@ -340,19 +360,18 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
//Look up (newest) entries by id in cmsDocument table to set newest = false
|
||||
var documentDtos = Database.Fetch<DocumentDto>("WHERE nodeId = @Id AND newest = @IsNewest", new { Id = entity.Id, IsNewest = true });
|
||||
foreach (var documentDto in documentDtos)
|
||||
{
|
||||
var docDto = documentDto;
|
||||
docDto.Newest = false;
|
||||
Database.Update(docDto);
|
||||
}
|
||||
|
||||
var contentVersionDto = dto.ContentVersionDto;
|
||||
if (shouldCreateNewVersion)
|
||||
{
|
||||
//Look up (newest) entries by id in cmsDocument table to set newest = false
|
||||
//NOTE: This is only relevant when a new version is created, which is why its done inside this if-statement.
|
||||
var documentDtos = Database.Fetch<DocumentDto>("WHERE nodeId = @Id AND newest = @IsNewest", new { Id = entity.Id, IsNewest = true });
|
||||
foreach (var documentDto in documentDtos)
|
||||
{
|
||||
var docDto = documentDto;
|
||||
docDto.Newest = false;
|
||||
Database.Update(docDto);
|
||||
}
|
||||
|
||||
//Create a new version - cmsContentVersion
|
||||
//Assumes a new Version guid and Version date (modified date) has been set
|
||||
Database.Insert(contentVersionDto);
|
||||
|
||||
@@ -176,8 +176,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
protected override void PerformDeleteVersion(int id, Guid versionId)
|
||||
{
|
||||
Database.Delete<PreviewXmlDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<PropertyDataDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<ContentVersionDto>("WHERE nodeId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<PropertyDataDto>("WHERE contentNodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
Database.Delete<ContentVersionDto>("WHERE ContentId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -43,8 +43,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
public virtual void DeleteVersion(Guid versionId)
|
||||
{
|
||||
var dto = Database.FirstOrDefault<ContentVersionDto>("WHERE versionId = @VersionId AND newest = @Newest", new { VersionId = versionId, Newest = false });
|
||||
Mandate.That<Exception>(dto != null);
|
||||
var dto = Database.FirstOrDefault<ContentVersionDto>("WHERE versionId = @VersionId", new { VersionId = versionId });
|
||||
if(dto == null) return;
|
||||
|
||||
using (var transaction = Database.GetTransaction())
|
||||
{
|
||||
@@ -56,8 +56,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
public virtual void DeleteVersions(int id, DateTime versionDate)
|
||||
{
|
||||
var list = Database.Fetch<ContentVersionDto>("WHERE nodeId = @Id AND VersionDate < @VersionDate", new { Id = id, VersionDate = versionDate });
|
||||
Mandate.That<Exception>(list.Any());
|
||||
var list = Database.Fetch<ContentVersionDto>("WHERE ContentId = @Id AND VersionDate < @VersionDate", new { Id = id, VersionDate = versionDate });
|
||||
if (list.Any() == false) return;
|
||||
|
||||
using (var transaction = Database.GetTransaction())
|
||||
{
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace Umbraco.Tests.Models
|
||||
var dataTypeId = Guid.NewGuid();
|
||||
|
||||
var dataTypeData = MockRepository.GenerateMock<IData, IDataValueSetter>();
|
||||
|
||||
dataTypeData
|
||||
.Stub(data => data.ToXMl(Arg<XmlDocument>.Is.Anything))
|
||||
.Return(null) // you have to call Return() even though we're about to override it
|
||||
@@ -98,5 +99,18 @@ namespace Umbraco.Tests.Models
|
||||
((IDataValueSetter)dataTypeData).AssertWasCalled(setter => setter.SetValue("Hello world", DataTypeDatabaseType.Nvarchar.ToString()));
|
||||
}
|
||||
|
||||
[TestCase(DataTypeDatabaseType.Nvarchar)]
|
||||
[TestCase(DataTypeDatabaseType.Date)]
|
||||
[TestCase(DataTypeDatabaseType.Integer)]
|
||||
[TestCase(DataTypeDatabaseType.Ntext)]
|
||||
public void DefaultData_SetValue_Ensures_Empty_String_When_Null_Value_Any_Data_Type(DataTypeDatabaseType type)
|
||||
{
|
||||
var defaultData = new DefaultData(MockRepository.GenerateMock<BaseDataType>());
|
||||
|
||||
((IDataValueSetter)defaultData).SetValue(null, type.ToString());
|
||||
|
||||
Assert.AreEqual(string.Empty, defaultData.Value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -861,6 +861,22 @@ namespace Umbraco.Tests.Services
|
||||
Assert.That(sut.GetValue<string>("imgCropper"), Is.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Delete_Previous_Versions_Not_Latest()
|
||||
{
|
||||
// Arrange
|
||||
var contentService = ServiceContext.ContentService;
|
||||
var content = contentService.GetById(1049);
|
||||
var version = content.Version;
|
||||
|
||||
// Act
|
||||
contentService.DeleteVersion(1049, version, true, 0);
|
||||
var sut = contentService.GetById(1049);
|
||||
|
||||
// Assert
|
||||
Assert.That(sut.Version, Is.EqualTo(version));
|
||||
}
|
||||
|
||||
private IEnumerable<IContent> CreateContentHierarchy()
|
||||
{
|
||||
var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage");
|
||||
|
||||
@@ -101,8 +101,7 @@ namespace umbraco
|
||||
{
|
||||
//write out the template header
|
||||
sw.Write("@inherits ");
|
||||
sw.Write(typeof(UmbracoViewPage<>).FullName.TrimEnd("`1"));
|
||||
sw.Write("<dynamic>");
|
||||
sw.Write(typeof(UmbracoTemplatePage).FullName.TrimEnd("`1"));
|
||||
}
|
||||
|
||||
public bool Delete()
|
||||
|
||||
@@ -272,11 +272,15 @@ namespace umbraco.dialogs
|
||||
{
|
||||
if (CurrentApp == Constants.Applications.Content)
|
||||
{
|
||||
Services.ContentService.Move((IContent)currContent, Request.GetItemAs<int>("copyTo"), getUser().Id);
|
||||
//Backwards comp. change, so old events are fired #U4-2731
|
||||
var doc = new Document(currContent as IContent);
|
||||
doc.Move(Request.GetItemAs<int>("copyTo"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Services.MediaService.Move((IMedia)currContent, Request.GetItemAs<int>("copyTo"), getUser().Id);
|
||||
//Backwards comp. change, so old events are fired #U4-2731
|
||||
var media = new umbraco.cms.businesslogic.media.Media(currContent as IMedia);
|
||||
media.Move(Request.GetItemAs<int>("copyTo"));
|
||||
library.ClearLibraryCacheForMedia(currContent.Id);
|
||||
}
|
||||
|
||||
@@ -290,7 +294,9 @@ namespace umbraco.dialogs
|
||||
{
|
||||
//NOTE: We ONLY support Copy on content not media for some reason.
|
||||
|
||||
var newContent = Services.ContentService.Copy((IContent)currContent, Request.GetItemAs<int>("copyTo"), RelateDocuments.Checked, getUser().Id);
|
||||
//Backwards comp. change, so old events are fired #U4-2731
|
||||
var newContent = new Document(currContent as IContent);
|
||||
newContent.Copy(Request.GetItemAs<int>("copyTo"), getUser(), RelateDocuments.Checked);
|
||||
|
||||
feedback.Text = ui.Text("moveOrCopy", "copyDone", nodes, getUser()) + "</p><p><a href='#' onclick='" + ClientTools.Scripts.CloseModalWindow() + "'>" + ui.Text("closeThisWindow") + "</a>";
|
||||
feedback.type = uicontrols.Feedback.feedbacktype.success;
|
||||
|
||||
@@ -65,6 +65,17 @@ namespace umbraco.cms.businesslogic.datatype
|
||||
/// <param name="strDbType"></param>
|
||||
void IDataValueSetter.SetValue(object val, string strDbType)
|
||||
{
|
||||
//We need to ensure that val is not a null value, if it is then we'll convert this to an empty string.
|
||||
//The reason for this is because by default the DefaultData.Value property returns an empty string when
|
||||
// there is no value, this is based on the PropertyDataDto.GetValue return value which defaults to an
|
||||
// empty string (which is called from this class's method LoadValueFromDatabase).
|
||||
//Some legacy implementations of DefaultData are expecting an empty string when there is
|
||||
// no value so we need to keep this consistent.
|
||||
if (val == null)
|
||||
{
|
||||
val = string.Empty;
|
||||
}
|
||||
|
||||
_value = val;
|
||||
//now that we've set our value, we can update our BaseDataType object with the correct values from the db
|
||||
//instead of making it query for itself. This is a peformance optimization enhancement.
|
||||
|
||||
Reference in New Issue
Block a user