123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- //
- // JXRoomMemberListVC.m
- // shiku_im
- //
- // Created by p on 2018/7/3.
- // Copyright © 2018年 Reese. All rights reserved.
- //
- #import "JXRoomMemberListVC.h"
- #import "roomData.h"
- #import "JXRoomMemberListCell.h"
- #import "BMChineseSort.h"
- #import "JXUserInfoVC.h"
- #import "JXActionSheetVC.h"
- #import "JXInputValueVC.h"
- @interface JXRoomMemberListVC ()<UITextFieldDelegate,LXActionSheetDelegate, UIAlertViewDelegate,JXActionSheetVCDelegate>
- @property (nonatomic, strong) NSMutableArray *array;
- @property (nonatomic, strong) NSMutableArray *searchArray;
- @property (nonatomic, strong) UITextField *seekTextField;
- //排序后的出现过的拼音首字母数组
- @property(nonatomic,strong)NSMutableArray *indexArray;
- //排序好的结果数组
- @property(nonatomic,strong)NSMutableArray *letterResultArr;
- @property (nonatomic, strong) memberData *currentMember;
- @property (nonatomic, strong) JXUserObject *user;
- @end
- @implementation JXRoomMemberListVC
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
-
-
- self.heightHeader = JX_SCREEN_TOP;
- self.heightFooter = 0;
- self.isGotoBack = YES;
- //self.view.frame = g_window.bounds;
- // self.isShowFooterPull = NO;
-
- [self createHeadAndFoot];
-
- _searchArray = [NSMutableArray array];
-
- [self.tableView registerClass:[JXRoomMemberListCell class] forCellReuseIdentifier:@"JXRoomMemberListCell"];
- [self customSearchTextField];
-
- self.user = [[JXUserObject sharedInstance] getUserById:self.room.roomJid];
-
- _array = (NSMutableArray *)[memberData fetchAllMembers:self.room.roomId sortByName:NO];
- if (_array.count > 0) {
-
- if ([self.user.joinTime timeIntervalSince1970] <= 0) {
-
- memberData *member = _array.lastObject;
- self.user.joinTime = [NSDate dateWithTimeIntervalSince1970:member.createTime];
- }
-
- [self refresh];
- }else {
- self.user.joinTime = [NSDate dateWithTimeIntervalSince1970:0];
- [self getServerData];
- }
- [self scrollToPageUp];
- }
- - (void)scrollToPageUp {
- self.user.joinTime = [NSDate dateWithTimeIntervalSince1970:0];
- [self getServerData];
- }
- - (void)scrollToPageDown {
- [self getServerData];
- }
- - (void)getServerData {
-
- [g_server roomMemberGetMemberListByPageWithRoomId:self.room.roomId joinTime:[self.user.joinTime timeIntervalSince1970] toView:self];
- }
- - (void)refresh {
-
- _array = (NSMutableArray *)[memberData fetchAllMembers:self.room.roomId sortByName:NO];
- //选择拼音 转换的 方法
- BMChineseSortSetting.share.sortMode = 2; // 1或2
- //排序 Person对象
- [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
- if (isSuccess) {
- self.indexArray = sectionTitleArr;
- self.letterResultArr = sortedObjArr;
- [_table reloadData];
- }
- }];
- }
- - (void)customSearchTextField{
-
- //搜索输入框
- UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 55)];
- // backView.backgroundColor = HEXCOLOR(0xf0f0f0);
- [self.view addSubview:backView];
-
-
- _seekTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, backView.frame.size.width - 30, 35)];
- _seekTextField.placeholder = Localized(@"JX_EnterKeyword");
- _seekTextField.textColor = [UIColor blackColor];
- [_seekTextField setFont:SYSFONT(14)];
- _seekTextField.backgroundColor = HEXCOLOR(0xf0f0f0);
- UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]];
- UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)];
- // imageView.center = CGPointMake(leftView.frame.size.width/2, leftView.frame.size.height/2);
- imageView.center = leftView.center;
- [leftView addSubview:imageView];
- _seekTextField.leftView = leftView;
- _seekTextField.leftViewMode = UITextFieldViewModeAlways;
- _seekTextField.borderStyle = UITextBorderStyleNone;
- _seekTextField.layer.masksToBounds = YES;
- _seekTextField.layer.cornerRadius = 3.f;
- _seekTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
- _seekTextField.delegate = self;
- _seekTextField.returnKeyType = UIReturnKeyGoogle;
- [backView addSubview:_seekTextField];
- [_seekTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
-
- self.tableView.tableHeaderView = backView;
-
- }
- - (void) textFieldDidChange:(UITextField *)textField {
-
- if (textField.text.length <= 0) {
-
- [self.tableView reloadData];
- return;
- }
-
- [_searchArray removeAllObjects];
- for (NSInteger i = 0; i < _array.count; i ++) {
- memberData *data = _array[i];
- JXUserObject *allUser = [[JXUserObject alloc] init];
- allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",data.userId]];
- NSString *name = [NSString string];
- if ([[NSString stringWithFormat:@"%ld",_room.userId] isEqualToString:MY_USER_ID]) {
- name = data.lordRemarkName ? data.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
- }else {
- name = allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
- }
- NSString *userStr = [name lowercaseString];
- NSString *textStr = [textField.text lowercaseString];
- if ([userStr rangeOfString:textStr].location != NSNotFound) {
- [_searchArray addObject:data];
- }
- }
- [self.tableView reloadData];
- }
- #pragma mark ---------tableView协议----------------
- -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- if (_seekTextField.text.length > 0) {
- return 1;
- }
- return [self.indexArray count];
- }
- - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
- if (_seekTextField.text.length > 0) {
- return Localized(@"JXFriend_searchTitle");
- }
- return [self.indexArray objectAtIndex:section];
- }
- -(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
- UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
- header.tintColor = HEXCOLOR(0xF2F2F2);
- [header.textLabel setTextColor:HEXCOLOR(0x999999)];
- [header.textLabel setFont:SYSFONT(15)];
- }
- -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- if (_seekTextField.text.length > 0) {
- return _searchArray.count;
- }
- return [(NSArray *)[self.letterResultArr objectAtIndex:section] count];
- }
- -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
- if (_seekTextField.text.length > 0) {
- return nil;
- }
- return self.indexArray;
- }
- - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
- return index;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
- return 59;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
-
- JXRoomMemberListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"JXRoomMemberListCell" forIndexPath:indexPath];
- cell.curManager = [NSString stringWithFormat:@"%ld",_room.userId];
- memberData *data;
- if (_seekTextField.text.length > 0) {
- data = _searchArray[indexPath.row];
- }else{
- data = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
- }
- // memberData *d = [self.room getMember:[NSString stringWithFormat:@"%ld",data.userId]];
- cell.room = self.room;
- cell.role = [data.role intValue];
- cell.data = data;
- cell.onlinStatus.text = [data.onlinestate isEqualToString:@"1"] ? @"在线":@"离线";
- [self doAutoScroll:indexPath];
-
- if (indexPath.row == [(NSArray *)[self.letterResultArr objectAtIndex:indexPath.section] count]-1) {
- cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,0);
- }else {
- cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,LINE_WH);
- }
- return cell;
- }
- -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- {
- [super tableView:tableView didSelectRowAtIndexPath:indexPath];
- memberData *data = [self.room getMember:g_myself.userId];
- if (([data.role intValue] != 1 && [data.role intValue] != 2) && !self.room.allowSendCard) {
- [g_App showAlert:Localized(@"JX_NotAllowMembersSeeInfo")];
- return;
- }
- memberData * member;
- if (_seekTextField.text.length > 0) {
- member = _searchArray[indexPath.row];
- }else{
- member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
- }
-
- switch (self.type) {
- case Type_Default:{
- JXUserInfoVC* userVC = [JXUserInfoVC alloc];
- userVC.userId = [NSString stringWithFormat:@"%ld",member.userId];
- userVC.fromAddType = 3;
- userVC = [userVC init];
-
- [g_navigation pushViewController:userVC animated:YES];
- }
- break;
- case Type_NotTalk:{
- memberData *selfData = [self.room getMember:MY_USER_ID];
- memberData *d = [self.room getMember:[NSString stringWithFormat:@"%ld",member.userId]];
- if ([selfData.role intValue] == 1) {
- if ([d.role intValue] == 1) {
- [g_App showAlert:@"不能禁言群主"];
- return;
- }
- }else {
- if ([d.role intValue] == 1 || [d.role intValue] == 2) {
- [g_App showAlert:Localized(@"JX_Can'tBanManager")];
- return;
- }
- }
-
- if ([d.role intValue] == 4) {
- [g_App showAlert:Localized(@"JX_YouCan'tKeepYourMouthShut")];
- return;
- }
- if ([d.role intValue] == 5) {
- [g_App showAlert:@"不能禁言监控人"];
- return;
- }
- _currentMember = member;
- [self onDisableSay:nil];
- }
- break;
- case Type_DelMember:{
-
-
- memberData *data = [self.room getMember:g_myself.userId];
- if ([data.role intValue] == 1) {
- if ([member.role intValue] == 1) {
-
- [g_App showAlert:Localized(@"JX_Can'tDeleteManager")];
- return;
- }
- }
-
-
- if ([data.role intValue] == 2) {
- if ([member.role intValue] == 1 || [member.role intValue] == 2) {
-
- [g_App showAlert:Localized(@"JX_Can'tDeleteManager")];
- return;
- }
- }
-
- _currentMember = member;
-
- JXUserObject *allUser = [[JXUserObject alloc] init];
- allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",member.userId]];
- NSString *name;
- if ([[NSString stringWithFormat:@"%ld",_room.userId] isEqualToString:MY_USER_ID]) {
- name = member.lordRemarkName.length > 0 ? member.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
- }else {
- name = allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
- }
-
-
- [g_App showAlert:[NSString stringWithFormat:@"%@ %@",Localized(@"JX_DetermineToDelete"),name] delegate:self tag:2457 onlyConfirm:NO];
- }
- break;
- case Type_AddNotes:{
- JXUserObject *allUser = [[JXUserObject alloc] init];
- allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",member.userId]];
- NSString *name = [NSString string];
- if ([[NSString stringWithFormat:@"%ld",_room.userId] isEqualToString:MY_USER_ID]) {
- name = member.lordRemarkName ? member.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
- }else {
- name = allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
- }
- JXInputValueVC* vc = [JXInputValueVC alloc];
- vc.value = name;
- vc.userId = [NSString stringWithFormat:@"%ld",member.userId];
- vc.title = Localized(@"JXRoomMemberVC_UpdateNickName");
- vc.delegate = self;
- vc.didSelect = @selector(onSaveNickName:);
- vc.isLimit = YES;
- vc = [vc init];
- [g_navigation pushViewController:vc animated:YES];
- }
- break;
- default:
- break;
- }
- }
- -(void)onSaveNickName:(JXInputValueVC*)vc{
- if (self.delegate && [self.delegate respondsToSelector:@selector(roomMemberList:addNotesVC:)]) {
- memberData* p = [_room getMember:vc.userId];
- if ([p.role intValue] == 1) {
- p.userNickName = vc.value;
- }else {
- p.lordRemarkName = vc.value;
- }
- [p update];
-
- _array = (NSMutableArray *)[memberData fetchAllMembers:self.room.roomId sortByName:NO];
- //选择拼音 转换的 方法
- BMChineseSortSetting.share.sortMode = 2; // 1或2
- //排序 Person对象
- [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
- if (isSuccess) {
- self.indexArray = sectionTitleArr;
- self.letterResultArr = sortedObjArr;
- [_table reloadData];
- }
- }];
- // //根据Person对象的 name 属性 按中文 对 Person数组 排序
- // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
- // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
- [self.delegate roomMemberList:self addNotesVC:vc];
- }
- }
- - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
- if (alertView.tag == 2457) {
- if (buttonIndex == 1) {
-
- [self onDelete:nil];
- }
- }
- }
- -(void)onDisableSay:(JXImageView*)sender{
- // _disable = (int)sender.tag;
-
- // LXActionSheet* _menu = [[LXActionSheet alloc]
- // initWithTitle:nil
- // delegate:self
- // cancelButtonTitle:nil
- // destructiveButtonTitle:Localized(@"JX_Cencal")
- // otherButtonTitles:@[Localized(@"JXAlert_NotGag"),Localized(@"JXAlert_GagTenMinute"),Localized(@"JXAlert_GagOneHour"),Localized(@"JXAlert_GagOne"),Localized(@"JXAlert_GagThere"),Localized(@"JXAlert_GagOneWeek"),Localized(@"JXAlert_GagOver")]];
- // [g_window addSubview:_menu];
- // JXActionSheetVC *actionVC = [[JXActionSheetVC alloc] initWithImages:@[] names:@[Localized(@"JXAlert_NotGag"),Localized(@"JXAlert_GagTenMinute"),Localized(@"JXAlert_GagOneHour"),Localized(@"JXAlert_GagOne"),Localized(@"JXAlert_GagThere"),Localized(@"JXAlert_GagOneWeek"),Localized(@"JXAlert_GagFifteen")]];
- //Localized(@"JXAlert_NotGag")
- JXActionSheetVC *actionVC = [[JXActionSheetVC alloc] initWithImages:@[] names:@[@"取消禁言",@"开启禁言"]];
- actionVC.delegate = self;
- [self presentViewController:actionVC animated:NO completion:nil];
- }
- - (void)actionSheet:(JXActionSheetVC *)actionSheet didButtonWithIndex:(NSInteger)index {
- NSTimeInterval n = [[NSDate date] timeIntervalSince1970];
- memberData* member = _currentMember;
- switch (index) {
- case 0:
- member.talkTime = 0;
- break;
- case 1:
- member.talkTime = 10*60+n;
- break;
- case 2:
- member.talkTime = 1*3600+n;
- break;
- case 3:
- member.talkTime = 24*3600+n;
- break;
- case 4:
- member.talkTime = 3*24*3600+n;
- break;
- case 5:
- member.talkTime = 7*24*3600+n;
- break;
- case 6:
- member.talkTime = 15*24*3600+n;
- break;
- default:
- break;
- }
-
- [g_server setDisableSay:self.room.roomId member:member toView:self];
- member = nil;
- }
- //- (void)didClickOnButtonIndex:(LXActionSheet*)sender buttonIndex:(int)buttonIndex{
- // if(buttonIndex==0)
- // return;
- // NSTimeInterval n = [[NSDate date] timeIntervalSince1970];
- // memberData* member = _currentMember;
- // switch (buttonIndex) {
- // case 1:
- // member.talkTime = 0;
- // break;
- // case 2:
- // member.talkTime = 10*60+n;
- // break;
- // case 3:
- // member.talkTime = 1*3600+n;
- // break;
- // case 4:
- // member.talkTime = 24*3600+n;
- // break;
- // case 5:
- // member.talkTime = 3*24*3600+n;
- // break;
- // case 6:
- // member.talkTime = 7*24*3600+n;
- // break;
- // case 7:
- // member.talkTime = 3000*24*3600+n;
- // break;
- // }
- // [g_server setDisableSay:self.room.roomId member:member toView:self];
- //
- //// _modifyType = kRoomRemind_DisableSay;
- //// _toUserId = [NSString stringWithFormat:@"%ld",member.userId];
- //// _toUserName = member.userNickName;
- //
- //
- // member = nil;
- //}
- // 群内踢人
- -(void)onDelete:(JXImageView*)sender{
-
- [g_server delRoomMember:self.room.roomId userId:_currentMember.userId toView:self];
- }
- -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
- [_wait stop];
- if( [aDownload.action isEqualToString:act_roomMemberSet] ){
-
- [g_App showAlert:Localized(@"JXAlert_SetOK")];
- }
-
- if( [aDownload.action isEqualToString:act_roomMemberDel] ){
- //在xmpp中删除成员
- // [self.chatRoom removeUser:_currentMember];
- [self.room.members removeObject:_currentMember];
- [_currentMember remove];
- if ([self.delegate respondsToSelector:@selector(roomMemberList:delMember:)]) {
- [self.delegate roomMemberList:self delMember:_currentMember];
- }
-
- _array = (NSMutableArray *)[memberData fetchAllMembers:self.room.roomId sortByName:NO];
- //选择拼音 转换的 方法
- BMChineseSortSetting.share.sortMode = 2; // 1或2
- //排序 Person对象
- [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
- if (isSuccess) {
- self.indexArray = sectionTitleArr;
- self.letterResultArr = sortedObjArr;
- [_table reloadData];
- }
- }];
- // //根据Person对象的 name 属性 按中文 对 Person数组 排序
- // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
- // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
- [g_App showAlert:Localized(@"JXAlert_DeleteOK")];
-
- }
- if ([aDownload.action isEqualToString:act_roomMemberGetMemberListByPage]) {
-
- [self stopLoading];
-
- if (array1.count < kRoomMemberListNum) {
- self.isShowFooterPull = NO;
- }
-
- NSDictionary *lastDict = array1.lastObject;
- self.user.joinTime = [NSDate dateWithTimeIntervalSince1970:[lastDict[@"createTime"] longValue]];
- [self.user updateJoinTime];
-
- for (NSDictionary *member in array1) {
- memberData* option = [[memberData alloc] init];
- [option getDataFromDict:member];
- option.roomId = self.room.roomId;
- [option insert];
- }
- [self refresh];
- }
-
- }
- -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
- [_wait stop];
- return show_error;
- }
- -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
- [_wait stop];
- return show_error;
- }
- -(void) didServerConnectStart:(JXConnection*)aDownload{
- [_wait start];
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- /*
- #pragma mark - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
- // Get the new view controller using [segue destinationViewController].
- // Pass the selected object to the new view controller.
- }
- */
- @end
|