Changeset 3778


Ignore:
Timestamp:
01/10/13 18:09:43 (19 months ago)
Author:
aerych
Message:

Fixes #1528. Always uses jetpack_client_id instead of recycling blogID for .org blogs.
Jetpack 1.8.2 or better is required for stats.
Settings screen does not show credentails when Jetpack needs to be installed or upgraded.

Location:
trunk/Classes
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Classes/Blog.h

    r3633 r3778  
    6767- (NSDictionary *) getImageResizeDimensions; 
    6868- (BOOL)hasJetpack; 
     69- (NSNumber *)jetpackClientID; 
    6970 
    7071#pragma mark -  
  • trunk/Classes/Blog.m

    r3773 r3778  
    274274- (BOOL)hasJetpack { 
    275275    return (nil != [self getOptionValue:@"jetpack_version"]); 
     276} 
     277 
     278- (NSNumber *)jetpackClientID { 
     279        return [[self getOptionValue:@"jetpack_client_id"] numericValue]; 
    276280} 
    277281 
  • trunk/Classes/JetpackAuthUtil.m

    r3681 r3778  
    4646 
    4747+ (NSString *)getWporgBlogJetpackKey:(NSString *)urlPath { 
    48     return [NSString stringWithFormat:@"jetpackblog-%@", urlPath]; 
     48        return [NSString stringWithFormat:@"jetpackblog-%@", urlPath]; 
    4949} 
    5050 
    5151 
    5252+ (NSString *)getJetpackUsernameForBlog:(Blog *)blog { 
    53     return [[NSUserDefaults standardUserDefaults] objectForKey:[self getWporgBlogJetpackKey:blog.url]]; 
     53        return [[NSUserDefaults standardUserDefaults] objectForKey:[self getWporgBlogJetpackKey:blog.url]]; 
    5454} 
    5555 
     
    174174        [FileLogger log:@"Parsed URL - %@", parsedURL]; 
    175175         
    176         //Try to match the ID first. The WordPress.com ID of the Jetpack blog was introduced in options in Jetpack 1.9 or higher 
     176        //Try to match the Jetpack ID. The WordPress.com ID of the Jetpack blog was introduced in options in Jetpack 1.8.2 or higher 
    177177        if ( [blog getOptionValue:@"jetpack_client_id"] ) { 
    178             NSNumber *jetpackClientID = [[blog getOptionValue:@"jetpack_client_id"] numericValue]; 
     178            NSNumber *jetpackClientID = [blog jetpackClientID]; 
    179179            NSNumber *blogID = [[parsedBlog objectForKey:@"id"] numericValue]; 
    180180 
    181181            if ([jetpackClientID isEqualToNumber:blogID]) { 
    182                 //we found the blog, check if we need to store the info 
    183                 if ([jetpackClientID isEqualToNumber:[self.blog blogID]]) { 
    184                     // do nothing. 
    185                 } else { 
    186                     blog.blogID = jetpackClientID; 
    187                     [blog dataSave]; 
    188                 } 
    189                  
    190182                // Mark that a match was found but continue. 
    191183                // http://ios.trac.wordpress.org/ticket/1251 
     
    193185                NSLog(@"Matched parsedBlogURL: %@ to blogURL: %@ ", parsedURL, blogURL); 
    194186                NSLog(@"Matched parsedBlogID: %@", [blogID stringValue]); 
    195             } 
    196         } else { 
    197             //old version of Jetpack 
    198              
    199             // We might get a miss-match due to http vs https or a trailing slash 
    200             // so convert the strings to urls and compare their hosts + paths. 
    201             if (![blogURL scheme]) { 
    202                 blogURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", blog.url]]; 
    203             } 
    204              
    205             NSMutableString *parsedHost = [[[parsedURL host] lowercaseString] mutableCopy]; 
    206             [parsedHost replaceOccurrencesOfString:@"www." withString:@"" options:0 range:NSMakeRange(0, [parsedHost length])]; 
    207             parsedHost = [NSMutableString stringWithFormat:@"%@%@",parsedHost, [parsedURL path]]; 
    208             if (![parsedHost hasSuffix:@"/"]) { 
    209                 [parsedHost appendString:@"/"]; 
    210             } 
    211              
    212             NSMutableString *blogHost = [[[blogURL host] lowercaseString] mutableCopy]; 
    213             [blogHost replaceOccurrencesOfString:@"www." withString:@"" options:0 range:NSMakeRange(0, [blogHost length])]; 
    214             blogHost = [NSMutableString stringWithFormat:@"%@%@",blogHost, [blogURL path]]; 
    215             if (![blogHost hasSuffix:@"/"]) { 
    216                 [blogHost appendString:@"/"]; 
    217             } 
    218              
    219             if ([parsedHost isEqualToString:blogHost]) { 
    220                 NSNumber *blogID = [[parsedBlog objectForKey:@"id"] numericValue]; 
    221                 if ([blogID isEqualToNumber:[self.blog blogID]]) { 
    222                     // do nothing. 
    223                 } else { 
    224                     blog.blogID = blogID; 
    225                     [blog dataSave]; 
    226                 } 
    227                  
    228                 // Mark that a match was found but continue. 
    229                 // http://ios.trac.wordpress.org/ticket/1251 
    230                 foundMatchingBlogInAPI = YES; 
    231                 NSLog(@"Matched parsedBlogURL: %@ to blogURL: %@ ", parsedURL, blogURL); 
    232187            } 
    233188        } 
  • trunk/Classes/JetpackSettingsViewController.h

    r3633 r3778  
    1313#import "SettingsViewControllerDelegate.h" 
    1414 
    15 #define kNeedJetpackLogIn NSLocalizedString(@"To access stats, enter the WordPress.com log in used with the Jetpack plugin.", @""); 
     15#define kNeedJetpackLogIn NSLocalizedString(@"To access stats, enter the WordPress.com login used with the Jetpack plugin.", @""); 
    1616 
    1717@class Blog; 
  • trunk/Classes/JetpackSettingsViewController.m

    r3633 r3778  
    184184        return 3; 
    185185    } 
    186     return 4; 
     186    return 2; 
    187187} 
    188188 
     
    191191    switch (section) { 
    192192        case 0: 
    193             return 2;   // username, password 
     193                        if ([self.blog hasJetpack]) { 
     194                                return 2;   // username, password 
     195                        } else { 
     196                                return 1; 
     197                        } 
    194198                default: 
    195199            return 1;   // test, install, more info 
     
    201205 
    202206- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 
    203     if (section == 0) { 
     207    if (section == 0 && [self.blog hasJetpack]) { 
    204208        return 76.0f; // Enough room for 3 rows of text on the iphone in portrait orientation. 
    205209    } 
     
    209213 
    210214- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    211     if (section < 1) 
    212         return 44.0f; 
    213     if ((section == 2) && !([self.blog hasJetpack])) 
    214         return 60.0f; 
    215     else 
    216         return 0.0f; 
     215        if (section == 0) { 
     216                if ([self.blog hasJetpack]) { 
     217                        return 44.0f; 
     218                } else { 
     219                        return 82.0f; 
     220                } 
     221        } 
     222         
     223        return 0.0f; 
    217224} 
    218225 
    219226 
    220227- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { 
    221     if (section == 0) { 
     228    if (section == 0 && [self.blog hasJetpack]) { 
    222229        return self.footerText; 
    223230    } 
     
    227234 
    228235- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    229     if (section == 0) { 
     236    if (section == 0 && [self.blog hasJetpack]) { 
    230237        return NSLocalizedString(@"WordPress.com Credentials", @""); 
    231238    } 
     
    235242 
    236243- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    237     if (section == 2 && ![self.blog hasJetpack]) { 
    238         NSString *labelText = labelText = NSLocalizedString(@"Need Jetpack? Tap below and search for 'Jetpack' to install it on your site.", @""); 
     244    if (section == 0 && ![self.blog hasJetpack]) { 
     245        NSString *labelText = labelText = NSLocalizedString(@"Jetpack 1.8.2 or later is required for stats. Tap below and search for 'Jetpack' to install it on your site.", @""); 
    239246        CGRect headerFrame = CGRectMake(0.0f, 0.0f, self.tableView.frame.size.width, 50.0f); 
    240247        UIView *footerView = [[UIView alloc] initWithFrame:headerFrame]; 
     
    273280 
    274281// Customize the appearance of table view cells. 
    275 - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {     
    276     if (indexPath.section == 0) { 
    277         if(indexPath.row == 0) { 
    278             self.usernameCell = (UITableViewTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"usernameCell"]; 
    279             if (self.usernameCell == nil) { 
    280                 self.usernameCell = [[UITableViewTextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"usernameCell"]; 
    281                                 self.usernameCell.textLabel.text = NSLocalizedString(@"Username", @""); 
    282                                 usernameTextField = self.usernameCell.textField; 
    283                                 usernameTextField.placeholder = NSLocalizedString(@"WordPress.com username", @""); 
    284                 [self configureTextField:usernameTextField asPassword:NO]; 
    285                 if (username != nil)  
    286                     usernameTextField.text = username; 
    287                         } 
    288             return self.usernameCell; 
    289         } 
    290         else if(indexPath.row == 1) { 
    291             self.passwordCell = (UITableViewTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"passwordCell"]; 
    292             if (self.passwordCell == nil) { 
    293                 self.passwordCell = [[UITableViewTextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"passwordCell"]; 
    294                                 self.passwordCell.textLabel.text = NSLocalizedString(@"Password", @""); 
    295                                 passwordTextField = self.passwordCell.textField; 
    296                                 passwordTextField.placeholder = NSLocalizedString(@"WordPress.com password", @""); 
    297                 [self configureTextField:passwordTextField asPassword:YES]; 
    298                                 if(password != nil) 
    299                                         passwordTextField.text = password; 
    300                         }             
    301             return self.passwordCell; 
    302         } 
    303     } else if (indexPath.section == 1) { 
    304          
    305         // Cell's reuse identifier is defined in its xib. 
    306         UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    307         if (activityCell == nil) { 
    308             NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
    309             for(id currentObject in topLevelObjects) 
    310             { 
    311                 if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
    312                 { 
    313                     activityCell = (UITableViewActivityCell *)currentObject; 
    314                     break; 
    315                 } 
    316             } 
    317         } 
    318         if(isTesting) { 
    319                         [activityCell.spinner startAnimating]; 
    320                         self.buttonText = kCheckingCredentials; 
    321                 } 
    322                 else { 
    323                         [activityCell.spinner stopAnimating]; 
    324             if (isTestSuccessful) { 
    325                 self.buttonText = NSLocalizedString(@"Credentials Verified", @""); 
    326             } else { 
    327                 self.buttonText = kCheckCredentials; 
    328             } 
     282- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     283         
     284        if ([self.blog hasJetpack]) { 
     285 
     286                if (indexPath.section == 0) { 
     287                        if(indexPath.row == 0) { 
     288                                self.usernameCell = (UITableViewTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"usernameCell"]; 
     289                                if (self.usernameCell == nil) { 
     290                                        self.usernameCell = [[UITableViewTextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"usernameCell"]; 
     291                                        self.usernameCell.textLabel.text = NSLocalizedString(@"Username", @""); 
     292                                        usernameTextField = self.usernameCell.textField; 
     293                                        usernameTextField.placeholder = NSLocalizedString(@"WordPress.com username", @""); 
     294                                        [self configureTextField:usernameTextField asPassword:NO]; 
     295                                        if (username != nil) 
     296                                                usernameTextField.text = username; 
     297                                } 
     298                                return self.usernameCell; 
     299                        } 
     300                        else if(indexPath.row == 1) { 
     301                                self.passwordCell = (UITableViewTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"passwordCell"]; 
     302                                if (self.passwordCell == nil) { 
     303                                        self.passwordCell = [[UITableViewTextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"passwordCell"]; 
     304                                        self.passwordCell.textLabel.text = NSLocalizedString(@"Password", @""); 
     305                                        passwordTextField = self.passwordCell.textField; 
     306                                        passwordTextField.placeholder = NSLocalizedString(@"WordPress.com password", @""); 
     307                                        [self configureTextField:passwordTextField asPassword:YES]; 
     308                                        if(password != nil) 
     309                                                passwordTextField.text = password; 
     310                                } 
     311                                return self.passwordCell; 
     312                        } 
     313                } else if (indexPath.section == 1) { 
     314                         
     315                        // Cell's reuse identifier is defined in its xib. 
     316                        UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
     317                        if (activityCell == nil) { 
     318                                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
     319                                for(id currentObject in topLevelObjects) 
     320                                { 
     321                                        if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
     322                                        { 
     323                                                activityCell = (UITableViewActivityCell *)currentObject; 
     324                                                break; 
     325                                        } 
     326                                } 
     327                        } 
     328                        if(isTesting) { 
     329                                [activityCell.spinner startAnimating]; 
     330                                self.buttonText = kCheckingCredentials; 
     331                        } 
     332                        else { 
     333                                [activityCell.spinner stopAnimating]; 
     334                                if (isTestSuccessful) { 
     335                                        self.buttonText = NSLocalizedString(@"Credentials Verified", @""); 
     336                                } else { 
     337                                        self.buttonText = kCheckCredentials; 
     338                                } 
     339                        } 
     340                         
     341                        activityCell.textLabel.text = self.buttonText; 
     342                        if (isTesting) { 
     343                                activityCell.selectionStyle = UITableViewCellSelectionStyleNone; 
     344                        } else { 
     345                                activityCell.selectionStyle = UITableViewCellSelectionStyleBlue; 
     346                        } 
     347                        self.verifyCredentialsActivityCell = activityCell; 
     348                         
     349                        return activityCell; 
     350                         
     351                } else if (indexPath.section == 2) { 
     352                        UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
     353                        if (activityCell == nil) { 
     354                                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
     355                                for(id currentObject in topLevelObjects) 
     356                                { 
     357                                        if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
     358                                        { 
     359                                                activityCell = (UITableViewActivityCell *)currentObject; 
     360                                                break; 
     361                                        } 
     362                                } 
     363                        } 
     364                        NSString *jetpackVersion = [self.blog getOptionValue:@"jetpack_version"]; 
     365                        activityCell.textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Jetpack version: %@", @""), jetpackVersion]; 
     366                        activityCell.selectionStyle = UITableViewCellEditingStyleNone; 
     367                                                 
     368                        return activityCell; 
    329369                } 
    330370                 
    331                 activityCell.textLabel.text = self.buttonText; 
    332         if (isTesting) { 
    333             activityCell.selectionStyle = UITableViewCellSelectionStyleNone; 
    334         } else { 
    335             activityCell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    336         } 
    337         self.verifyCredentialsActivityCell = activityCell; 
    338          
    339                 return activityCell; 
    340          
    341         } else if (indexPath.section == 2) { 
    342         UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    343         if (activityCell == nil) { 
    344             NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
    345             for(id currentObject in topLevelObjects) 
    346             { 
    347                 if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
    348                 { 
    349                     activityCell = (UITableViewActivityCell *)currentObject; 
    350                     break; 
    351                 } 
    352             } 
     371                 
     372        } else { 
     373                 
     374                if (indexPath.section == 0) { 
     375                        UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
     376                        if (activityCell == nil) { 
     377                                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
     378                                for(id currentObject in topLevelObjects) 
     379                                { 
     380                                        if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
     381                                        { 
     382                                                activityCell = (UITableViewActivityCell *)currentObject; 
     383                                                break; 
     384                                        } 
     385                                } 
     386                         
     387                        } 
     388                                 
     389                        activityCell.textLabel.text = NSLocalizedString(@"Install Jetpack", @""); 
     390                        activityCell.selectionStyle = UITableViewCellSelectionStyleBlue; 
     391                         
     392                        return activityCell; 
     393                         
     394                } else if (indexPath.section == 1) { 
     395                        UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
     396                        if (activityCell == nil) { 
     397                                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
     398                                for(id currentObject in topLevelObjects) 
     399                                { 
     400                                        if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
     401                                        { 
     402                                                activityCell = (UITableViewActivityCell *)currentObject; 
     403                                                break; 
     404                                        } 
     405                                } 
     406                        } 
     407                        activityCell.textLabel.text = NSLocalizedString(@"More Information", @""); 
     408                         
     409                        return activityCell; 
    353410                } 
    354         NSString *jetpackVersion = [self.blog getOptionValue:@"jetpack_version"]; 
    355         if (jetpackVersion) { 
    356             activityCell.textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Jetpack version: %@", @""), jetpackVersion]; 
    357             activityCell.selectionStyle = UITableViewCellEditingStyleNone; 
    358         } else { 
    359             activityCell.textLabel.text = NSLocalizedString(@"Install Jetpack", @""); 
    360             activityCell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    361         } 
    362          
    363                 return activityCell; 
    364     } else if (indexPath.section == 3) { 
    365         UITableViewActivityCell *activityCell = (UITableViewActivityCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    366         if (activityCell == nil) { 
    367             NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UITableViewActivityCell" owner:nil options:nil]; 
    368             for(id currentObject in topLevelObjects) 
    369             { 
    370                 if([currentObject isKindOfClass:[UITableViewActivityCell class]]) 
    371                 { 
    372                     activityCell = (UITableViewActivityCell *)currentObject; 
    373                     break; 
    374                 } 
    375             } 
    376                 } 
    377                 activityCell.textLabel.text = NSLocalizedString(@"More Information", @""); 
    378          
    379                 return activityCell; 
    380     } 
    381      
     411                 
     412        } 
     413             
    382414    // We shouldn't reach this point, but return an empty cell just in case 
    383415    return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"NoCell"]; 
     
    397429            } 
    398430        } 
    399         }  
     431        } 
    400432    [tv deselectRowAtIndexPath:indexPath animated:YES]; 
    401433     
    402     switch (indexPath.section) { 
    403         case 0: 
    404              
    405             break; 
    406         case 1: 
    407             if (isTesting) { 
    408                 break; 
    409             } 
    410              
    411             if([usernameTextField.text length] == 0) { 
    412                 self.footerText = NSLocalizedString(@"Username is required.", @""); 
    413                 self.buttonText = kCheckCredentials; 
    414                 [tv reloadData]; 
    415                  
    416             } else if([passwordTextField.text length] == 0) { 
    417                 self.footerText = NSLocalizedString(@"Password is required.", @""); 
    418                 self.buttonText = kCheckCredentials; 
    419                 [tv reloadData]; 
    420                  
    421             } else { 
    422                  
    423                 if( ![ReachabilityUtils isInternetReachable] ) { 
    424                     [ReachabilityUtils showAlertNoInternetConnection]; 
    425                     return; 
    426                 } 
    427                  
    428                 if (lastTextField) { 
    429                     [lastTextField resignFirstResponder]; 
    430                 } 
    431                 self.footerText = NSLocalizedString(@"Checking credentials...", @""); 
    432                 self.buttonText = kCheckingCredentials; 
    433                  
    434                 self.username = usernameTextField.text; 
    435                 self.password = passwordTextField.text; 
    436                  
    437                 [NSThread sleepForTimeInterval:0.15]; 
    438                 [tv reloadData]; 
    439                 [self testJetpack]; 
    440                  
    441             } 
    442             break; 
    443         case 2: 
    444             if (blog) { 
    445                 if ([blog hasJetpack]) { 
    446                     break; 
    447                 } 
    448                 NSString *jetpackURL = [blog.xmlrpc stringByReplacingOccurrencesOfString:@"xmlrpc.php" withString:@"wp-admin/plugin-install.php"]; 
    449                 WPWebViewController *webViewController = nil; 
    450                 if ( IS_IPAD ) { 
    451                     webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController-iPad" bundle:nil]; 
    452                 } 
    453                 else { 
    454                     webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController" bundle:nil]; 
    455                 } 
    456                 [webViewController setUrl:[NSURL URLWithString:jetpackURL]]; 
    457                 [webViewController setUsername:blog.username]; 
    458                 [webViewController setPassword:[blog fetchPassword]]; 
    459                 [webViewController setWpLoginURL:[NSURL URLWithString:blog.loginURL]]; 
    460                 [self.navigationController pushViewController:webViewController animated:YES]; 
    461             } else { 
    462                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"No Blog Yet"  
    463                                                                     message:NSLocalizedString(@"Please enter and save your blog's info before trying to install Jetpack.", @"")  
    464                                                                    delegate:nil  
    465                                                           cancelButtonTitle:@"OK"  
    466                                                           otherButtonTitles:nil, nil]; 
    467                 [alertView show]; 
    468             } 
    469             break; 
    470         case 3: 
    471         { 
    472             WPWebViewController *webViewController = nil; 
    473             if ( IS_IPAD ) { 
    474                 webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController-iPad" bundle:nil]; 
    475             } 
    476             else { 
    477                 webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController" bundle:nil]; 
    478             } 
    479             [webViewController setUrl:[NSURL URLWithString:@"http://ios.wordpress.org/faq/#faq_15"]]; 
    480 //            [webViewController setUrl:[NSURL URLWithString:@"http://jetpack.me/about/"]]; 
    481             [self.navigationController pushViewController:webViewController animated:YES]; 
    482         } 
    483             break;  
    484              
    485         default: 
    486             break; 
    487     } 
     434        if ([self.blog hasJetpack]) { 
     435                switch (indexPath.section) { 
     436                        case 0: 
     437                                 
     438                                break; 
     439                        case 1: 
     440                                if (isTesting) { 
     441                                        break; 
     442                                } 
     443                                 
     444                                if([usernameTextField.text length] == 0) { 
     445                                        self.footerText = NSLocalizedString(@"Username is required.", @""); 
     446                                        self.buttonText = kCheckCredentials; 
     447                                        [tv reloadData]; 
     448                                         
     449                                } else if([passwordTextField.text length] == 0) { 
     450                                        self.footerText = NSLocalizedString(@"Password is required.", @""); 
     451                                        self.buttonText = kCheckCredentials; 
     452                                        [tv reloadData]; 
     453                                         
     454                                } else { 
     455                                         
     456                                        if( ![ReachabilityUtils isInternetReachable] ) { 
     457                                                [ReachabilityUtils showAlertNoInternetConnection]; 
     458                                                return; 
     459                                        } 
     460                                         
     461                                        if (lastTextField) { 
     462                                                [lastTextField resignFirstResponder]; 
     463                                        } 
     464                                        self.footerText = NSLocalizedString(@"Checking credentials...", @""); 
     465                                        self.buttonText = kCheckingCredentials; 
     466                                         
     467                                        self.username = usernameTextField.text; 
     468                                        self.password = passwordTextField.text; 
     469                                         
     470                                        [NSThread sleepForTimeInterval:0.15]; 
     471                                        [tv reloadData]; 
     472                                        [self testJetpack]; 
     473                                         
     474                                } 
     475                                break; 
     476                                 
     477                        default: 
     478                                break; 
     479                } 
     480 
     481        } else { 
     482                switch (indexPath.section) { 
     483                        case 0: 
     484                                { 
     485 
     486                                        NSString *jetpackURL = [blog.xmlrpc stringByReplacingOccurrencesOfString:@"xmlrpc.php" withString:@"wp-admin/plugin-install.php"]; 
     487                                        WPWebViewController *webViewController = nil; 
     488                                        if ( IS_IPAD ) { 
     489                                                webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController-iPad" bundle:nil]; 
     490                                        } 
     491                                        else { 
     492                                                webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController" bundle:nil]; 
     493                                        } 
     494                                        [webViewController setUrl:[NSURL URLWithString:jetpackURL]]; 
     495                                        [webViewController setUsername:blog.username]; 
     496                                        [webViewController setPassword:[blog fetchPassword]]; 
     497                                        [webViewController setWpLoginURL:[NSURL URLWithString:blog.loginURL]]; 
     498                                        [self.navigationController pushViewController:webViewController animated:YES]; 
     499                                } 
     500                                break; 
     501                        case 1: 
     502                        { 
     503                                WPWebViewController *webViewController = nil; 
     504                                if ( IS_IPAD ) { 
     505                                        webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController-iPad" bundle:nil]; 
     506                                } 
     507                                else { 
     508                                        webViewController = [[WPWebViewController alloc] initWithNibName:@"WPWebViewController" bundle:nil]; 
     509                                } 
     510                                [webViewController setUrl:[NSURL URLWithString:@"http://ios.wordpress.org/faq/#faq_15"]]; 
     511                                 
     512                                [self.navigationController pushViewController:webViewController animated:YES]; 
     513                        } 
     514                                break; 
     515                                 
     516                        default: 
     517                                break; 
     518                } 
     519        } 
     520         
     521         
    488522} 
    489523 
     
    613647    isTesting = NO; 
    614648     
    615     self.footerText = NSLocalizedString(@"Unable to retrieve stats. Either the blog is not connected to Jetpack, or it's connected to a different account.", @""); 
     649    self.footerText = NSLocalizedString(@"Unable to retrieve stats. Make sure the blog has Jetpack 1.8.2 or later installed, and is connected to this account.", @""); 
    616650    [tableView reloadData]; 
    617651} 
  • trunk/Classes/StatsWebViewController.m

    r3675 r3778  
    208208- (void)initStats { 
    209209    [FileLogger log:@"%@ %@", self, NSStringFromSelector(_cmd)]; 
    210     BOOL prompt = NO; 
    211         if ([[blog blogID] isEqualToNumber:[NSNumber numberWithInt:1]]) { 
    212                 // This is a .org blog and we need to look up the blog id assigned by Jetpack. 
    213         NSString *username = [JetpackAuthUtil getJetpackUsernameForBlog:blog]; 
    214         NSString *password = [JetpackAuthUtil getJetpackPasswordForBlog:blog]; 
    215  
    216         if ([username length] > 0 && [password length] > 0) { 
    217             // try to validate 
    218             if (!jetpackAuthUtil) { 
    219                 self.jetpackAuthUtil = [[JetpackAuthUtil alloc] init]; 
    220                 jetpackAuthUtil.delegate = self; 
    221             } 
    222             [jetpackAuthUtil validateCredentialsForBlog:blog withUsername:username andPassword:password]; 
    223  
    224         } else { 
    225             prompt = YES; 
    226              
    227         } 
    228          
    229         } else if(![blog isWPcom] && [JetpackAuthUtil getJetpackUsernameForBlog:blog] == nil) { 
    230         // self-hosted blog and no associated .com login. 
    231         prompt = YES; 
    232     } else { 
    233         [self loadStats]; 
     210     
     211        if ([blog isWPcom]) { 
     212                [self loadStats]; 
     213                return; 
    234214        } 
     215 
     216        // Looking for a self-hosted blog with a jetpackClientId and good crednetials. 
     217        BOOL prompt = NO; 
     218         
     219        if (![blog jetpackClientID]) { 
     220                // needs latest jetpack 
     221                prompt = YES; 
     222                 
     223        } else { 
     224                // Check for credentials. 
     225                if ([JetpackAuthUtil getJetpackUsernameForBlog:blog] == nil) { 
     226                        prompt = YES; 
     227                         
     228                } else { 
     229                        // Verify credentials are good 
     230                        NSString *username = [JetpackAuthUtil getJetpackUsernameForBlog:blog]; 
     231                        NSString *password = [JetpackAuthUtil getJetpackPasswordForBlog:blog]; 
     232                         
     233                        if ([username length] > 0 && [password length] > 0) { 
     234                                // try to validate 
     235                                if (!jetpackAuthUtil) { 
     236                                        self.jetpackAuthUtil = [[JetpackAuthUtil alloc] init]; 
     237                                        jetpackAuthUtil.delegate = self; 
     238                                } 
     239                                [jetpackAuthUtil validateCredentialsForBlog:blog withUsername:username andPassword:password]; 
     240                                 
     241                        } else { 
     242                                prompt = YES; 
     243                                 
     244                        } 
     245                } 
     246        } 
     247                 
    235248    if (prompt) { 
    236249        NSString *msg = kNeedJetpackLogIn; 
     
    364377    if( !appDelegate.connectionAvailable ) { 
    365378        [ReachabilityUtils showAlertNoInternetConnectionWithDelegate:self];  
    366 //        UIAlertView *connectionFailAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Connection Problem", @"") 
    367 //                                                                      message:NSLocalizedString(@"The internet connection appears to be offline.", @"") 
    368 //                                                                     delegate:self 
    369 //                                                            cancelButtonTitle:NSLocalizedString(@"OK", @"") 
    370 //                                                            otherButtonTitles:NSLocalizedString(@"Retry", @""), nil]; 
    371 //        [connectionFailAlert show]; 
    372 //        [connectionFailAlert release]; 
    373379        return; 
    374380    } 
     
    379385    } 
    380386     
    381     NSString *pathStr = [NSString stringWithFormat:@"http://wordpress.com/?no-chrome#!/my-stats/?blog=%@&unit=1", [blog blogID]]; 
     387        NSNumber *blogID = [blog blogID]; 
     388        if(![blog isWPcom]) { 
     389                blogID = [blog jetpackClientID]; 
     390        } 
     391         
     392    NSString *pathStr = [NSString stringWithFormat:@"http://wordpress.com/?no-chrome#!/my-stats/?blog=%@&unit=1", blogID]; 
    382393    NSMutableURLRequest *mRequest = [[NSMutableURLRequest alloc] init]; 
    383394    [mRequest setURL:[NSURL URLWithString:pathStr]]; 
     
    475486 
    476487- (void)jetpackAuthUtil:(JetpackAuthUtil *)util didValidateCredentailsForBlog:(Blog *)blog { 
    477     [self initStats]; 
     488    [self loadStats]; 
    478489} 
    479490 
     
    482493    [self showBlogSettings]; 
    483494    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Could not retrieve stats", @"") 
    484                                                         message:NSLocalizedString(@"Unable to retrieve stats. Either the blog is not connected to Jetpack, or it's connected to a different account.", @"") 
     495                                                        message:NSLocalizedString(@"Unable to retrieve stats. Make sure the blog has Jetpack 1.8.2 or later installed, and is connected to right account.", @"") 
    485496                                                       delegate:nil 
    486497                                              cancelButtonTitle:NSLocalizedString(@"OK", nil) 
Note: See TracChangeset for help on using the changeset viewer.