pleroma-fe/src/components/moderation_tools/moderation_tools.vue

235 lines
7.5 KiB
Vue

<template>
<div>
<Popover
trigger="click"
class="moderation-tools-popover"
placement="bottom"
:offset="{ y: 5 }"
:noCenter="extended"
@show="setToggled(true)"
@close="setToggled(false)"
>
<template v-slot:content>
<div class="dropdown-menu">
<span v-if="user.is_local">
<button
class="button-default dropdown-item"
@click="toggleRight('admin')"
>
{{ $t(!!user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin') }}
</button>
<button
class="button-default dropdown-item"
@click="toggleRight('moderator')"
>
{{ $t(!!user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator') }}
</button>
<div
role="separator"
class="dropdown-divider"
/>
</span>
<button
class="button-default dropdown-item"
@click="toggleActivationStatus()"
>
{{ $t(!!user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account') }}
</button>
<button
class="button-default dropdown-item"
@click="deleteUserDialog(true)"
>
{{ $t('user_card.admin_menu.delete_account') }}
</button>
<div
v-if="hasTagPolicy"
role="separator"
class="dropdown-divider"
/>
<span v-if="hasTagPolicy">
<button
class="button-default dropdown-item"
@click="toggleTag(tags.FORCE_NSFW)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }"
/>
{{ $t('user_card.admin_menu.force_nsfw') }}
</button>
<button
class="button-default dropdown-item"
@click="toggleTag(tags.STRIP_MEDIA)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.STRIP_MEDIA) }"
/>
{{ $t('user_card.admin_menu.strip_media') }}
</button>
<button
class="button-default dropdown-item"
@click="toggleTag(tags.FORCE_UNLISTED)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_UNLISTED) }"
/>
{{ $t('user_card.admin_menu.force_unlisted') }}
</button>
<button
class="button-default dropdown-item"
@click="toggleTag(tags.SANDBOX)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.SANDBOX) }"
/>
{{ $t('user_card.admin_menu.sandbox') }}
</button>
<button
v-if="user.is_local"
class="button-default dropdown-item"
@click="toggleTag(tags.DISABLE_REMOTE_SUBSCRIPTION)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_REMOTE_SUBSCRIPTION) }"
/>
{{ $t('user_card.admin_menu.disable_remote_subscription') }}
</button>
<button
v-if="user.is_local"
class="button-default dropdown-item"
@click="toggleTag(tags.DISABLE_ANY_SUBSCRIPTION)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_ANY_SUBSCRIPTION) }"
/>
{{ $t('user_card.admin_menu.disable_any_subscription') }}
</button>
<button
v-if="user.is_local"
class="button-default dropdown-item"
@click="toggleTag(tags.QUARANTINE)"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.QUARANTINE) }"
/>
{{ $t('user_card.admin_menu.quarantine') }}
</button>
</span>
<div
v-if="extended && user.is_local"
role="separator"
class="dropdown-divider"
/>
<span v-if="extended && user.is_local">
<button
class="button-default dropdown-item"
@click="getPasswordResetToken"
>
{{ $t('user_card.admin_menu.get_password_reset_token') }}
</button>
<button
class="button-default dropdown-item"
@click="forcePasswordReset"
>
{{ $t('user_card.admin_menu.force_password_reset') }}
</button>
<button
class="button-default dropdown-item"
@click="forceDisableMFA"
>
{{ $t('user_card.admin_menu.disable_mfa') }}
</button>
<button
class="button-default dropdown-item"
@click="toggleBot"
>
{{ $t('user_card.admin_menu.convert_to', { type: !!bot ? 'Person' : 'Service' }) }}
</button>
</span>
</div>
</template>
<template v-slot:trigger>
<button
class="btn button-default btn-block moderation-tools-button"
:class="{ toggled }"
>
{{ $t('user_card.admin_menu.moderation') }}
<FAIcon icon="chevron-down" />
</button>
</template>
</Popover>
<teleport to="#modal">
<DialogModal
v-if="showDeleteUserDialog"
:on-cancel="deleteUserDialog.bind(this, false)"
>
<template v-slot:header>
{{ $t('user_card.admin_menu.delete_user') }}
</template>
<p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
<template v-slot:footer>
<button
class="btn button-default"
@click="deleteUserDialog(false)"
>
{{ $t('general.cancel') }}
</button>
<button
class="btn button-default danger"
@click="deleteUser()"
>
{{ $t('user_card.admin_menu.delete_user') }}
</button>
</template>
</DialogModal>
<DialogModal
v-if="showPasswordTokenDialog"
:on-cancel="passwordTokenDialog.bind(this, false)"
>
<template v-slot:header>
{{ $t('user_card.admin_menu.password_reset_token') }}
</template>
<p>
{{ $t('user_card.admin_menu.password_reset_token_content', { token: passwordResetToken.token }) }}
<a :href="passwordResetToken.link">{{ passwordResetToken.link }}</a>
</p>
<template v-slot:footer>
<button
class="btn button-default"
@click="passwordTokenDialog(false)"
>
{{ $t('general.close') }}
</button>
</template>
</DialogModal>
</teleport>
</div>
</template>
<script src="./moderation_tools.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.moderation-tools-popover {
height: 100%;
z-index: 999;
.trigger {
display: flex !important;
height: 100%;
}
}
.moderation-tools-button {
svg,i {
font-size: 0.8em;
}
}
</style>