mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-22 01:22:46 +02:00
MESSENGER-2762 Initial Merge
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
Copyright (c) 2021 BWI GmbH
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -390,17 +391,24 @@
|
||||
}
|
||||
}];
|
||||
|
||||
NSString* presenceText;
|
||||
|
||||
NSString *userId = self.mxRoomMember.userId;
|
||||
|
||||
if (userId)
|
||||
if (BuildSettings.allowLocalContactPresence)
|
||||
{
|
||||
MXUser *user = [self.mxRoom.mxSession userWithUserId:userId];
|
||||
presenceText = [Tools presenceText:user];
|
||||
NSString* presenceText;
|
||||
|
||||
NSString *userId = self.mxRoomMember.userId;
|
||||
|
||||
if (userId)
|
||||
{
|
||||
MXUser *user = [self.mxRoom.mxSession userWithUserId:userId];
|
||||
presenceText = [Tools presenceText:user];
|
||||
}
|
||||
|
||||
self.roomMemberStatusLabel.text = presenceText;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.roomMemberStatusLabel.text = @"";
|
||||
}
|
||||
|
||||
self.roomMemberStatusLabel.text = presenceText;
|
||||
|
||||
self.roomMemberAvatarBadgeImageView.image = [EncryptionTrustLevelBadgeImageHelper userBadgeImageFor:self.encryptionTrustLevel];
|
||||
|
||||
@@ -526,11 +534,10 @@
|
||||
{
|
||||
isOneself = YES;
|
||||
|
||||
if (self.enableLeave)
|
||||
{
|
||||
if( !BuildSettings.roomMemberDetailsHideLeaveButton) {
|
||||
[otherActionsArray addObject:@(MXKRoomMemberDetailsActionLeave)];
|
||||
}
|
||||
|
||||
|
||||
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels])
|
||||
{
|
||||
// Check whether the user is admin (in this case he may reduce his power level to become moderator or less, EXCEPT if he is the only admin).
|
||||
@@ -682,7 +689,7 @@
|
||||
{
|
||||
otherActionsIndex = sectionCount++;
|
||||
}
|
||||
if (adminActionsArray.count)
|
||||
if (adminActionsArray.count && !self.mxRoom.isDirect)
|
||||
{
|
||||
adminToolsIndex = sectionCount++;
|
||||
}
|
||||
@@ -716,7 +723,7 @@
|
||||
}
|
||||
else if (section == directChatsIndex)
|
||||
{
|
||||
return (directChatsArray.count + 1);
|
||||
return (directChatsArray.count > 0 ? directChatsArray.count : 1);
|
||||
}
|
||||
else if (section == devicesIndex)
|
||||
{
|
||||
@@ -974,7 +981,7 @@
|
||||
{
|
||||
RoomTableViewCell *roomCell = [tableView dequeueReusableCellWithIdentifier:[RoomTableViewCell defaultReuseIdentifier] forIndexPath:indexPath];
|
||||
|
||||
if (indexPath.row < directChatsArray.count)
|
||||
if (directChatsArray.count > 0)
|
||||
{
|
||||
MXRoom *room = [self.mainSession roomWithRoomId:directChatsArray[indexPath.row]];
|
||||
if (room)
|
||||
@@ -1111,18 +1118,29 @@
|
||||
|
||||
UIButton *button = (UIButton*)sender;
|
||||
|
||||
|
||||
BOOL isUpgradable = BuildSettings.bwiLastAdminCanDowngradeHimself ||
|
||||
![self.mxRoomMember.userId isEqualToString:self.mainSession.myUser.userId] ||
|
||||
![self isLastAdmin:self.mainSession.myUser.userId];
|
||||
switch (button.tag)
|
||||
{
|
||||
case MXKRoomMemberDetailsActionSetDefaultPowerLevel:
|
||||
{
|
||||
[self.mxRoom state:^(MXRoomState *roomState) {
|
||||
[self setPowerLevel:roomState.powerLevels.usersDefault promptUser:YES];
|
||||
}];
|
||||
if( isUpgradable )
|
||||
[self.mxRoom state:^(MXRoomState *roomState) {
|
||||
[self setPowerLevel:roomState.powerLevels.usersDefault promptUser:YES];
|
||||
}];
|
||||
else
|
||||
[self showAlertChangePowerLevelNotAllowed];
|
||||
break;
|
||||
break;
|
||||
}
|
||||
case MXKRoomMemberDetailsActionSetModerator:
|
||||
{
|
||||
[self setPowerLevel:RoomPowerLevelModerator promptUser:YES];
|
||||
if( isUpgradable )
|
||||
[self setPowerLevel:RoomPowerLevelModerator promptUser:YES];
|
||||
else
|
||||
[self showAlertChangePowerLevelNotAllowed];
|
||||
break;
|
||||
}
|
||||
case MXKRoomMemberDetailsActionSetAdmin:
|
||||
@@ -1266,6 +1284,49 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (bool)isLastAdmin:(NSString*) userId {
|
||||
__block NSInteger numOtherAdmins = 0;
|
||||
|
||||
if (!userId || [self.mxRoomLiveTimeline.state.powerLevels powerLevelOfUserWithUserID:userId] < RoomPowerLevelAdmin)
|
||||
return FALSE;
|
||||
|
||||
// Update member power level
|
||||
[self.mxRoom members:^(MXRoomMembers *roomMembers) {
|
||||
for (MXRoomMember* member in roomMembers.members) {
|
||||
NSInteger powerLevel = [self.mxRoomLiveTimeline.state.powerLevels powerLevelOfUserWithUserID:member.userId];
|
||||
if (member && ![member.userId isEqualToString:userId] && member.membership == MXMembershipJoin && powerLevel >= RoomPowerLevelAdmin) {
|
||||
numOtherAdmins++;
|
||||
}
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
MXLogDebug(@"[RoomMemberDetailsViewController] Cannot get all room members in isLastAdmin");
|
||||
}];
|
||||
|
||||
return numOtherAdmins > 0 ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
- (void)showAlertChangePowerLevelNotAllowed {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_member_details_downgrade_last_admin", @"Vector", nil)
|
||||
message:nil
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"ok"]
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[self presentViewController:currentAlert animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)handleTapGesture:(UITapGestureRecognizer*)tapGestureRecognizer
|
||||
{
|
||||
UIView *view = tapGestureRecognizer.view;
|
||||
|
||||
Reference in New Issue
Block a user