Developer Area

Changeset 802 for apps

Show
Ignore:
Timestamp:
01/30/11 18:04:01 (3 years ago)
Author:
henri
Message:

Now fully supports global and profile-only enabling and disabling

Location:
apps/iphone/my.tel/trunk/Classes
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • apps/iphone/my.tel/trunk/Classes/ProfileRecordsViewController.h

    r793 r802  
    2121}; 
    2222 
    23 @interface ProfileRecordsViewController : RecordViewController <HATextViewEditDelegate, UIAlertViewDelegate> { 
     23@interface ProfileRecordsViewController : RecordViewController <HATextViewEditDelegate, UIAlertViewDelegate, UIActionSheetDelegate> { 
    2424        NSDictionary *theProfile; 
    2525        NSString *ninfoApiId; 
    2626        NSString *ninfoText; 
    27          
    28         BOOL showDisabledRecords; 
     27        NSUInteger selectedRowIndex; 
    2928 
    3029        IBOutlet UIView *tableHeaderView; 
     
    4544- (void)disableRecordsUsingGlobal:(BOOL)isGlobal; 
    4645- (void)displayDisabledRecords:(BOOL)showDisabled; 
     46- (void)triggerOperationsQueueWithJson:(NSDictionary *)parsedJson; 
    4747 
    4848- (IBAction)didClickCancel:(id)sender; 
     
    5454@property (nonatomic, retain) NSString *ninfoText; 
    5555 
    56 @property (nonatomic) BOOL showDisabledRecords; 
    57  
    5856@property (nonatomic, retain) IBOutlet UIView *tableHeaderView; 
    5957@property (nonatomic, retain) IBOutlet UITableViewCell *ninfoCell; 
  • apps/iphone/my.tel/trunk/Classes/ProfileRecordsViewController.m

    r794 r802  
    1313#define kNINFOMaxLength 255             // NINFO max length 
    1414 
     15@interface ProfileRecordsViewController (PrivateMethods) 
     16 
     17- (void)performRecordEnabling:(BOOL)enable usingGlobal:(BOOL)isGlobal; 
     18 
     19@end 
     20 
     21 
    1522@implementation ProfileRecordsViewController 
    1623 
     
    1825@synthesize ninfoApiId; 
    1926@synthesize ninfoText; 
    20  
    21 @synthesize showDisabledRecords; 
    2227 
    2328@synthesize tableHeaderView; 
     
    3338         
    3439        theC.theProfile = aProfile; 
    35         theC.showDisabledRecords = NO; 
    3640        [theC _setDidPreload:preload]; 
    3741        theC.delegate = aDelegate; 
     
    189193 
    190194- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    191         // we only want to allow selection for the profile records when editing 
    192         if (indexPath.section == kKProfileTableViewSectionRecords) { 
    193                 if (! self.editing) { 
    194                         return nil; 
    195                 } 
    196                 NSDictionary *uiItem = [uiArray objectAtIndex:indexPath.row]; 
    197                 if ([[uiItem valueForKey:@"global"] integerValue] == 1) { 
    198                         // TODO: manage globals 
    199                         NSAssert(FALSE, @"GLOBAL! Must show a question to disable global or cancel"); 
    200                         return nil; 
    201                 }                
    202         } 
     195        // override superclass behavior 
    203196        return indexPath; 
    204197} 
     
    217210                [self.navigationController pushViewController:teC animated:YES]; 
    218211        } else if (indexPath.section == kKProfileTableViewSectionRecords) { 
     212                selectedRowIndex = indexPath.row; 
    219213                NSMutableDictionary *uiItem = [[uiArray objectAtIndex:indexPath.row] retain]; 
     214                NSString *sheetTitle; 
    220215                if ([[uiItem valueForKey:@"enabled"] integerValue] == 0) { 
    221                         [uiItem setValue:@"1" forKey:@"enabled"]; 
     216                        sheetTitle = LocStr(@"Enable record:"); 
    222217                } else { 
    223                         [uiItem setValue:@"0" forKey:@"enabled"]; 
    224                 } 
     218                        sheetTitle = LocStr(@"Disable record:"); 
     219                } 
     220 
     221                UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:sheetTitle 
     222                                                                                                                                 delegate:self 
     223                                                                                                                cancelButtonTitle:nil 
     224                                                                                                   destructiveButtonTitle:nil 
     225                                                                                                                otherButtonTitles:LocStr(@"in this profile"),LocStr(@"in ALL profiles"),nil]; 
     226                actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
     227                [actionSheet showInView:tableView]; 
     228                [actionSheet release];           
    225229                [uiItem release]; 
    226                 [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    227230        } else if (indexPath.section == kKProfileTableViewSectionActivate) { 
    228231                [self didClickActivate:nil]; 
     
    240243        //Toggles the receiver into and out of editing mode. 
    241244        [super setEditing:editing animated:animated]; 
    242         self.showDisabledRecords = editing; 
    243245        if (editing) { 
    244246                [self displayDisabledRecords:YES]; 
     
    253255                        buttonEditCount = 4; 
    254256                        self.navigationItem.leftBarButtonItem = nil; 
    255                         [self enableRecordsUsingGlobal:NO]; 
    256                         [self getRecords]; 
     257                        self.navigationItem.rightBarButtonItem.enabled = NO; 
     258                        // Now trigger the whole update cycle, starting with non-global item enabling 
     259                        [self triggerOperationsQueueWithJson:nil]; 
    257260                } 
    258261        } 
     
    314317} 
    315318 
    316 - (void)updateEditButtonAndDoNothing:(NSDictionary *)parsedJson { 
     319- (void)triggerOperationsQueueWithJson:(NSDictionary *)parsedJson { 
    317320        // hack to ensure: 
    318321        // 1- that all enable-disable actions are done in serial order 
    319322        // 2- that the user cannot re-edit the table before all is done 
    320323        // call enableRecordsUsingGlobal:NO, and all goes from there automatically 
     324        self.navigationItem.rightBarButtonItem.enabled = NO; 
    321325        if (parsedJson) { 
    322326                [[MyTelConnect sharedInstance] doNothing:parsedJson]; 
    323327        } 
    324328        switch (buttonEditCount) { 
    325                 case 4: // This case will be skipped if you start by calling enableRecordsUsingGlobal:NO 
     329                case 4: // This case should be skipped if you start by calling enableRecordsUsingGlobal:NO 
     330                        buttonEditCount--; 
    326331                        [self enableRecordsUsingGlobal:NO]; 
    327332                        break; 
    328333                case 3: 
     334                        buttonEditCount--; 
    329335                        [self enableRecordsUsingGlobal:YES]; 
    330336                        break; 
    331337                case 2: 
     338                        buttonEditCount--; 
     339                        [self disableRecordsUsingGlobal:YES]; 
     340                        break; 
     341                case 1: 
     342                        buttonEditCount--; 
    332343                        [self disableRecordsUsingGlobal:NO]; 
    333344                        break; 
    334                 case 1: 
    335                         [self disableRecordsUsingGlobal:YES]; 
    336                         break; 
    337345                case 0: 
    338                         self.navigationItem.rightBarButtonItem = self.editButtonItem; 
     346                        [self getRecords];      // Necessary to resync the recordsArray 
    339347                        break; 
    340348                default: 
    341349                        buttonEditCount = 0; 
    342                         self.navigationItem.rightBarButtonItem = self.editButtonItem; 
     350                        self.navigationItem.rightBarButtonItem.enabled = YES; 
    343351                        break; 
    344352        } 
     
    409417        } 
    410418        [self.delegate dataDidChangeInController:self]; 
    411         [self displayDisabledRecords:self.showDisabledRecords]; 
     419        [self displayDisabledRecords:self.tableView.editing]; 
     420        self.navigationItem.rightBarButtonItem.enabled = YES;   // could have been disabled by the update queue 
    412421} 
    413422 
     
    557566} 
    558567 
     568#pragma mark UIActionSheet delegate methods 
     569 
     570- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
     571        if (buttonIndex > 1) 
     572                return; 
     573        NSMutableDictionary *uiItem = [[uiArray objectAtIndex:selectedRowIndex] retain]; 
     574    if (buttonIndex == 0) { 
     575                // this profile 
     576                [uiItem setValue:@"0" forKey:@"global"]; 
     577    } else if (buttonIndex == 1) { 
     578                // all profiles 
     579                [uiItem setValue:@"1" forKey:@"global"]; 
     580    } 
     581        if ([[uiItem valueForKey:@"enabled"] integerValue] == 0) { 
     582                [uiItem setValue:@"1" forKey:@"enabled"]; 
     583        } else { 
     584                [uiItem setValue:@"0" forKey:@"enabled"]; 
     585        } 
     586        [uiItem release]; 
     587        NSIndexPath *selectedRowPath = [NSIndexPath indexPathForRow:selectedRowIndex inSection:kKProfileTableViewSectionRecords]; 
     588        [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectedRowPath] withRowAnimation:UITableViewRowAnimationFade]; 
     589} 
     590 
     591 
    559592#pragma mark - 
    560593#pragma mark Data management 
     
    736769 
    737770- (void)enableRecordsUsingGlobal:(BOOL)isGlobal { 
    738 //      inputRecords = { 
    739 //      domainName: "cartman.tel", 
    740 //      profiles: [23, 35], 
    741 //      apiIds: [23, 2, 22] 
    742 //      }; 
    743 //       
    744 //      successResult = { 
    745 //      success: true, 
    746 //      actionMessages: ["records enabled" 
    747 //                                       "2nd message here", 
    748 //                                       "3rd message here"] 
    749 //      };  
    750  
    751         buttonEditCount--; 
     771        [self performRecordEnabling:YES usingGlobal:isGlobal]; 
     772} 
     773 
     774- (void)disableRecordsUsingGlobal:(BOOL)isGlobal { 
     775        [self performRecordEnabling:NO usingGlobal:isGlobal]; 
     776} 
     777 
     778- (void)performRecordEnabling:(BOOL)enable usingGlobal:(BOOL)isGlobal { 
     779        //      inputRecords = { 
     780        //      domainName: "cartman.tel", 
     781        //      profiles: [23, 35], 
     782        //      apiIds: [23, 2, 22] 
     783        //      }; 
     784        //       
     785        //      successResult = { 
     786        //      success: true, 
     787        //      actionMessages: ["records disabled" 
     788        //                                       "2nd message here", 
     789        //                                       "3rd message here"] 
     790        //      };  
     791        NSString *theAction; 
     792        if (enable) { 
     793                theAction = @"enablerecords"; 
     794        } else { 
     795                theAction = @"disablerecords"; 
     796        } 
     797         
    752798        NSMutableArray *apiIdArray = [NSMutableArray arrayWithCapacity:[uiArray count]]; 
    753799        for (NSDictionary *theRow in uiArray) { 
    754800                if ([[theRow valueForKey:@"global"] integerValue] != isGlobal) { 
    755                                 // We don't modify records that are not what we're asking for: either global or profile-specific 
     801                        // We don't modify records that are not what we're asking for: either global or profile-specific 
    756802                        continue; 
    757803                } 
    758                 if ([[theRow valueForKey:@"enabled"] integerValue] == 1) { 
     804                if ([[theRow valueForKey:@"enabled"] boolValue] == enable) { 
    759805                        [apiIdArray addObject:[theRow objectForKey:@"apiId"]]; 
    760806                } 
    761807        } 
    762808        if ([apiIdArray count] == 0) { 
    763                 [self performSelector:@selector(updateEditButtonAndDoNothing:) withObject:nil]; 
     809                [self performSelector:@selector(triggerOperationsQueueWithJson:) withObject:nil]; 
    764810                return; 
    765811        } 
     
    767813        Record *conn = [[[Record alloc] init] autorelease]; 
    768814        [conn setTheDelegate:self]; 
    769         [conn setActionSel:@selector(updateEditButtonAndDoNothing:)]; 
    770         [conn setConnectionUrl:[conn urlFromAction:@"enablerecords"]]; 
     815        [conn setActionSel:@selector(triggerOperationsQueueWithJson:)]; 
     816        [conn setConnectionUrl:[conn urlFromAction:theAction]]; 
    771817         
    772818        NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithCapacity:3] retain]; 
     
    779825        } 
    780826        [requestData setObject:profiles forKey:@"profiles"]; 
    781                  
     827         
    782828        [requestData setObject:apiIdArray forKey:@"apiIds"]; 
    783829         
     
    786832        [requestData release]; 
    787833} 
    788  
    789 - (void)disableRecordsUsingGlobal:(BOOL)isGlobal { 
    790 //      inputRecords = { 
    791 //      domainName: "cartman.tel", 
    792 //      profiles: [23, 35], 
    793 //      apiIds: [23, 2, 22] 
    794 //      }; 
    795 //       
    796 //      successResult = { 
    797 //      success: true, 
    798 //      actionMessages: ["records disabled" 
    799 //                                       "2nd message here", 
    800 //                                       "3rd message here"] 
    801 //      };  
    802  
    803         buttonEditCount--; 
    804         NSMutableArray *apiIdArray = [NSMutableArray arrayWithCapacity:[uiArray count]]; 
    805         for (NSDictionary *theRow in uiArray) { 
    806                 if ([[theRow valueForKey:@"global"] integerValue] != isGlobal) { 
    807                         // We don't modify records that are not what we're asking for: either global or profile-specific 
    808                         continue; 
    809                 } 
    810                 if ([[theRow valueForKey:@"enabled"] integerValue] == 1) { 
    811                         [apiIdArray addObject:[theRow objectForKey:@"apiId"]]; 
    812                 } 
    813         } 
    814         if ([apiIdArray count] == 0) { 
    815                 [self performSelector:@selector(updateEditButtonAndDoNothing:) withObject:nil]; 
    816                 return; 
    817         } 
    818          
    819         Record *conn = [[[Record alloc] init] autorelease]; 
    820         [conn setTheDelegate:self]; 
    821         [conn setActionSel:@selector(updateEditButtonAndDoNothing:)]; 
    822         [conn setConnectionUrl:[conn urlFromAction:@"disablerecords"]]; 
    823          
    824         NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithCapacity:3] retain]; 
    825         [requestData setObject:[self.delegate domain] forKey:@"domainName"]; 
    826         NSArray *profiles; 
    827         if (isGlobal) { 
    828                 profiles = [NSArray arrayWithObject:@"-1"];     // global profile 
    829         } else { 
    830                 profiles = [NSArray arrayWithObject:[self.theProfile objectForKey:@"id"]]; 
    831         } 
    832         [requestData setObject:profiles forKey:@"profiles"]; 
    833                  
    834         [requestData setObject:apiIdArray forKey:@"apiIds"]; 
    835          
    836         [conn setPayload:requestData]; 
    837         [conn performLookup:TRUE]; 
    838         [requestData release]; 
    839 } 
    840  
    841834@end 
    842835 
Telnic
Search This Site
Partners
Neustar
ICANN
Main site | WHOIS | Sell .tel | FAQ | Archived Site | About Telnic | Contact Us