diff --git a/src/Umbraco.Core/Models/Content.cs b/src/Umbraco.Core/Models/Content.cs
index ec73e1ff5e..cef06ec4f7 100644
--- a/src/Umbraco.Core/Models/Content.cs
+++ b/src/Umbraco.Core/Models/Content.cs
@@ -274,6 +274,9 @@ namespace Umbraco.Core.Models
///
public bool HasPublishedVersion { get { return PublishedVersionGuid != default(Guid); } }
+ [IgnoreDataMember]
+ internal DateTime PublishedDate { get; set; }
+
///
/// Changes the Trashed state of the content object
///
diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs
index 4a7e359d91..7c6507f499 100644
--- a/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs
@@ -19,5 +19,8 @@ namespace Umbraco.Core.Models.Rdbms
[Column("newest")]
public bool Newest { get; set; }
+
+ [Column("updateDate")]
+ public DateTime VersionDate { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs b/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs
index 0532eab6b1..512f02e8b5 100644
--- a/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs
+++ b/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs
@@ -72,6 +72,9 @@ namespace Umbraco.Core.Persistence.Factories
content.PublishedVersionGuid = publishedDto == null
? (dto.DocumentPublishedReadOnlyDto == null ? default(Guid) : dto.DocumentPublishedReadOnlyDto.VersionId)
: publishedDto.VersionId;
+ content.PublishedDate = publishedDto == null
+ ? (dto.DocumentPublishedReadOnlyDto == null ? default(DateTime) : dto.DocumentPublishedReadOnlyDto.VersionDate)
+ : publishedDto.VersionDate;
//on initial construction we don't want to have dirty properties tracked
// http://issues.umbraco.org/issue/U4-1946
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
index f95c295243..ed55bbeeb1 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
@@ -513,11 +513,13 @@ namespace Umbraco.Core.Persistence.Repositories
dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto
{
VersionId = dto.VersionId,
+ VersionDate = dto.UpdateDate,
Newest = true,
NodeId = dto.NodeId,
- Published = true
+ Published = true
};
- ((Content)entity).PublishedVersionGuid = dto.VersionId;
+ ((Content) entity).PublishedVersionGuid = dto.VersionId;
+ ((Content) entity).PublishedDate = dto.UpdateDate;
}
entity.ResetDirtyProperties();
@@ -687,22 +689,26 @@ namespace Umbraco.Core.Persistence.Repositories
dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto
{
VersionId = dto.VersionId,
+ VersionDate = dto.UpdateDate,
Newest = true,
NodeId = dto.NodeId,
Published = true
};
- ((Content)entity).PublishedVersionGuid = dto.VersionId;
+ ((Content) entity).PublishedVersionGuid = dto.VersionId;
+ ((Content) entity).PublishedDate = dto.UpdateDate;
}
else if (publishedStateChanged)
{
dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto
{
- VersionId = default(Guid),
+ VersionId = default (Guid),
+ VersionDate = default (DateTime),
Newest = false,
NodeId = dto.NodeId,
Published = false
};
- ((Content)entity).PublishedVersionGuid = default(Guid);
+ ((Content) entity).PublishedVersionGuid = default(Guid);
+ ((Content) entity).PublishedDate = default (DateTime);
}
entity.ResetDirtyProperties();
@@ -974,7 +980,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
}
//order by update date DESC, if there is corrupted published flags we only want the latest!
- var publishedSql = new Sql(@"SELECT cmsDocument.nodeId, cmsDocument.published, cmsDocument.versionId, cmsDocument.newest
+ var publishedSql = new Sql(@"SELECT cmsDocument.nodeId, cmsDocument.published, cmsDocument.versionId, cmsDocument.updateDate, cmsDocument.newest
FROM cmsDocument INNER JOIN cmsContentVersion ON cmsContentVersion.VersionId = cmsDocument.versionId
WHERE cmsDocument.published = 1 AND cmsDocument.nodeId IN
(" + parsedOriginalSql + @")
diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
index cc2ee79ccb..8942d52360 100644
--- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(display => display.IsContainer, expression => expression.MapFrom(content => content.ContentType.IsContainer))
.ForMember(display => display.IsChildOfListView, expression => expression.Ignore())
.ForMember(display => display.Trashed, expression => expression.MapFrom(content => content.Trashed))
- .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext)))
+ .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => GetPublishedDate(content)))
.ForMember(display => display.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias))
.ForMember(display => display.HasPublishedVersion, expression => expression.MapFrom(content => content.HasPublishedVersion))
.ForMember(display => display.Urls,
@@ -75,6 +75,12 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(dto => dto.Alias, expression => expression.Ignore());
}
+ private static DateTime? GetPublishedDate(IContent content)
+ {
+ var date = ((Content) content).PublishedDate;
+ return date == default (DateTime) ? (DateTime?) null : date;
+ }
+
///
/// Maps the generic tab with custom properties for content
///
@@ -201,27 +207,7 @@ namespace Umbraco.Web.Models.Mapping
}
///
- /// Gets the published date value for the IContent object
- ///
- ///
- ///
- ///
- private static DateTime? GetPublishedDate(IContent content, ApplicationContext applicationContext)
- {
- if (content.Published)
- {
- return content.UpdateDate;
- }
- if (content.HasPublishedVersion)
- {
//TODO: This is horribly inneficient
- var published = applicationContext.Services.ContentService.GetPublishedVersion(content.Id);
- return published.UpdateDate;
- }
- return null;
- }
-
- ///
/// Creates the list of action buttons allowed for this user - Publish, Send to publish, save, unpublish returned as the button's 'letter'
///
private class ActionButtonsResolver : ValueResolver>