diff --git a/server/emails/templates/CommentCreatedEmail.tsx b/server/emails/templates/CommentCreatedEmail.tsx index cc90937d5394..3396caa272be 100644 --- a/server/emails/templates/CommentCreatedEmail.tsx +++ b/server/emails/templates/CommentCreatedEmail.tsx @@ -24,7 +24,7 @@ type InputProps = EmailProps & { type BeforeSend = { document: Document; - collection: Collection; + collection: Collection | null; body: string | undefined; isFirstComment: boolean; isReply: boolean; @@ -52,14 +52,10 @@ export default class CommentCreatedEmail extends BaseEmail< return false; } - const collection = await document.$get("collection"); - if (!collection) { - return false; - } - - const [comment, team] = await Promise.all([ + const [comment, team, collection] = await Promise.all([ Comment.findByPk(commentId), document.$get("team"), + document.$get("collection"), ]); if (!comment || !team) { return false; @@ -129,7 +125,7 @@ export default class CommentCreatedEmail extends BaseEmail< return ` ${actorName} ${isReply ? "replied to a thread in" : "commented on"} "${ document.title - }"${collection.name ? `in the ${collection.name} collection` : ""}. + }"${collection?.name ? `in the ${collection.name} collection` : ""}. Open Thread: ${teamUrl}${document.url}?commentId=${commentId} `; @@ -160,7 +156,7 @@ Open Thread: ${teamUrl}${document.url}?commentId=${commentId}
{actorName} {isReply ? "replied to a thread in" : "commented on"}{" "} {document.title}{" "} - {collection.name ? `in the ${collection.name} collection` : ""}. + {collection?.name ? `in the ${collection.name} collection` : ""}.
{body && ( <> diff --git a/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx b/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx index f5d4b34fc0fc..87057dcff5d2 100644 --- a/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx +++ b/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx @@ -31,7 +31,7 @@ type InputProps = EmailProps & { type BeforeSend = { document: Document; - collection: Collection; + collection: Collection | null; unsubscribeUrl: string; body: string | undefined; }; @@ -63,9 +63,6 @@ export default class DocumentPublishedOrUpdatedEmail extends BaseEmail< document.$get("collection"), document.$get("team"), ]); - if (!collection) { - return false; - } let body; if (revisionId && team?.getPreference(TeamPreference.PreviewsInEmails)) { @@ -149,7 +146,9 @@ export default class DocumentPublishedOrUpdatedEmail extends BaseEmail< return ` "${document.title}" ${eventName} -${actorName} ${eventName} the document "${document.title}", in the ${collection.name} collection. +${actorName} ${eventName} the document "${document.title}"${ + collection?.name ? `, in the ${collection.name} collection` : "" + }. Open Document: ${teamUrl}${document.url} `; @@ -181,8 +180,9 @@ Open Document: ${teamUrl}${document.url}{actorName} {eventName} the document{" "} - {document.title}, in the{" "} - {collection.name} collection. + {document.title} + {collection?.name ? <>, in the {collection.name} collection> : ""} + .
{body && ( <> diff --git a/server/models/helpers/NotificationHelper.ts b/server/models/helpers/NotificationHelper.ts index 88475fe046e3..1b932a74a149 100644 --- a/server/models/helpers/NotificationHelper.ts +++ b/server/models/helpers/NotificationHelper.ts @@ -9,6 +9,7 @@ import { Comment, View, } from "@server/models"; +import { can } from "@server/policies"; export default class NotificationHelper { /** @@ -161,17 +162,18 @@ export default class NotificationHelper { const filtered = []; for (const recipient of recipients) { - const collectionIds = await recipient.collectionIds(); + if (!recipient.email || recipient.isSuspended) { + continue; + } // Check the recipient has access to the collection this document is in. Just // because they are subscribed doesn't mean they still have access to read // the document. - if ( - recipient.email && - !recipient.isSuspended && - document.collectionId && - collectionIds.includes(document.collectionId) - ) { + const doc = await Document.findByPk(document.id, { + userId: recipient.id, + }); + + if (can(recipient, "read", doc)) { filtered.push(recipient); } }