-
-
- This shows the differences between the current version and the selected version Red text will be
- removed in the selected version, green text will be added
+
+
+
+
+
-
+ Current version:
+ {{vm.currentVersion.name}} (Created: {{vm.currentVersion.createDate}})
+
+
+
+
+
+
+
+
+
+
{{ version.displayValue }}
+
{{version.username}}
+
+ Current version
+ Current version
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This shows the differences between the current version and the selected version Red text will be
+ removed in the selected version, green text will be added
+
+
+
+
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index ee8b50a13a..65c3afc822 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -174,6 +174,8 @@
Content sent for publishing for languages: %0%Sort child items performed by user%0%
+ Cleanup disabled for version: %0%
+ Cleanup enabled for version: %0%CopyPublishPublish
@@ -187,6 +189,8 @@
Send To PublishSortCustom
+ Save
+ SaveHistory (all variants)
@@ -1730,7 +1734,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
Keep all versions newer than daysKeep latest version per day for daysPrevent cleanup
- NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.
+ NOTE! The content version cleanup feature is disabled globally. These settings will not take effect until it is enabled.Add language
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index b16765c66a..d4cd20cc53 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -176,6 +176,8 @@
Content sent for publishing for languages: %0%Sort child items performed by user%0%
+ Cleanup disabled for version: %0%
+ Cleanup enabled for version: %0%CopyPublishPublish
@@ -190,6 +192,8 @@
Send To PublishSortCustom
+ Save
+ SaveHistory (all variants)
@@ -1396,6 +1400,10 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
Rollback toSelect versionView
+
+ Versions
+ Current draft version
+ Current published versionEdit script file
@@ -1532,6 +1540,8 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
Cannot schedule the document for publishing since the required '%0%' has a publish date later than a non mandatory languageThe expire date cannot be in the pastThe expire date cannot be before the release date
+ An error occurred while enabling version cleanup for %0%
+ An error occurred while disabling version cleanup for %0%Add style
@@ -1763,7 +1773,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
Keep all versions newer than daysKeep latest version per day for daysPrevent cleanup
- NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.
+ NOTE! The content version cleanup feature is disabled globally. These settings will not take effect until it is enabled.Add language
diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config
index 0e51c63cfa..c7b38d8f36 100644
--- a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config
+++ b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config
@@ -191,7 +191,7 @@
assets/img/application/umbraco_logo_white.svg
-
+
diff --git a/src/Umbraco.Web/Editors/ContentController.cs b/src/Umbraco.Web/Editors/ContentController.cs
index d7f1d81c77..f535a5078c 100644
--- a/src/Umbraco.Web/Editors/ContentController.cs
+++ b/src/Umbraco.Web/Editors/ContentController.cs
@@ -2398,6 +2398,50 @@ namespace Umbraco.Web.Editors
Services.NotificationService.SetNotifications(Security.CurrentUser, content, notifyOptions);
}
+ [HttpGet]
+ public PagedResult GetPagedContentVersions(
+ int contentId,
+ int pageNumber = 1,
+ int pageSize = 10,
+ string culture = null)
+ {
+ if (!string.IsNullOrEmpty(culture))
+ {
+ if (!_allLangs.Value.TryGetValue(culture, out _))
+ {
+ throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
+ }
+ }
+
+ // NOTE: v9 - don't service locate
+ var contentVersionService = Current.Factory.GetInstance();
+
+ var results = contentVersionService.GetPagedContentVersions(contentId, pageNumber - 1, pageSize, out var totalRecords, culture);
+
+ return new PagedResult(totalRecords, pageNumber, pageSize)
+ {
+ Items = results.Select(x => new ContentVersionMetaViewModel(x))
+ };
+ }
+
+ [HttpPost]
+ [EnsureUserPermissionForContent("contentId", ActionUpdate.ActionLetter)]
+ public HttpResponseMessage PostSetContentVersionPreventCleanup(int contentId, int versionId, bool preventCleanup)
+ {
+ var content = Services.ContentService.GetVersion(versionId);
+ if (content == null || content.Id != contentId)
+ {
+ throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
+ }
+
+ // NOTE: v9 - don't service locate
+ var contentVersionService = Current.Factory.GetInstance();
+
+ contentVersionService.SetPreventCleanup(versionId, preventCleanup, Security.GetUserId().ResultOr(0));
+
+ return Request.CreateResponse(HttpStatusCode.OK);
+ }
+
[HttpGet]
public IEnumerable GetRollbackVersions(int contentId, string culture = null)
{
@@ -2486,6 +2530,7 @@ namespace Umbraco.Web.Editors
return Request.CreateValidationErrorResponse(notificationModel);
}
+
[EnsureUserPermissionForContent("contentId", ActionProtect.ActionLetter)]
[HttpGet]
public HttpResponseMessage GetPublicAccess(int contentId)
diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentVersionMetaViewModel.cs b/src/Umbraco.Web/Models/ContentEditing/ContentVersionMetaViewModel.cs
new file mode 100644
index 0000000000..a8e63d2152
--- /dev/null
+++ b/src/Umbraco.Web/Models/ContentEditing/ContentVersionMetaViewModel.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Runtime.Serialization;
+using Umbraco.Core.Models;
+
+namespace Umbraco.Web.Models.ContentEditing
+{
+ [DataContract(Name = "contentVersionMeta", Namespace = "")]
+ public class ContentVersionMetaViewModel
+ {
+ [DataMember(Name = "contentId")]
+ public int ContentId { get; set; }
+
+ [DataMember(Name = "contentTypeId")]
+ public int ContentTypeId { get; set; }
+
+ [DataMember(Name = "versionId")]
+ public int VersionId { get; set; }
+
+ [DataMember(Name = "userId")]
+ public int UserId { get; set; }
+
+ [DataMember(Name = "versionDate")]
+ public DateTime VersionDate { get; set; }
+
+ [DataMember(Name = "currentPublishedVersion")]
+ public bool CurrentPublishedVersion { get; set; }
+
+ [DataMember(Name = "currentDraftVersion")]
+ public bool CurrentDraftVersion { get; set; }
+
+ [DataMember(Name = "preventCleanup")]
+ public bool PreventCleanup { get; set; }
+
+ [DataMember(Name = "username")]
+ public string Username { get; set; }
+
+ public ContentVersionMetaViewModel()
+ {
+ }
+
+ public ContentVersionMetaViewModel(ContentVersionMeta dto)
+ {
+ ContentId = dto.ContentId;
+ ContentTypeId = dto.ContentTypeId;
+ VersionId = dto.VersionId;
+ UserId = dto.UserId;
+ VersionDate = dto.VersionDate;
+ CurrentPublishedVersion = dto.CurrentPublishedVersion;
+ CurrentDraftVersion = dto.CurrentDraftVersion;
+ PreventCleanup = dto.PreventCleanup;
+ Username = dto.Username;
+ }
+ }
+}
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 64d81cff13..638be9d05a 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -255,6 +255,7 @@
+