| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- const debug = require('debug')('growi:service:GlobalNotification');
- const path = require('path');
- const Notification = require('../models/GlobalNotificationSetting');
- const mailer = require('../util/mailer');
- /**
- * the service class of GlobalNotificationSetting
- */
- class GlobalNotification {
- constructor(crowi) {
- this.crowi = crowi;
- this.config = crowi.getConfig();
- }
- notifyByMail(notification, mailOption) {
- mailer.send(Object.assign(mailOption, {to: notification.toEmail}));
- }
- notifyBySlack(notification, slackOption) {
- // send slack notification here
- }
- sendNotification(notifications, option) {
- notifications.forEach(notification => {
- if (notification.__t === 'mail') {
- this.notifyByMail(notification, option.mail);
- }
- else if (notification.__t === 'slack') {
- this.notifyBySlack(notification, option.slack);
- }
- });
- }
- /**
- * send notification at page creation
- * @memberof GlobalNotification
- * @param {obejct} page
- */
- notifyPageCreate(page) {
- const notifications = Notification.findSettingByPathAndEvent(page.path, 'pageCreate');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#pageCreate - ${page.creator.username} created ${page.path}`,
- template: path.join(this.crowi.localeDir, lang, 'notifications/pageCreate.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- /**
- * send notification at page edit
- * @memberof GlobalNotification
- * @param {obejct} page
- */
- notifyPageEdit(page) {
- const notifications = Notification.findSettingByPathAndEvent(page.path, 'pageEdit');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#pageEdit - ${page.creator.username} edited ${page.path}`,
- template: path.join(this.crowi.localeDir, lang, 'notifications/pageEdit.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- /**
- * send notification at page deletion
- * @memberof GlobalNotification
- * @param {obejct} page
- */
- notifyPageDelete(page) {
- const notifications = Notification.findSettingByPathAndEvent(page.path, 'pageDelete');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#pageDelete - ${page.creator.username} deleted ${page.path}`, //FIXME
- template: path.join(this.crowi.localeDir, lang, 'notifications/pageDelete.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- /**
- * send notification at page move
- * @memberof GlobalNotification
- * @param {obejct} page
- */
- notifyPageMove(page) {
- const notifications = Notification.findSettingByPathAndEvent(page.path, 'pageMove');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#pageMove - ${page.creator.username} moved ${page.path} to ${page.path}`, //FIXME
- template: path.join(this.crowi.localeDir, lang, 'notifications/pageMove.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- /**
- * send notification at page like
- * @memberof GlobalNotification
- * @param {obejct} page
- */
- notifyPageLike(page) {
- const notifications = Notification.findSettingByPathAndEvent(page.path, 'pageLike');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#pageLike - ${page.creator.username} liked ${page.path}`,
- template: path.join(this.crowi.localeDir, lang, 'notifications/pageLike.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- /**
- * send notification at page comment
- * @memberof GlobalNotification
- * @param {obejct} page
- * @param {obejct} comment
- */
- notifyComment(comment, path) {
- const notifications = Notification.findSettingByPathAndEvent(path, 'comment');
- const lang = 'en-US'; //FIXME
- const option = {
- mail: {
- subject: `#comment - ${comment.creator.username} commented on ${path}`,
- template: path.join(this.crowi.localeDir, lang, 'notifications/comment.txt'),
- vars: {}
- },
- slack: {},
- };
- this.sendNotification(notifications, option);
- }
- }
- module.exports = GlobalNotification;
|