mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 22:27:26 +01:00
add summary field to challenges and guilds (#8960)
* create new summary field for challenges * finish implementating summary for challenges, add some support for guilds * make small improvements to challenges code * fix lint errors * add more code to support summaries for guilds (still more needed) * fix existing tests by adding summary field * make existing tests pass * WIP make "Public Challenges" text translatable * change "leader" locale key to "guildOrPartyLeader" to make searches for it easier * remove v-once from h2 headings * remove failed attempt to localise text in <script> * add quick-and-dirty error checking for guild not having categories * make "Public Challenges" text translatable * rename final ...PlaceHolder strings to ...Placeholder (lower-case "h") for consistency with existing Placeholder strings
This commit is contained in:
@@ -18,9 +18,13 @@ import { syncableAttrs } from '../libs/taskManager';
|
||||
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
const MIN_SHORTNAME_SIZE_FOR_CHALLENGES = shared.constants.MIN_SHORTNAME_SIZE_FOR_CHALLENGES;
|
||||
const MAX_SUMMARY_SIZE_FOR_CHALLENGES = shared.constants.MAX_SUMMARY_SIZE_FOR_CHALLENGES;
|
||||
|
||||
let schema = new Schema({
|
||||
name: {type: String, required: true},
|
||||
shortName: {type: String, required: true, minlength: 3},
|
||||
shortName: {type: String, required: true, minlength: MIN_SHORTNAME_SIZE_FOR_CHALLENGES},
|
||||
summary: {type: String, maxlength: MAX_SUMMARY_SIZE_FOR_CHALLENGES},
|
||||
description: String,
|
||||
official: {type: Boolean, default: false},
|
||||
tasksOrder: {
|
||||
@@ -43,6 +47,18 @@ schema.plugin(baseModel, {
|
||||
timestamps: true,
|
||||
});
|
||||
|
||||
schema.pre('init', function ensureSummaryIsFetched (next, chal) {
|
||||
// The Vue website makes the summary be mandatory for all new challenges, but the
|
||||
// Angular website did not, and the API does not yet for backwards-compatibilty.
|
||||
// When any challenge without a summary is fetched from the database, this code
|
||||
// supplies the name as the summary. This can be removed when all challenges have
|
||||
// a summary and the API makes it mandatory (a breaking change!)
|
||||
if (!chal.summary) {
|
||||
chal.summary = chal.name ? chal.name.substring(0, MAX_SUMMARY_SIZE_FOR_CHALLENGES) : ' ';
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
// A list of additional fields that cannot be updated (but can be set on creation)
|
||||
let noUpdate = ['group', 'official', 'shortName', 'prize'];
|
||||
schema.statics.sanitizeUpdate = function sanitizeUpdate (updateObj) {
|
||||
@@ -91,6 +107,7 @@ schema.methods.syncToUser = async function syncChallengeToUser (user) {
|
||||
if (i !== -1) {
|
||||
if (userTags[i].name !== challenge.shortName) {
|
||||
// update the name - it's been changed since
|
||||
// @TODO: We probably want to remove this. Owner is not allowed to change participant's copy of the tag.
|
||||
userTags[i].name = challenge.shortName;
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user