@strapi/content-manager 5.38.0 → 5.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/admin/history/components/VersionContent.js +48 -16
  2. package/dist/admin/history/components/VersionContent.js.map +1 -1
  3. package/dist/admin/history/components/VersionContent.mjs +48 -16
  4. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +51 -0
  6. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  7. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +52 -1
  8. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -2
  10. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +6 -2
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +1 -1
  16. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +1 -1
  18. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +148 -111
  21. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  22. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +152 -115
  23. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  24. package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
  25. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  26. package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
  27. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  28. package/dist/admin/pages/ListView/components/Filters.js +54 -1
  29. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  30. package/dist/admin/pages/ListView/components/Filters.mjs +54 -1
  31. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  32. package/dist/admin/src/exports.d.ts +1 -1
  33. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -0
  34. package/dist/admin/src/utils/conditionalFields.d.ts +12 -0
  35. package/dist/admin/translations/en.json.js +5 -0
  36. package/dist/admin/translations/en.json.js.map +1 -1
  37. package/dist/admin/translations/en.json.mjs +5 -0
  38. package/dist/admin/translations/en.json.mjs.map +1 -1
  39. package/dist/admin/translations/es.json.js +136 -2
  40. package/dist/admin/translations/es.json.js.map +1 -1
  41. package/dist/admin/translations/es.json.mjs +136 -2
  42. package/dist/admin/translations/es.json.mjs.map +1 -1
  43. package/dist/admin/utils/conditionalFields.js +76 -0
  44. package/dist/admin/utils/conditionalFields.js.map +1 -0
  45. package/dist/admin/utils/conditionalFields.mjs +69 -0
  46. package/dist/admin/utils/conditionalFields.mjs.map +1 -0
  47. package/dist/server/controllers/collection-types.js +157 -4
  48. package/dist/server/controllers/collection-types.js.map +1 -1
  49. package/dist/server/controllers/collection-types.mjs +159 -6
  50. package/dist/server/controllers/collection-types.mjs.map +1 -1
  51. package/dist/server/controllers/single-types.js +19 -4
  52. package/dist/server/controllers/single-types.js.map +1 -1
  53. package/dist/server/controllers/single-types.mjs +19 -4
  54. package/dist/server/controllers/single-types.mjs.map +1 -1
  55. package/dist/server/preview/services/preview.js +2 -1
  56. package/dist/server/preview/services/preview.js.map +1 -1
  57. package/dist/server/preview/services/preview.mjs +2 -1
  58. package/dist/server/preview/services/preview.mjs.map +1 -1
  59. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  60. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  61. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  62. package/package.json +13 -8
@@ -1 +1 @@
1
- {"version":3,"file":"collection-types.mjs","sources":["../../../server/src/controllers/collection-types.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\n\nimport { setCreatorFields, async, errors } from '@strapi/utils';\nimport type { Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateBulkActionInput } from './validation';\nimport { getProhibitedCloningFields, excludeNotCreatableFields } from './utils/clone';\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { indexByDocumentId } from './utils/document-status';\n\ntype Options = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\n/**\n * Create a new document.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document.\n * By default documentManager will populate all relations.\n */\nconst createDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const { locale, status } = await getDocumentLocaleAndStatus(body, model);\n\n return documentManager.create(model, {\n data: sanitizedBody as any,\n locale,\n status,\n populate: opts?.populate,\n });\n\n // TODO: Revert the creation if create permission conditions are not met\n // if (permissionChecker.cannot.create(document)) {\n // throw new errors.ForbiddenError();\n // }\n};\n\n/**\n * Update a document version.\n * - If the document version exists, it will be updated.\n * - If the document version does not exist, a new document locale will be created.\n * By default documentManager will populate all relations.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document\n */\nconst updateDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n // Populate necessary fields to check permissions\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, documentExists] = await Promise.all([\n documentManager.findOne(id, model, { populate, locale, status: 'draft' }),\n documentManager.exists(model, id),\n ]);\n\n if (!documentExists) {\n throw new errors.NotFoundError();\n }\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n\n return updatedDocument;\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n\n const documentMetadata = getService('document-metadata');\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(1)\n .countRelations({ toOne: false, toMany: true })\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const { results: documents, pagination } = await documentManager.findPage(\n { ...permissionQuery, populate, locale, status },\n model\n );\n\n // TODO: Skip this part if not necessary (if D&P disabled or columns not displayed in the view)\n const documentsAvailableStatus = await documentMetadata.getManyAvailableStatus(\n model,\n documents\n );\n\n const statusByDocumentId = indexByDocumentId(documentsAvailableStatus);\n\n const setStatus = (document: any) => {\n // Available status of document\n const availableStatuses = statusByDocumentId.get(document.documentId) || [];\n // Compute document version status\n document.status = documentMetadata.getStatus(document, availableStatuses);\n return document;\n };\n\n const results = await async.map(\n documents,\n async.pipe(permissionChecker.sanitizeOutput, setStatus)\n );\n\n ctx.body = {\n results,\n pagination,\n };\n },\n\n async findOne(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n const version = await documentManager.findOne(id, model, {\n populate,\n locale,\n status,\n });\n\n if (!version) {\n // Check if document exists\n const exists = await documentManager.exists(model, id);\n if (!exists) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error TODO: fix\n { documentId: id, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n\n ctx.body = { data: {}, meta };\n\n return;\n }\n\n // if the user has condition that needs populated content, it's not applied because entity don't have relations populated\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n // TODO: Count populated relations by permissions\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async create(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const [totalEntries, document] = await Promise.all([\n strapi.db.query(model).count(),\n createDocument(ctx),\n ]);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.status = 201;\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n\n if (totalEntries === 0) {\n strapi.telemetry.send('didCreateFirstContentTypeEntry', {\n eventProperties: { model },\n });\n }\n },\n\n async update(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const updatedVersion = await updateDocument(ctx);\n\n const sanitizedVersion = await permissionChecker.sanitizeOutput(updatedVersion);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedVersion);\n },\n\n async clone(ctx: any) {\n const { userAbility, user } = ctx.state;\n const { model, sourceId: id } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.create(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'draft',\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const excludeNotCreatable = excludeNotCreatableFields(model, permissionChecker);\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any, excludeNotCreatable);\n const sanitizedBody = await sanitizeFn(body);\n\n const clonedDocument = await documentManager.clone(document.documentId, sanitizedBody, model);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(clonedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n },\n\n async autoClone(ctx: any) {\n const { model } = ctx.params;\n\n // Check if the model has fields that prevent auto cloning\n const prohibitedFields = getProhibitedCloningFields(model);\n\n if (prohibitedFields.length > 0) {\n return ctx.badRequest(\n 'Entity could not be cloned as it has unique and/or relational fields. ' +\n 'Please edit those fields manually and save to complete the cloning.',\n {\n prohibitedFields,\n }\n );\n }\n\n await this.clone(ctx);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n // Find locales to delete\n const documentLocales = await documentManager.findLocales(id, model, { populate, locale });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const result = await documentManager.delete(id, model, { locale });\n\n ctx.body = await permissionChecker.sanitizeOutput(result);\n },\n\n /**\n * Publish a document version.\n * Supports creating/saving a document and publishing it in one request.\n */\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n // If id does not exist, the document has to be created\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n // Create or update document\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n let document: any;\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n /**\n * Publish can be called on two scenarios:\n * 1. Create a new document and publish it in one request\n * 2. Update an existing document and publish it in one request\n *\n * Based on user permissions:\n * 1. User cannot create a document, but can publish\n * Action will be forbidden as user cannot create a document\n * 2. User can update and publish a document\n * Action will be allowed, but document will not be updated, only published with the latest draft\n */\n const isCreate = isNil(id);\n if (isCreate) {\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n document = await createDocument(ctx, { populate });\n }\n\n const isUpdate = !isCreate;\n if (isUpdate) {\n // check if the document exists\n const documentExists = await documentManager.exists(model, id);\n\n if (!documentExists) {\n throw new errors.NotFoundError('Document not found');\n }\n\n // check the document version\n document = await documentManager.findOne(id!, model, { populate, locale });\n\n if (!document) {\n // update and publish the new version\n if (\n permissionChecker.cannot.create({ locale }) ||\n permissionChecker.cannot.publish({ locale })\n ) {\n throw new errors.ForbiddenError();\n }\n document = await updateDocument(ctx);\n } else if (permissionChecker.can.update(document)) {\n await updateDocument(ctx);\n }\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, {\n locale,\n // TODO: Allow setting creator fields on publish\n // data: setCreatorFields({ user, isEdition: true })({}),\n });\n\n if (!publishResult || publishResult.length === 0) {\n throw new errors.NotFoundError('Document not found or already published.');\n }\n\n return publishResult[0];\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async bulkPublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entityPromises = documentIds.map((documentId: any) =>\n documentManager.findLocales(documentId, model, { populate, locale, isPublished: false })\n );\n const entities = (await Promise.all(entityPromises)).flat();\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const count = await documentManager.publishMany(model, documentIds, locale);\n ctx.body = { count };\n },\n\n async bulkUnpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entityPromises = documentIds.map((documentId: any) =>\n documentManager.findLocales(documentId, model, { locale, isPublished: true })\n );\n const entities = (await Promise.all(entityPromises)).flat();\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const entitiesIds = entities.map((document) => document.documentId);\n\n const { count } = await documentManager.unpublishMany(entitiesIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n // TODO allow multiple locales for bulk locale unpublish\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n throw new errors.ForbiddenError();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n throw new errors.ForbiddenError();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.discard(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async bulkDelete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query, body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const documentLocales = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n // We filter out documentsIds that maybe doesn't exist in a specific locale\n const localeDocumentsIds = documentLocales.map((document) => document.documentId);\n\n const { count } = await documentManager.deleteMany(localeDocumentsIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n if (permissionChecker.requiresEntity.read()) {\n // Only load what we need for access checks\n const entity = await documentManager.findOne(id, model, {\n locale,\n status,\n populate: {},\n });\n\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(entity)) {\n return ctx.forbidden();\n }\n }\n\n const number = await documentManager.countDraftRelations(id, model, locale);\n\n return {\n data: number,\n };\n },\n\n async countManyEntriesDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const ids = ctx.request.query.documentIds as string[];\n const locale = ctx.request.query.locale as string[];\n const { model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const documents = await documentManager.findMany(\n {\n filters: {\n documentId: ids,\n },\n locale,\n },\n model\n );\n\n if (!documents) {\n return ctx.notFound();\n }\n\n const number = await documentManager.countManyEntriesDraftRelations(ids, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["createDocument","ctx","opts","userAbility","user","state","model","params","body","request","documentManager","getService","permissionChecker","create","cannot","errors","ForbiddenError","pickPermittedFields","sanitizeCreateInput","setCreator","setCreatorFields","sanitizeFn","async","pipe","sanitizedBody","locale","status","getDocumentLocaleAndStatus","data","populate","updateDocument","id","update","permissionQuery","sanitizedQuery","query","populateFromQuery","build","documentVersion","documentExists","Promise","all","findOne","exists","NotFoundError","sanitizeUpdateInput","isEdition","updatedDocument","documentId","find","documentMetadata","read","forbidden","populateDeep","countRelations","toOne","toMany","results","documents","pagination","findPage","documentsAvailableStatus","getManyAvailableStatus","statusByDocumentId","indexByDocumentId","setStatus","document","availableStatuses","get","getStatus","map","sanitizeOutput","Infinity","version","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","totalEntries","strapi","db","count","telemetry","send","eventProperties","updatedVersion","sanitizedVersion","clone","sourceId","excludeNotCreatable","excludeNotCreatableFields","clonedDocument","autoClone","prohibitedFields","getProhibitedCloningFields","length","badRequest","delete","documentLocales","findLocales","result","publish","publishedDocument","transaction","isCreate","isNil","isUpdate","can","publishResult","bulkPublish","documentIds","validateBulkActionInput","allowMultipleLocales","entityPromises","isPublished","entities","flat","entity","publishMany","bulkUnpublish","unpublish","entitiesIds","unpublishMany","discardDraft","discard","bulkDelete","localeDocumentsIds","deleteMany","countDraftRelations","requiresEntity","number","countManyEntriesDraftRelations","ids","findMany","filters"],"mappings":"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"}
1
+ {"version":3,"file":"collection-types.mjs","sources":["../../../server/src/controllers/collection-types.ts"],"sourcesContent":["import { isNil, omit } from 'lodash/fp';\n\nimport { setCreatorFields, async, errors, contentTypes } from '@strapi/utils';\nimport type { Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateBulkActionInput } from './validation';\nimport { getProhibitedCloningFields, excludeNotCreatableFields } from './utils/clone';\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { indexByDocumentId } from './utils/document-status';\n\n/**\n * Returns documentIds for (documentId, locale) that have both draft and published,\n * optionally filtered by whether the draft is newer than the published row.\n * Uses strapi.documents only.\n */\nconst getDocumentIdsByDraftPublishRelation = async (\n uid: UID.ContentType,\n opts: {\n locale?: string | string[] | null;\n type: 'modified' | 'unmodified';\n }\n): Promise<string[]> => {\n const schema = strapi.getModel(uid);\n if (!contentTypes.hasDraftAndPublish(schema)) {\n return [];\n }\n\n const baseParams = {\n fields: ['documentId', 'locale', 'updatedAt'],\n page: 1,\n pageSize: 10000,\n ...(opts.locale != null &&\n opts.locale !== '*' && {\n locale: opts.locale as string,\n }),\n };\n\n const [drafts, published] = await Promise.all([\n strapi.documents(uid).findMany({ ...baseParams, status: 'draft' }),\n strapi.documents(uid).findMany({ ...baseParams, status: 'published' }),\n ]);\n\n const publishedByKey = new Map<string, { updatedAt: string }>();\n for (const p of published) {\n const key = `${p.documentId}\\t${String(p?.locale ?? '')}`;\n publishedByKey.set(key, { updatedAt: p.updatedAt as string });\n }\n\n const ids: string[] = [];\n const wantModified = opts.type === 'modified';\n for (const d of drafts) {\n const key = `${d.documentId}\\t${String(d?.locale ?? '')}`;\n const pub = publishedByKey.get(key);\n if (pub) {\n const dUpdated = d?.updatedAt ? new Date(d.updatedAt as string).getTime() : 0;\n const pUpdated = pub?.updatedAt ? new Date(pub.updatedAt).getTime() : 0;\n const isModified = dUpdated > pUpdated;\n if (isModified === wantModified) {\n ids.push(d.documentId as string);\n }\n }\n }\n return [...new Set(ids)];\n};\n\n/** Map from __status filter value to top-level query fields (mirrors client STATUS_PARAMS). */\nconst STATUS_QUERY_FROM_FILTER: Record<string, Record<string, string>> = {\n draft: { status: 'draft', hasPublishedVersion: 'false' },\n published: { status: 'published' },\n 'published-modified': { publicationStatusFilter: 'published-modified' },\n 'published-unmodified': { publicationStatusFilter: 'published-unmodified' },\n};\n\n/**\n * Extracts __status from query.filters.$and into top-level status, hasPublishedVersion,\n * and publicationStatusFilter so list works with either transformed params or raw filter params.\n */\nconst normalizeStatusFromFilters = (query: Record<string, unknown>): void => {\n const filters = query.filters as Record<string, unknown> | undefined;\n if (!filters?.$and || !Array.isArray(filters.$and)) return;\n\n const remainingFilters: unknown[] = [];\n const statusValues: string[] = [];\n\n for (const filter of filters.$and as Record<string, unknown>[]) {\n const eq = (filter?.__status as Record<string, unknown>)?.$eq;\n if (eq != null) {\n statusValues.push(String(eq));\n } else {\n remainingFilters.push(filter);\n }\n }\n\n if (statusValues.length === 0) return;\n\n const q = query as Record<string, unknown>;\n for (const value of statusValues) {\n const toApply = STATUS_QUERY_FROM_FILTER[value];\n if (toApply) Object.assign(q, toApply);\n }\n\n if (remainingFilters.length > 0) {\n (filters as Record<string, unknown>).$and = remainingFilters;\n } else {\n delete q.filters;\n }\n};\n\n/** Returns filters object that merges existing $and with a documentId $in filter. */\nconst mergeDocumentIdFilter = (\n existingFilters: Record<string, unknown> | undefined,\n documentIds: string[]\n): Record<string, unknown> => {\n const documentIdFilter = {\n documentId: documentIds.length > 0 ? { $in: documentIds } : { $in: [] },\n };\n let existingAnd: unknown[];\n if (existingFilters?.$and && Array.isArray(existingFilters.$and)) {\n existingAnd = existingFilters.$and;\n } else if (existingFilters && Object.keys(existingFilters).length > 0) {\n existingAnd = [existingFilters];\n } else {\n existingAnd = [];\n }\n return { $and: [...existingAnd, documentIdFilter] };\n};\n\ntype Options = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\n/**\n * Create a new document.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document.\n * By default documentManager will populate all relations.\n */\nconst createDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const { locale, status } = await getDocumentLocaleAndStatus(body, model);\n\n return documentManager.create(model, {\n data: sanitizedBody as any,\n locale,\n status,\n populate: opts?.populate,\n });\n\n // TODO: Revert the creation if create permission conditions are not met\n // if (permissionChecker.cannot.create(document)) {\n // throw new errors.ForbiddenError();\n // }\n};\n\n/**\n * Update a document version.\n * - If the document version exists, it will be updated.\n * - If the document version does not exist, a new document locale will be created.\n * By default documentManager will populate all relations.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document\n */\nconst updateDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n // Populate necessary fields to check permissions\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, documentExists] = await Promise.all([\n documentManager.findOne(id, model, { populate, locale, status: 'draft' }),\n documentManager.exists(model, id),\n ]);\n\n if (!documentExists) {\n throw new errors.NotFoundError();\n }\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n\n return updatedDocument;\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n\n // Normalize so status/publicationStatusFilter are set from filters.$and.__status when present\n normalizeStatusFromFilters(query as Record<string, unknown>);\n\n const documentMetadata = getService('document-metadata');\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(1)\n .countRelations({ toOne: false, toMany: true })\n .build();\n\n // \"Modified\" is a UI-only filter; not a real document status. Read and strip it\n // so we never pass it to validation or the document service.\n const publicationStatusFilter = query.publicationStatusFilter;\n const queryForValidation = { ...query };\n delete queryForValidation.publicationStatusFilter;\n\n const { locale, status } = await getDocumentLocaleAndStatus(queryForValidation, model);\n\n const paramsForDocumentService = omit(['publicationStatusFilter'], permissionQuery) as Record<\n string,\n unknown\n >;\n let findPageParams: Record<string, unknown> = {\n ...paramsForDocumentService,\n populate,\n locale,\n status,\n };\n\n // Pass through hasPublishedVersion so \"Draft\" filter returns only drafts with no published version\n if (query.hasPublishedVersion !== undefined) {\n findPageParams.hasPublishedVersion = query.hasPublishedVersion;\n }\n\n if (\n publicationStatusFilter === 'published-modified' ||\n publicationStatusFilter === 'published-unmodified'\n ) {\n const type = publicationStatusFilter === 'published-modified' ? 'modified' : 'unmodified';\n const documentIds = await getDocumentIdsByDraftPublishRelation(model, { locale, type });\n findPageParams = {\n ...findPageParams,\n status: 'published',\n filters: mergeDocumentIdFilter(\n paramsForDocumentService.filters as Record<string, unknown> | undefined,\n documentIds\n ),\n };\n }\n\n const { results: documents, pagination } = await documentManager.findPage(\n findPageParams as Parameters<typeof documentManager.findPage>[0],\n model\n );\n\n // TODO: Skip this part if not necessary (if D&P disabled or columns not displayed in the view)\n const documentsAvailableStatus = await documentMetadata.getManyAvailableStatus(\n model,\n documents\n );\n\n const statusByDocumentId = indexByDocumentId(documentsAvailableStatus);\n\n const setStatus = (document: any) => {\n // Available status of document\n const availableStatuses = statusByDocumentId.get(document.documentId) || [];\n // Compute document version status\n document.status = documentMetadata.getStatus(document, availableStatuses);\n return document;\n };\n\n const results = await async.map(\n documents,\n async.pipe(permissionChecker.sanitizeOutput, setStatus)\n );\n\n ctx.body = {\n results,\n pagination,\n };\n },\n\n async findOne(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n const version = await documentManager.findOne(id, model, {\n populate,\n locale,\n status,\n });\n\n if (!version) {\n // Check if document exists\n const exists = await documentManager.exists(model, id);\n if (!exists) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error TODO: fix\n { documentId: id, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n\n ctx.body = { data: {}, meta };\n\n return;\n }\n\n // if the user has condition that needs populated content, it's not applied because entity don't have relations populated\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n // TODO: Count populated relations by permissions\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async create(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const [totalEntries, document] = await Promise.all([\n strapi.db.query(model).count(),\n createDocument(ctx),\n ]);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.status = 201;\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n\n if (totalEntries === 0) {\n strapi.telemetry.send('didCreateFirstContentTypeEntry', {\n eventProperties: { model },\n });\n }\n },\n\n async update(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const updatedVersion = await updateDocument(ctx);\n\n const sanitizedVersion = await permissionChecker.sanitizeOutput(updatedVersion);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedVersion);\n },\n\n async clone(ctx: any) {\n const { userAbility, user } = ctx.state;\n const { model, sourceId: id } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.create(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'draft',\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const excludeNotCreatable = excludeNotCreatableFields(model, permissionChecker);\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any, excludeNotCreatable);\n const sanitizedBody = await sanitizeFn(body);\n\n const clonedDocument = await documentManager.clone(document.documentId, sanitizedBody, model);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(clonedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n },\n\n async autoClone(ctx: any) {\n const { model } = ctx.params;\n\n // Check if the model has fields that prevent auto cloning\n const prohibitedFields = getProhibitedCloningFields(model);\n\n if (prohibitedFields.length > 0) {\n return ctx.badRequest(\n 'Entity could not be cloned as it has unique and/or relational fields. ' +\n 'Please edit those fields manually and save to complete the cloning.',\n {\n prohibitedFields,\n }\n );\n }\n\n await this.clone(ctx);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n // Find locales to delete\n const documentLocales = await documentManager.findLocales(id, model, { populate, locale });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const result = await documentManager.delete(id, model, { locale });\n\n ctx.body = await permissionChecker.sanitizeOutput(result);\n },\n\n /**\n * Publish a document version.\n * Supports creating/saving a document and publishing it in one request.\n */\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n // If id does not exist, the document has to be created\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n // Create or update document\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n let document: any;\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n /**\n * Publish can be called on two scenarios:\n * 1. Create a new document and publish it in one request\n * 2. Update an existing document and publish it in one request\n *\n * Based on user permissions:\n * 1. User cannot create a document, but can publish\n * Action will be forbidden as user cannot create a document\n * 2. User can update and publish a document\n * Action will be allowed, but document will not be updated, only published with the latest draft\n */\n const isCreate = isNil(id);\n if (isCreate) {\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n document = await createDocument(ctx, { populate });\n }\n\n const isUpdate = !isCreate;\n if (isUpdate) {\n // check if the document exists\n const documentExists = await documentManager.exists(model, id);\n\n if (!documentExists) {\n throw new errors.NotFoundError('Document not found');\n }\n\n // check the document version\n document = await documentManager.findOne(id!, model, { populate, locale });\n\n if (!document) {\n // update and publish the new version\n if (\n permissionChecker.cannot.create({ locale }) ||\n permissionChecker.cannot.publish({ locale })\n ) {\n throw new errors.ForbiddenError();\n }\n document = await updateDocument(ctx);\n } else if (permissionChecker.can.update(document)) {\n await updateDocument(ctx);\n }\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, {\n locale,\n // TODO: Allow setting creator fields on publish\n // data: setCreatorFields({ user, isEdition: true })({}),\n });\n\n if (!publishResult || publishResult.length === 0) {\n throw new errors.NotFoundError('Document not found or already published.');\n }\n\n return publishResult[0];\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async bulkPublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entityPromises = documentIds.map((documentId: any) =>\n documentManager.findLocales(documentId, model, { populate, locale, isPublished: false })\n );\n const entities = (await Promise.all(entityPromises)).flat();\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const count = await documentManager.publishMany(model, documentIds, locale);\n ctx.body = { count };\n },\n\n async bulkUnpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entityPromises = documentIds.map((documentId: any) =>\n documentManager.findLocales(documentId, model, { locale, isPublished: true })\n );\n const entities = (await Promise.all(entityPromises)).flat();\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const entitiesIds = entities.map((document) => document.documentId);\n\n const { count } = await documentManager.unpublishMany(entitiesIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n // TODO allow multiple locales for bulk locale unpublish\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n throw new errors.ForbiddenError();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n throw new errors.ForbiddenError();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.discard(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async bulkDelete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query, body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const documentLocales = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n // We filter out documentsIds that maybe doesn't exist in a specific locale\n const localeDocumentsIds = documentLocales.map((document) => document.documentId);\n\n const { count } = await documentManager.deleteMany(localeDocumentsIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n if (permissionChecker.requiresEntity.read()) {\n // Only load what we need for access checks\n const entity = await documentManager.findOne(id, model, {\n locale,\n status,\n populate: {},\n });\n\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(entity)) {\n return ctx.forbidden();\n }\n }\n\n const number = await documentManager.countDraftRelations(id, model, locale);\n\n return {\n data: number,\n };\n },\n\n async countManyEntriesDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const ids = ctx.request.query.documentIds as string[];\n const locale = ctx.request.query.locale as string[];\n const { model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const documents = await documentManager.findMany(\n {\n filters: {\n documentId: ids,\n },\n locale,\n },\n model\n );\n\n if (!documents) {\n return ctx.notFound();\n }\n\n const number = await documentManager.countManyEntriesDraftRelations(ids, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["getDocumentIdsByDraftPublishRelation","uid","opts","schema","strapi","getModel","contentTypes","hasDraftAndPublish","baseParams","fields","page","pageSize","locale","drafts","published","Promise","all","documents","findMany","status","publishedByKey","Map","p","key","documentId","String","set","updatedAt","ids","wantModified","type","d","pub","get","dUpdated","Date","getTime","pUpdated","isModified","push","Set","STATUS_QUERY_FROM_FILTER","draft","hasPublishedVersion","publicationStatusFilter","normalizeStatusFromFilters","query","filters","$and","Array","isArray","remainingFilters","statusValues","filter","eq","__status","$eq","length","q","value","toApply","Object","assign","mergeDocumentIdFilter","existingFilters","documentIds","documentIdFilter","$in","existingAnd","keys","createDocument","ctx","userAbility","user","state","model","params","body","request","documentManager","getService","permissionChecker","create","cannot","errors","ForbiddenError","pickPermittedFields","sanitizeCreateInput","setCreator","setCreatorFields","sanitizeFn","async","pipe","sanitizedBody","getDocumentLocaleAndStatus","data","populate","updateDocument","id","update","permissionQuery","sanitizedQuery","populateFromQuery","build","documentVersion","documentExists","findOne","exists","NotFoundError","sanitizeUpdateInput","isEdition","updatedDocument","find","documentMetadata","read","forbidden","populateDeep","countRelations","toOne","toMany","queryForValidation","paramsForDocumentService","omit","findPageParams","undefined","results","pagination","findPage","documentsAvailableStatus","getManyAvailableStatus","statusByDocumentId","indexByDocumentId","setStatus","document","availableStatuses","getStatus","map","sanitizeOutput","Infinity","version","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","totalEntries","db","count","telemetry","send","eventProperties","updatedVersion","sanitizedVersion","clone","sourceId","excludeNotCreatable","excludeNotCreatableFields","clonedDocument","autoClone","prohibitedFields","getProhibitedCloningFields","badRequest","delete","documentLocales","findLocales","result","publish","publishedDocument","transaction","isCreate","isNil","isUpdate","can","publishResult","bulkPublish","validateBulkActionInput","allowMultipleLocales","entityPromises","isPublished","entities","flat","entity","publishMany","bulkUnpublish","unpublish","entitiesIds","unpublishMany","discardDraft","discard","bulkDelete","localeDocumentsIds","deleteMany","countDraftRelations","requiresEntity","number","countManyEntriesDraftRelations"],"mappings":"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"}
@@ -172,7 +172,7 @@ var singleTypes = {
172
172
  async publish (ctx) {
173
173
  const { userAbility } = ctx.state;
174
174
  const { model } = ctx.params;
175
- const { query = {} } = ctx.request;
175
+ const { body, query = {} } = ctx.request;
176
176
  const documentManager = index.getService('document-manager');
177
177
  const permissionChecker = index.getService('permission-checker').create({
178
178
  userAbility,
@@ -184,16 +184,31 @@ var singleTypes = {
184
184
  const publishedDocument = await strapi.db.transaction(async ()=>{
185
185
  const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);
186
186
  const populate = await buildPopulateFromQuery(sanitizedQuery, model);
187
- const document = await createOrUpdateDocument(ctx, {
188
- populate
187
+ const { locale } = await dimensions.getDocumentLocaleAndStatus(body, model);
188
+ // Find the existing document
189
+ let document = await findDocument(sanitizedQuery, model, {
190
+ locale,
191
+ status: 'draft'
189
192
  });
193
+ // If document exists and user can update it, update it before publishing
194
+ const shouldUpdate = document && permissionChecker.can.update(document);
195
+ // If document doesn't exist and user can create it, create it before publishing
196
+ const shouldCreate = !document && permissionChecker.can.create();
197
+ if (shouldUpdate || shouldCreate) {
198
+ document = await createOrUpdateDocument(ctx, {
199
+ populate
200
+ });
201
+ } else if (!document) {
202
+ // Document doesn't exist and user can't create it
203
+ throw new strapiUtils.errors.ForbiddenError();
204
+ }
205
+ // If document doesn't exist, throw an error
190
206
  if (!document) {
191
207
  throw new strapiUtils.errors.NotFoundError();
192
208
  }
193
209
  if (permissionChecker.cannot.publish(document)) {
194
210
  throw new strapiUtils.errors.ForbiddenError();
195
211
  }
196
- const { locale } = await dimensions.getDocumentLocaleAndStatus(document, model);
197
212
  const publishResult = await documentManager.publish(document.documentId, model, {
198
213
  locale
199
214
  });
@@ -1 +1 @@
1
- {"version":3,"file":"single-types.js","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const document = await createOrUpdateDocument(ctx, { populate });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(document, model);\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const number = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","number"],"mappings":"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"}
1
+ {"version":3,"file":"single-types.js","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const number = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","number"],"mappings":"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"}
@@ -170,7 +170,7 @@ var singleTypes = {
170
170
  async publish (ctx) {
171
171
  const { userAbility } = ctx.state;
172
172
  const { model } = ctx.params;
173
- const { query = {} } = ctx.request;
173
+ const { body, query = {} } = ctx.request;
174
174
  const documentManager = getService('document-manager');
175
175
  const permissionChecker = getService('permission-checker').create({
176
176
  userAbility,
@@ -182,16 +182,31 @@ var singleTypes = {
182
182
  const publishedDocument = await strapi.db.transaction(async ()=>{
183
183
  const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);
184
184
  const populate = await buildPopulateFromQuery(sanitizedQuery, model);
185
- const document = await createOrUpdateDocument(ctx, {
186
- populate
185
+ const { locale } = await getDocumentLocaleAndStatus(body, model);
186
+ // Find the existing document
187
+ let document = await findDocument(sanitizedQuery, model, {
188
+ locale,
189
+ status: 'draft'
187
190
  });
191
+ // If document exists and user can update it, update it before publishing
192
+ const shouldUpdate = document && permissionChecker.can.update(document);
193
+ // If document doesn't exist and user can create it, create it before publishing
194
+ const shouldCreate = !document && permissionChecker.can.create();
195
+ if (shouldUpdate || shouldCreate) {
196
+ document = await createOrUpdateDocument(ctx, {
197
+ populate
198
+ });
199
+ } else if (!document) {
200
+ // Document doesn't exist and user can't create it
201
+ throw new errors.ForbiddenError();
202
+ }
203
+ // If document doesn't exist, throw an error
188
204
  if (!document) {
189
205
  throw new errors.NotFoundError();
190
206
  }
191
207
  if (permissionChecker.cannot.publish(document)) {
192
208
  throw new errors.ForbiddenError();
193
209
  }
194
- const { locale } = await getDocumentLocaleAndStatus(document, model);
195
210
  const publishResult = await documentManager.publish(document.documentId, model, {
196
211
  locale
197
212
  });