|
|
@@ -20,17 +20,17 @@ class GlobalNotificationMailService {
|
|
|
* @memberof GlobalNotificationMailService
|
|
|
*
|
|
|
* @param {string} event event name triggered
|
|
|
- * @param {string} path path triggered the event
|
|
|
+ * @param {import('~/server/models/page').PageDocument} page page triggered the event
|
|
|
* @param {User} triggeredBy user who triggered the event
|
|
|
* @param {{ comment: Comment, oldPath: string }} _ event specific vars
|
|
|
*/
|
|
|
- async fire(event, path, triggeredBy, vars) {
|
|
|
+ async fire(event, page, triggeredBy, vars) {
|
|
|
const { mailService } = this.crowi;
|
|
|
|
|
|
const GlobalNotification = this.crowi.model('GlobalNotificationSetting');
|
|
|
- const notifications = await GlobalNotification.findSettingByPathAndEvent(event, path, this.type);
|
|
|
+ const notifications = await GlobalNotification.findSettingByPathAndEvent(event, page.path, this.type);
|
|
|
|
|
|
- const option = this.generateOption(event, path, triggeredBy, vars);
|
|
|
+ const option = this.generateOption(event, page, triggeredBy, vars);
|
|
|
|
|
|
await Promise.all(notifications.map((notification) => {
|
|
|
return mailService.send({ ...option, to: notification.toEmail });
|
|
|
@@ -43,38 +43,45 @@ class GlobalNotificationMailService {
|
|
|
* @memberof GlobalNotificationMailService
|
|
|
*
|
|
|
* @param {string} event event name triggered
|
|
|
- * @param {string} path path triggered the event
|
|
|
+ * @param {import('~/server/models/page').PageDocument} page path triggered the event
|
|
|
* @param {User} triggeredBy user triggered the event
|
|
|
* @param {{ comment: Comment, oldPath: string }} _ event specific vars
|
|
|
*
|
|
|
* @return {{ subject: string, template: string, vars: object }}
|
|
|
*/
|
|
|
- generateOption(event, path, triggeredBy, { comment, oldPath }) {
|
|
|
+ generateOption(event, page, triggeredBy, { comment, oldPath }) {
|
|
|
const defaultLang = this.crowi.configManager.getConfig('crowi', 'app:globalLang');
|
|
|
// validate for all events
|
|
|
- if (event == null || path == null || triggeredBy == null) {
|
|
|
+ if (event == null || page == null || triggeredBy == null) {
|
|
|
throw new Error(`invalid vars supplied to GlobalNotificationMailService.generateOption for event ${event}`);
|
|
|
}
|
|
|
|
|
|
const template = nodePath.join(this.crowi.localeDir, `${defaultLang}/notifications/${event}.txt`);
|
|
|
+
|
|
|
+ const path = page.path;
|
|
|
+ const appTitle = this.crowi.appService.getAppTitle();
|
|
|
+ const siteUrl = this.crowi.appService.getSiteUrl();
|
|
|
+ const pageUrl = new URL(page._id, siteUrl);
|
|
|
+
|
|
|
let subject;
|
|
|
let vars = {
|
|
|
- appTitle: this.crowi.appService.getAppTitle(),
|
|
|
+ appTitle,
|
|
|
+ siteUrl,
|
|
|
path,
|
|
|
username: triggeredBy.username,
|
|
|
};
|
|
|
|
|
|
switch (event) {
|
|
|
case this.event.PAGE_CREATE:
|
|
|
- subject = `#${event} - ${triggeredBy.username} created ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} created ${path} at URL: ${pageUrl}`;
|
|
|
break;
|
|
|
|
|
|
case this.event.PAGE_EDIT:
|
|
|
- subject = `#${event} - ${triggeredBy.username} edited ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} edited ${path} at URL: ${pageUrl}`;
|
|
|
break;
|
|
|
|
|
|
case this.event.PAGE_DELETE:
|
|
|
- subject = `#${event} - ${triggeredBy.username} deleted ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} deleted ${path} at URL: ${pageUrl}`;
|
|
|
break;
|
|
|
|
|
|
case this.event.PAGE_MOVE:
|
|
|
@@ -83,7 +90,7 @@ class GlobalNotificationMailService {
|
|
|
throw new Error(`invalid vars supplied to GlobalNotificationMailService.generateOption for event ${event}`);
|
|
|
}
|
|
|
|
|
|
- subject = `#${event} - ${triggeredBy.username} moved ${oldPath} to ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} moved ${oldPath} to ${path} at URL: ${pageUrl}`;
|
|
|
vars = {
|
|
|
...vars,
|
|
|
oldPath,
|
|
|
@@ -92,7 +99,7 @@ class GlobalNotificationMailService {
|
|
|
break;
|
|
|
|
|
|
case this.event.PAGE_LIKE:
|
|
|
- subject = `#${event} - ${triggeredBy.username} liked ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} liked ${path} at URL: ${pageUrl}`;
|
|
|
break;
|
|
|
|
|
|
case this.event.COMMENT:
|
|
|
@@ -101,7 +108,7 @@ class GlobalNotificationMailService {
|
|
|
throw new Error(`invalid vars supplied to GlobalNotificationMailService.generateOption for event ${event}`);
|
|
|
}
|
|
|
|
|
|
- subject = `#${event} - ${triggeredBy.username} commented on ${path}`;
|
|
|
+ subject = `#${event} - ${triggeredBy.username} commented on ${path} at URL: ${pageUrl}`;
|
|
|
vars = {
|
|
|
...vars,
|
|
|
comment: comment.comment,
|