コード例 #1
0
        private string DeleteTopic()
        {
            int topicId = -1;
            int forumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                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 (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModDelete, ForumUser.UserRoles) || (t.Author.AuthorId == this.UserId && Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles)))
                    {
                        tc.Topics_Delete(PortalId, ModuleId, forumId, topicId, MainSettings.DeleteBehavior);
                        return(BuildOutput(string.Empty, OutputCodes.Success, true));
                    }
                }
            }
            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
コード例 #2
0
        public void TopicsControllerGetAllTest()
        {
            var area       = CreateAreaContext();
            var Logic      = CreateLogic();
            var Controller = new TopicsController(Logic);
            var FirstTopic = new Topic
            {
                Id     = Guid.NewGuid(),
                Name   = "First Topic",
                Area   = area,
                AreaId = area.Id
            };

            var SecondTopic = new Topic
            {
                Id     = Guid.NewGuid(),
                Name   = "Second Topic",
                Area   = area,
                AreaId = area.Id
            };

            Logic.Create(FirstTopic);
            Logic.Create(SecondTopic);

            List <Topic> Topics = new List <Topic>()
            {
                FirstTopic, SecondTopic
            };

            var Result        = Controller.Get();
            var CreatedResult = Result as OkObjectResult;
            var TopicResults  = CreatedResult.Value as IEnumerable <TopicDTO>;

            Assert.AreEqual(Topics.Count, TopicResults.ToList().Count);
        }
コード例 #3
0
        public void Index_ModelReturnsTopicsToAddAndRemove()
        {
            var unsubscribedTopics = new List <Topic>
            {
                new Topic
                {
                    TopicId = 1
                }
            };
            var subscribedTopics = new List <Topic>
            {
                new Topic
                {
                    TopicId = 2
                }
            };

            topicsRepository.Setup(t => t.GetSubscribedTopics(It.IsAny <string>())).Returns(subscribedTopics);
            topicsRepository.Setup(t => t.GetUnsubscribedTopics(It.IsAny <string>())).Returns(unsubscribedTopics);
            var topicsController = new TopicsController(unitOfWork.Object, mockEmailService.Object, mockManager.Object);

            var result = topicsController.Index();

            var viewResult = (ViewResult)result;
            var model      = (TopicsGetDto)viewResult.Model;

            Assert.AreEqual(unsubscribedTopics, model.topicsToAdd);
            Assert.AreEqual(subscribedTopics, model.topicsToRemove);
        }
コード例 #4
0
        public async Task Post_CallsRemoveConnections()
        {
            var addedConnections    = new List <connection_user_topic>();
            var connectionsToRemove = new List <connection_user_topic>
            {
                new connection_user_topic
                {
                    AspNetUserID = user.Id,
                    TopicID      = 1
                }
            };
            var postDto       = SetupForPost(addedConnections);
            var toUnsubscribe = new List <int> {
                1
            };

            postDto.To_Unsubscribe = toUnsubscribe;
            var topicsController = new TopicsController(unitOfWork.Object, mockEmailService.Object, mockManager.Object);

            await topicsController.PostControllerAsync(postDto);

            topicsRepository.Verify(x => x.RemoveConnections(It.Is <IEnumerable <connection_user_topic> >(
                                                                 list => list.Count() == 1 &&
                                                                 list.First().AspNetUserID == connectionsToRemove[0].AspNetUserID &&
                                                                 list.First().TopicID == connectionsToRemove[0].TopicID)));
        }
コード例 #5
0
        private string MoveTopic()
        {
            int topicId       = -1;
            int forumId       = -1;
            int targetForumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("forumid") && SimulateIsNumeric.IsNumeric(Params["forumid"]))
            {
                targetForumId = int.Parse(Params["forumid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                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 (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModMove, ForumUser.UserRoles))
                    {
                        tc.Topics_Move(PortalId, ModuleId, targetForumId, topicId);
                        DataCache.ClearAllCache(ModuleId, TabId);
                        return(BuildOutput(string.Empty, OutputCodes.Success, true));
                    }
                }
            }
            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
コード例 #6
0
        private string MarkAnswer()
        {
            int topicId = -1;
            int forumId = -1;
            int replyId = -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());
            }
            if (topicId > 0 & UserId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                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 ((this.UserId == t.Author.AuthorId && !t.IsLocked) || Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    DataProvider.Instance().Reply_UpdateStatus(PortalId, ModuleId, topicId, replyId, UserId, 1, Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles));
                }
                return(BuildOutput(string.Empty, OutputCodes.Success, true));
            }
            else
            {
                return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
            }
        }
コード例 #7
0
        public void TopicControllerUpdateTest()
        {
            var area       = CreateAreaContext();
            var topicId    = Guid.NewGuid();
            var Logic      = CreateLogic();
            var Controller = new TopicsController(Logic);

            Topic Topic = new Topic()
            {
                Id     = topicId,
                AreaId = area.Id,
                Area   = area,
                Name   = "First Topic"
            };

            Logic.Create(Topic);

            Topic.Name = "Updated Topic";

            var result        = Controller.Put(topicId, TopicDTO.ToModel(Topic));
            var createdResult = result as CreatedAtRouteResult;
            var model         = createdResult.Value as TopicDTO;

            Assert.AreEqual("Updated Topic", model.Name);
        }
コード例 #8
0
        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));
        }
コード例 #9
0
        public void ReturnDefaultView_WhenGetToIndex()
        {
            // Arrange
            var topicsService = new Mock <ITopicsService>();

            var controller = new TopicsController(topicsService.Object);

            // Act && Assert
            controller.WithCallTo(c => c.Index()).ShouldRenderDefaultView();
        }
コード例 #10
0
        public void List_ReturnsCorrectType()
        {
            var controller = new TopicsController(_context);

            var result = controller.List();

            var objectResult = Assert.IsType <JsonResult>(result);

            Assert.IsAssignableFrom <IEnumerable <Topic> >(objectResult.Value);
        }
コード例 #11
0
        public async Task Post_ReturnsSuccessAsync()
        {
            var addedConnections   = new List <connection_user_topic>();
            var removedConnections = new List <connection_user_topic>();
            var postDto            = SetupForPost(addedConnections);
            var topicsController   = new TopicsController(unitOfWork.Object, mockEmailService.Object, mockManager.Object);

            var result = await topicsController.PostControllerAsync(postDto);

            Assert.AreEqual("success", result);
        }
コード例 #12
0
        public void ReturnsAnInstance_WhenParameterIsNotNull()
        {
            // Arrange
            var topicsService = new Mock <ITopicsService>();

            // Act
            var controller = new TopicsController(topicsService.Object);

            // Assert
            Assert.IsInstanceOf <TopicsController>(controller);
        }
コード例 #13
0
        public void List_ReturnsAllTopics()
        {
            var controller = new TopicsController(_context);

            var result = controller.List();

            var objectResult = Assert.IsType <JsonResult>(result);
            var topics       = Assert.IsAssignableFrom <IEnumerable <Topic> >(objectResult.Value);

            Assert.Equal(10, topics.Count());
        }
コード例 #14
0
ファイル: TopicControllerTest.cs プロジェクト: emd-che/Forum
        public TopicControllerTest()
        {
            var config = new MapperConfiguration(opts =>
            {
                opts.AddProfile(new TopicsProfile());
            });

            _mapper = config.CreateMapper();

            _repository = new MockTopicRepository();
            _controller = new TopicsController(_repository, _mapper);
        }
コード例 #15
0
 public int Topic_QuickCreate(int PortalId, int ModuleId, int ForumId, string Subject, string Body, int UserId, string DisplayName, bool IsApproved, string IPAddress)
 {
     try
     {
         var tc = new TopicsController();
         return(tc.Topic_QuickCreate(PortalId, ModuleId, ForumId, Subject, Body, UserId, DisplayName, IsApproved, IPAddress));
     }
     catch (Exception ex)
     {
         return(-1);
     }
 }
コード例 #16
0
ファイル: API.cs プロジェクト: allanedk/ActiveForums
		public int Topic_QuickCreate(int PortalId, int ModuleId, int ForumId, string Subject, string Body, int UserId, string DisplayName, bool IsApproved, string IPAddress)
		{
			try
			{
				var tc = new TopicsController();
				return tc.Topic_QuickCreate(PortalId, ModuleId, ForumId, Subject, Body, UserId, DisplayName, IsApproved, IPAddress);
			}
			catch (Exception ex)
			{
				return -1;
			}
		}
コード例 #17
0
        public TopicsControllerTest()
        {
            DbTopics topics = new DbTopics();
            var      config = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile <AutoMapperMapings>();
                cfg.CreateMap <Topic, TopicAPI>();
            });
            var mapper = config.CreateMapper();

            topicsController = new TopicsController(topics, mapper);
        }
        public void ReturnJsonResult_WhenGetToTopics_Update()
        {
            //Arrange
            var topicService     = new Mock <ITopicsService>();
            var topicViewModel   = DataHelper.GetAdminTopicViewModel();
            var kendoDataRequest = new DataSourceRequest();

            topicService.Setup(x => x.Update(It.IsAny <Topic>())).Verifiable();

            var controller = new TopicsController(topicService.Object);

            //Act & Assert
            controller.WithCallTo(c => c.Topics_Update(kendoDataRequest, topicViewModel)).ShouldReturnJson();
        }
コード例 #19
0
        public void ReturnJsonResult_WhenGetToTopics_Read()
        {
            //Arrange
            var topicsService    = new Mock <ITopicsService>();
            var topics           = DataHelper.GetTopics();
            var kendoDataRequest = new DataSourceRequest();

            topicsService.Setup(x => x.GetAll()).Returns(topics);

            var controller = new TopicsController(topicsService.Object);

            //Act & Assert
            controller.WithCallTo(c => c.Topics_Read(kendoDataRequest)).ShouldReturnJson();
        }
コード例 #20
0
        public void UseTopicDetailViewModel(int id)
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            topicController.WithCallTo(t => t.Details(id))
            .ShouldRenderDefaultView().WithModel <TopicDetailsViewModel>();
        }
コード例 #21
0
        public void ReturnDefaulView(int id)
        {
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act & Assert
            topicController
            .WithCallTo(t => t.Details(id))
            .ShouldRenderDefaultView();
        }
コード例 #22
0
        public void RenderAllTopicsPartialView()
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act & Assert
            topicController
            .WithCallTo(t => t.AllTopics())
            .ShouldRenderPartialView("_AllTopicsPartial");
        }
コード例 #23
0
        public void Index_ReturnsModelOfTypeTopicsGetDto()
        {
            var topicsToAdd    = new List <Topic>();
            var topicsToRemove = new List <Topic>();

            topicsRepository.Setup(t => t.GetSubscribedTopics(It.IsAny <string>())).Returns(topicsToAdd);
            topicsRepository.Setup(t => t.GetUnsubscribedTopics(It.IsAny <string>())).Returns(topicsToRemove);
            var topicsController = new TopicsController(unitOfWork.Object, mockEmailService.Object, mockManager.Object);

            var result = topicsController.Index();

            Assert.IsInstanceOf <ViewResult>(result);
            var viewResult = (ViewResult)result;

            Assert.IsInstanceOf <TopicsGetDto>(viewResult.Model);
        }
コード例 #24
0
        public void ReturnDefaultView()
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act & Assert
            topicController
            .WithCallTo(t => t.Create())
            .ShouldRenderDefaultView();
        }
コード例 #25
0
        public void ReturnAllTopicsAction(string searchTerm)
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act & Assert
            topicController
            .WithCallTo(t => t.FilteredTopics(searchTerm))
            .ShouldRenderPartialView("_AllTopicsPartial");
        }
コード例 #26
0
        public void ReturnDefaulView(string time)
        {
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            //topicServiceMock.Setup(t => t.GetById(id)).Returns(new Topic() { NumberOfWordsToTranslate = 3 });

            // Act & Assert
            topicController
            .WithCallTo(t => t.Results(time))
            .ShouldRenderDefaultView();
        }
コード例 #27
0
        public void UseTopicViewModelWithTheCorrectPartialView()
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act & Assert
            topicController
            .WithCallTo(t => t.AllTopics())
            .ShouldRenderPartialView("_AllTopicsPartial")
            .WithModel <IEnumerable <TopicViewModel> >();
        }
コード例 #28
0
        public void CallTopicsGetByIdOnce(int id)
        {
            // Arrange
            var topicServiceMock       = new Mock <ITopicsService>();
            var usersServiceMock       = new Mock <IUsersService>();
            var submissionsServiceMock = new Mock <ITopicSubmissionsService>();
            var topicController        = new TopicsController(
                topicServiceMock.Object,
                usersServiceMock.Object,
                submissionsServiceMock.Object);

            // Act
            topicController.Details(id);

            // Assert
            topicServiceMock.Verify(t => t.GetById(id), Times.Once);
        }
コード例 #29
0
        public void TopicControllerPostTest()
        {
            var area       = CreateAreaContext();
            var Logic      = CreateLogic();
            var Controller = new TopicsController(Logic);
            var Topic      = new Topic
            {
                Id     = Guid.NewGuid(),
                Name   = "First Topic",
                Area   = area,
                AreaId = area.Id
            };

            var result        = Controller.Post(TopicDTO.ToModel(Topic));
            var createdResult = result as CreatedAtRouteResult;
            var model         = createdResult.Value as TopicDTO;

            Assert.AreEqual(Topic.Name, model.Name);
        }
コード例 #30
0
        public void TopicsControllerDeleteTest()
        {
            var area       = CreateAreaContext();
            var topicId    = Guid.NewGuid();
            var Logic      = CreateLogic();
            var Controller = new TopicsController(Logic);

            Topic Topic = new Topic()
            {
                Id     = Guid.NewGuid(),
                AreaId = area.Id,
                Area   = area,
                Name   = "First Topic"
            };

            Logic.Create(Topic);
            Controller.Delete(Topic.Id);

            Assert.ThrowsException <ExceptionController>(() => Logic.Get(Topic.Id));
        }
        public void ReturnJsonResultWithCorrectModelInstance_WhenGetToTopics_Update()
        {
            //Arrange
            var topicService     = new Mock <ITopicsService>();
            var topicViewModel   = DataHelper.GetAdminTopicViewModel();
            var kendoDataRequest = new DataSourceRequest();

            topicService.Setup(x => x.Update(It.IsAny <Topic>())).Verifiable();

            var controller = new TopicsController(topicService.Object);

            //Act
            var     controllerResult = controller.Topics_Update(kendoDataRequest, topicViewModel);
            var     jsonResult       = controllerResult as JsonResult;
            dynamic kendoResultData  = jsonResult.Data;
            var     results          = kendoResultData.Data as IEnumerable <TopicViewModel>;

            //Assert
            Assert.IsInstanceOf <IEnumerable <TopicViewModel> >(results);
        }
コード例 #32
0
        private string SaveTopic()
        {
            int topicId = -1;
            int forumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    string subject = Params["subject"].ToString();
                    subject = Utilities.XSSFilter(subject, true);
                    if (! (string.IsNullOrEmpty(f.PrefixURL)))
                    {
                        string cleanSubject = Utilities.CleanName(subject).ToLowerInvariant();
                        if (SimulateIsNumeric.IsNumeric(cleanSubject))
                        {
                            cleanSubject = "Topic-" + cleanSubject;
                        }
                        string topicUrl = cleanSubject;
                        string urlPrefix = "/";
                        if (! (string.IsNullOrEmpty(f.ForumGroup.PrefixURL)))
                        {
                            urlPrefix += f.ForumGroup.PrefixURL + "/";
                        }
                        if (! (string.IsNullOrEmpty(f.PrefixURL)))
                        {
                            urlPrefix += f.PrefixURL + "/";
                        }
                        string urlToCheck = urlPrefix + cleanSubject;
                        Data.Topics topicsDb = new Data.Topics();
                        for (int u = 0; u <= 200; u++)
                        {
                            int tid = topicsDb.TopicIdByUrl(PortalId, f.ModuleId, urlToCheck);
                            if (tid > 0 && tid == topicId)
                            {
                                break;
                            }
                            else if (tid > 0)
                            {
                                topicUrl = (u + 1) + "-" + cleanSubject;
                                urlToCheck = urlPrefix + topicUrl;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (topicUrl.Length > 150)
                        {
                            topicUrl = topicUrl.Substring(0, 149);
                            topicUrl = topicUrl.Substring(0, topicUrl.LastIndexOf("-"));
                        }
                        t.TopicUrl = topicUrl;
                        //.URL = topicUrl
                    }
                    else
                    {
                        //.URL = String.Empty
                        t.TopicUrl = string.Empty;
                    }
                    t.Content.Subject = subject;
                    t.IsPinned = bool.Parse(Params["pinned"].ToString());
                    t.IsLocked = bool.Parse(Params["locked"].ToString());
                    t.Priority = int.Parse(Params["priority"].ToString());
                    t.StatusId = int.Parse(Params["status"].ToString());
                    if (f.Properties != null)
                    {
                        StringBuilder tData = new StringBuilder();
                        tData.Append("<topicdata>");
                        tData.Append("<properties>");
                        foreach (PropertiesInfo p in f.Properties)
                        {
                            string pkey = "prop-" + p.PropertyId.ToString();

                            tData.Append("<property id=\"" + p.PropertyId.ToString() + "\">");
                            tData.Append("<name><![CDATA[");
                            tData.Append(p.Name);
                            tData.Append("]]></name>");
                            if (Params[pkey] != null)
                            {
                                tData.Append("<value><![CDATA[");
                                tData.Append(Utilities.XSSFilter(Params[pkey].ToString()));
                                tData.Append("]]></value>");
                            }
                            else
                            {
                                tData.Append("<value></value>");
                            }
                            tData.Append("</property>");
                        }
                        tData.Append("</properties>");
                        tData.Append("</topicdata>");
                        t.TopicData = tData.ToString();
                    }
                }
                tc.TopicSave(PortalId, t);
                if (Params["tags"] != null)
                {
                    DataProvider.Instance().Tags_DeleteByTopicId(PortalId, f.ModuleId, topicId);
                    string tagForm = string.Empty;
                    if (Params["tags"] != null)
                    {
                        tagForm = Params["tags"].ToString();
                    }
                    if (! (tagForm == string.Empty))
                    {
                        string[] Tags = tagForm.Split(',');
                        foreach (string tag in Tags)
                        {
                            string sTag = Utilities.CleanString(PortalId, tag.Trim(), false, EditorTypes.TEXTBOX, false, false, f.ModuleId, string.Empty, false);
                            DataProvider.Instance().Tags_Save(PortalId, f.ModuleId, -1, sTag, 0, 1, 0, topicId, false, -1, -1);
                        }
                    }
                }

                if (Params["categories"] != null)
                {
                    string[] cats = Params["categories"].ToString().Split(';');
                    DataProvider.Instance().Tags_DeleteTopicToCategory(PortalId, f.ModuleId, -1, topicId);
                    foreach (string c in cats)
                    {
                        int cid = -1;
                        if (! (string.IsNullOrEmpty(c)) && SimulateIsNumeric.IsNumeric(c))
                        {
                            cid = Convert.ToInt32(c);
                            if (cid > 0)
                            {
                                DataProvider.Instance().Tags_AddTopicToCategory(PortalId, f.ModuleId, cid, topicId);
                            }
                        }
                    }
                }
            }

            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
コード例 #33
0
 private string PinTopic()
 {
     int topicId = -1;
     int forumId = -1;
     if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
     {
         topicId = int.Parse(Params["topicid"].ToString());
     }
     if (topicId > 0)
     {
         TopicsController tc = new TopicsController();
         TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
         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 (f != null)
         {
             if (Permissions.HasPerm(f.Security.ModPin, ForumUser.UserRoles) || (t.Author.AuthorId == this.UserId && Permissions.HasAccess(f.Security.Pin, ForumUser.UserRoles)))
             {
                 if (t.IsPinned)
                 {
                     t.IsPinned = false;
                 }
                 else
                 {
                     t.IsPinned = true;
                 }
                 tc.TopicSave(PortalId, t);
                 return BuildOutput(string.Empty, OutputCodes.Success, true);
             }
         }
     }
     return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
 }
コード例 #34
0
        private string MoveTopic()
        {
            int topicId = -1;
            int forumId = -1;
            int targetForumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("forumid") && SimulateIsNumeric.IsNumeric(Params["forumid"]))
            {
                targetForumId = int.Parse(Params["forumid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                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 (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModMove, ForumUser.UserRoles))
                    {
                        tc.Topics_Move(PortalId, ModuleId, targetForumId, topicId);
                        DataCache.ClearAllCache(ModuleId, TabId);
                        return BuildOutput(string.Empty, OutputCodes.Success, true);
                    }
                }

            }
            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
コード例 #35
0
        private string MarkAnswer()
        {
            int topicId = -1;
            int forumId = -1;
            int replyId = -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());
            }
            if (topicId > 0 & UserId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                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 ((this.UserId == t.Author.AuthorId && ! t.IsLocked) || Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    DataProvider.Instance().Reply_UpdateStatus(PortalId, ModuleId, topicId, replyId, UserId, 1, Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles));

                }
                return BuildOutput(string.Empty, OutputCodes.Success, true);
            }
            else
            {
                return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
            }
        }
コード例 #36
0
        private string LoadTopic()
        {
            int topicId = -1;
            int forumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Append("{");
                        sb.Append(Utilities.JSON.Pair("topicid", t.TopicId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("subject", t.Content.Subject));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("authorid", t.Content.AuthorId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("locked", t.IsLocked.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("pinned", t.IsPinned.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("priority", t.Priority.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("status", t.StatusId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumid", forumId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumname", f.ForumName));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("tags", t.Tags));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("categories", t.Categories));
                        sb.Append(",");
                        sb.Append("\"properties\":[");
                        string sCats = string.Empty;
                        if (f.Properties != null)
                        {
                            int i = 0;
                            foreach (PropertiesInfo p in f.Properties)
                            {
                                sb.Append("{");
                                sb.Append(Utilities.JSON.Pair("propertyid", p.PropertyId.ToString()));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("datatype", p.DataType));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("propertyname", p.Name));
                                sb.Append(",");
                                string pvalue = p.DefaultValue;
                                foreach (PropertiesInfo tp in t.TopicProperties)
                                {
                                    if (tp.PropertyId == p.PropertyId)
                                    {
                                        pvalue = tp.DefaultValue;
                                    }
                                }

                                sb.Append(Utilities.JSON.Pair("propertyvalue", pvalue));
                                if (p.DataType.Contains("list"))
                                {
                                    sb.Append(",\"listdata\":[");
                                    if (p.DataType.Contains("list|categories"))
                                    {
                                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                                        {
                                            dr.NextResult();
                                            while (dr.Read())
                                            {
                                                sCats += "{";
                                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                                sCats += "},";
                                            }
                                            dr.Close();
                                        }
                                        if (! (string.IsNullOrEmpty(sCats)))
                                        {
                                            sCats = sCats.Substring(0, sCats.Length - 1);
                                        }
                                        sb.Append(sCats);
                                    }
                                    else
                                    {
                                        DotNetNuke.Common.Lists.ListController lists = new DotNetNuke.Common.Lists.ListController();
                                        string lName = p.DataType.Substring(p.DataType.IndexOf("|") + 1);
                                        DotNetNuke.Common.Lists.ListEntryInfoCollection lc = lists.GetListEntryInfoCollection(lName, string.Empty);
                                        int il = 0;
                                        foreach (DotNetNuke.Common.Lists.ListEntryInfo l in lc)
                                        {
                                            sb.Append("{");
                                            sb.Append(Utilities.JSON.Pair("itemId", l.Value));
                                            sb.Append(",");
                                            sb.Append(Utilities.JSON.Pair("itemName", l.Text));
                                            sb.Append("}");
                                            il += 1;
                                            if (il < lc.Count)
                                            {
                                                sb.Append(",");
                                            }
                                        }
                                    }
                                    sb.Append("]");
                                }
                                sb.Append("}");
                                i += 1;
                                if (i < f.Properties.Count)
                                {
                                    sb.Append(",");
                                }

                            }
                        }

                        sb.Append("],\"categories\":[");
                        sCats = string.Empty;
                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                        {
                            dr.NextResult();
                            while (dr.Read())
                            {
                                sCats += "{";
                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                sCats += "},";
                            }
                            dr.Close();
                        }
                        if (! (string.IsNullOrEmpty(sCats)))
                        {
                            sCats = sCats.Substring(0, sCats.Length - 1);
                        }
                        sb.Append(sCats);
                        sb.Append("]");
                        sb.Append("}");
                        return BuildOutput(sb.ToString(), OutputCodes.Success, true, true);
                    }
                }

            }
            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
コード例 #37
0
        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);
        }
コード例 #38
0
        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);
        }