LoginViewController.m 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. //
  2. // LoginViewController.m
  3. // RedAnt ERP Mobile
  4. //
  5. // Created by Ray on 14-6-20.
  6. // Copyright (c) 2014年 United Software Applications, Inc. All rights reserved.
  7. //
  8. #import "LoginViewController.h"
  9. #import "RAUtils.h"
  10. #import "RANetwork.h"
  11. #import "AppDelegate.h"
  12. //#import "RetrievePassViewController.h"
  13. //#import "UILabel+FontAppearance.h"
  14. //#import "OLDataProvider.h"
  15. //#import "NotificationNameCenter.h"
  16. //#import "OfflineSettingViewController.h"
  17. //#import "MainViewController.h"
  18. //#import "WebViewController.h"
  19. @interface LoginViewController ()
  20. @property (strong, nonatomic) IBOutlet UIButton *requestLoginBtn;
  21. @end
  22. @implementation LoginViewController
  23. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  24. {
  25. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  26. if (self) {
  27. // Custom initialization
  28. }
  29. return self;
  30. }
  31. - (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {
  32. // Put anything that starts with this substring into the autocompleteUrls array
  33. // 过滤,剩下符合输入文字的候选
  34. [self.filterlogindata removeAllObjects];
  35. for(NSString *curString in self.logindata) {
  36. NSRange substringRange = [curString rangeOfString:substring];
  37. if (substringRange.location == 0) {
  38. [self.filterlogindata addObject:curString];
  39. }
  40. }
  41. if(self.filterlogindata.count==0)
  42. {
  43. self.Loginlist.hidden=true;
  44. self.showList = false;
  45. }
  46. [self.Loginlist reloadData];
  47. }
  48. - (void)viewDidLoad
  49. {
  50. [super viewDidLoad];
  51. self.title=@"Sign in";//@"Granite Expo";
  52. self.showList = false;
  53. self.bb_close.image=[[UIImage imageNamed:@"close"] imageWithRenderingMode:UIImageRenderingModeAutomatic];
  54. [self.checkSavePassword setImage:[UIImage imageNamed:@"checkbox"] forState:UIControlStateNormal];
  55. [self.checkSavePassword setImage:[UIImage imageNamed:@"checkbox_check"] forState:UIControlStateSelected];
  56. self.filterlogindata = [NSMutableArray new];
  57. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  58. NSString * user = [AESCrypt decrypt:[defaults stringForKey:@"user"] password:@"usai"];
  59. NSString * password = [AESCrypt decrypt:[defaults stringForKey:@"password"] password:@"usai"];
  60. if(user.length>0&&password.length>0)
  61. {
  62. self.edituser.text=user;
  63. self.editpass.text=password;
  64. self.checkSavePassword.selected=true;
  65. }
  66. // NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  67. // [defaults removeObjectForKey:@"EnableOfflineMode"];
  68. // [defaults setBool:self.checkOfflineMode.selected forKey:@"EnableOfflineMode"];
  69. [self.checkSavePassword addTarget:self action:@selector(checkboxClick:) forControlEvents:UIControlEventTouchUpInside];
  70. // self.checkOfflineMode.tag=999;
  71. // self.logindata = [iSalesDB get_saveduser];
  72. self.logindata = [[defaults arrayForKey:@"login_data"] mutableCopy];
  73. if(self.logindata==nil)
  74. self.logindata = [NSMutableArray new];
  75. // UIButton* combobutton=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
  76. // [combobutton setBackgroundImage:[UIImage imageNamed:@"combo_24"] forState:UIControlStateNormal];
  77. // [combobutton addTarget:self action:@selector(LoginList:) forControlEvents:UIControlEventTouchUpInside];
  78. //
  79. // self.edituser.rightView = combobutton;
  80. // self.edituser.rightViewMode=UITextFieldViewModeAlways;
  81. //
  82. self.Loginlist.layer.borderColor = [UIColor lightGrayColor].CGColor;
  83. self.Loginlist.layer.borderWidth = 1.0;
  84. // self.Loginlist.layer.cornerRadius=15;
  85. self.Loginlist.layer.masksToBounds=true;
  86. // Do any additional setup after loading the view.
  87. }
  88. - (void)LoginList:(UIButton *)sender {
  89. [self.edituser endEditing:true];
  90. self.showList= !self.showList;
  91. self.Loginlist.hidden = !self.showList;
  92. // showList;
  93. }
  94. -(void)checkboxClick:(UIButton *)btn
  95. {
  96. btn.selected = !btn.selected;
  97. {
  98. if(!btn.selected)
  99. {
  100. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  101. [defaults removeObjectForKey:@"user"];
  102. [defaults removeObjectForKey:@"password"];
  103. [defaults synchronize];
  104. // NSString* encryptu=[AESCrypt encrypt:self.edituser.text password:@"usai"];
  105. // NSString* sql=[NSString stringWithFormat:@"delete from login_info where name='%@'",encryptu];
  106. // [iSalesDB execSql:sql];
  107. // self.logindata = [iSalesDB get_saveduser];
  108. // [self.Loginlist reloadData];
  109. }
  110. }
  111. }
  112. - (IBAction)CloseClick:(id)sender {
  113. [self dismissViewControllerAnimated:true completion:nil];
  114. if(self.returnValue)
  115. self.returnValue(false);
  116. }
  117. - (IBAction)onRetrievePassword:(id)sender {
  118. // RetrievePassViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"RetrievePassViewController" ];
  119. // // dvc
  120. // // UINavigationController* nv = self.navigationController;
  121. //
  122. // [self.navigationController pushViewController:vc animated:true];
  123. }
  124. - (IBAction)onLoginClick:(UIButton *)sender {
  125. NSString* user = self.edituser.text;
  126. NSString* password = self.editpass.text;
  127. // NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  128. //
  129. // bool forcedownload = [defaults boolForKey:@"Forcedownload"];
  130. // if(forcedownload && self.checkOfflineMode.selected)
  131. // {
  132. // self.checkOfflineMode.selected = !self.checkOfflineMode.selected;
  133. //
  134. // [RAUtils alert_view:@"Detected incomplete sync, please finish sync first." title:@"Incomplete sync"];
  135. // return;
  136. // }
  137. if(user.length==0||password.length==0)
  138. {
  139. // UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @"Error!" message:@"user or password can not be empty." delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) otherButtonTitles:nil, nil];
  140. // // UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Error!" message:@"User&Password can not be empty!" delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) , nil];
  141. //
  142. //
  143. // //[[UILabel appearanceWhenContainedIn:UIAlertView.class, nil] setAppearanceFont:[UIFont boldSystemFontOfSize:10]];
  144. // [alert show];
  145. // [RAUtils alert_view:@"Username or Password cannot be blank." title:@"Cannot sign-in"];
  146. [RAUtils message_alert:@"Username or Password cannot be blank." title:@"Cannot sign-in" controller:self];
  147. return;
  148. }
  149. DebugLog(@"Login... user= %@ ; password= %@",user,password);
  150. self.btnLogin.enabled = false;
  151. // UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait..." title:@"Sign in"];
  152. __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Sign in" completion:^{
  153. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  154. int ret=[RANetwork Authorize:user password:password];
  155. dispatch_async(dispatch_get_main_queue(), ^{
  156. // [waitalert dismissWithClickedButtonIndex:0 animated:FALSE];
  157. [waitalert dismissViewControllerAnimated:YES completion:^{
  158. self.btnLogin.enabled = true;
  159. if(ret==RESULT_TRUE)
  160. {
  161. //
  162. // NSString* contactid=[self.content_data[indexPath.row] valueForKey:@"contact_id"] ;
  163. AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
  164. // appDelegate.contact_id=contactid;
  165. // appDelegate.contact_name =[self.content_data[indexPath.row] valueForKey:@"name"];
  166. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  167. [defaults removeObjectForKey:@"user"];
  168. [defaults removeObjectForKey:@"password"];
  169. NSString* encryptu=[AESCrypt encrypt:appDelegate.user password:@"usai"];
  170. NSString* encryptp=[AESCrypt encrypt:self.editpass.text password:@"usai"] ;
  171. // long index =[self.logindata indexOfObject:appDelegate.user];
  172. if(![self.logindata containsObject:appDelegate.user])
  173. {
  174. [self.logindata addObject:appDelegate.user];
  175. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
  176. self.logindata = [[self.logindata sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,nil]] mutableCopy];
  177. }
  178. [defaults setObject:self.logindata forKey:@"login_data"];
  179. if(self.checkSavePassword.selected)
  180. {
  181. [defaults setValue:encryptu forKey:@"user"];
  182. [defaults setValue:encryptp forKey:@"password"];
  183. // sqlite3 *db = [iSalesDB get_db];
  184. //
  185. // int count =[iSalesDB get_recordcount:db table:@"login_info" where:[NSString stringWithFormat:@"name='%@'",encryptu]];
  186. //
  187. // if(count==0)
  188. // {
  189. //
  190. // NSString * savelogin=[NSString stringWithFormat:@"insert into login_info(name,pwd) values('%@','%@')",encryptu,encryptp];
  191. // [iSalesDB execSql:savelogin db:db];
  192. // }
  193. // else
  194. // {
  195. // NSString * savelogin=[NSString stringWithFormat:@"update login_info set pwd='%@' where name='%@'",encryptp,encryptu];
  196. // [iSalesDB execSql:savelogin db:db];
  197. // }
  198. //
  199. // [iSalesDB close_db:db];
  200. // [defaults setBool:TRUE forKey:@"autologin"];
  201. }
  202. // else
  203. // {
  204. // NSString* sql=[NSString stringWithFormat:@"delete from login_info where name='%@'",encryptu];
  205. // [iSalesDB execSql:sql];
  206. // }
  207. [defaults synchronize];
  208. [self dismissViewControllerAnimated:YES completion:^{
  209. // NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  210. // bool offline_dirty=[defaults boolForKey:@"OFFLINE_DIRTY"];
  211. // sqlite3* db = [iSalesDB get_db];
  212. // int offline_user_exist=[iSalesDB get_recordcount:db table:@"offline_login" where:[NSString stringWithFormat:@"username='%@'",appDelegate.user ]];
  213. //
  214. // [iSalesDB close_db:db];
  215. // else
  216. {
  217. if(self.returnValue)
  218. self.returnValue(true);
  219. // [[NSNotificationCenter defaultCenter] postNotificationName:LoginOK_HandleUrgencyFile_Notification object:nil];
  220. }
  221. }];
  222. // if (self.delegate && [self.delegate respondsToSelector:@selector(LoginViewControllerDidLogin:)]) {
  223. // [self.delegate LoginViewControllerDidLogin:self];
  224. // }
  225. // [[NSNotificationCenter defaultCenter] postNotificationName:User_LoginOK_Notification object:nil];
  226. }
  227. else
  228. {
  229. NSString* msg=nil;
  230. switch (ret) {
  231. case RESULT_NET_NOTAVAILABLE:
  232. msg = MSG_NET_NOTAVAILABLE;
  233. break;
  234. case RESULT_NET_ERROR:
  235. msg = MSG_NET_ERROR;
  236. break;
  237. case RESULT_FALSE:
  238. msg = MSG_USERAUTH_ERROR;
  239. break;
  240. case RESULT_VER_LOW:
  241. msg = MSG_VER_LOW;
  242. break;
  243. case RESULT_LOGIN_DEVICE:
  244. msg= MSG_LOGIN_DEVICE;
  245. break;
  246. default:
  247. break;
  248. }
  249. // [RAUtils alert_view:msg title:@"Cannot sign-in"];
  250. [RAUtils message_alert:msg title:@"Cannot sign-in" controller:self];
  251. }
  252. }];
  253. });
  254. });
  255. }];
  256. }
  257. - (void)didReceiveMemoryWarning
  258. {
  259. [super didReceiveMemoryWarning];
  260. // Dispose of any resources that can be recreated.
  261. }
  262. #pragma mark - Table view data source
  263. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
  264. {
  265. return 44;
  266. }
  267. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  268. {
  269. return 1;
  270. }
  271. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  272. {
  273. return self.filterlogindata.count;
  274. }
  275. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  276. {
  277. // NSMutableDictionary* up = self.logindata[indexPath.row];
  278. NSString *CellIdentifier = @"LoginListCell";
  279. UITableViewCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
  280. NSString* name=self.filterlogindata[indexPath.row];//up[@"name"];
  281. cell.textLabel.text = name;
  282. return cell;
  283. }
  284. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  285. {
  286. NSString* name=self.filterlogindata[indexPath.row];
  287. // NSMutableDictionary* up = self.logindata[indexPath.row];
  288. self.edituser.text = name;//up[@"name"];
  289. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  290. NSString * user = [AESCrypt decrypt:[defaults stringForKey:@"user"] password:@"usai"];
  291. if([user isEqualToString:name])
  292. {
  293. NSString * password = [AESCrypt decrypt:[defaults stringForKey:@"password"] password:@"usai"];
  294. self.editpass.text = password;
  295. }
  296. else
  297. {
  298. self.editpass.text=nil;
  299. }
  300. self.showList=false;
  301. self.Loginlist.hidden=true;
  302. self.checkSavePassword.selected=true;
  303. }
  304. #pragma mark UITextFieldDelegate methods
  305. //当用户增,删字符的时候,都会调用此方法<br>//
  306. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  307. self.Loginlist.hidden = NO;
  308. NSString *substring = [NSString stringWithString:textField.text];
  309. substring = [substring stringByReplacingCharactersInRange:range withString:string];
  310. [self searchAutocompleteEntriesWithSubstring:substring];
  311. return YES;
  312. }
  313. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
  314. {
  315. return true;
  316. }
  317. - (void)textFieldDidBeginEditing:(UITextField *)textField
  318. {
  319. // self.showList=false;
  320. // self.Loginlist.hidden=true;
  321. }
  322. - (void)textFieldDidEndEditing:(UITextField *)textField
  323. {
  324. self.showList=false;
  325. self.Loginlist.hidden=true;
  326. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  327. NSString * user = [AESCrypt decrypt:[defaults stringForKey:@"user"] password:@"usai"];
  328. if([user isEqualToString:self.edituser.text])
  329. {
  330. NSString * password = [AESCrypt decrypt:[defaults stringForKey:@"password"] password:@"usai"];
  331. self.editpass.text = password;
  332. }
  333. else
  334. {
  335. self.editpass.text = nil;
  336. }
  337. }
  338. #pragma mark - action
  339. //- (IBAction)requestLoginBtnClicked:(UIButton *)sender {
  340. //
  341. // WebViewController *webVC = [self.storyboard instantiateViewControllerWithIdentifier:@"WebViewController"];
  342. // webVC.url = URL_REQUEST_LOGIN;
  343. // webVC.title = @"Request Login";
  344. // webVC.backItemDismiss = YES;
  345. //
  346. //
  347. // UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:webVC];
  348. // nav.modalPresentationStyle = UIModalPresentationFormSheet;
  349. //
  350. // [self presentViewController:nav animated:YES completion:nil];
  351. //
  352. //}
  353. @end