Fix landscape layout.
[FIXED] View layout problems while in landscape. - #MP-8 fixed
This commit is contained in:
		@@ -52,6 +52,12 @@
 | 
			
		||||
    return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad || interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
 | 
			
		||||
    
 | 
			
		||||
    [self setHelpHidden:![self isHelpVisible] animated:NO];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 | 
			
		||||
    
 | 
			
		||||
    if ([[segue identifier] isEqualToString:@"MP_Main_ChooseType"])
 | 
			
		||||
@@ -183,7 +189,7 @@
 | 
			
		||||
 | 
			
		||||
- (BOOL)isHelpVisible {
 | 
			
		||||
    
 | 
			
		||||
    return self.helpContainer.frame.origin.y < 400;
 | 
			
		||||
    return self.helpContainer.frame.origin.y == 216;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)toggleHelpAnimated:(BOOL)animated {
 | 
			
		||||
@@ -194,10 +200,9 @@
 | 
			
		||||
- (void)setHelpHidden:(BOOL)hidden animated:(BOOL)animated {
 | 
			
		||||
    
 | 
			
		||||
    [UIView animateWithDuration:animated? 0.3f: 0 animations:^{
 | 
			
		||||
        
 | 
			
		||||
        if (hidden) {
 | 
			
		||||
            self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
 | 
			
		||||
            self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 416);
 | 
			
		||||
            self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, self.view.bounds.size.height - 44);
 | 
			
		||||
            self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, self.view.bounds.size.height);
 | 
			
		||||
            [MPConfig get].helpHidden = [NSNumber numberWithBool:YES];
 | 
			
		||||
        } else {
 | 
			
		||||
            self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 175);
 | 
			
		||||
@@ -239,7 +244,7 @@
 | 
			
		||||
                    self.contentTipContainer.alpha = 0;
 | 
			
		||||
                } completion:^(BOOL finished) {
 | 
			
		||||
                    if (finished)
 | 
			
		||||
                       icon.hidden = YES;
 | 
			
		||||
                        icon.hidden = YES;
 | 
			
		||||
                }];
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
@@ -337,149 +342,149 @@
 | 
			
		||||
- (IBAction)action:(id)sender {
 | 
			
		||||
    
 | 
			
		||||
    [PearlSheet showSheetWithTitle:nil message:nil viewStyle:UIActionSheetStyleAutomatic
 | 
			
		||||
                          tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
 | 
			
		||||
                              if (buttonIndex == [sheet cancelButtonIndex])
 | 
			
		||||
                                  return;
 | 
			
		||||
                              
 | 
			
		||||
                              switch (buttonIndex - [sheet firstOtherButtonIndex]) {
 | 
			
		||||
                                  case 0:
 | 
			
		||||
                                      [self toggleHelpAnimated:YES];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  case 1:
 | 
			
		||||
                                      [self setHelpChapter:@"faq"];
 | 
			
		||||
                                      [self setHelpHidden:NO animated:YES];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  case 2:
 | 
			
		||||
                                      [[MPAppDelegate get] showGuide];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  case 3: {
 | 
			
		||||
                                      IASKAppSettingsViewController *settingsVC = [IASKAppSettingsViewController new];
 | 
			
		||||
                                      settingsVC.delegate = self;
 | 
			
		||||
                                      [self.navigationController pushViewController:settingsVC animated:YES];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  }
 | 
			
		||||
                 tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
 | 
			
		||||
                     if (buttonIndex == [sheet cancelButtonIndex])
 | 
			
		||||
                         return;
 | 
			
		||||
                     
 | 
			
		||||
                     switch (buttonIndex - [sheet firstOtherButtonIndex]) {
 | 
			
		||||
                         case 0:
 | 
			
		||||
                             [self toggleHelpAnimated:YES];
 | 
			
		||||
                             break;
 | 
			
		||||
                         case 1:
 | 
			
		||||
                             [self setHelpChapter:@"faq"];
 | 
			
		||||
                             [self setHelpHidden:NO animated:YES];
 | 
			
		||||
                             break;
 | 
			
		||||
                         case 2:
 | 
			
		||||
                             [[MPAppDelegate get] showGuide];
 | 
			
		||||
                             break;
 | 
			
		||||
                         case 3: {
 | 
			
		||||
                             IASKAppSettingsViewController *settingsVC = [IASKAppSettingsViewController new];
 | 
			
		||||
                             settingsVC.delegate = self;
 | 
			
		||||
                             [self.navigationController pushViewController:settingsVC animated:YES];
 | 
			
		||||
                             break;
 | 
			
		||||
                         }
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
                                  case 4:
 | 
			
		||||
                                      [TestFlight openFeedbackView];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  case 5: {
 | 
			
		||||
                         case 4:
 | 
			
		||||
                             [TestFlight openFeedbackView];
 | 
			
		||||
                             break;
 | 
			
		||||
                         case 5: {
 | 
			
		||||
#else
 | 
			
		||||
                                  case 4: {
 | 
			
		||||
                         case 4: {
 | 
			
		||||
#endif
 | 
			
		||||
                                      [[MPAppDelegate get] signOut];
 | 
			
		||||
                                      break;
 | 
			
		||||
                                  }
 | 
			
		||||
                              }
 | 
			
		||||
                              
 | 
			
		||||
                             [[MPAppDelegate get] signOut];
 | 
			
		||||
                             break;
 | 
			
		||||
                         }
 | 
			
		||||
                         }
 | 
			
		||||
                             
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
                              [TestFlight passCheckpoint:MPTestFlightCheckpointAction];
 | 
			
		||||
                             [TestFlight passCheckpoint:MPTestFlightCheckpointAction];
 | 
			
		||||
#endif
 | 
			
		||||
                          } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
 | 
			
		||||
                                otherTitles:
 | 
			
		||||
     [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
 | 
			
		||||
                     } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
 | 
			
		||||
                 otherTitles:
 | 
			
		||||
                     [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
     @"Feedback",
 | 
			
		||||
                     @"Feedback",
 | 
			
		||||
#endif
 | 
			
		||||
     @"Sign Out",
 | 
			
		||||
     nil]; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (MPElementType)selectedType {
 | 
			
		||||
    
 | 
			
		||||
    return self.activeElement.type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)didSelectType:(MPElementType)type {
 | 
			
		||||
    
 | 
			
		||||
    [self updateElement:^{
 | 
			
		||||
        // Update password type.
 | 
			
		||||
        if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
 | 
			
		||||
            // Type requires a different class of element.  Recreate the element.
 | 
			
		||||
            [[MPAppDelegate managedObjectContext] performBlockAndWait:^{
 | 
			
		||||
                MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
 | 
			
		||||
                                                                            inManagedObjectContext:[MPAppDelegate managedObjectContext]];
 | 
			
		||||
                newElement.name = self.activeElement.name;
 | 
			
		||||
                newElement.mpHashHex = self.activeElement.mpHashHex;
 | 
			
		||||
                newElement.uses = self.activeElement.uses;
 | 
			
		||||
                newElement.lastUsed = self.activeElement.lastUsed;
 | 
			
		||||
                
 | 
			
		||||
                [[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
 | 
			
		||||
                self.activeElement = newElement;
 | 
			
		||||
            }];
 | 
			
		||||
        
 | 
			
		||||
        self.activeElement.type = type;
 | 
			
		||||
        
 | 
			
		||||
                     @"Sign Out",
 | 
			
		||||
                     nil]; 
 | 
			
		||||
                 }
 | 
			
		||||
     
 | 
			
		||||
     - (MPElementType)selectedType {
 | 
			
		||||
         
 | 
			
		||||
         return self.activeElement.type;
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     - (void)didSelectType:(MPElementType)type {
 | 
			
		||||
         
 | 
			
		||||
         [self updateElement:^{
 | 
			
		||||
             // Update password type.
 | 
			
		||||
             if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
 | 
			
		||||
                 // Type requires a different class of element.  Recreate the element.
 | 
			
		||||
                 [[MPAppDelegate managedObjectContext] performBlockAndWait:^{
 | 
			
		||||
                     MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
 | 
			
		||||
                                                                                 inManagedObjectContext:[MPAppDelegate managedObjectContext]];
 | 
			
		||||
                     newElement.name = self.activeElement.name;
 | 
			
		||||
                     newElement.mpHashHex = self.activeElement.mpHashHex;
 | 
			
		||||
                     newElement.uses = self.activeElement.uses;
 | 
			
		||||
                     newElement.lastUsed = self.activeElement.lastUsed;
 | 
			
		||||
                     
 | 
			
		||||
                     [[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
 | 
			
		||||
                     self.activeElement = newElement;
 | 
			
		||||
                 }];
 | 
			
		||||
             
 | 
			
		||||
             self.activeElement.type = type;
 | 
			
		||||
             
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
        [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
 | 
			
		||||
             [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
 | 
			
		||||
#endif
 | 
			
		||||
        
 | 
			
		||||
        if (type & MPElementTypeClassStored && ![self.activeElement.description length])
 | 
			
		||||
            [self showContentTip:@"Tap       to set a password." withIcon:self.contentTipEditIcon];
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)didSelectElement:(MPElementEntity *)element {
 | 
			
		||||
    
 | 
			
		||||
    if (element) {
 | 
			
		||||
        self.activeElement = element;
 | 
			
		||||
        [self.activeElement use];
 | 
			
		||||
        
 | 
			
		||||
        [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
        self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
        
 | 
			
		||||
             
 | 
			
		||||
             if (type & MPElementTypeClassStored && ![self.activeElement.description length])
 | 
			
		||||
                 [self showContentTip:@"Tap        to set a password." withIcon:self.contentTipEditIcon];
 | 
			
		||||
         }];
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     - (void)didSelectElement:(MPElementEntity *)element {
 | 
			
		||||
         
 | 
			
		||||
         if (element) {
 | 
			
		||||
             self.activeElement = element;
 | 
			
		||||
             [self.activeElement use];
 | 
			
		||||
             
 | 
			
		||||
             [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
             self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
             
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
        [TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
 | 
			
		||||
             [TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
    if (textField == self.contentField)
 | 
			
		||||
        [self.contentField resignFirstResponder];
 | 
			
		||||
    
 | 
			
		||||
    return YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
    if (textField == self.contentField) {
 | 
			
		||||
        self.contentField.enabled = NO;
 | 
			
		||||
        if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
 | 
			
		||||
            // Not of a type whose content can be edited.
 | 
			
		||||
            return;
 | 
			
		||||
        
 | 
			
		||||
        if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
 | 
			
		||||
            // Content hasn't changed.
 | 
			
		||||
            return;
 | 
			
		||||
        
 | 
			
		||||
        [self updateElement:^{
 | 
			
		||||
            ((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
 | 
			
		||||
        }];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 | 
			
		||||
 navigationType:(UIWebViewNavigationType)navigationType {
 | 
			
		||||
    
 | 
			
		||||
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
 | 
			
		||||
         }
 | 
			
		||||
         
 | 
			
		||||
         [self updateAnimated:YES];
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     - (BOOL)textFieldShouldReturn:(UITextField *)textField {
 | 
			
		||||
         
 | 
			
		||||
         if (textField == self.contentField)
 | 
			
		||||
             [self.contentField resignFirstResponder];
 | 
			
		||||
         
 | 
			
		||||
         return YES;
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     - (void)textFieldDidEndEditing:(UITextField *)textField {
 | 
			
		||||
         
 | 
			
		||||
         if (textField == self.contentField) {
 | 
			
		||||
             self.contentField.enabled = NO;
 | 
			
		||||
             if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
 | 
			
		||||
                 // Not of a type whose content can be edited.
 | 
			
		||||
                 return;
 | 
			
		||||
             
 | 
			
		||||
             if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
 | 
			
		||||
                 // Content hasn't changed.
 | 
			
		||||
                 return;
 | 
			
		||||
             
 | 
			
		||||
             [self updateElement:^{
 | 
			
		||||
                 ((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
 | 
			
		||||
             }];
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 | 
			
		||||
                    navigationType:(UIWebViewNavigationType)navigationType {
 | 
			
		||||
                        
 | 
			
		||||
                        if (navigationType == UIWebViewNavigationTypeLinkClicked) {
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
        [TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
 | 
			
		||||
                            [TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
 | 
			
		||||
#endif
 | 
			
		||||
        
 | 
			
		||||
        [[UIApplication sharedApplication] openURL:[request URL]];
 | 
			
		||||
        return NO;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
 | 
			
		||||
    
 | 
			
		||||
    while ([self.navigationController.viewControllers containsObject:sender])
 | 
			
		||||
        [self.navigationController popViewControllerAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
                            
 | 
			
		||||
                            [[UIApplication sharedApplication] openURL:[request URL]];
 | 
			
		||||
                            return NO;
 | 
			
		||||
                        }
 | 
			
		||||
                        
 | 
			
		||||
                        return YES;
 | 
			
		||||
                    }
 | 
			
		||||
     
 | 
			
		||||
     - (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
 | 
			
		||||
         
 | 
			
		||||
         while ([self.navigationController.viewControllers containsObject:sender])
 | 
			
		||||
             [self.navigationController popViewControllerAnimated:YES];
 | 
			
		||||
     }
 | 
			
		||||
     
 | 
			
		||||
     @end
 | 
			
		||||
 
 | 
			
		||||
@@ -370,7 +370,7 @@ The passwords aren't saved anywhere.  This is a major advantage: if you loose yo
 | 
			
		||||
                                    </button>
 | 
			
		||||
                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.50000000000000011" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" id="gSK-aB-wNI">
 | 
			
		||||
                                        <rect key="frame" x="25" y="20" width="270" height="26"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="12"/>
 | 
			
		||||
                                        <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        <nil key="highlightedColor"/>
 | 
			
		||||
@@ -379,7 +379,7 @@ The passwords aren't saved anywhere.  This is a major advantage: if you loose yo
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="S3cre7^Pa$swcrD" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="fiX-10-fif">
 | 
			
		||||
                                        <rect key="frame" x="20" y="46" width="280" height="60"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" name="Copperplate-Bold" family="Copperplate" pointSize="26"/>
 | 
			
		||||
                                        <textInputTraits key="textInputTraits" autocorrectionType="no"/>
 | 
			
		||||
@@ -452,16 +452,16 @@ The passwords aren't saved anywhere.  This is a major advantage: if you loose yo
 | 
			
		||||
                                                <rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
 | 
			
		||||
                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                            </imageView>
 | 
			
		||||
                                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Tap       to set a password." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="ieN-QQ-PyR">
 | 
			
		||||
                                                <rect key="frame" x="20" y="0.0" width="170" height="40"/>
 | 
			
		||||
                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Tap        to set a password." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="ieN-QQ-PyR">
 | 
			
		||||
                                                <rect key="frame" x="20" y="0.0" width="171" height="40"/>
 | 
			
		||||
                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <nil key="highlightedColor"/>
 | 
			
		||||
                                            </label>
 | 
			
		||||
                                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="icon_edit.png" id="KEn-n3-qhX">
 | 
			
		||||
                                                <rect key="frame" x="48" y="6" width="24" height="24"/>
 | 
			
		||||
                                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                <rect key="frame" x="48" y="8" width="24" height="24"/>
 | 
			
		||||
                                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                            </imageView>
 | 
			
		||||
                                        </subviews>
 | 
			
		||||
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user