mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-14 21:27:23 +01:00
commit d30dff2311087ff2fe5f3e2a913c594abeee6b0e Author: Sabe Jones <sabe@habitica.com> Date: Tue Feb 27 16:01:11 2024 -0600 fix(challenge): move isOfficial to mount process commit ae52dca3cd0b4fd490f07b1979049803ce2f1e2f Merge: 2b20ff1e462c6e82a58aAuthor: Sabe Jones <sabe@habitica.com> Date: Tue Feb 27 15:20:40 2024 -0600 Merge branch 'release' into phillip/challenges_official commit 2b20ff1e46b1447eac3f9dbdf29566154c9fa656 Author: Sabe Jones <sabe@habitica.com> Date: Wed Feb 14 15:31:22 2024 -0600 fix(tests): correct lint and TypeError commit 5dae5c716f11db4c652e423eab43805ddfac3455 Merge: 29d9edc7aa1a3c2f64e4Author: Sabe Jones <sabe@habitica.com> Date: Wed Feb 14 15:01:18 2024 -0600 Merge branch 'release' into phillip/challenges_official commit 29d9edc7aa7445d24f5be24ca923719a4ab5f70d Author: Sabe Jones <sabe@habitica.com> Date: Wed Feb 14 14:41:16 2024 -0600 fix(challenges): don't momentarily show Report on official commit f994d12775107cba7ec816ee522cfeb0c69ef567 Author: Phillip Thelen <phillip@habitica.com> Date: Tue Feb 13 10:08:08 2024 +0100 hide report button for official challenges commit ac06dcaca701b91913d5fc5307626b1616a9e0e8 Author: Phillip Thelen <phillip@habitica.com> Date: Tue Feb 13 10:04:49 2024 +0100 prevent official challenges from being flagged commit a07ce1e6de66a2c833c6f392cf396a7743ca0f97 Author: Phillip Thelen <phillip@habitica.com> Date: Mon Feb 5 19:12:17 2024 +0100 test shouldn’t be exclusive commit 4c2436a1a0fa905530b7e1cd66f75a2b07be5810 Author: Phillip Thelen <phillip@habitica.com> Date: Mon Feb 5 19:11:20 2024 +0100 remove log commit 292f3a578d51fd08c572afc574cc73d08356f46a Author: Phillip Thelen <phillip@habitica.com> Date: Mon Feb 5 19:10:13 2024 +0100 Automatically set official field on challenges if habitica_official cateogory is set
84 lines
3.0 KiB
JavaScript
84 lines
3.0 KiB
JavaScript
import nconf from 'nconf';
|
|
import { getUserInfo, sendTxn, getGroupUrl } from '../email';
|
|
import { NotFound } from '../errors';
|
|
import * as slack from '../slack';
|
|
|
|
const FLAG_REPORT_EMAILS = nconf.get('FLAG_REPORT_EMAIL').split(',').map(email => ({ email, canSend: true }));
|
|
|
|
export async function notifyOfFlaggedChallenge (challenge, user, userComment) {
|
|
const reporterEmailContent = getUserInfo(user, ['email']).email;
|
|
|
|
const emailVariables = [
|
|
{ name: 'CHALLENGE_NAME', content: challenge.name },
|
|
{ name: 'CHALLENGE_ID', content: challenge._id },
|
|
|
|
{ name: 'REPORTER_USERNAME', content: user.profile.name },
|
|
{ name: 'REPORTER_UUID', content: user._id },
|
|
{ name: 'REPORTER_EMAIL', content: reporterEmailContent },
|
|
{ name: 'REPORTER_MODAL_URL', content: `/static/front/#?memberId=${user._id}` },
|
|
{ name: 'REPORTER_COMMENT', content: userComment || '' },
|
|
|
|
{ name: 'AUTHOR_UUID', content: challenge.leader._id },
|
|
{ name: 'AUTHOR_MODAL_URL', content: `/static/front/#?memberId=${challenge.leader._id}` },
|
|
];
|
|
|
|
sendTxn(FLAG_REPORT_EMAILS, 'flag-report-to-mods', emailVariables);
|
|
|
|
slack.sendChallengeFlagNotification({
|
|
flagger: user,
|
|
challenge,
|
|
userComment,
|
|
});
|
|
}
|
|
|
|
export async function flagChallenge (challenge, user, res) {
|
|
if (challenge.flags[user._id] && !user.contributor.admin) throw new NotFound(res.t('messageChallengeFlagAlreadyReported'));
|
|
if (challenge.official) throw new NotFound(res.t('messageChallengeFlagOfficial'));
|
|
|
|
challenge.flags[user._id] = true;
|
|
challenge.markModified('flags');
|
|
|
|
if (user.contributor.admin) {
|
|
// Arbitrary amount, higher than 2
|
|
challenge.flagCount = 5;
|
|
} else {
|
|
challenge.flagCount += 1;
|
|
}
|
|
|
|
await challenge.save();
|
|
}
|
|
|
|
export async function clearFlags (challenge, user) {
|
|
challenge.flagCount = 0;
|
|
if (user.contributor.admin) { // let's get this to a proper "permissions" check later
|
|
challenge.flags = {};
|
|
challenge.markModified('flags');
|
|
} else if (challenge.flags[user._id]) {
|
|
challenge.flags[user._id] = false;
|
|
challenge.markModified('flags');
|
|
}
|
|
await challenge.save();
|
|
|
|
const adminEmailContent = getUserInfo(user, ['email']).email;
|
|
const challengeUrl = `/challenges/${challenge._id}`;
|
|
|
|
const groupUrl = getGroupUrl({ _id: challenge.group, type: 'guild' });
|
|
|
|
sendTxn(FLAG_REPORT_EMAILS, 'unflag-report-to-mods', [
|
|
{ name: 'ADMIN_USERNAME', content: user.profile.name },
|
|
{ name: 'ADMIN_UUID', content: user._id },
|
|
{ name: 'ADMIN_EMAIL', content: adminEmailContent },
|
|
{ name: 'ADMIN_MODAL_URL', content: `/static/front/#?memberId=${user._id}` },
|
|
|
|
{ name: 'AUTHOR_UUID', content: challenge.leader },
|
|
{ name: 'AUTHOR_EMAIL', content: adminEmailContent },
|
|
{ name: 'AUTHOR_MODAL_URL', content: `/static/front/#?memberId=${challenge.leader}` },
|
|
|
|
{ name: 'CHALLENGE_NAME', content: challenge.name },
|
|
{ name: 'CHALLENGE_ID', content: challenge._id },
|
|
{ name: 'CHALLENGE_URL', content: challengeUrl },
|
|
|
|
{ name: 'GROUP_URL', content: groupUrl },
|
|
]);
|
|
}
|