|
@@ -46,48 +46,80 @@ class GlobalNotificationSetting {
|
|
|
this.crowi = crowi;
|
|
this.crowi = crowi;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * enable notification setting
|
|
|
|
|
- * @param {string} id
|
|
|
|
|
- */
|
|
|
|
|
- static async enable(id) {
|
|
|
|
|
- // save
|
|
|
|
|
- // return Notification
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* disable notification setting
|
|
* disable notification setting
|
|
|
* @param {string} id
|
|
* @param {string} id
|
|
|
*/
|
|
*/
|
|
|
- static async disable(id) {
|
|
|
|
|
|
|
+ static async toggleIsEnabled(id) {
|
|
|
const setting = await this.findOne({_id: id});
|
|
const setting = await this.findOne({_id: id});
|
|
|
|
|
|
|
|
- setting.isEnabled = false;
|
|
|
|
|
|
|
+ setting.isEnabled = !setting.isEnabled;
|
|
|
setting.save();
|
|
setting.save();
|
|
|
|
|
|
|
|
return setting;
|
|
return setting;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * find all notification settings
|
|
|
|
|
+ */
|
|
|
|
|
+ static async findAll() {
|
|
|
|
|
+ const settings = await this.find().sort({ triggerPath: 1 });
|
|
|
|
|
+ //sort
|
|
|
|
|
+
|
|
|
|
|
+ return settings;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* find a list of notification settings by path and a list of events
|
|
* find a list of notification settings by path and a list of events
|
|
|
* @param {string} path
|
|
* @param {string} path
|
|
|
* @param {string} event
|
|
* @param {string} event
|
|
|
- * @param {boolean} enabled
|
|
|
|
|
*/
|
|
*/
|
|
|
- static async findSettingByPathAndEvent(path, event, enabled) {
|
|
|
|
|
- let settings;
|
|
|
|
|
|
|
+ static async findSettingByPathAndEvent(path, event) {
|
|
|
|
|
+ const pathsToMatch = generatePathsToMatch(path);
|
|
|
|
|
|
|
|
- if (enabled == null) {
|
|
|
|
|
- settings = this.find();
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- settings = this.find({isEnabled: enabled});
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ const settings = await this.find({
|
|
|
|
|
+ triggerPath: {$in: pathsToMatch},
|
|
|
|
|
+ triggerEvents: event,
|
|
|
|
|
+ isEnabled: true
|
|
|
|
|
+ })
|
|
|
|
|
+ .sort({ triggerPath: 1 });
|
|
|
|
|
|
|
|
- return await settings;
|
|
|
|
|
|
|
+ return settings;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+// move this to util
|
|
|
|
|
+// remove this from models/page
|
|
|
|
|
+const cutOffLastSlash = path => {
|
|
|
|
|
+ const lastSlash = path.lastIndexOf('/');
|
|
|
|
|
+ return path.substr(0, lastSlash);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const generatePathsOnTree = (path, pathList) => {
|
|
|
|
|
+ pathList.push(path);
|
|
|
|
|
+
|
|
|
|
|
+ if (path === '') {
|
|
|
|
|
+ return pathList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const newPath = cutOffLastSlash(path);
|
|
|
|
|
+
|
|
|
|
|
+ return generatePathsOnTree(newPath, pathList);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const generatePathsToMatch = (originalPath) => {
|
|
|
|
|
+ const pathList = generatePathsOnTree(originalPath, []);
|
|
|
|
|
+ return pathList.map(path => {
|
|
|
|
|
+ if (path !== originalPath) {
|
|
|
|
|
+ return path + '/*';
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ return path;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
module.exports = function(crowi) {
|
|
module.exports = function(crowi) {
|
|
|
GlobalNotificationSetting.crowi = crowi;
|
|
GlobalNotificationSetting.crowi = crowi;
|
|
|
notificationSchema.loadClass(GlobalNotificationSetting);
|
|
notificationSchema.loadClass(GlobalNotificationSetting);
|