fix: 修正房间相册上传问题
This commit is contained in:
@@ -12925,7 +12925,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = YuMi/YuMi.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YuMi/YuMi.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_TEAM = 48UCG35Q9W;
|
DEVELOPMENT_TEAM = 48UCG35Q9W;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@@ -12979,7 +12979,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = YuMi/YuMiRelease.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YuMi/YuMiRelease.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = 48UCG35Q9W;
|
DEVELOPMENT_TEAM = 48UCG35Q9W;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@@ -16,11 +16,14 @@
|
|||||||
/// - type: null=全部,1=普通,2=礼物解锁
|
/// - type: null=全部,1=普通,2=礼物解锁
|
||||||
- (void)getRoomAlbumListWithroomUid:(NSString *)roomUid type:(NSString *_Nullable)type page:(NSString *)page pageSize:(NSString *)pageSize{
|
- (void)getRoomAlbumListWithroomUid:(NSString *)roomUid type:(NSString *_Nullable)type page:(NSString *)page pageSize:(NSString *)pageSize{
|
||||||
NSString * uid = [AccountInfoStorage instance].getUid;
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
||||||
|
@kWeakify(self);
|
||||||
[Api getRoomAlbumList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
[Api getRoomAlbumList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
@kStrongify(self);
|
||||||
NSArray *list = [PIRoomPhotoAlbumItemModel modelsWithArray:data.data];
|
NSArray *list = [PIRoomPhotoAlbumItemModel modelsWithArray:data.data];
|
||||||
[[self getView]getRoomAlbumListSuccessWithList:list];
|
[[self getView]getRoomAlbumListSuccessWithList:list];
|
||||||
}fail:^(NSInteger code, NSString * _Nullable msg) {
|
}fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]getRoomAlbumListFailWithCode:code];
|
[[self getView]getRoomAlbumListFailWithCode:code];
|
||||||
} showLoading:NO errorToast:YES] roomUid:roomUid page:page pageSize:pageSize uid:uid ticket:ticket type:type] ;
|
} showLoading:NO errorToast:YES] roomUid:roomUid page:page pageSize:pageSize uid:uid ticket:ticket type:type] ;
|
||||||
|
|
||||||
@@ -33,24 +36,22 @@
|
|||||||
/// - type:类型 1=普通,2=礼物解锁
|
/// - type:类型 1=普通,2=礼物解锁
|
||||||
-(void)uploadRoomAlbumListWithGiftId:(NSString *_Nullable)giftId photoUrls:(NSArray *)photoUrls roomUid:(NSString *)roomUid type:(NSString *)type{
|
-(void)uploadRoomAlbumListWithGiftId:(NSString *_Nullable)giftId photoUrls:(NSArray *)photoUrls roomUid:(NSString *)roomUid type:(NSString *)type{
|
||||||
NSString * uid = [AccountInfoStorage instance].getUid;
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
||||||
NSString *photoUrl = @"";
|
NSString *photoUrl = [photoUrls componentsJoinedByString:@","];
|
||||||
for (NSString *getUrl in photoUrls) {
|
@kWeakify(self);
|
||||||
if(photoUrl.length > 0){
|
|
||||||
photoUrl = [NSString stringWithFormat:@"%@,%@",photoUrl,getUrl];
|
|
||||||
}else{
|
|
||||||
photoUrl = getUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[Api uploadRoomAlbumList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
[Api uploadRoomAlbumList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]uploadRoomAlbumListSuccess];
|
[[self getView]uploadRoomAlbumListSuccess];
|
||||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]uploadRoomAlbumListFail];
|
[[self getView]uploadRoomAlbumListFail];
|
||||||
} showLoading:NO errorToast:YES] photoUrls:photoUrl roomUid:roomUid uid:uid ticket:ticket type:type giftId:giftId];
|
} showLoading:NO errorToast:YES] photoUrls:photoUrl roomUid:roomUid uid:uid ticket:ticket type:type giftId:giftId];
|
||||||
}
|
}
|
||||||
///删除房间相册
|
///删除房间相册
|
||||||
-(void)deleteRoomAlbumPhotoWithId:(NSString *)id{
|
-(void)deleteRoomAlbumPhotoWithId:(NSString *)id{
|
||||||
|
@kWeakify(self);
|
||||||
[Api deleteRoomAlbumPhoto:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
[Api deleteRoomAlbumPhoto:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]deleteRoomAlbumPhotoSuccessWithPhotoId:id];
|
[[self getView]deleteRoomAlbumPhotoSuccessWithPhotoId:id];
|
||||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||||
|
|
||||||
@@ -60,9 +61,12 @@
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - photoId: 图片id
|
/// - photoId: 图片id
|
||||||
-(void)sendRoomAlbumPhotoWithId:(NSString *)id roomUid:(NSString *)roomUid{
|
-(void)sendRoomAlbumPhotoWithId:(NSString *)id roomUid:(NSString *)roomUid{
|
||||||
|
@kWeakify(self);
|
||||||
[Api sendRoomAlbumPhoto:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
[Api sendRoomAlbumPhoto:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]sendRoomAlbumPhotoSuccess];
|
[[self getView]sendRoomAlbumPhotoSuccess];
|
||||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||||
|
@kStrongify(self);
|
||||||
[[self getView]sendRoomAlbumPhotoFail];
|
[[self getView]sendRoomAlbumPhotoFail];
|
||||||
} showLoading:NO errorToast:YES] id:id roomUid:roomUid];
|
} showLoading:NO errorToast:YES] id:id roomUid:roomUid];
|
||||||
}
|
}
|
||||||
|
@@ -63,17 +63,17 @@
|
|||||||
self.page = 1;
|
self.page = 1;
|
||||||
if(self.type == Photo_Album_Type_Mine){
|
if(self.type == Photo_Album_Type_Mine){
|
||||||
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:@"0" page:@(self.page).stringValue pageSize:@"20"];
|
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:@"0" page:@(self.page).stringValue pageSize:@"20"];
|
||||||
return;
|
} else {
|
||||||
|
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:self.type == Photo_Album_Type_Normal ? @"1":@"2" page:@(self.page).stringValue pageSize:@"20"];
|
||||||
}
|
}
|
||||||
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:self.type == Photo_Album_Type_Normal ? @"1":@"2" page:@(self.page).stringValue pageSize:@"20"];
|
|
||||||
}
|
}
|
||||||
-(void)footerRefresh{
|
-(void)footerRefresh{
|
||||||
self.page++;
|
self.page++;
|
||||||
if(self.type == Photo_Album_Type_Mine){
|
if(self.type == Photo_Album_Type_Mine){
|
||||||
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:@"0" page:@(self.page).stringValue pageSize:@"20"];
|
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:@"0" page:@(self.page).stringValue pageSize:@"20"];
|
||||||
return;
|
} else {
|
||||||
|
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:self.type == Photo_Album_Type_Normal ? @"1":@"2" page:@(self.page).stringValue pageSize:@"20"];
|
||||||
}
|
}
|
||||||
[self.presenter getRoomAlbumListWithroomUid:self.roomUid type:self.type == Photo_Album_Type_Normal ? @"1":@"2" page:@(self.page).stringValue pageSize:@"20"];
|
|
||||||
}
|
}
|
||||||
- (void)initHeaderAndFooterRrfresh {
|
- (void)initHeaderAndFooterRrfresh {
|
||||||
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
|
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
|
||||||
@@ -202,18 +202,19 @@
|
|||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
|
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
if(self.type == Photo_Album_Type_Mine)return;
|
if (self.type != Photo_Album_Type_Mine) {
|
||||||
PIRoomPhotoAlbumItemModel *albumModel = [self.photoList xpSafeObjectAtIndex:indexPath.row];
|
PIRoomPhotoAlbumItemModel *albumModel = [self.photoList xpSafeObjectAtIndex:indexPath.row];
|
||||||
if(albumModel.type.intValue == 2 && albumModel.status == 0)return;
|
if(albumModel.type.intValue == 2 && albumModel.status == 0)return;
|
||||||
PIRoomPhotoAlbumItemCell *cell = (PIRoomPhotoAlbumItemCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
|
PIRoomPhotoAlbumItemCell *cell = (PIRoomPhotoAlbumItemCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
|
||||||
self.lookUpModel = albumModel;
|
self.lookUpModel = albumModel;
|
||||||
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
||||||
browser.sourceImagesContainerView = cell;
|
browser.sourceImagesContainerView = cell;
|
||||||
browser.delegate = self;
|
browser.delegate = self;
|
||||||
browser.imageCount = 1;
|
browser.imageCount = 1;
|
||||||
browser.currentImageIndex = 0;
|
browser.currentImageIndex = 0;
|
||||||
browser.isMe = NO;
|
browser.isMe = NO;
|
||||||
[browser show];
|
[browser show];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#pragma mark - JXCategoryListContentViewDelegate
|
#pragma mark - JXCategoryListContentViewDelegate
|
||||||
- (UIView *)listView {
|
- (UIView *)listView {
|
||||||
@@ -264,22 +265,40 @@
|
|||||||
|
|
||||||
self.imageCount = 0;
|
self.imageCount = 0;
|
||||||
[XNDJTDDLoadingTool showOnlyView:kWindow enabled:YES];
|
[XNDJTDDLoadingTool showOnlyView:kWindow enabled:YES];
|
||||||
|
@kWeakify(self);
|
||||||
[self uploadAlbumPicList:self.datasource finish:^(NSArray *list) {
|
[self uploadAlbumPicList:self.datasource finish:^(NSArray *list) {
|
||||||
|
@kStrongify(self);
|
||||||
if(list.count == 0){
|
if(list.count == 0){
|
||||||
[XNDJTDDLoadingTool hideOnlyView:kWindow];
|
[XNDJTDDLoadingTool hideOnlyView:kWindow];
|
||||||
[self showErrorToast:YMLocalizedString(@"PIRoomPhotoAlbumItemVC1")];
|
[self showErrorToast:YMLocalizedString(@"PIRoomPhotoAlbumItemVC1")];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(giftModel == nil){
|
|
||||||
[self.presenter uploadRoomAlbumListWithGiftId:nil photoUrls:list roomUid:self.roomUid type: @"1"];
|
NSMutableArray *photoUrls = @[].mutableCopy;
|
||||||
return;
|
for (NSDictionary *dic in list) {
|
||||||
|
NSString *url = [dic objectForKey:@"resUrl"];
|
||||||
|
if (url && url.length > 0) {
|
||||||
|
[photoUrls addObject:dic[@"resUrl"]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(giftModel){
|
||||||
|
[self.presenter uploadRoomAlbumListWithGiftId:@(giftModel.giftId).stringValue
|
||||||
|
photoUrls:photoUrls
|
||||||
|
roomUid:self.roomUid
|
||||||
|
type:@"2"];
|
||||||
|
} else {
|
||||||
|
[self.presenter uploadRoomAlbumListWithGiftId:nil
|
||||||
|
photoUrls:photoUrls
|
||||||
|
roomUid:self.roomUid
|
||||||
|
type: @"1"];
|
||||||
}
|
}
|
||||||
[self.presenter uploadRoomAlbumListWithGiftId:@(giftModel.giftId).stringValue photoUrls:list roomUid:self.roomUid type:@"2"];
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
///上传图片
|
///上传图片
|
||||||
- (void)uploadAlbumPicList:(NSArray *)array finish:(void(^)(NSArray *list))finish {
|
- (void)uploadAlbumPicList:(NSArray *)array finish:(void(^)(NSArray *list))finish {
|
||||||
|
|
||||||
|
@kWeakify(self);
|
||||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
|
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
|
||||||
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
|
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
|
||||||
NSMutableArray * dataArray = [NSMutableArray array];
|
NSMutableArray * dataArray = [NSMutableArray array];
|
||||||
@@ -290,6 +309,7 @@
|
|||||||
NSString *format = [UIImage getImageTypeWithImageData:data];
|
NSString *format = [UIImage getImageTypeWithImageData:data];
|
||||||
NSString *name = [NSString stringWithFormat:@"image/%@.%@",[NSString createUUID],format];
|
NSString *name = [NSString stringWithFormat:@"image/%@.%@",[NSString createUUID],format];
|
||||||
[[UploadFile share]QCloudUploadImage:data named:name success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) {
|
[[UploadFile share]QCloudUploadImage:data named:name success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) {
|
||||||
|
@kStrongify(self);
|
||||||
dispatch_semaphore_signal(semaphore);
|
dispatch_semaphore_signal(semaphore);
|
||||||
self.imageCount ++;
|
self.imageCount ++;
|
||||||
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
|
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
|
||||||
@@ -309,11 +329,11 @@
|
|||||||
finish(dataArray);
|
finish(dataArray);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) {
|
||||||
} failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) {
|
@kStrongify(self);
|
||||||
self.imageCount ++;
|
self.imageCount ++;
|
||||||
dispatch_semaphore_signal(semaphore);
|
dispatch_semaphore_signal(semaphore);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -350,7 +370,9 @@
|
|||||||
TTAlertConfig *config = [[TTAlertConfig alloc]init];
|
TTAlertConfig *config = [[TTAlertConfig alloc]init];
|
||||||
config.title = YMLocalizedString(@"XPIAPRechargeViewController7");
|
config.title = YMLocalizedString(@"XPIAPRechargeViewController7");
|
||||||
config.message = YMLocalizedString(@"PIRoomPhotoAlbumItemVC5");
|
config.message = YMLocalizedString(@"PIRoomPhotoAlbumItemVC5");
|
||||||
|
@kWeakify(self);
|
||||||
[TTPopup alertWithConfig:config confirmHandler:^{
|
[TTPopup alertWithConfig:config confirmHandler:^{
|
||||||
|
@kStrongify(self);
|
||||||
[XNDJTDDLoadingTool showOnlyView:kWindow enabled:YES];
|
[XNDJTDDLoadingTool showOnlyView:kWindow enabled:YES];
|
||||||
[self.presenter sendRoomAlbumPhotoWithId:albumModel.ID roomUid:self.roomUid];
|
[self.presenter sendRoomAlbumPhotoWithId:albumModel.ID roomUid:self.roomUid];
|
||||||
} cancelHandler:^{
|
} cancelHandler:^{
|
||||||
@@ -361,7 +383,9 @@
|
|||||||
TTAlertConfig *config = [[TTAlertConfig alloc]init];
|
TTAlertConfig *config = [[TTAlertConfig alloc]init];
|
||||||
config.title = YMLocalizedString(@"XPIAPRechargeViewController7");
|
config.title = YMLocalizedString(@"XPIAPRechargeViewController7");
|
||||||
config.message = YMLocalizedString(@"PIRoomPhotoAlbumItemVC4");
|
config.message = YMLocalizedString(@"PIRoomPhotoAlbumItemVC4");
|
||||||
|
@kWeakify(self);
|
||||||
[TTPopup alertWithConfig:config confirmHandler:^{
|
[TTPopup alertWithConfig:config confirmHandler:^{
|
||||||
|
@kStrongify(self);
|
||||||
[self.presenter deleteRoomAlbumPhotoWithId:albumModel.ID];
|
[self.presenter deleteRoomAlbumPhotoWithId:albumModel.ID];
|
||||||
} cancelHandler:^{
|
} cancelHandler:^{
|
||||||
|
|
||||||
@@ -371,7 +395,7 @@
|
|||||||
if(albumModel.type.intValue == 2 && ![albumModel.uid isEqualToString:[AccountInfoStorage instance].getUid] && albumModel.status == 0){
|
if(albumModel.type.intValue == 2 && ![albumModel.uid isEqualToString:[AccountInfoStorage instance].getUid] && albumModel.status == 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSInteger row = [self.photoList indexOfObject:albumModel];
|
NSInteger row = [self.photoList indexOfObject:albumModel];
|
||||||
PIRoomPhotoAlbumItemCell *cell = (PIRoomPhotoAlbumItemCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
|
PIRoomPhotoAlbumItemCell *cell = (PIRoomPhotoAlbumItemCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
|
||||||
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
||||||
if(cell != nil){
|
if(cell != nil){
|
||||||
@@ -414,7 +438,6 @@
|
|||||||
_collectionView.backgroundColor = [DJDKMIMOMColor colorWithHexString:@"#F4F4FA"];
|
_collectionView.backgroundColor = [DJDKMIMOMColor colorWithHexString:@"#F4F4FA"];
|
||||||
[_collectionView registerClass:[PIRoomPhotoAlbumItemCell class] forCellWithReuseIdentifier:NSStringFromClass([PIRoomPhotoAlbumItemCell class])];
|
[_collectionView registerClass:[PIRoomPhotoAlbumItemCell class] forCellWithReuseIdentifier:NSStringFromClass([PIRoomPhotoAlbumItemCell class])];
|
||||||
[_collectionView registerClass:[XPGuildEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPGuildEmptyCollectionViewCell class])];
|
[_collectionView registerClass:[XPGuildEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPGuildEmptyCollectionViewCell class])];
|
||||||
|
|
||||||
}
|
}
|
||||||
return _collectionView;
|
return _collectionView;
|
||||||
}
|
}
|
||||||
|
@@ -49,7 +49,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
|
- (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
|
||||||
|
|
||||||
UIViewController<JXCategoryListContentViewDelegate> * list = (UIViewController<JXCategoryListContentViewDelegate> *)[self.contentView.validListDict objectForKey:[NSNumber numberWithInteger:index]];
|
UIViewController<JXCategoryListContentViewDelegate> * list = (UIViewController<JXCategoryListContentViewDelegate> *)[self.contentView.validListDict objectForKey:[NSNumber numberWithInteger:index]];
|
||||||
if (list) {
|
if (list) {
|
||||||
return list;
|
return list;
|
||||||
|
Reference in New Issue
Block a user