Skip to content

Commit

Permalink
Merge pull request strapi#11627 from strapi/v4/pub-unpub-update-by
Browse files Browse the repository at this point in the history
Update updatedBy on publish / unpublish actions in the CM
  • Loading branch information
alexandrebodin authored Nov 19, 2021
2 parents bb74074 + 997882c commit 0c07893
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ describe('Single Types', () => {

await singleTypes.publish(ctx);

expect(publishFn).toHaveBeenCalledWith(entity, modelUid);
expect(publishFn).toHaveBeenCalledWith(entity, { updatedBy: state.user.id }, modelUid);
expect(permissionChecker.cannot.publish).toHaveBeenCalledWith(entity);
expect(permissionChecker.sanitizeOutput).toHaveBeenCalled();
});
Expand Down Expand Up @@ -461,7 +461,7 @@ describe('Single Types', () => {

await singleTypes.unpublish(ctx);

expect(unpublishFn).toHaveBeenCalledWith(entity, modelUid);
expect(unpublishFn).toHaveBeenCalledWith(entity, { updatedBy: state.user.id }, modelUid);
expect(permissionChecker.cannot.unpublish).toHaveBeenCalledWith(entity);
expect(permissionChecker.sanitizeOutput).toHaveBeenCalled();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand All @@ -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');
Expand All @@ -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);
},
Expand Down
16 changes: 12 additions & 4 deletions packages/core/content-manager/server/controllers/single-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;

Expand All @@ -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);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ describe('Content-Manager', () => {
test('Publish a content-type', async () => {
const uid = 'api::test.test';
const entity = { id: 1, publishedAt: null };
await entityManager.publish(entity, uid);
await entityManager.publish(entity, {}, uid);

expect(strapi.entityService.update).toBeCalledWith(uid, entity.id, {
data: { publishedAt: expect.any(Date) },
Expand Down Expand Up @@ -60,7 +60,7 @@ describe('Content-Manager', () => {
test('Unpublish a content-type', async () => {
const uid = 'api::test.test';
const entity = { id: 1, publishedAt: new Date() };
await entityManager.unpublish(entity, uid);
await entityManager.unpublish(entity, {}, uid);

expect(strapi.entityService.update).toHaveBeenCalledWith(uid, entity.id, {
data: { publishedAt: null },
Expand Down
12 changes: 6 additions & 6 deletions packages/core/content-manager/server/services/entity-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -206,27 +206,27 @@ 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');
}

// 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) };

Expand Down

0 comments on commit 0c07893

Please sign in to comment.