Translation = new Mongo.Collection('translation'); /** * A Organization User in wekan */ Translation.attachSchema( new SimpleSchema({ language: { /** * the language */ type: String, max: 5, }, text: { /** * the text */ type: String, }, translationText: { /** * the translation text */ type: String, optional: true, }, createdAt: { /** * creation date of the translation custom string */ type: Date, // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert) { return new Date(); } else if (this.isUpsert) { return { $setOnInsert: new Date() }; } else { this.unset(); } }, }, modifiedAt: { type: Date, denyUpdate: false, // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert || this.isUpsert || this.isUpdate) { return new Date(); } else { this.unset(); } }, }, }), ); if (Meteor.isServer) { Translation.allow({ insert(userId, doc) { const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser(); if (user?.isAdmin) return true; if (!user) { return false; } return doc._id === userId; }, update(userId, doc) { const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser(); if (user?.isAdmin) return true; if (!user) { return false; } return doc._id === userId; }, remove(userId, doc) { const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser(); if (user?.isAdmin) return true; if (!user) { return false; } return doc._id === userId; }, fetch: [], }); Meteor.methods({ setCreateTranslation( language, text, translationText, ) { check(language, String); check(text, String); check(translationText, String); const nTexts = ReactiveCache.getTranslations({ language, text }).length; if (nTexts > 0) { throw new Meteor.Error('text-already-taken'); } else { Translation.insert({ language, text, translationText, }); } }, setTranslationText(translation, translationText) { check(translation, Object); check(translationText, String); Translation.update(translation, { $set: { translationText: translationText }, }); }, }); } if (Meteor.isServer) { // Index for Organization User. Meteor.startup(() => { Translation._collection.createIndex({ modifiedAt: -1 }); }); } export default Translation;