pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/HabitRPG/habitica/pull/15466/commits/91ccba9e8ac75a8444fb878959230fe0a812c1d3

ps://github.githubassets.com/assets/global-d10a1ef1d5e1.css" /> Phillip/admin deleter by phillipthelen · Pull Request #15466 · HabitRPG/habitica · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b00f463
refactor sending jobs to worker server
phillipthelen May 13, 2025
6b8e6ed
remove unused imports
phillipthelen May 13, 2025
6ebf3d0
add delete button to adminpanel
phillipthelen May 29, 2025
5540c6e
June 2025 content build (#15437)
CuriousMagpie May 13, 2025
eede13f
fix(script): don't use extremely costly regex
SabreCat May 19, 2025
aa8af15
fix(logging): don't spam empty error events
SabreCat May 19, 2025
b2b2d0f
Translated using Weblate (Ukrainian)
weblate May 19, 2025
7c81b71
5.36.4
SabreCat May 19, 2025
cb2b837
chore(deps): bump serialize-javascript in /website/client (#15395)
dependabot[bot] May 20, 2025
fcb1d06
chore(deps-dev): bump axios from 1.7.4 to 1.8.2 (#15401)
dependabot[bot] May 20, 2025
625db6b
chore(deps): bump prismjs from 1.29.0 to 1.30.0 (#15403)
dependabot[bot] May 20, 2025
787f64a
chore(deps): bump @babel/runtime-corejs2 in /website/client (#15406)
dependabot[bot] May 20, 2025
a3b3b28
chore(deps): bump @babel/helpers in /website/client (#15407)
dependabot[bot] May 20, 2025
0e99142
chore(deps): bump @babel/runtime from 7.23.9 to 7.26.10 (#15410)
dependabot[bot] May 20, 2025
b959731
chore(deps): bump http-proxy-middleware in /website/client (#15427)
dependabot[bot] May 20, 2025
7dd3ca4
Optimize database access for some use cases (#15444)
phillipthelen May 29, 2025
1aba2be
correct worker call
phillipthelen May 29, 2025
bc77c76
remove unused priority
phillipthelen May 29, 2025
0a6f138
fix tests
phillipthelen May 29, 2025
f33e256
don’t use body with delete
phillipthelen May 29, 2025
f4f964b
Merge remote-tracking branch 'origen/develop' into phillip/admin_deleter
phillipthelen Aug 8, 2025
9b52198
Merge branch 'phillip/admin_deleter' of github.com:HabitRPG/habitica …
phillipthelen Aug 8, 2025
71c2e19
add detailed information about sub payment for google and apple
phillipthelen Aug 11, 2025
ba99a65
Support paypal details for subscription in admin panel
phillipthelen Aug 11, 2025
c00aaec
stripe payment details
phillipthelen Aug 11, 2025
af3c37a
fix imports
phillipthelen Aug 11, 2025
7220006
fix tests
phillipthelen Aug 11, 2025
18239b7
fix deleting account
phillipthelen Aug 18, 2025
91ccba9
begin building group admin panel
phillipthelen Aug 19, 2025
6409c4c
fix convertig sub to group plan
phillipthelen Aug 19, 2025
5ba6d24
improve sub status display
phillipthelen Aug 19, 2025
5dbd10e
fix lint
phillipthelen Aug 19, 2025
2e4c0e1
fix long line
phillipthelen Aug 19, 2025
ef66387
fix sub state display
phillipthelen Aug 19, 2025
0e8ca11
lint fix
phillipthelen Aug 19, 2025
375ca3e
fix
phillipthelen Aug 19, 2025
02d4d2d
delete amplitude data by default
phillipthelen Aug 19, 2025
58ec028
improve searching for email in admin panel
phillipthelen Aug 20, 2025
92b4c10
correctly call method
phillipthelen Aug 20, 2025
faa1db4
move delete button in admin panel
phillipthelen Aug 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
begin building group admin panel
  • Loading branch information
phillipthelen committed Aug 19, 2025
commit 91ccba9e8ac75a8444fb878959230fe0a812c1d3
2 changes: 1 addition & 1 deletion website/client/src/components/admin/admin-panel/search.vue
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export default {
watch: {
userIdentifier () {
this.isSearching = true;
this.$store.dispatch('adminPanel:searchUsers', { userIdentifier: this.userIdentifier }).then(users => {
this.$store.dispatch('admin:searchUsers', { userIdentifier: this.userIdentifier }).then(users => {
this.isSearching = false;
if (users.length === 1) {
this.loadUser(users[0]._id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@
Party ID
</label>
<strong class="col-sm-9 col-form-label">
<router-link
:to="{'name': 'groupAdminGroup', 'params': {'groupId': groupPartyData._id}}"
>
{{ groupPartyData._id }}
</router-link>
</strong>
</div>
<div class="form-group row">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@ export default {
this.hero.purchased.plan.owner = '';
},
getSubscriptionPaymentDetails () {
this.$store.dispatch('adminPanel:getSubscriptionPaymentDetails', { userIdentifier: this.hero._id })
this.$store.dispatch('admin:getSubscriptionPaymentDetails', { userIdentifier: this.hero._id })
.then(details => {
if (details) {
this.paymentDetails = details;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ export default {
}
},
async retrieveUserHistory () {
const history = await this.$store.dispatch('adminPanel:getUserHistory', { userIdentifier: this.hero._id });
const history = await this.$store.dispatch('admin:getUserHistory', { userIdentifier: this.hero._id });
this.armoire = history.armoire;
this.questInviteResponses = history.questInviteResponses;
this.cron = history.cron;
Expand Down
7 changes: 7 additions & 0 deletions website/client/src/components/admin/container.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
>
{{ $t('adminPanel') }}
</router-link>
<router-link
v-if="hasPermission(user, 'groupSupport')"
class="nav-link"
:to="{name: 'groupAdmin'}"
>
{{ $t('groupAdmin') }}
</router-link>
<router-link
v-if="hasPermission(user, 'accessControl')"
class="nav-link"
Expand Down
47 changes: 47 additions & 0 deletions website/client/src/components/admin/formRow.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<template>
<div class="form-group row">
<label class="col-sm-3 col-form-label"><slot name="label">{{ label }}</slot></label>
<div class="col-sm-9">
<slot>
<textarea
v-if="inputType === 'textarea'"
:value="value"
class="form-control"
@input="$emit('input', $event.target.value)"
:rows="rows"
></textarea>
<input
v-else
:value="value"
class="form-control"
:type="inputType"
@input="$emit('input', $event.target.value)"
>
</slot>
</div>
</div>
</template>

<script>
export default {
model: {
prop: 'value',
event: 'input',
},
props: {
label: {
type: String,
},
value: {
type: [String, Boolean],
},
inputType: {
type: String,
default: 'text',
},
rows: {
default: 3,
},
},
}
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<template>
<form>
<form-row
v-model="group.name"
:label="$t('groupName')"
/>
<form-row
v-model="group.summary || ''"
:label="$t('guildSummary')"
inputType="textarea"
/>
<form-row
v-model="group.description || ''"
:label="$t('groupDescription')"
inputType="textarea"
rows="6"
/>
<form-row
v-model="group.bannedWordsAllowed || false"
:label="$t('bannedWordsAllowed')"
inputType="checkbox" />
<form-row
v-model="group.leaderOnly.challenges || false"
:label="$t('leaderOnlyChallenges')"
inputType="checkbox" />
</form>
</template>

<script>
import formRow from '@/components/admin/formRow.vue';

export default {
components: {
formRow,
},
props: {
group: {
type: Object,
required: true,
},
},
};
</script>
65 changes: 65 additions & 0 deletions website/client/src/components/admin/groups/group-support/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<template>
<div v-if="hasPermission(user, 'groupSupport')">
<h2>{{ group.name }}</h2>
<supportContainer
:title="$t('groupData')">
<groupData
:group="group" />
</supportContainer>
<supportContainer
:title="$t('groupPlanSubscription')">
</supportContainer>
<supportContainer
v-if="group.type === 'party'"
:title="$t('questDetails')">
</supportContainer>
<supportContainer
:title="$t('members')">
<members
:group="group" />
</supportContainer>
</div>
</template>

<script>
import { userStateMixin } from '../../../../mixins/userState';
import supportContainer from '../../supportContainer.vue';
import groupData from './groupData.vue';
import members from './members.vue';

export default {
components: {
supportContainer,
groupData,
members,
},
mixins: [userStateMixin],
data () {
return {
groupId: '',
group: {},
};
},
watch: {
groupId () {
this.loadGroup(this.groupId);
},
},
mounted () {
this.groupId = this.$route.params.groupId;
},
methods: {
clearData () {
this.group = {};
},
async loadGroup (groupId) {
this.$emit('changeGroupId', groupId);
this.group = await this.$store.dispatch('admin:getGroup', { groupId });
},
async updateGroup () {
await this.$store.dispatch('admin:updateGroup', { group: this.group });
this.$emit('groupSaved', this.group);
},
},
};
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<template>
<form-row
:label="$t('groupLeader')">
<strong class="col-form-label">
<router-link
:to="{'name': 'adminPanelUser', 'params': {'userIdentifier': group.leader }}">
{{ group.leader }}
</router-link>
</strong>
</form-row>
</template>

<script>
import formRow from '@/components/admin/formRow.vue';

export default {
components: {
formRow,
},
props: {
group: {
type: Object,
required: true,
},
},
};
</script>
93 changes: 93 additions & 0 deletions website/client/src/components/admin/groups/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<template>
<div class="row standard-page col-12 d-flex justify-content-center">
<div class="group-admin-content">
<h1>{{ $t("groupAdmin") }}</h1>
<form
class="form-inline"
@submit.prevent="loadGroup(groupID)"
>
<div class="input-group col pl-0 pr-0">
<input
v-model="groupID"
class="form-control"
type="text"
placeholder="Group ID"
>
<div class="input-group-append">
<button
class="btn btn-primary"
type="button"
:disabled="!groupID"
@click="loadGroup(groupID)"
>
Load
</button>
</div>
</div>
</form>

<router-view
class="mt-3"
@changeGroupId="changeGroupId"
/>
</div>
</div>
</template>

<style lang="scss" scoped>
.uidField {
min-width: 45ch;
}

.input-group-append {
width:auto;
}

.group-admin-content {
flex: 0 0 800px;
max-width: 800px;
}
</style>

<script>
import VueRouter from 'vue-router';
import { mapState } from '@/libs/store';

const { isNavigationFailure, NavigationFailureType } = VueRouter;

export default {
data () {
return {
groupID: '',
};
},
computed: {
...mapState({ user: 'user.data' }),
},
mounted () {
this.$store.dispatch('common:setTitle', {
section: this.$t('groupAdmin'),
});
},
methods: {
changeGroupId (id) {
this.groupID = id;
},
async loadGroup (groupId) {
if (this.$router.currentRoute.name === 'groupAdminGroup') {
await this.$router.push({
name: 'groupAdmin',
});
}
await this.$router.push({
name: 'groupAdminGroup',
params: { groupId },
}).catch(failure => {
if (isNavigationFailure(failure, NavigationFailureType.duplicated)) {
this.$router.go();
}
});
},
},
};
</script>
51 changes: 51 additions & 0 deletions website/client/src/components/admin/supportContainer.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<template>
<div class="card mt-2">
<div class="card-header">
<h3
class="mb-0 mt-0"
:class="{'open': expand}"
@click="expand = !expand"
>
<slot name="title">{{ title }}</slot>
</h3>
</div>
<div
v-if="expand"
class="card-body"
>
<slot></slot>
</div>
<div
v-if="expand && onSave"
class="card-footer"
>
<button
class="btn btn-primary mt-1"
@click="onSave"
>
{{ $t('save') }}
</button>
</div>
</div>
</template>

<script>

export default {
props: {
title: {
type: String,
required: false,
},
onSave: {
type: Function,
required: false,
},
},
data () {
return {
expand: false,
};
},
}
</script>
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy