Allow set present on user list if config was set

Depending on "selt self presence" config, allow users to set
themselves as present on the user list
This commit is contained in:
Sean 2020-04-20 13:46:14 +02:00
parent ad4ed3443a
commit 9ffbb39e95
2 changed files with 22 additions and 2 deletions

View File

@ -98,7 +98,7 @@
class="checkbox-ripple-padding"
(change)="setPresent(user)"
[checked]="user.is_present"
[disabled]="isMultiSelect || !this.operator.hasPerms('users.can_manage')"
[disabled]="isPresentToggleDisabled(user)"
>
<span>{{ 'Present' | translate }}</span>
</mat-checkbox>

View File

@ -134,6 +134,10 @@ export class UserListComponent extends BaseListViewComponent<ViewUser> implement
*/
public filterProps = ['full_name', 'groups', 'structure_level', 'number'];
private selfPresentConfStr = 'users_allow_self_set_present';
private allowSelfSetPresent: boolean;
/**
* The usual constructor for components
* @param titleService Serivce for setting the title
@ -176,6 +180,7 @@ export class UserListComponent extends BaseListViewComponent<ViewUser> implement
// enable multiSelect for this listView
this.canMultiSelect = true;
config.get<boolean>('users_enable_presence_view').subscribe(state => (this._presenceViewConfigured = state));
config.get<boolean>(this.selfPresentConfStr).subscribe(allowed => (this.allowSelfSetPresent = allowed));
}
/**
@ -201,6 +206,16 @@ export class UserListComponent extends BaseListViewComponent<ViewUser> implement
this.router.navigate(['./new'], { relativeTo: this.route });
}
public isPresentToggleDisabled(user: ViewUser): boolean {
if (this.isMultiSelect) {
return true;
} else if (this.allowSelfSetPresent && this.operator.viewUser === user) {
return false;
} else {
return !this.operator.hasPerms('users.can_manage');
}
}
/**
* This function opens the dialog,
* where the user can quick change the groups,
@ -412,6 +427,11 @@ export class UserListComponent extends BaseListViewComponent<ViewUser> implement
*/
public setPresent(viewUser: ViewUser): void {
viewUser.user.is_present = !viewUser.user.is_present;
this.repo.update(viewUser.user, viewUser).catch(this.raiseError);
if (this.operator.viewUser === viewUser) {
this.operator.setPresence(viewUser.user.is_present).catch(this.raiseError);
} else {
this.repo.update(viewUser.user, viewUser).catch(this.raiseError);
}
}
}