public void should_not_add_reply_if_require_verified_phone_number_but_user_has_no() { var topic = _app.NewTopic().WithAuthor(_app.MockUser()).Create(); var replyRepo = new Mock <IRepository <Reply> >(); var siteSettings = new SiteSettings { RequireUserPhoneNumberVerified = true }; var replyController = new ReplyController(replyRepo.Object, _app.GetService <IRepository <Topic> >(), siteSettings, NullLogger <ReplyController> .Instance, new SystemClock()); replyController.ControllerContext.HttpContext = new DefaultHttpContext { User = _app.User, RequestServices = _app.ApplicationServices }; var actionResult = replyController.Reply(topic.Id, new ReplyCreationModel { Content = "some content" }); actionResult.IsType <BadRequestResult>(); replyRepo.VerifyNoOtherCalls(); }
public async void BulkInsert_No_Errors() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResponse = new CreateResponse <ApiReplyResponseModel>(new FluentValidation.Results.ValidationResult()); mockResponse.SetRecord(new ApiReplyResponseModel()); mock.ServiceMock.Setup(x => x.Create(It.IsAny <ApiReplyRequestModel>())).Returns(Task.FromResult <CreateResponse <ApiReplyResponseModel> >(mockResponse)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var records = new List <ApiReplyRequestModel>(); records.Add(new ApiReplyRequestModel()); IActionResult response = await controller.BulkInsert(records); response.Should().BeOfType <OkObjectResult>(); (response as OkObjectResult).StatusCode.Should().Be((int)HttpStatusCode.OK); var result = (response as OkObjectResult).Value as List <ApiReplyResponseModel>; result.Should().NotBeEmpty(); mock.ServiceMock.Verify(x => x.Create(It.IsAny <ApiReplyRequestModel>())); }
public async void Patch_No_Errors() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResult = new Mock <UpdateResponse <ApiReplyResponseModel> >(); mockResult.SetupGet(x => x.Success).Returns(true); mock.ServiceMock.Setup(x => x.Update(It.IsAny <int>(), It.IsAny <ApiReplyRequestModel>())) .Callback <int, ApiReplyRequestModel>( (id, model) => model.Content.Should().Be("A") ) .Returns(Task.FromResult <UpdateResponse <ApiReplyResponseModel> >(mockResult.Object)); mock.ServiceMock.Setup(x => x.Get(It.IsAny <int>())).Returns(Task.FromResult <ApiReplyResponseModel>(new ApiReplyResponseModel())); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, new ApiReplyModelMapper()); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var patch = new JsonPatchDocument <ApiReplyRequestModel>(); patch.Replace(x => x.Content, "A"); IActionResult response = await controller.Patch(default(int), patch); response.Should().BeOfType <OkObjectResult>(); (response as OkObjectResult).StatusCode.Should().Be((int)HttpStatusCode.OK); mock.ServiceMock.Verify(x => x.Update(It.IsAny <int>(), It.IsAny <ApiReplyRequestModel>())); }
private string DeletePost() { int replyId = -1; int TopicId = -1; if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"])) { TopicId = int.Parse(Params["topicid"].ToString()); } if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"])) { replyId = int.Parse(Params["replyid"].ToString()); } int forumId = -1; Data.ForumsDB db = new Data.ForumsDB(); forumId = db.Forum_GetByTopicId(TopicId); ForumController fc = new ForumController(); Forum f = fc.Forums_Get(forumId, this.UserId, true); if (TopicId > 0 & replyId < 1) { TopicsController tc = new TopicsController(); TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false)) { DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false)); } } else { ReplyController rc = new ReplyController(); ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId)) { DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false)); } } string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId); DataCache.CacheClearPrefix(cachekey); return(BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true)); }
public int Reply_QuickCreate(int PortalId, int ModuleId, int ForumId, int TopicId, int ReplyToId, string Subject, string Body, int UserId, string DisplayName, bool IsApproved, string IPAddress) { try { var rc = new ReplyController(); return(rc.Reply_QuickCreate(PortalId, ModuleId, ForumId, TopicId, ReplyToId, Subject, Body, UserId, DisplayName, IsApproved, IPAddress)); } catch (Exception ex) { return(-1); } }
public int Reply_QuickCreate(int PortalId, int ModuleId, int ForumId, int TopicId, int ReplyToId, string Subject, string Body, int UserId, string DisplayName, bool IsApproved, string IPAddress) { try { var rc = new ReplyController(); return rc.Reply_QuickCreate(PortalId, ModuleId, ForumId, TopicId, ReplyToId, Subject, Body, UserId, DisplayName, IsApproved, IPAddress); } catch (Exception ex) { return -1; } }
public async void Get_Not_Exists() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); mock.ServiceMock.Setup(x => x.Get(It.IsAny <int>())).Returns(Task.FromResult <ApiReplyResponseModel>(null)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Get(default(int)); response.Should().BeOfType <StatusCodeResult>(); (response as StatusCodeResult).StatusCode.Should().Be((int)HttpStatusCode.NotFound); mock.ServiceMock.Verify(x => x.Get(It.IsAny <int>())); }
public async void Delete_Errors() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResult = new Mock <ActionResponse>(); mockResult.SetupGet(x => x.Success).Returns(false); mock.ServiceMock.Setup(x => x.Delete(It.IsAny <int>())).Returns(Task.FromResult <ActionResponse>(mockResult.Object)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Delete(default(int)); response.Should().BeOfType <ObjectResult>(); (response as ObjectResult).StatusCode.Should().Be((int)HttpStatusCode.UnprocessableEntity); mock.ServiceMock.Verify(x => x.Delete(It.IsAny <int>())); }
public async Task RetriveReplyTest(ApiConfig config) { var pc = new PostController(config); var fc = new ForumController(config); var forums = await fc.GetForumsAsync(); var posts = await pc.GetPostAsync(forums.First().Id, 1); var post = posts.FirstOrDefault(p => p.Hr + p.Replys.Count > 0); if (post != null) { var rc = new ReplyController(config); var reply = await rc.GetReplyAsync(post.No); Assert.IsInstanceOfType(reply, typeof(Reply)); } }
public async void All_Not_Exists() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); mock.ServiceMock.Setup(x => x.All(It.IsAny <int>(), It.IsAny <int>())).Returns(Task.FromResult <List <ApiReplyResponseModel> >(new List <ApiReplyResponseModel>())); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.All(1000, 0); response.Should().BeOfType <OkObjectResult>(); (response as OkObjectResult).StatusCode.Should().Be((int)HttpStatusCode.OK); var items = (response as OkObjectResult).Value as List <ApiReplyResponseModel>; items.Should().BeEmpty(); mock.ServiceMock.Verify(x => x.All(It.IsAny <int>(), It.IsAny <int>())); }
public async void Update_NotFound() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResult = new Mock <UpdateResponse <ApiReplyResponseModel> >(); mockResult.SetupGet(x => x.Success).Returns(false); mock.ServiceMock.Setup(x => x.Update(It.IsAny <int>(), It.IsAny <ApiReplyRequestModel>())).Returns(Task.FromResult <UpdateResponse <ApiReplyResponseModel> >(mockResult.Object)); mock.ServiceMock.Setup(x => x.Get(It.IsAny <int>())).Returns(Task.FromResult <ApiReplyResponseModel>(null)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, new ApiReplyModelMapper()); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Update(default(int), new ApiReplyRequestModel()); response.Should().BeOfType <StatusCodeResult>(); (response as StatusCodeResult).StatusCode.Should().Be((int)HttpStatusCode.NotFound); mock.ServiceMock.Verify(x => x.Get(It.IsAny <int>())); }
public async void Get_Exists() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); mock.ServiceMock.Setup(x => x.Get(It.IsAny <int>())).Returns(Task.FromResult(new ApiReplyServerResponseModel())); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Get(default(int)); response.Should().BeOfType <OkObjectResult>(); (response as OkObjectResult).StatusCode.Should().Be((int)HttpStatusCode.OK); var record = (response as OkObjectResult).Value as ApiReplyServerResponseModel; record.Should().NotBeNull(); mock.ServiceMock.Verify(x => x.Get(It.IsAny <int>())); }
public async void Patch_Record_Not_Found() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResult = new Mock <ActionResponse>(); mock.ServiceMock.Setup(x => x.Get(It.IsAny <int>())).Returns(Task.FromResult <ApiReplyResponseModel>(null)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var patch = new JsonPatchDocument <ApiReplyRequestModel>(); patch.Replace(x => x.Content, "A"); IActionResult response = await controller.Patch(default(int), patch); response.Should().BeOfType <StatusCodeResult>(); (response as StatusCodeResult).StatusCode.Should().Be((int)HttpStatusCode.NotFound); mock.ServiceMock.Verify(x => x.Get(It.IsAny <int>())); }
public async void Create_Errors() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResponse = new Mock <CreateResponse <ApiReplyResponseModel> >(new FluentValidation.Results.ValidationResult()); var mockRecord = new ApiReplyResponseModel(); mockResponse.SetupGet(x => x.Success).Returns(false); mock.ServiceMock.Setup(x => x.Create(It.IsAny <ApiReplyRequestModel>())).Returns(Task.FromResult <CreateResponse <ApiReplyResponseModel> >(mockResponse.Object)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Create(new ApiReplyRequestModel()); response.Should().BeOfType <ObjectResult>(); (response as ObjectResult).StatusCode.Should().Be((int)HttpStatusCode.UnprocessableEntity); mock.ServiceMock.Verify(x => x.Create(It.IsAny <ApiReplyRequestModel>())); }
public async void Create_No_Errors() { ReplyControllerMockFacade mock = new ReplyControllerMockFacade(); var mockResponse = ValidationResponseFactory <ApiReplyServerResponseModel> .CreateResponse(null as ApiReplyServerResponseModel); mockResponse.SetRecord(new ApiReplyServerResponseModel()); mock.ServiceMock.Setup(x => x.Create(It.IsAny <ApiReplyServerRequestModel>())).Returns(Task.FromResult <CreateResponse <ApiReplyServerResponseModel> >(mockResponse)); ReplyController controller = new ReplyController(mock.ApiSettingsMoc.Object, mock.LoggerMock.Object, mock.TransactionCoordinatorMock.Object, mock.ServiceMock.Object, mock.ModelMapperMock.Object); controller.ControllerContext = new ControllerContext(); controller.ControllerContext.HttpContext = new DefaultHttpContext(); IActionResult response = await controller.Create(new ApiReplyServerRequestModel()); response.Should().BeOfType <CreatedResult>(); (response as CreatedResult).StatusCode.Should().Be((int)HttpStatusCode.Created); var createResponse = (response as CreatedResult).Value as CreateResponse <ApiReplyServerResponseModel>; createResponse.Record.Should().NotBeNull(); mock.ServiceMock.Verify(x => x.Create(It.IsAny <ApiReplyServerRequestModel>())); }
public void SetupMock() { // Setup fake data this.mock = new MockContainer(); var fakeUsers = this.mock.UsersRepositoryMock.Object; var fakePosts = this.mock.PostsRepositoryMock.Object; var fakeReplies = this.mock.RepliesRepositoryMock.Object; var context = new Mock<ITweeterLikeData>(); // Setup repositories context.Setup(u => u.ApplicationUsers).Returns(fakeUsers); context.Setup(u => u.Posts).Returns(fakePosts); context.Setup(u => u.Replies).Returns(fakeReplies); // Setup idProvider var idProvider = new Mock<IUserIdProvider>(); idProvider.Setup(p => p.GetUserId()).Returns("1"); // Setup controller this.controller = new ReplyController(context.Object, idProvider.Object); this.controller.Request = new HttpRequestMessage(); this.controller.Configuration = new HttpConfiguration(); }
public void SetupMock() { // Setup fake data this.mock = new MockContainer(); var fakeUsers = this.mock.UsersRepositoryMock.Object; var fakePosts = this.mock.PostsRepositoryMock.Object; var fakeReplies = this.mock.RepliesRepositoryMock.Object; var context = new Mock <ITweeterLikeData>(); // Setup repositories context.Setup(u => u.ApplicationUsers).Returns(fakeUsers); context.Setup(u => u.Posts).Returns(fakePosts); context.Setup(u => u.Replies).Returns(fakeReplies); // Setup idProvider var idProvider = new Mock <IUserIdProvider>(); idProvider.Setup(p => p.GetUserId()).Returns("1"); // Setup controller this.controller = new ReplyController(context.Object, idProvider.Object); this.controller.Request = new HttpRequestMessage(); this.controller.Configuration = new HttpConfiguration(); }
private string DeletePost() { int replyId = -1; int TopicId = -1; if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"])) { TopicId = int.Parse(Params["topicid"].ToString()); } if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"])) { replyId = int.Parse(Params["replyid"].ToString()); } int forumId = -1; Data.ForumsDB db = new Data.ForumsDB(); forumId = db.Forum_GetByTopicId(TopicId); ForumController fc = new ForumController(); Forum f = fc.Forums_Get(forumId, this.UserId, true); // Need to get the list of attachments BEFORE we remove the post recods var attachmentController = new Data.AttachController(); var attachmentList = (MainSettings.DeleteBehavior == 0) ? attachmentController.ListForPost(TopicId, replyId) : null; if (TopicId > 0 & replyId < 1) { TopicsController tc = new TopicsController(); TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false)) { DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false); } } else { ReplyController rc = new ReplyController(); ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId)) { DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false); } } // If it's a hard delete, delete associated attachments // attachmentList will only be populated if the DeleteBehavior is 0 if (attachmentList != null) { var fileManager = FileManager.Instance; var folderManager = FolderManager.Instance; var attachmentFolder = folderManager.GetFolder(PortalId, "activeforums_Attach"); foreach (var attachment in attachmentList) { attachmentController.Delete(attachment.AttachmentId); var file = attachment.FileId.HasValue ? fileManager.GetFile(attachment.FileId.Value) : fileManager.GetFile(attachmentFolder, attachment.FileName); // Only delete the file if it exists in the attachment folder if (file != null && file.FolderId == attachmentFolder.FolderID) fileManager.DeleteFile(file); } } // Return the result string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId); DataCache.CacheClearPrefix(cachekey); return BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true); }
private string DeletePost() { int replyId = -1; int TopicId = -1; if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"])) { TopicId = int.Parse(Params["topicid"].ToString()); } if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"])) { replyId = int.Parse(Params["replyid"].ToString()); } int forumId = -1; Data.ForumsDB db = new Data.ForumsDB(); forumId = db.Forum_GetByTopicId(TopicId); ForumController fc = new ForumController(); Forum f = fc.Forums_Get(forumId, this.UserId, true); if (TopicId > 0 & replyId < 1) { TopicsController tc = new TopicsController(); TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false)) { DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false); } } else { ReplyController rc = new ReplyController(); ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId)) { DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false); } } string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId); DataCache.CacheClearPrefix(cachekey); return BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true); }
private string DeletePost() { int replyId = -1; int TopicId = -1; if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"])) { TopicId = int.Parse(Params["topicid"].ToString()); } if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"])) { replyId = int.Parse(Params["replyid"].ToString()); } int forumId = -1; Data.ForumsDB db = new Data.ForumsDB(); forumId = db.Forum_GetByTopicId(TopicId); ForumController fc = new ForumController(); Forum f = fc.Forums_Get(forumId, this.UserId, true); // Need to get the list of attachments BEFORE we remove the post recods var attachmentController = new Data.AttachController(); var attachmentList = (MainSettings.DeleteBehavior == 0) ? attachmentController.ListForPost(TopicId, replyId) : null; if (TopicId > 0 & replyId < 1) { TopicsController tc = new TopicsController(); TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false)) { DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false)); } } else { ReplyController rc = new ReplyController(); ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId); if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId)) { DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior); string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString()); JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey); } else { return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false)); } } // If it's a hard delete, delete associated attachments // attachmentList will only be populated if the DeleteBehavior is 0 if (attachmentList != null) { var fileManager = FileManager.Instance; var folderManager = FolderManager.Instance; var attachmentFolder = folderManager.GetFolder(PortalId, "activeforums_Attach"); foreach (var attachment in attachmentList) { attachmentController.Delete(attachment.AttachmentId); var file = attachment.FileId.HasValue ? fileManager.GetFile(attachment.FileId.Value) : fileManager.GetFile(attachmentFolder, attachment.FileName); // Only delete the file if it exists in the attachment folder if (file != null && file.FolderId == attachmentFolder.FolderID) { fileManager.DeleteFile(file); } } } // Return the result string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId); DataCache.CacheClearPrefix(cachekey); return(BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true)); }