JXSelFriendVC.m 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985
  1. //
  2. // JXSelFriendVC.h.m
  3. //
  4. // Created by flyeagleTang on 14-4-3.
  5. // Copyright (c) 2014年 Reese. All rights reserved.
  6. //
  7. #import "JXSelFriendVC.h"
  8. #import "JXChatViewController.h"
  9. #import "AppDelegate.h"
  10. #import "JXLabel.h"
  11. #import "JXImageView.h"
  12. #import "JXCell.h"
  13. #import "JXRoomPool.h"
  14. #import "JXTableView.h"
  15. #import "JXNewFriendViewController.h"
  16. #import "menuImageView.h"
  17. #import "QCheckBox.h"
  18. #import "JXRoomObject.h"
  19. #import "NSString+ContainStr.h"
  20. #import "JXMessageObject.h"
  21. #import "BMChineseSort.h"
  22. @interface JXSelFriendVC ()<UITextFieldDelegate, UIAlertViewDelegate,JXRoomObjectDelegate>
  23. @property (nonatomic, strong) UITextField *seekTextField;
  24. @property (nonatomic, strong) NSMutableArray *searchArray;
  25. @property (nonatomic, strong) UIButton* finishBtn;
  26. @property (nonatomic, strong) memberData *transferMember;
  27. //排序后的出现过的拼音首字母数组
  28. @property(nonatomic,strong)NSMutableArray *indexArray;
  29. //排序好的结果数组
  30. @property(nonatomic,strong)NSMutableArray *letterResultArr;
  31. @end
  32. @implementation JXSelFriendVC
  33. @synthesize chatRoom,room,isNewRoom,set,array=_array;
  34. - (id)init
  35. {
  36. self = [super init];
  37. if (self) {
  38. self.heightHeader = JX_SCREEN_TOP;
  39. self.heightFooter = 0;
  40. self.isGotoBack = YES;
  41. //self.view.frame = g_window.bounds;
  42. self.isShowFooterPull = NO;
  43. _searchArray = [NSMutableArray array];
  44. _userIds = [NSMutableArray array];
  45. _userNames = [NSMutableArray array];
  46. set = [[NSMutableSet alloc] init];
  47. _selMenu = 0;
  48. [g_notify addObserver:self selector:@selector(newReceipt:) name:kXMPPReceiptNotifaction object:nil];
  49. [g_notify addObserver:self selector:@selector(onSendTimeout:) name:kXMPPSendTimeOutNotifaction object:nil];
  50. [g_notify addObserver:self selector:@selector(refreshNotif:) name:kLabelVCRefreshNotif object:nil];
  51. }
  52. return self;
  53. }
  54. - (void)refreshNotif:(NSNotification *)notif {
  55. [self actionQuit];
  56. }
  57. -(void)dealloc{
  58. //移除监听
  59. [g_notify removeObserver:self];
  60. [set removeAllObjects];
  61. [_array removeAllObjects];
  62. }
  63. - (void)viewDidLoad
  64. {
  65. [super viewDidLoad];
  66. [self createHeadAndFoot];
  67. if (_type == JXSelUserTypeGroupAT ||_type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomTransfer || _type == JXSelUserTypeRoomInvisibleMan ||_type == JXSelUserTypeRoomMonitorPeople) {
  68. }else{
  69. _finishBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  70. [_finishBtn setTitle:Localized(@"JX_Confirm") forState:UIControlStateNormal];
  71. [_finishBtn setTitle:Localized(@"JX_Confirm") forState:UIControlStateHighlighted];
  72. [_finishBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  73. _finishBtn.layer.masksToBounds = YES;
  74. _finishBtn.layer.cornerRadius = 3.f;
  75. [_finishBtn setBackgroundColor:THEMECOLOR];
  76. [_finishBtn.titleLabel setFont:SYSFONT(15)];
  77. _finishBtn.frame = CGRectMake(JX_SCREEN_WIDTH - 51 - 15, JX_SCREEN_TOP - 8 - 29, 51, 29);
  78. [_finishBtn addTarget:self action:@selector(onAdd:) forControlEvents:UIControlEventTouchUpInside];
  79. [self.tableHeader addSubview:_finishBtn];
  80. }
  81. [self customSearchTextField];
  82. [self getDataArrayByType];
  83. }
  84. -(void)getDataArrayByType{
  85. self.isShowFooterPull = NO;
  86. self.isShowHeaderPull = NO;
  87. if (_type == JXSelUserTypeGroupAT || _type == JXSelUserTypeSelMembers || _type == JXSelUserTypeRoomTransfer) {
  88. if(_type == JXSelUserTypeSelMembers){
  89. self.title = Localized(@"JXSip_invite");
  90. [self getSelUserTypeSelMembersArray];
  91. }else{
  92. self.title = Localized(@"JX_GroupAtMember");
  93. if (_type == JXSelUserTypeRoomTransfer) {
  94. self.title = Localized(@"JX_SelectNewGroupManager");
  95. }
  96. [self getGroupATRoomMembersArray];
  97. }
  98. [_table reloadData];
  99. }else if(_type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomInvisibleMan || _type == JXSelUserTypeRoomMonitorPeople){
  100. if (_type == JXSelUserTypeSpecifyAdmin) {
  101. self.title = Localized(@"JXRoomMemberVC_SetAdministrator");
  102. }else if (_type == JXSelUserTypeRoomInvisibleMan){
  103. self.title = Localized(@"JXDesignatedStealthMan");
  104. }else {
  105. self.title = Localized(@"JXDesignatedMonitor");
  106. }
  107. [self getRoomMembersArray];
  108. [_table reloadData];
  109. }else if (_type == JXSelUserTypeCustomArray) {
  110. // self.title
  111. [_table reloadData];
  112. }
  113. else{
  114. self.title = Localized(@"JXSelFriendVC_SelFriend");
  115. _array=[[NSMutableArray alloc] init];
  116. [self refresh];
  117. }
  118. }
  119. - (void)viewWillAppear:(BOOL)animated
  120. {
  121. [super viewWillAppear:animated];
  122. }
  123. - (void)customSearchTextField{
  124. //搜索输入框
  125. UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 55)];
  126. // backView.backgroundColor = HEXCOLOR(0xf0f0f0);
  127. [self.view addSubview:backView];
  128. // UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(backView.frame.size.width-5-45, 5, 45, 30)];
  129. // [cancelBtn setTitle:Localized(@"JX_Cencal") forState:UIControlStateNormal];
  130. // [cancelBtn setTitleColor:THEMECOLOR forState:UIControlStateNormal];
  131. // [cancelBtn addTarget:self action:@selector(cancelBtnAction) forControlEvents:UIControlEventTouchUpInside];
  132. // cancelBtn.titleLabel.font = SYSFONT(14);
  133. // [backView addSubview:cancelBtn];
  134. _seekTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, backView.frame.size.width - 30, 35)];
  135. _seekTextField.placeholder = Localized(@"JX_EnterKeyword");
  136. _seekTextField.textColor = [UIColor blackColor];
  137. [_seekTextField setFont:SYSFONT(14)];
  138. _seekTextField.backgroundColor = HEXCOLOR(0xf0f0f0);
  139. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]];
  140. UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)];
  141. // imageView.center = CGPointMake(leftView.frame.size.width/2, leftView.frame.size.height/2);
  142. imageView.center = leftView.center;
  143. [leftView addSubview:imageView];
  144. _seekTextField.leftView = leftView;
  145. _seekTextField.leftViewMode = UITextFieldViewModeAlways;
  146. _seekTextField.borderStyle = UITextBorderStyleNone;
  147. _seekTextField.layer.masksToBounds = YES;
  148. _seekTextField.layer.cornerRadius = 3.f;
  149. _seekTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  150. _seekTextField.delegate = self;
  151. _seekTextField.returnKeyType = UIReturnKeyGoogle;
  152. [backView addSubview:_seekTextField];
  153. [_seekTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  154. self.tableView.tableHeaderView = backView;
  155. }
  156. - (void) textFieldDidChange:(UITextField *)textField {
  157. if (textField.text.length <= 0) {
  158. [self getDataArrayByType];
  159. return;
  160. }
  161. [_searchArray removeAllObjects];
  162. // NSMutableArray *arr = [_array mutableCopy];
  163. // for (NSInteger i = 0; i < arr.count; i ++) {
  164. //
  165. // NSString * nameStr = nil;
  166. // NSString * cardNameStr = nil;
  167. // NSString * nickNameStr = nil;
  168. // if ([arr[i] isMemberOfClass:[memberData class]]) {
  169. // memberData *obj = arr[i];
  170. // nameStr = obj.userName;
  171. // cardNameStr = obj.cardName;
  172. // nickNameStr = obj.userNickName;
  173. // }else if ([arr[i] isMemberOfClass:[JXUserObject class]]) {
  174. // JXUserObject * obj = arr[i];
  175. // nameStr = obj.userNickname;
  176. // }
  177. // nameStr = !nameStr ? @"" : nameStr;
  178. // cardNameStr = !cardNameStr ? @"" : cardNameStr;
  179. // nickNameStr = !nickNameStr ? @"" : nickNameStr;
  180. // NSString * allStr = [NSString stringWithFormat:@"%@%@%@",nameStr,cardNameStr,nickNameStr];
  181. // if ([[allStr lowercaseString] containsMyString:[textField.text lowercaseString]]) {
  182. // [_searchArray addObject:arr[i]];
  183. // }
  184. //
  185. // }
  186. if (_type == JXSelUserTypeGroupAT || _type == JXSelUserTypeSelMembers || _type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomTransfer) {
  187. // _searchArray = [memberData searchMemberByFilter:textField.text room:room.roomId];
  188. for (NSInteger i = 0; i < _array.count; i ++) {
  189. memberData *data = _array[i];
  190. memberData *data1 = [self.room getMember:g_myself.userId];
  191. JXUserObject *allUser = [[JXUserObject alloc] init];
  192. allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",data.userId]];
  193. NSString *name = [NSString string];
  194. if ([data1.role intValue] == 1) {
  195. name = data.lordRemarkName.length > 0 ? data.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
  196. }else {
  197. name = allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
  198. }
  199. NSString *userStr = [name lowercaseString];
  200. NSString *textStr = [textField.text lowercaseString];
  201. if ([userStr rangeOfString:textStr].location != NSNotFound) {
  202. [_searchArray addObject:data];
  203. }
  204. }
  205. }else{
  206. for (NSInteger i = 0; i < _array.count; i ++) {
  207. JXUserObject * user = _array[i];
  208. NSString *userStr = [user.userNickname lowercaseString];
  209. NSString *textStr = [textField.text lowercaseString];
  210. if ([userStr rangeOfString:textStr].location != NSNotFound) {
  211. [_searchArray addObject:user];
  212. }
  213. }
  214. }
  215. // _searchArray = [memberData searchMemberByFilter:textField.text room:room.roomId];
  216. [self.tableView reloadData];
  217. }
  218. - (void) cancelBtnAction {
  219. _seekTextField.text = nil;
  220. [_seekTextField resignFirstResponder];
  221. [self getDataArrayByType];
  222. }
  223. - (void)didReceiveMemoryWarning
  224. {
  225. [super didReceiveMemoryWarning];
  226. // Dispose of any resources that can be recreated.
  227. }
  228. #pragma mark ---------tableView协议----------------
  229. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  230. {
  231. if (_seekTextField.text.length > 0) {
  232. return 1;
  233. }
  234. return [self.indexArray count];
  235. }
  236. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
  237. if (_seekTextField.text.length > 0) {
  238. return Localized(@"JXFriend_searchTitle");
  239. }
  240. return [self.indexArray objectAtIndex:section];
  241. }
  242. -(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
  243. UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
  244. header.tintColor = HEXCOLOR(0xF2F2F2);
  245. [header.textLabel setTextColor:HEXCOLOR(0x999999)];
  246. [header.textLabel setFont:SYSFONT(15)];
  247. }
  248. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  249. {
  250. if (_seekTextField.text.length > 0) {
  251. return _searchArray.count;
  252. }
  253. return [(NSArray *)[self.letterResultArr objectAtIndex:section] count];
  254. }
  255. -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
  256. if (_seekTextField.text.length > 0) {
  257. return nil;
  258. }
  259. return self.indexArray;
  260. }
  261. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
  262. return index;
  263. }
  264. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  265. {
  266. // NSArray * tempArray;
  267. //
  268. // if (_seekTextField.text.length > 0) {
  269. // tempArray = _searchArray;
  270. // }else{
  271. // tempArray = _array;
  272. // }
  273. JXCell *cell=nil;
  274. NSString* cellName = [NSString stringWithFormat:@"selVC_%d_%d",_refreshCount,(int)indexPath.row];
  275. cell = [tableView dequeueReusableCellWithIdentifier:cellName];
  276. if (!cell) {
  277. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  278. }
  279. // if(cell==nil){
  280. if (_type == JXSelUserTypeGroupAT || _type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeSelMembers || _type == JXSelUserTypeRoomTransfer|| _type == JXSelUserTypeRoomInvisibleMan|| _type == JXSelUserTypeRoomMonitorPeople) {
  281. memberData * member;
  282. if (_seekTextField.text.length > 0) {
  283. member = _searchArray[indexPath.row];
  284. }else{
  285. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  286. }
  287. // cell = [[JXCell alloc] init];
  288. [_table addToPool:cell];
  289. NSString *name = [NSString string];
  290. memberData *data = [self.room getMember:g_myself.userId];
  291. JXUserObject *allUser = [[JXUserObject alloc] init];
  292. allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",member.userId]];
  293. if ([data.role intValue] == 1) {
  294. name = member.lordRemarkName ? member.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
  295. }else {
  296. name = allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
  297. }
  298. if (!self.room.allowSendCard && [data.role intValue] != 1 && [data.role intValue] != 2 && member.userId > 0) {
  299. name = [name substringToIndex:[name length]-1];
  300. name = [name stringByAppendingString:@"*"];
  301. }
  302. cell.title = name;
  303. cell.positionTitle = [self positionStrRole:[member.role integerValue]];
  304. if(!member.idStr){//所有人不显示
  305. // cell.subtitle = [NSString stringWithFormat:@"%ld",member.userId];
  306. }else{
  307. cell.headImage = @"groupImage";
  308. }
  309. // cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  310. cell.userId = [NSString stringWithFormat:@"%ld",member.userId];
  311. // [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  312. cell.isSmall = YES;
  313. [cell headImageViewImageWithUserId:nil roomId:nil];
  314. if (_type == JXSelUserTypeGroupAT) {
  315. if(member.idStr){
  316. if (room.roomId != nil) {
  317. // NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,room.roomId,@"jpg"];
  318. // if (groupImagePath && [[NSFileManager defaultManager] fileExistsAtPath:groupImagePath]) {
  319. // cell.headImageView.image = [UIImage imageWithContentsOfFile:groupImagePath];
  320. // }else{
  321. // [roomData roomHeadImageRoomId:room.roomId toView:cell.headImageView];
  322. // }
  323. [g_server getRoomHeadImageSmall:room.roomJid roomId:room.roomId imageView:cell.headImageView];
  324. }
  325. }
  326. }
  327. if(_type == JXSelUserTypeSelMembers){
  328. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  329. btn.frame = CGRectMake(JX_SCREEN_WIDTH-40, 15, 25, 25);
  330. btn.tag = indexPath.row;
  331. BOOL b = NO;
  332. NSString* s = [NSString stringWithFormat:@"%ld",member.userId];
  333. b = [_existSet containsObject:s];
  334. btn.selected = b;
  335. btn.userInteractionEnabled = !b;
  336. [cell addSubview:btn];
  337. }
  338. }else if (_type == JXSelUserTypeCustomArray || _type == JXSelUserTypeDisAble) {
  339. JXUserObject *user;
  340. if (_seekTextField.text.length > 0) {
  341. user = _searchArray[indexPath.row];
  342. }else{
  343. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  344. }
  345. [_table addToPool:cell];
  346. cell.title = user.userNickname;
  347. // cell.subtitle = user.userId;
  348. // cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  349. cell.userId = user.userId;
  350. cell.isSmall = YES;
  351. [cell headImageViewImageWithUserId:nil roomId:nil];
  352. // cell.headImage = user.userHead;
  353. // [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  354. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  355. btn.frame = CGRectMake(JX_SCREEN_WIDTH-40, 15, 25, 25);
  356. btn.tag = indexPath.row;
  357. if (self.disableSet) {
  358. btn.enabled = ![_disableSet containsObject:user.userId];
  359. }else{
  360. btn.enabled = YES;
  361. }
  362. [cell addSubview:btn];
  363. }else{
  364. JXUserObject *user;
  365. if (_seekTextField.text.length > 0) {
  366. user = _searchArray[indexPath.row];
  367. }else{
  368. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  369. }
  370. // cell = [[JXCell alloc] init];
  371. [_table addToPool:cell];
  372. cell.title = user.userNickname;
  373. // cell.subtitle = user.userId;
  374. cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  375. cell.userId = user.userId;
  376. cell.isSmall = YES;
  377. [cell headImageViewImageWithUserId:nil roomId:nil];
  378. // cell.headImage = user.userHead;
  379. // [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  380. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  381. btn.frame = CGRectMake(JX_SCREEN_WIDTH-40, 15, 25, 25);
  382. btn.tag = indexPath.section * 1000 + indexPath.row;
  383. BOOL b = NO;
  384. if (room){
  385. b = [room isMember:user.userId];
  386. btn.selected = b;
  387. btn.userInteractionEnabled = !b;
  388. }else{
  389. b = [_existSet containsObject:user.userId];
  390. if (_type == JXSelUserTypeSelFriends) {
  391. btn.selected = b;
  392. }else {
  393. btn.enabled = !b;
  394. }
  395. }
  396. [cell addSubview:btn];
  397. }
  398. if (indexPath.row == [(NSArray *)[self.letterResultArr objectAtIndex:indexPath.section] count]-1) {
  399. cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,0);
  400. }else {
  401. cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,LINE_WH);
  402. }
  403. // }
  404. // else{
  405. //
  406. // NSLog(cellName);
  407. // }
  408. return cell;
  409. }
  410. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  411. {
  412. if (_type == JXSelUserTypeGroupAT) {
  413. memberData * member;
  414. if (_seekTextField.text.length > 0) {
  415. member = _searchArray[indexPath.row];
  416. }else{
  417. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  418. }
  419. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  420. [self.delegate performSelectorOnMainThread:self.didSelect withObject:member waitUntilDone:YES];
  421. [self actionQuit];
  422. // _pSelf = nil;
  423. }else if (_type == JXSelUserTypeRoomTransfer) {
  424. memberData * member;
  425. if (_seekTextField.text.length > 0) {
  426. member = _searchArray[indexPath.row];
  427. }else{
  428. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  429. }
  430. _transferMember = member;
  431. [g_App showAlert:[NSString stringWithFormat:Localized(@"JX_GroupUpdateManagerStatus"),member.userNickName] delegate:self tag:2458 onlyConfirm:NO];
  432. }
  433. else if (_type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomInvisibleMan || _type == JXSelUserTypeRoomMonitorPeople) {
  434. memberData * member;
  435. if (_seekTextField.text.length > 0) {
  436. member = _searchArray[indexPath.row];
  437. }else{
  438. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  439. }
  440. if (_type == JXSelUserTypeSpecifyAdmin) {
  441. if ([member.role intValue] == 1) {
  442. [g_App showAlert:Localized(@"JXGroup_CantSetSelf")];
  443. return;
  444. }
  445. if ([member.role intValue] == 5) {
  446. [g_App showAlert:Localized(@"JX_MonitorCannotAdministrator")];
  447. return;
  448. }
  449. if ([member.role intValue] == 4) {
  450. [g_App showAlert:Localized(@"JX_InvisibleCannotAdministrator")];
  451. return;
  452. }
  453. }else {
  454. if ([member.role intValue] == 1 || [member.role intValue] == 2) {
  455. [g_App showAlert:Localized(@"JX_UnableSetGroupManagerAndAdministrator")];
  456. return;
  457. }
  458. if (_type == JXSelUserTypeRoomInvisibleMan){
  459. if ([member.role intValue] == 5) {
  460. [g_App showAlert:Localized(@"JX_YouCannotSetMonitor")];
  461. return;
  462. }
  463. }else {
  464. if ([member.role intValue] == 4) {
  465. [g_App showAlert:Localized(@"JX_YouCannotSetInvisible")];
  466. return;
  467. }
  468. }
  469. }
  470. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  471. [self.delegate performSelectorOnMainThread:self.didSelect withObject:member waitUntilDone:YES];
  472. [self actionQuit];
  473. }else {
  474. JXCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  475. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  476. QCheckBox *btn = (QCheckBox *)[cell viewWithTag:indexPath.row];
  477. btn.selected = !btn.selected;
  478. if(btn.selected){
  479. [set addObject:[NSNumber numberWithInteger:btn.tag]];
  480. }
  481. else{
  482. [set removeObject:[NSNumber numberWithInteger:btn.tag]];
  483. }
  484. }
  485. }
  486. -(void)getGroupATRoomMembersArray{
  487. // _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:YES];
  488. _array = (NSMutableArray *)[memberData fetchAllMembersAndHideMonitor:room.roomId sortByName:YES];
  489. if (_type == JXSelUserTypeGroupAT) {
  490. memberData * mem = [[memberData alloc] init];
  491. mem.userId = 0;
  492. mem.idStr = room.roomJid;
  493. mem.roomId = room.roomId;
  494. mem.userNickName = Localized(@"JX_AtALL");
  495. mem.cardName = Localized(@"JX_AtALL");
  496. mem.role = [NSNumber numberWithInt:10];
  497. // mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  498. [_array insertObject:mem atIndex:0];
  499. }
  500. [self reomveExistsSet];
  501. //选择拼音 转换的 方法
  502. BMChineseSortSetting.share.sortMode = 2; // 1或2
  503. //排序 Person对象
  504. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  505. if (isSuccess) {
  506. self.indexArray = sectionTitleArr;
  507. self.letterResultArr = sortedObjArr;
  508. [_table reloadData];
  509. }
  510. }];
  511. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  512. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  513. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  514. }
  515. -(void)getSelUserTypeSelMembersArray{
  516. // _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:YES];
  517. if ([[NSString stringWithFormat:@"%ld",self.room.userId] isEqualToString:MY_USER_ID]) {
  518. _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:YES];
  519. }else {
  520. _array = (NSMutableArray *)[memberData fetchAllMembersAndHideMonitor:room.roomId sortByName:YES];
  521. }
  522. [self reomveExistsSet];
  523. //选择拼音 转换的 方法
  524. BMChineseSortSetting.share.sortMode = 2; // 1或2
  525. //排序 Person对象
  526. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  527. if (isSuccess) {
  528. self.indexArray = sectionTitleArr;
  529. self.letterResultArr = sortedObjArr;
  530. [_table reloadData];
  531. }
  532. }];
  533. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  534. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  535. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  536. }
  537. -(void)getRoomMembersArray{
  538. if ([[NSString stringWithFormat:@"%ld",self.room.userId] isEqualToString:MY_USER_ID]) {
  539. _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:NO];
  540. }else {
  541. _array = (NSMutableArray *)[memberData fetchAllMembersAndHideMonitor:room.roomId sortByName:NO];
  542. }
  543. [self reomveExistsSet];
  544. //选择拼音 转换的 方法
  545. BMChineseSortSetting.share.sortMode = 2; // 1或2
  546. //排序 Person对象
  547. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  548. if (isSuccess) {
  549. self.indexArray = sectionTitleArr;
  550. self.letterResultArr = sortedObjArr;
  551. [_table reloadData];
  552. }
  553. }];
  554. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  555. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  556. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  557. }
  558. -(void)reomveExistsSet{
  559. for(NSInteger i=[_array count]-1;i>=0;i--){
  560. memberData* p = [_array objectAtIndex:i];
  561. if([self.existSet containsObject:[NSString stringWithFormat:@"%ld",p.userId]]>0)
  562. [_array removeObjectAtIndex:i];
  563. }
  564. }
  565. -(void)getArrayData{
  566. _array=[[JXUserObject sharedInstance] fetchAllUserFromLocal];
  567. if (self.isShowMySelf) {
  568. JXUserObject *mySelf = [[JXUserObject alloc] init];
  569. mySelf.userId = g_myself.userId;
  570. mySelf.userNickname = g_myself.userNickname;
  571. [_array insertObject:mySelf atIndex:0];
  572. }
  573. for(NSInteger i=[_array count]-1;i>=0;i--){
  574. JXUserObject* u = [_array objectAtIndex:i];
  575. for (int j=0; j<[room.members count]; j++) {
  576. memberData* p = [room.members objectAtIndex:j];
  577. if(p.userId == [u.userId intValue]){
  578. [_array removeObjectAtIndex:i];
  579. break;
  580. }
  581. }
  582. if (self.isForRoom) {
  583. if([self.forRoomUser.userId isEqualToString:u.userId]){
  584. [_array removeObjectAtIndex:i];
  585. }
  586. }
  587. }
  588. //选择拼音 转换的 方法
  589. BMChineseSortSetting.share.sortMode = 2; // 1或2
  590. //排序 Person对象
  591. [BMChineseSort sortAndGroup:_array key:@"userNickname" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  592. if (isSuccess) {
  593. self.indexArray = sectionTitleArr;
  594. self.letterResultArr = sortedObjArr;
  595. [_table reloadData];
  596. }
  597. }];
  598. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  599. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickname"];
  600. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickname"];
  601. if(isNewRoom && [_array count]<=0)//没有好友时
  602. [self performSelector:@selector(onAdd:) withObject:nil afterDelay:0.1];
  603. }
  604. -(void)refresh{
  605. [self stopLoading];
  606. _refreshCount++;
  607. [_array removeAllObjects];
  608. [self getArrayData];
  609. [_table reloadData];
  610. }
  611. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  612. {
  613. return 59;
  614. }
  615. -(void)scrollToPageUp{
  616. [self refresh];
  617. }
  618. - (void)didSelectedCheckBox:(QCheckBox *)checkbox checked:(BOOL)checked{
  619. if(checked){
  620. [set addObject:[NSNumber numberWithInteger:checkbox.tag]];
  621. }
  622. else{
  623. [set removeObject:[NSNumber numberWithInteger:checkbox.tag]];
  624. }
  625. }
  626. -(void)onAdd:(UIButton *)btn{
  627. btn.enabled = NO;
  628. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  629. btn.enabled = YES;
  630. });
  631. if(_type == JXSelUserTypeSelFriends || chatRoom || self.isForRoom){
  632. [_userIds removeAllObjects];
  633. [_userNames removeAllObjects];
  634. if (self.isForRoom) {
  635. [_userIds addObject:self.forRoomUser.userId];
  636. [_userNames addObject:self.forRoomUser.userNickname];
  637. }
  638. for(NSNumber* n in set){
  639. //获取选中的好友
  640. JXUserObject *user;
  641. if (_seekTextField.text.length > 0) {
  642. user = _searchArray[[n intValue] % 1000];
  643. }else{
  644. user = [[self.letterResultArr objectAtIndex:[n intValue] / 1000] objectAtIndex:[n intValue] % 1000];
  645. }
  646. [_userIds addObject:user.userId];
  647. [_userNames addObject:user.userNickname];
  648. /*
  649. JXMessageObject* m = [[JXMessageObject alloc] init];
  650. m.messageId = [[[XMPPStream generateUUID] stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  651. m.fromUserId = MY_USER_ID;
  652. m.fromUserName = kMY_USER_NICKNAME;
  653. m.toUserId = user.userId;
  654. m.toUserName = user.userNickname;
  655. m.type = [NSNumber numberWithInt:kWCMessageTypeInvite];
  656. m.isRead = [NSNumber numberWithBool:NO];
  657. m.isSend = [NSNumber numberWithBool:NO];
  658. m.timeSend = [NSDate date];
  659. m.content = [room roomDataToNSString];
  660. m.isGroup = 0;
  661. [g_xmpp sendMessageInvite:m];
  662. //xmpp邀请加入房间,取消调用此协议
  663. NSString* to = [NSString stringWithFormat:@"%@@%@",user.userId,g_config.XMPPDomain];
  664. [chatRoom.xmppRoom inviteUser:[XMPPJID jidWithString:to] withMessage:[room roomDataToNSString] msgId:m.messageId];
  665. */
  666. /*邀请协议DEMO:
  667. <message to="3029b12761bb4476bd06f801f51e9f5d@muc.192.168.0.168" id="12348c13c51d0925b4815678" xmlns="jabber:client" from="10005629@192.168.0.168/youjob">
  668. <x xmlns="http://jabber.org/protocol/muc#user">
  669. <invite to="10005598@192.168.0.168"><reason>{"desc":"","id":"59858c13c51d0925b481ce1a","jid":"3029b12761bb4476bd06f801f51e9f5d","name":"陈叔叔","timeSend":1501925454,"userId":"10005629"}</reason></invite>
  670. </x></message>
  671. */
  672. user = nil;
  673. }
  674. if(self.isForRoom){
  675. NSString* s = [NSUUID UUID].UUIDString;
  676. s = [[s stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  677. NSString *roomName = [NSString stringWithFormat:@"%@、%@",MY_USER_NAME,[_userNames componentsJoinedByString:@"、"]];
  678. room.roomJid= s;
  679. room.name = roomName;
  680. room.desc = nil;
  681. room.userId = [g_myself.userId longLongValue];
  682. room.userNickName = MY_USER_NAME;
  683. room.showRead = NO;
  684. room.showMember = YES;
  685. room.allowSendCard = YES;
  686. room.isLook = YES;
  687. room.isNeedVerify = NO;
  688. room.allowInviteFriend = YES;
  689. room.allowUploadFile = YES;
  690. room.allowConference = YES;
  691. room.allowSpeakCourse = YES;
  692. chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:s title:roomName];
  693. chatRoom.delegate = self;
  694. [_wait start:Localized(@"JXAlert_CreatRoomIng") delay:30];
  695. return;
  696. }
  697. if ((self.room.isNeedVerify && self.room.userId != [g_myself.userId longLongValue]) || _type == JXSelUserTypeSelFriends) {
  698. if (self.isShowAlert) {
  699. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:Localized(@"JX_SaveLabelNextTime") message:nil delegate:self cancelButtonTitle:Localized(@"JX_DepositAsLabel") otherButtonTitles:Localized(@"JX_Ignore"), nil];
  700. alert.tag = 2457;
  701. [alert show];
  702. return;
  703. }
  704. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  705. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  706. [self actionQuit];
  707. }else {
  708. [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  709. }
  710. if(isNewRoom){
  711. [self onNewRoom];
  712. [self actionQuit];
  713. }
  714. return;
  715. }
  716. if (_type == JXSelUserTypeGroupAT || _type == JXSelUserTypeRoomTransfer)
  717. return;
  718. if (_type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomInvisibleMan || _type == JXSelUserTypeRoomMonitorPeople)
  719. return;
  720. if (_type == JXSelUserTypeSelMembers){
  721. }
  722. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  723. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  724. [self actionQuit];
  725. }
  726. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  727. if (alertView.tag == 2457) {
  728. if (buttonIndex == 0) {
  729. if ([self.delegate respondsToSelector:self.alertAction]) {
  730. [self.delegate performSelectorOnMainThread:self.alertAction withObject:self waitUntilDone:YES];
  731. }
  732. }else {
  733. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  734. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  735. [self actionQuit];
  736. }
  737. }
  738. if (alertView.tag == 2458) {
  739. if (buttonIndex == 1) {
  740. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  741. [self.delegate performSelectorOnMainThread:self.didSelect withObject:_transferMember waitUntilDone:YES];
  742. [self actionQuit];
  743. }
  744. }
  745. }
  746. -(void)xmppRoomDidCreate{
  747. [g_server addRoom:room isPublic:YES isNeedVerify:NO category:0 toView:self];
  748. chatRoom.delegate = nil;
  749. }
  750. -(void)onNewRoom{
  751. JXChatViewController *sendView=[JXChatViewController alloc];
  752. sendView.title = chatRoom.roomTitle;
  753. sendView.roomJid = chatRoom.roomJid;
  754. sendView.roomId = room.roomId;
  755. sendView.chatRoom = chatRoom;
  756. JXUserObject * user = [[JXUserObject alloc]init];
  757. user = [user getUserById:chatRoom.roomJid];
  758. sendView.chatPerson = user;
  759. sendView = [sendView init];
  760. // [g_App.window addSubview:sendView.view];
  761. [g_navigation pushViewController:sendView animated:YES];
  762. }
  763. -(NSString *)positionStrRole:(NSInteger)role{
  764. if (_type == JXSelUserTypeSpecifyAdmin || _type == JXSelUserTypeRoomInvisibleMan || _type == JXSelUserTypeRoomMonitorPeople) {
  765. NSString * roleStr = nil;
  766. switch (role) {
  767. case 1://创建者
  768. roleStr = Localized(@"JXGroup_Owner");
  769. break;
  770. case 2://管理员
  771. roleStr = Localized(@"JXGroup_Admin");
  772. break;
  773. case 3://普通成员
  774. roleStr = Localized(@"JXGroup_RoleNormal");
  775. break;
  776. case 4://隐身人
  777. roleStr = Localized(@"JXInvisibleMan");
  778. break;
  779. case 5://监控人
  780. roleStr = Localized(@"JXMonitorPerson");
  781. break;
  782. default:
  783. roleStr = Localized(@"JXGroup_RoleNormal");
  784. break;
  785. }
  786. return roleStr;
  787. }
  788. return nil;
  789. }
  790. -(void)onSendTimeout:(NSNotification *)notifacation//超时未收到回执
  791. {
  792. // [_wait stop];
  793. // JXMessageObject *msg = (JXMessageObject *)notifacation.object;
  794. // if([msg.type intValue] == kWCMessageTypeInvite)
  795. // [g_App showAlert:[NSString stringWithFormat:@"邀请:%@失败,请重新邀请",msg.toUserName]];
  796. }
  797. -(void)newReceipt:(NSNotification *)notifacation{//新回执
  798. // [_wait stop];
  799. // JXMessageObject *msg = (JXMessageObject *)notifacation.object;
  800. // if([msg.type intValue] == kWCMessageTypeInvite)
  801. // [g_server addRoomMember:room.roomId userId:msg.toUserId nickName:msg.toUserName toView:self];
  802. }
  803. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  804. [_wait stop];
  805. if( [aDownload.action isEqualToString:act_roomMemberSet] ){
  806. for (int i=0;i<[_userIds count];i++) {
  807. NSString *userId=[_userIds objectAtIndex:i];
  808. memberData* p = [[memberData alloc] init];
  809. p.userId = [userId intValue];
  810. p.userNickName = [_userNames objectAtIndex:i];
  811. p.role = [NSNumber numberWithInt:3];
  812. [room.members addObject:p];
  813. }
  814. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  815. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  816. [_userIds removeAllObjects];
  817. [_userNames removeAllObjects];
  818. [self actionQuit];
  819. // _pSelf = nil;
  820. }
  821. if( [aDownload.action isEqualToString:act_roomAdd] ){
  822. room.roomId = [dict objectForKey:@"id"];
  823. // _room.call = [NSString stringWithFormat:@"%@",[dict objectForKey:@"call"]];
  824. [self insertRoom];
  825. [g_notify postNotificationName:kUpdateUserNotifaction object:nil];
  826. [g_notify postNotificationName:kActionRelayQuitVC object:nil];
  827. [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  828. if(isNewRoom){
  829. [self onNewRoom];
  830. }
  831. }
  832. }
  833. -(void)insertRoom{
  834. JXUserObject* user = [[JXUserObject alloc]init];
  835. user.userNickname = room.name;
  836. user.userId = room.roomJid;
  837. user.userDescription = room.desc;
  838. user.roomId = room.roomId;
  839. user.showRead = [NSNumber numberWithBool:room.showRead];
  840. user.showMember = [NSNumber numberWithBool:room.showMember];
  841. user.allowSendCard = [NSNumber numberWithBool:room.allowSendCard];
  842. user.chatRecordTimeOut = room.chatRecordTimeOut;
  843. user.talkTime = [NSNumber numberWithLong:room.talkTime];
  844. user.allowInviteFriend = [NSNumber numberWithBool:room.allowInviteFriend];
  845. user.allowUploadFile = [NSNumber numberWithBool:room.allowUploadFile];
  846. user.allowConference = [NSNumber numberWithBool:room.allowConference];
  847. user.allowSpeakCourse = [NSNumber numberWithBool:room.allowSpeakCourse];
  848. user.isNeedVerify = [NSNumber numberWithBool:room.isNeedVerify];
  849. [user insertRoom];
  850. }
  851. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  852. [_wait stop];
  853. return show_error;
  854. }
  855. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  856. [_wait stop];
  857. return show_error;
  858. }
  859. -(void) didServerConnectStart:(JXConnection*)aDownload{
  860. [_wait start];
  861. }
  862. @end