* Modified PostPublishById to handle content that is culture variant. Added model and modified the javascript function that call the api endpoint.
* Added separate method for publishing with cultures. Added if else statment to js function.
* Moved check for all cultures being published to the top of PostPublishByIdAndCulture. Added parameter to ngDoc. Added Where Query.
(cherry picked from commit 37db3ae3da)
This commit is contained in:
committed by
Sebastiaan Janssen
parent
154021801e
commit
273e7708e5
16
src/Umbraco.Core/Models/ContentEditing/PublishContent.cs
Normal file
16
src/Umbraco.Core/Models/ContentEditing/PublishContent.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Umbraco.Cms.Core.Models.ContentEditing;
|
||||
|
||||
/// <summary>
|
||||
/// Used to publish content and variants
|
||||
/// </summary>
|
||||
[DataContract(Name = "publish", Namespace = "")]
|
||||
public class PublishContent
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "cultures")]
|
||||
public string[]? Cultures { get; set; }
|
||||
}
|
||||
@@ -168,8 +168,8 @@ public class ContentController : ContentControllerBase
|
||||
authorizationService,
|
||||
contentVersionService,
|
||||
StaticServiceProvider.Instance.GetRequiredService<ICultureImpactFactory>())
|
||||
{
|
||||
}
|
||||
{
|
||||
}
|
||||
|
||||
public object? Domains { get; private set; }
|
||||
|
||||
@@ -1950,6 +1950,7 @@ public class ContentController : ContentControllerBase
|
||||
}
|
||||
|
||||
PublishResult publishResult = _contentService.SaveAndPublish(foundContent, userId: _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0);
|
||||
|
||||
if (publishResult.Success == false)
|
||||
{
|
||||
var notificationModel = new SimpleNotificationModel();
|
||||
@@ -1960,6 +1961,56 @@ public class ContentController : ContentControllerBase
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Publishes a document with a given ID and cultures.
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// The EnsureUserPermissionForContent attribute will deny access to this method if the current user
|
||||
/// does not have Publish access to this node.
|
||||
/// </remarks>
|
||||
[Authorize(Policy = AuthorizationPolicies.ContentPermissionPublishById)]
|
||||
public IActionResult PostPublishByIdAndCulture(PublishContent model)
|
||||
{
|
||||
var languageCount = _allLangs.Value.Count();
|
||||
|
||||
// If there is no culture specified or the cultures specified are equal to the total amount of languages, publish the content in all cultures.
|
||||
if (model.Cultures == null || !model.Cultures.Any() || model.Cultures.Length == languageCount)
|
||||
{
|
||||
return PostPublishById(model.Id);
|
||||
}
|
||||
|
||||
IContent? foundContent = GetObjectFromRequest(() => _contentService.GetById(model.Id));
|
||||
|
||||
if (foundContent == null)
|
||||
{
|
||||
return HandleContentNotFound(model.Id);
|
||||
}
|
||||
|
||||
var results = new Dictionary<string, PublishResult>();
|
||||
|
||||
foreach (var culture in model.Cultures)
|
||||
{
|
||||
PublishResult publishResult = _contentService.SaveAndPublish(foundContent, culture, _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0);
|
||||
results[culture] = publishResult;
|
||||
}
|
||||
|
||||
if (results.Any(x => x.Value.Success == false))
|
||||
{
|
||||
var notificationModel = new SimpleNotificationModel();
|
||||
|
||||
foreach (var culture in results.Where(x => x.Value.Success == false))
|
||||
{
|
||||
AddMessageForPublishStatus(new[] { culture.Value }, notificationModel);
|
||||
}
|
||||
|
||||
return ValidationProblem(notificationModel);
|
||||
}
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
[HttpDelete]
|
||||
[HttpPost]
|
||||
public IActionResult DeleteBlueprint(int id)
|
||||
|
||||
@@ -278,7 +278,8 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) {
|
||||
* alert("node wasnt unpublished:" + err.data.Message);
|
||||
* });
|
||||
* </pre>
|
||||
* @param {Int} id the ID of the node to unpublish
|
||||
* @param {Int} id the ID of the node to unpublish.
|
||||
* @param {array} cultures the cultures to unpublish.
|
||||
* @returns {Promise} resourcePromise object.
|
||||
*
|
||||
*/
|
||||
@@ -1086,23 +1087,31 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) {
|
||||
* </pre>
|
||||
*
|
||||
* @param {Int} id The ID of the conten to publish
|
||||
* @param {array} cultures the cultures to publish.
|
||||
* @returns {Promise} resourcePromise object containing the published content item.
|
||||
*
|
||||
*/
|
||||
publishById: function (id) {
|
||||
|
||||
publishById: function (id, cultures) {
|
||||
if (!id) {
|
||||
throw "id cannot be null";
|
||||
}
|
||||
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
if (!cultures) {
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"contentApiBaseUrl",
|
||||
"PostPublishById",
|
||||
[{ id: id }])),
|
||||
'Failed to publish content with id ' + id);
|
||||
|
||||
"contentApiBaseUrl",
|
||||
"PostPublishById"), { id: id }),
|
||||
'Failed to publish content with id ' + id);
|
||||
}
|
||||
else {
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"contentApiBaseUrl",
|
||||
"PostPublishByIdAndCulture"), { id: id, cultures: cultures }),
|
||||
'Failed to publish content with id ' + id);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user