@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 3.45 kB
JavaScript
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../libs/repositories/document-publish-operations.mjs";import n from"../collections/get-single-instance.mjs";import{canUsePublishOperationsForTarget as r,collectionTargetSupportsScheduling as i,hasCollectionPermission as a,parseScheduleInput as o}from"./helpers/index.mjs";import s from"./helpers/create-event.mjs";import c from"./schedule-approved.mjs";import l from"./helpers/normalize-comment.mjs";import u from"./notifications.mjs";const d=async(d,f)=>{let p=new t(d.db.client,d.config.db),m=await p.selectSingleDetailed({tenantKey:d.request.tenantKey,where:[{key:`lucid_document_publish_operations.id`,operator:`=`,value:f.id}]});if(m.error)return m;if(m.data?.status!==`pending`)return{error:{type:`basic`,message:e(`server:core.publish.requests.not.pending`),status:400},data:void 0};let h=n(d,{key:m.data.collection_key});if(h.error)return h;let g=o({scheduledAt:f.scheduledAt,scheduledTimezone:f.scheduledTimezone});if(g.error)return{error:g.error,data:void 0};let _=g.data,v=f.bypassReviewChecks===!0;if(!v&&!r({collection:h.data,target:m.data.target}))return{error:{type:`basic`,message:e(`server:core.publish.requests.target.not.enabled`),status:400},data:void 0};if(!v&&!a({user:f.user,collection:h.data,action:`review`}))return{error:{type:`basic`,name:e(`server:core.collections.permission.error.name`),message:e(`server:core.collections.permission.error.message`,{data:{collection:m.data.collection_key,action:`review`}}),status:403},data:void 0};if(!v&&h.data.getData.review?.allowSelfApproval===!1&&m.data.requested_by===f.user.id)return{error:{type:`basic`,message:e(`server:core.publish.requests.self.approval.not.allowed`),status:403},data:void 0};let y=l(f.comment);if(!v&&h.data.getData.review?.comments.decision===`required`&&!y.text)return{error:{type:`basic`,message:e(`server:core.publish.requests.decision.comment.required`),status:400},data:void 0};if(_?.scheduledAt&&!i({collection:h.data,target:m.data.target,queueSupportsScheduling:d.queue.support.scheduling}))return{error:{type:`basic`,message:e(`server:core.publish.operations.schedule.not.supported`),status:400},data:void 0};let b=new Date().toISOString(),x=_?.provided===!0?{scheduled_at:_.scheduledAt,scheduled_timezone:_.scheduledTimezone}:{},S=await p.updateSingle({where:[{key:`id`,operator:`=`,value:m.data.id}],data:{status:`approved`,decided_by:f.user.id,decision_comment:y.value,decided_at:b,...x,updated_at:b}});if(S.error)return S;let C=await s(d,{operation:m.data,collectionInstance:h.data,event:{type:`approved`,userId:f.user.id,comment:y.text,metadata:{target:m.data.target}}});if(C.error)return C;let w=await c(d,{id:m.data.id,userId:f.user.id,eventType:`scheduled`});if(w.error)return w;let T=f.suppressRequesterNotification!==!0&&m.data.requested_by&&m.data.requested_by_email?[{id:m.data.requested_by,email:m.data.requested_by_email}]:[],E=await u(d,{operationId:m.data.id,collectionKey:m.data.collection_key,documentId:m.data.document_id,recipients:T,title:e(`server:core.publish.requests.approved.title`),message:e(`server:core.publish.requests.approved.message`,{data:{user:f.user.email,collection:m.data.collection_key,documentId:m.data.document_id}}),dedupeAction:`approved`,comment:{label:e(`server:core.publish.requests.email.decision.comment`),value:y.text,html:y.html}});return E.error?E:{error:void 0,data:void 0}};export{d as default};
//# sourceMappingURL=approve.mjs.map