Fix issue with not being able to lock / sticky your own posts.
This commit is contained in:
parent
0d42e74524
commit
c8131d304b
2 changed files with 21 additions and 12 deletions
28
ui/src/components/post-listing.tsx
vendored
28
ui/src/components/post-listing.tsx
vendored
|
@ -194,14 +194,8 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
||||||
</li>
|
</li>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
{this.canMod &&
|
{this.canModOnSelf &&
|
||||||
<>
|
<>
|
||||||
<li className="list-inline-item">
|
|
||||||
{!post.removed ?
|
|
||||||
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveShow)}><T i18nKey="remove">#</T></span> :
|
|
||||||
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveSubmit)}><T i18nKey="restore">#</T></span>
|
|
||||||
}
|
|
||||||
</li>
|
|
||||||
<li className="list-inline-item">
|
<li className="list-inline-item">
|
||||||
<span class="pointer" onClick={linkEvent(this, this.handleModLock)}>{post.locked ? i18n.t('unlock') : i18n.t('lock')}</span>
|
<span class="pointer" onClick={linkEvent(this, this.handleModLock)}>{post.locked ? i18n.t('unlock') : i18n.t('lock')}</span>
|
||||||
</li>
|
</li>
|
||||||
|
@ -213,6 +207,12 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
||||||
{/* Mods can ban from community, and appoint as mods to community */}
|
{/* Mods can ban from community, and appoint as mods to community */}
|
||||||
{this.canMod &&
|
{this.canMod &&
|
||||||
<>
|
<>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
{!post.removed ?
|
||||||
|
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveShow)}><T i18nKey="remove">#</T></span> :
|
||||||
|
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveSubmit)}><T i18nKey="restore">#</T></span>
|
||||||
|
}
|
||||||
|
</li>
|
||||||
{!this.isMod &&
|
{!this.isMod &&
|
||||||
<li className="list-inline-item">
|
<li className="list-inline-item">
|
||||||
{!post.banned_from_community ?
|
{!post.banned_from_community ?
|
||||||
|
@ -326,14 +326,22 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
||||||
return this.props.admins && isMod(this.props.admins.map(a => a.id), this.props.post.creator_id);
|
return this.props.admins && isMod(this.props.admins.map(a => a.id), this.props.post.creator_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get adminsThenMods(): Array<number> {
|
||||||
|
return this.props.admins.map(a => a.id)
|
||||||
|
.concat(this.props.moderators.map(m => m.user_id));
|
||||||
|
}
|
||||||
|
|
||||||
get canMod(): boolean {
|
get canMod(): boolean {
|
||||||
|
|
||||||
if (this.props.editable) {
|
if (this.props.editable) {
|
||||||
let adminsThenMods = this.props.admins.map(a => a.id)
|
return canMod(UserService.Instance.user, this.adminsThenMods, this.props.post.creator_id);
|
||||||
.concat(this.props.moderators.map(m => m.user_id));
|
} else return false;
|
||||||
|
}
|
||||||
|
|
||||||
return canMod(UserService.Instance.user, adminsThenMods, this.props.post.creator_id);
|
get canModOnSelf(): boolean {
|
||||||
|
|
||||||
|
if (this.props.editable) {
|
||||||
|
return canMod(UserService.Instance.user, this.adminsThenMods, this.props.post.creator_id, true);
|
||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
ui/src/utils.ts
vendored
5
ui/src/utils.ts
vendored
|
@ -82,14 +82,15 @@ export function addTypeInfo<T>(arr: Array<T>, name: string): Array<{type_: strin
|
||||||
return arr.map(e => {return {type_: name, data: e}});
|
return arr.map(e => {return {type_: name, data: e}});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function canMod(user: User, modIds: Array<number>, creator_id: number): boolean {
|
export function canMod(user: User, modIds: Array<number>, creator_id: number, onSelf: boolean = false): boolean {
|
||||||
// You can do moderator actions only on the mods added after you.
|
// You can do moderator actions only on the mods added after you.
|
||||||
if (user) {
|
if (user) {
|
||||||
let yourIndex = modIds.findIndex(id => id == user.id);
|
let yourIndex = modIds.findIndex(id => id == user.id);
|
||||||
if (yourIndex == -1) {
|
if (yourIndex == -1) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
modIds = modIds.slice(0, yourIndex+1); // +1 cause you cant mod yourself
|
// onSelf +1 on mod actions not for yourself, IE ban, remove, etc
|
||||||
|
modIds = modIds.slice(0, yourIndex+(onSelf ? 0 : 1));
|
||||||
return !modIds.includes(creator_id);
|
return !modIds.includes(creator_id);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Reference in a new issue