mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Added new function to add cumstom translation strings on Admin panel
This commit is contained in:
parent
4153fe7d0d
commit
b1525d4221
10 changed files with 599 additions and 2 deletions
128
models/translation.js
Normal file
128
models/translation.js
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
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,
|
||||
},
|
||||
createdAt: {
|
||||
/**
|
||||
* creation date of the organization user
|
||||
*/
|
||||
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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue