diff --git a/packages/core/content-manager/server/controllers/collection-types.js b/packages/core/content-manager/server/controllers/collection-types.js index 63e295c7c6..9f11ce2d82 100644 --- a/packages/core/content-manager/server/controllers/collection-types.js +++ b/packages/core/content-manager/server/controllers/collection-types.js @@ -152,7 +152,7 @@ module.exports = { }, async publish(ctx) { - const { userAbility } = ctx.state; + const { userAbility, user } = ctx.state; const { id, model } = ctx.params; const entityManager = getService('entity-manager'); @@ -172,13 +172,17 @@ module.exports = { return ctx.forbidden(); } - const result = await entityManager.publish(entity, model); + const result = await entityManager.publish( + entity, + setCreatorFields({ user, isEdition: true })({}), + model + ); ctx.body = await permissionChecker.sanitizeOutput(result); }, async unpublish(ctx) { - const { userAbility } = ctx.state; + const { userAbility, user } = ctx.state; const { id, model } = ctx.params; const entityManager = getService('entity-manager'); @@ -198,7 +202,11 @@ module.exports = { return ctx.forbidden(); } - const result = await entityManager.unpublish(entity, model); + const result = await entityManager.unpublish( + entity, + setCreatorFields({ user, isEdition: true })({}), + model + ); ctx.body = await permissionChecker.sanitizeOutput(result); }, diff --git a/packages/core/content-manager/server/controllers/single-types.js b/packages/core/content-manager/server/controllers/single-types.js index 8d908aaf13..17350df9f5 100644 --- a/packages/core/content-manager/server/controllers/single-types.js +++ b/packages/core/content-manager/server/controllers/single-types.js @@ -114,7 +114,7 @@ module.exports = { }, async publish(ctx) { - const { userAbility } = ctx.state; + const { userAbility, user } = ctx.state; const { model } = ctx.params; const { query = {} } = ctx.request; @@ -135,13 +135,17 @@ module.exports = { return ctx.forbidden(); } - const publishedEntity = await entityManager.publish(entity, model); + const publishedEntity = await entityManager.publish( + entity, + setCreatorFields({ user, isEdition: true })({}), + model + ); ctx.body = await permissionChecker.sanitizeOutput(publishedEntity); }, async unpublish(ctx) { - const { userAbility } = ctx.state; + const { userAbility, user } = ctx.state; const { model } = ctx.params; const { query = {} } = ctx.request; @@ -162,7 +166,11 @@ module.exports = { return ctx.forbidden(); } - const unpublishedEntity = await entityManager.unpublish(entity, model); + const unpublishedEntity = await entityManager.unpublish( + entity, + setCreatorFields({ user, isEdition: true })({}), + model + ); ctx.body = await permissionChecker.sanitizeOutput(unpublishedEntity); }, diff --git a/packages/core/content-manager/server/services/entity-manager.js b/packages/core/content-manager/server/services/entity-manager.js index 396305177a..2d3d430814 100644 --- a/packages/core/content-manager/server/services/entity-manager.js +++ b/packages/core/content-manager/server/services/entity-manager.js @@ -11,8 +11,8 @@ const { MANY_RELATIONS } = strapiUtils.relations.constants; const omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE); -const wrapWithEmitEvent = (event, fn) => async (entity, model) => { - const result = await fn(entity, model); +const wrapWithEmitEvent = (event, fn) => async (entity, body, model) => { + const result = await fn(entity, body, model); const modelDef = strapi.getModel(model); const sanitizedEntity = await strapiUtils.sanitize.sanitizers.defaultSanitizeOutput( @@ -206,7 +206,7 @@ module.exports = ({ strapi }) => ({ return strapi.entityService.deleteMany(uid, params); }, - publish: wrapWithEmitEvent(ENTRY_PUBLISH, async (entity, uid) => { + publish: wrapWithEmitEvent(ENTRY_PUBLISH, async (entity, body = {}, uid) => { if (entity[PUBLISHED_AT_ATTRIBUTE]) { throw new ApplicationError('already.published'); } @@ -214,19 +214,19 @@ module.exports = ({ strapi }) => ({ // validate the entity is valid for publication await strapi.entityValidator.validateEntityCreation(strapi.getModel(uid), entity); - const data = { [PUBLISHED_AT_ATTRIBUTE]: new Date() }; + const data = { ...body, [PUBLISHED_AT_ATTRIBUTE]: new Date() }; const params = { data, populate: getDeepPopulate(uid) }; return strapi.entityService.update(uid, entity.id, params); }), - unpublish: wrapWithEmitEvent(ENTRY_UNPUBLISH, (entity, uid) => { + unpublish: wrapWithEmitEvent(ENTRY_UNPUBLISH, (entity, body = {}, uid) => { if (!entity[PUBLISHED_AT_ATTRIBUTE]) { throw new ApplicationError('already.draft'); } - const data = { [PUBLISHED_AT_ATTRIBUTE]: null }; + const data = { ...body, [PUBLISHED_AT_ATTRIBUTE]: null }; const params = { data, populate: getDeepPopulate(uid) };