diff --git a/client/src/app/site/users/components/user-list/user-list.component.html b/client/src/app/site/users/components/user-list/user-list.component.html
index f5d55245b..934e08d75 100644
--- a/client/src/app/site/users/components/user-list/user-list.component.html
+++ b/client/src/app/site/users/components/user-list/user-list.component.html
@@ -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)"
>
{{ 'Present' | translate }}
diff --git a/client/src/app/site/users/components/user-list/user-list.component.ts b/client/src/app/site/users/components/user-list/user-list.component.ts
index e9e0d1a52..2fd90a8c3 100644
--- a/client/src/app/site/users/components/user-list/user-list.component.ts
+++ b/client/src/app/site/users/components/user-list/user-list.component.ts
@@ -134,6 +134,10 @@ export class UserListComponent extends BaseListViewComponent 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 implement
// enable multiSelect for this listView
this.canMultiSelect = true;
config.get('users_enable_presence_view').subscribe(state => (this._presenceViewConfigured = state));
+ config.get(this.selfPresentConfStr).subscribe(allowed => (this.allowSelfSetPresent = allowed));
}
/**
@@ -201,6 +206,16 @@ export class UserListComponent extends BaseListViewComponent 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 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);
+ }
}
}