NIMTeamMemberCardViewController.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. //
  2. // TeamMemberCardViewController.m
  3. // NIM
  4. //
  5. // Created by Xuhui on 15/3/19.
  6. // Copyright (c) 2015年 Netease. All rights reserved.
  7. //
  8. #import "NIMTeamMemberCardViewController.h"
  9. #import "NIMCommonTableData.h"
  10. #import "NIMCommonTableDelegate.h"
  11. #import "NIMAvatarImageView.h"
  12. #import "NIMCardMemberItem.h"
  13. #import "NIMUsrInfoData.h"
  14. #import "NIMKitUtil.h"
  15. #import "NIMKitDependency.h"
  16. #import "NIMKit.h"
  17. #import "UIView+NIM.h"
  18. #import "NIMKitColorButtonCell.h"
  19. #import "NIMKitSwitcherCell.h"
  20. @interface NIMTeamMemberCardViewController () <UIActionSheetDelegate>{
  21. UIAlertView *_kickAlertView;
  22. UIAlertView *_updateNickAlertView;
  23. }
  24. @property (strong, nonatomic) UITableView *tableView;
  25. @property (strong, nonatomic) NIMUsrInfo *usrInfo;
  26. @property (nonatomic,strong) NIMCommonTableDelegate *delegator;
  27. @property (nonatomic,strong) NSArray *data;
  28. @end
  29. @implementation NIMTeamMemberCardViewController
  30. - (instancetype)initWithUserId:(NSString *)userId team:(NSString *)teamId{
  31. self = [super initWithNibName:nil bundle:nil];
  32. if(self) {
  33. _member = [[NIMTeamCardMemberItem alloc] initWithMember:[[NIMSDK sharedSDK].teamManager teamMember:userId inTeam:teamId]];
  34. _viewer = [[NIMTeamCardMemberItem alloc] initWithMember:[[NIMSDK sharedSDK].teamManager teamMember:[NIMSDK sharedSDK].loginManager.currentAccount inTeam:teamId]];
  35. }
  36. return self;
  37. }
  38. - (void)viewDidLoad {
  39. [super viewDidLoad];
  40. self.navigationItem.title = @"群名片";
  41. self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
  42. self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  43. self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  44. if (@available(iOS 15.0, *)) {
  45. self.tableView.sectionHeaderTopPadding = 0;
  46. }
  47. [self.view addSubview:self.tableView];
  48. self.tableView.tableFooterView = [UIView new];
  49. NIMUsrInfo *user = [[NIMUsrInfo alloc] init];
  50. user.info = [[NIMKit sharedKit] infoByUser:self.member.memberId option:nil];
  51. self.usrInfo = user;
  52. [self buildData];
  53. __weak typeof(self) wself = self;
  54. self.delegator = [[NIMCommonTableDelegate alloc] initWithTableData:^NSArray *{
  55. return wself.data;
  56. }];
  57. self.tableView.delegate = self.delegator;
  58. self.tableView.dataSource = self.delegator;
  59. }
  60. - (void)buildData{
  61. NIMTeamMember *member = [[NIMSDK sharedSDK].teamManager teamMember:self.member.memberId inTeam:self.member.team.teamId];
  62. NSArray *data = @[
  63. @{
  64. HeaderTitle:@"",
  65. RowContent :@[
  66. @{
  67. CellClass : @"NIMTeamMemberCardHeaderCell",
  68. RowHeight : @(222),
  69. ExtraInfo : @{@"user":self.usrInfo,@"team":self.member.team},
  70. SepLeftEdge : @(SepLineLeft),
  71. },
  72. @{
  73. Title : @"群昵称",
  74. DetailTitle : member.nickname.length? member.nickname : @"未设置",
  75. CellAction : ([self isSelf] || [self canUpdateTeamMember])? @"updateTeamNick" : @"",
  76. ShowAccessory : ([self isSelf] || [self canUpdateTeamMember])? @(YES) : @(NO),
  77. RowHeight : @(50),
  78. SepLeftEdge : @(SepLineLeft),
  79. },
  80. @{
  81. Title : @"身份",
  82. DetailTitle : [self memberTypeString:self.member.type],
  83. CellAction : ([self isOwner] && ![self isSelf])? @"updateTeamRole" : @"",
  84. ShowAccessory : [self isOwner] && ![self isSelf]? @(YES) : @(NO),
  85. RowHeight : @(50),
  86. SepLeftEdge : @(SepLineLeft),
  87. },
  88. @{
  89. Title : @"设置禁言",
  90. CellClass : @"NIMKitSwitcherCell",
  91. CellAction : @"updateMute:",
  92. ForbidSelect : @(YES),
  93. RowHeight : @(50),
  94. Disable : @(![self canUpdateTeamMember]),
  95. ExtraInfo : @(member.isMuted),
  96. SepLeftEdge : @(SepLineLeft),
  97. },
  98. @{
  99. Title : @"移出本群",
  100. CellClass : @"NIMKitColorButtonCell",
  101. CellAction : @"onKickBtnClick:",
  102. ExtraInfo : @(NIMKitColorButtonCellStyleRed),
  103. RowHeight : @(70),
  104. Disable : @(![self canUpdateTeamMember]),
  105. SepLeftEdge : @(0),
  106. }
  107. ],
  108. FooterTitle:@""
  109. },
  110. ];
  111. self.data = [NIMCommonTableSection sectionsWithData:data];
  112. }
  113. - (void)refreshData{
  114. [self buildData];
  115. [self.tableView reloadData];
  116. }
  117. - (NSString *)memberTypeString:(NIMTeamMemberType)type {
  118. if(type == NIMTeamMemberTypeNormal) {
  119. return @"普通成员";
  120. } else if (type == NIMTeamMemberTypeOwner) {
  121. return @"群主";
  122. } else if (type == NIMTeamMemberTypeManager) {
  123. return @"管理员";
  124. }
  125. return @"";
  126. }
  127. - (void)onKickBtnClick:(id)sender {
  128. _kickAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"移出本群" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
  129. [_kickAlertView show];
  130. }
  131. - (void)updateTeamNick
  132. {
  133. _updateNickAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"修改群昵称" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确认", nil];
  134. _updateNickAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
  135. [_updateNickAlertView show];
  136. }
  137. - (void)updateTeamRole
  138. {
  139. UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"管理员操作" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles: self.member.type == NIMTeamMemberTypeManager ? @"取消管理员" : @"设为管理员", nil];
  140. [sheet showInView:self.view];
  141. }
  142. - (void)updateMute:(UISwitch *)switcher
  143. {
  144. __block typeof(self) wself = self;
  145. BOOL mute = switcher.on;
  146. [[NIMSDK sharedSDK].teamManager updateMuteState:mute userId:self.member.memberId inTeam:self.member.team.teamId completion:^(NSError *error) {
  147. if (error) {
  148. [wself.view makeToast:@"修改失败"];
  149. switcher.on = !mute;
  150. }
  151. }];
  152. }
  153. - (void)removeManager:(NSString *)memberId{
  154. __block typeof(self) wself = self;
  155. [[NIMSDK sharedSDK].teamManager removeManagersFromTeam:self.member.team.teamId users:@[self.member.memberId] completion:^(NSError *error) {
  156. if (!error) {
  157. wself.member.type = NIMTeamMemberTypeNormal;
  158. [wself.view makeToast:@"修改成功"];
  159. [wself refreshData];
  160. if([_delegate respondsToSelector:@selector(onTeamMemberInfoChaneged:)]) {
  161. [_delegate onTeamMemberInfoChaneged:wself.member];
  162. }
  163. }else{
  164. [wself.view makeToast:@"修改失败"];
  165. }
  166. }];
  167. }
  168. - (void)addManager:(NSString *)memberId{
  169. __block typeof(self) wself = self;
  170. [[NIMSDK sharedSDK].teamManager addManagersToTeam:self.member.team.teamId users:@[self.member.memberId] completion:^(NSError *error) {
  171. if (!error) {
  172. wself.member.type = NIMTeamMemberTypeManager;
  173. [wself.view makeToast:@"修改成功"];
  174. [wself refreshData];
  175. if([_delegate respondsToSelector:@selector(onTeamMemberInfoChaneged:)]) {
  176. [_delegate onTeamMemberInfoChaneged:wself.member];
  177. }
  178. }else{
  179. [wself.view makeToast:@"修改失败"];
  180. }
  181. }];
  182. }
  183. #pragma mark - UIAlertViewDelegate
  184. - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
  185. if (alertView == _kickAlertView) {
  186. if(alertView.cancelButtonIndex != buttonIndex) {
  187. [[NIMSDK sharedSDK].teamManager kickUsers:@[self.member.memberId] fromTeam:self.member.team.teamId completion:^(NSError *error) {
  188. if(!error) {
  189. [self.view makeToast:@"踢人成功"];
  190. [self.navigationController popViewControllerAnimated:YES];
  191. if([_delegate respondsToSelector:@selector(onTeamMemberKicked:)]) {
  192. [_delegate onTeamMemberKicked:self.member];
  193. }
  194. } else {
  195. [self.view makeToast:@"踢人失败"];
  196. }
  197. }];
  198. }
  199. }
  200. if (alertView == _updateNickAlertView) {
  201. switch (buttonIndex) {
  202. case 0://取消
  203. break;
  204. case 1:{
  205. NSString *name = [alertView textFieldAtIndex:0].text;
  206. [[NIMSDK sharedSDK].teamManager updateUserNick:self.member.memberId newNick:name inTeam:self.member.team.teamId completion:^(NSError *error) {
  207. if (!error) {
  208. [self.view makeToast:@"修改成功"];
  209. [self refreshData];
  210. if([_delegate respondsToSelector:@selector(onTeamMemberInfoChaneged:)]) {
  211. [_delegate onTeamMemberInfoChaneged:self.member];
  212. }
  213. }else{
  214. [self.view makeToast:@"修改失败"];
  215. }
  216. }];
  217. break;
  218. }
  219. default:
  220. break;
  221. }
  222. }
  223. }
  224. #pragma mark - UIActionSheetDelegate
  225. - (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
  226. if(buttonIndex == 0) {
  227. if (self.member.type == NIMTeamMemberTypeManager) {
  228. [self removeManager:self.member.memberId];
  229. }else{
  230. [self addManager:self.member.memberId];
  231. }
  232. }
  233. }
  234. #pragma mark - Private
  235. - (BOOL)isSelf
  236. {
  237. return [self.viewer.memberId isEqualToString:self.member.memberId];
  238. }
  239. - (BOOL)isOwner
  240. {
  241. return self.viewer.member.type == NIMTeamMemberTypeOwner;
  242. }
  243. - (BOOL)canModifyTeamInfo
  244. {
  245. return [NIMKitUtil canEditTeamInfo:self.viewer.member];
  246. }
  247. - (BOOL)canUpdateTeamMember
  248. {
  249. BOOL viewerIsOwner = [self isOwner];
  250. BOOL viewerIsManager = self.viewer.member.type == NIMTeamMemberTypeManager;
  251. BOOL memberIsNormal = self.member.member.type == NIMTeamMemberTypeNormal;
  252. if (viewerIsOwner) {
  253. return ![self isSelf];
  254. }
  255. if (viewerIsManager) {
  256. return memberIsNormal;
  257. }
  258. return NO;
  259. }
  260. @end