mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
* log armoire, quoest response and cron events to history * show user history in admin panel * allow stats to be edited from admin panel * Improve admin panel stats input * improve setting client in history * fix tests * fix lint * fix armoire buying issue * Improve hero saving * Formatting fix * Improve user history logging * allow class to be changed from admin panel * make terminating subscriptions easier * support decimal extraMonths * Fix editing some achievements in admin panel * log if a user invites party to quest * Log more quest events into user history * make userhistory length configurable * fix some numbered achievements * fix extraMonths field * Automatically set up group plan subs with admin panel * show party info nicer in admin panel * improve admin panel sub handling * add missing brace * display when there are unsaved changes * fix setting group plan * fix showing group id * Display group plan info in admin panel * fix setting hourglass promo date * Improve termination handling in admin panel * reload data after certain save events in admin panel * remove console * fix plan.extraMonths not being reset if terminating a sub * add more options when cancelling subs * reload data after group plan change * Add a way to remove users from a party * fix issue with removing user from party * pass party id correctly * correctly call async function * Improve sub display in admin panel * fix line length * fix line * shorter * plaid * fix(lint): vue code style --------- Co-authored-by: Kalista Payne <sabrecat@gmail.com>
59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import {
|
|
NotFound,
|
|
NotAuthorized,
|
|
} from './errors';
|
|
import {
|
|
model as Group,
|
|
} from '../models/group';
|
|
|
|
export function removeMessagesFromMember (member, groupId) {
|
|
if (member.newMessages[groupId]) {
|
|
delete member.newMessages[groupId];
|
|
member.markModified('newMessages');
|
|
}
|
|
|
|
member.notifications = member.notifications.filter(n => {
|
|
if (n && n.type === 'NEW_CHAT_MESSAGE' && n.data && n.data.group && n.data.group.id === groupId) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
}
|
|
|
|
export async function leaveGroup (data) {
|
|
const {
|
|
groupId,
|
|
user,
|
|
res,
|
|
keep,
|
|
keepChallenges,
|
|
} = data;
|
|
const group = await Group.getGroup({
|
|
user, groupId, fields: '-chat', requireMembership: true,
|
|
});
|
|
if (!group) {
|
|
throw new NotFound(res.t('groupNotFound'));
|
|
}
|
|
|
|
// During quests, check if user can leave
|
|
if (group.type === 'party') {
|
|
if (group.quest && group.quest.leader === user._id) {
|
|
throw new NotAuthorized(res.t('questLeaderCannotLeaveGroup'));
|
|
}
|
|
|
|
if (
|
|
group.quest && group.quest.active
|
|
&& group.quest.members && group.quest.members[user._id]
|
|
) {
|
|
throw new NotAuthorized(res.t('cannotLeaveWhileActiveQuest'));
|
|
}
|
|
}
|
|
|
|
await group.leave(user, keep, keepChallenges);
|
|
removeMessagesFromMember(user, group._id);
|
|
await user.save();
|
|
|
|
if (group.hasNotCancelled()) await group.updateGroupPlan(true);
|
|
}
|