示例#1
0
        public IHttpActionResult PutArticleRevision(int id, ArticleRevision articleRevision)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != articleRevision.Id)
            {
                return(BadRequest());
            }

            _db.MarkArticleRevisionAsModified(articleRevision);

            try
            {
                _db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ArticleRevisionExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public static Repository GetMockRepository(
            Article article = null,
            ArticleRevision articleRevision = null,
            ArticleRedirect articleRedirect = null)
        {
            var documentStore =
                new EmbeddableDocumentStore
                    {
                        Configuration =
                            {
                                RunInUnreliableYetFastModeThatIsNotSuitableForProduction
                                    = true,
                                DefaultStorageTypeName = "munin",
                                RunInMemory = true,
                            }
                    }.Initialize();

            DocumentStoreInitializer.InitDocumentStore(documentStore);

            var repository = new Repository(documentStore);

            if (article != null)
            {
                repository.SaveArticle(article, articleRevision);
            }

            if (articleRedirect != null)
            {
                string articleId = articleRedirect.RedirectToArticleSlug;
                repository.SaveArticleRedirects(articleId, articleRedirect);
            }

            return new Repository(documentStore);
        }
示例#3
0
        private void CheckArticleRevision(ArticleRevision articleRevision)
        {
            var demoArticleRevision = GetDemoArticleRevision();

            Assert.AreEqual(demoArticleRevision.Id, articleRevision.Id);
            Assert.AreEqual(demoArticleRevision.ArticleId, articleRevision.ArticleId);
            Assert.AreEqual(demoArticleRevision.SubSectionTabId, articleRevision.SubSectionTabId);
            Assert.AreEqual(demoArticleRevision.Title, articleRevision.Title);
            Assert.AreEqual(demoArticleRevision.Structure, articleRevision.Structure);
            Assert.AreEqual(demoArticleRevision.Body, articleRevision.Body);
            Assert.AreEqual(demoArticleRevision.Live, articleRevision.Live);
            Assert.AreEqual(demoArticleRevision.Public, articleRevision.Public);
            Assert.AreEqual(demoArticleRevision.ReviewDateTime, articleRevision.ReviewDateTime);
            Assert.AreEqual(demoArticleRevision.StartDateTime, articleRevision.StartDateTime);
            Assert.AreEqual(demoArticleRevision.ExpiryDateTime, articleRevision.ExpiryDateTime);
            Assert.AreEqual(demoArticleRevision.UserId, articleRevision.UserId);
            Assert.AreEqual(demoArticleRevision.Template, articleRevision.Template);
            Assert.AreEqual(demoArticleRevision.RevisionDateTime, articleRevision.RevisionDateTime);
            Assert.AreEqual(demoArticleRevision.Files, articleRevision.Files);

            if (articleRevision.Departments != null)
            {
                Assert.AreEqual(demoArticleRevision.Departments.Count, articleRevision.Departments.Count);

                for (var i = 0; i < articleRevision.Departments.Count; i++)
                {
                    Assert.AreEqual(demoArticleRevision.Departments[i].Id, articleRevision.Departments[i].Id);
                    Assert.AreEqual(demoArticleRevision.Departments[i].Name, articleRevision.Departments[i].Name);
                    Assert.AreEqual(demoArticleRevision.Departments[i].ShortName, articleRevision.Departments[i].ShortName);
                }
            }
        }
示例#4
0
        public static Repository GetMockRepository(
            Article article = null,
            ArticleRevision articleRevision = null,
            ArticleRedirect articleRedirect = null)
        {
            var documentStore =
                new EmbeddableDocumentStore
            {
                Configuration =
                {
                    RunInUnreliableYetFastModeThatIsNotSuitableForProduction
                        = true,
                    DefaultStorageTypeName = "munin",
                    RunInMemory            = true,
                }
            }.Initialize();

            DocumentStoreInitializer.InitDocumentStore(documentStore);

            var repository = new Repository(documentStore);

            if (article != null)
            {
                repository.SaveArticle(article, articleRevision);
            }

            if (articleRedirect != null)
            {
                string articleId = articleRedirect.RedirectToArticleSlug;
                repository.SaveArticleRedirects(articleId, articleRedirect);
            }

            return(new Repository(documentStore));
        }
示例#5
0
        public void UpdateRevision(int id)
        {
            var article = _articleRepository.Find(id);

            if (article != null)
            {
                var revs    = _articleRevisionRepository.All.Where(ar => ar.ArticleId == article.Id);
                var lastRev = revs.OrderByDescending(ar => ar.ChangedDate).FirstOrDefault();
                if (lastRev == null || lastRev.ArticleContent != article.ArticleContent || lastRev.Title != article.Title || lastRev.ShortBrief != article.ShortBrief)
                {
                    //if (revs.Count() == 25)
                    //{
                    //    var firstRev = revs.OrderBy(ar => ar.ChangedDate).FirstOrDefault();
                    //    _articleRepository.Delete(firstRev.Id);
                    //    _articleRepository.Save();
                    //}

                    var rev = new ArticleRevision
                    {
                        ArticleId      = article.Id,
                        ChangedDate    = DateTime.Now,
                        Title          = article.Title,
                        ShortBrief     = article.ShortBrief,
                        ArticleContent = article.ArticleContent,
                        CreateUserId   = User.Identity.GetUserId(),
                        //ArticleStatus = article.ArticleStatus
                    };

                    _articleRevisionRepository.InsertOrUpdate(rev);
                    _articleRevisionRepository.Save();
                }
            }
        }
示例#6
0
        public void MakeRevision(ArticleRevision revision)
        {
            var index = revision.ArticleId;

            Articles[index].Revised     = true;
            Articles[index].DateRevised = DateTime.Now;
            Articles[index].Body        = revision.Revision;
        }
示例#7
0
 public ArticleResult(
     Article article = null,
     ArticleRevision articleRevision = null,
     ArticleRedirect articleRedirect = null)
 {
     this.Article         = article;
     this.ArticleRevision = articleRevision;
     this.ArticleRedirect = articleRedirect;
 }
示例#8
0
        public ActionResult CreateRevision(ArticleRevision revision)
        {
            if (Request.IsAuthenticated && User.Identity.Name == Articles[revision.ArticleId].Author)
            {
                MakeRevision(revision);
            }

            return(RedirectToAction("Index"));
        }
示例#9
0
        public void GetArticleResult_WithArticle_ShouldReturnArticleView()
        {
            var article = new Article(TestArticleId);
            var articleRevision = new ArticleRevision(article.Id, string.Empty);

            var repository = RepositoryTestHelper.GetMockRepository(article, articleRevision);
            var articleResult = repository.GetArticleResult(TestArticleId);

            Assert.IsNotNull(articleResult);
        }
示例#10
0
        public void GetArticleResult_WithArticle_ShouldReturnArticleView()
        {
            var article         = new Article(TestArticleId);
            var articleRevision = new ArticleRevision(article.Id, string.Empty);

            var repository    = RepositoryTestHelper.GetMockRepository(article, articleRevision);
            var articleResult = repository.GetArticleResult(TestArticleId);

            Assert.IsNotNull(articleResult);
        }
示例#11
0
        public async Task <IActionResult> Edit(int id, EditArticleViewModel model)
        {
            var user = await GetCurrentUser();

            try
            {
                var article = await _dbContext.Articles.FindAsync(id);

                var origTitle = article.Title;
                article.Title = model.Title;
                if (article.Title != origTitle)
                {
                    article.Slug = article.Title.Slugify();
                }

                var origBody = article.Body;
                article.Body = model.Body;

                article.UpdatedOn     = _dateTimeService.GetNowUtc();
                article.UpdatedUserId = user.Id;

                article.RevisionCount++;

                var revision = new ArticleRevision
                {
                    ArticleId      = id,
                    RevisionDate   = _dateTimeService.GetNowUtc(),
                    Body           = origBody,
                    Score          = article.Score,
                    RevisionUserId = user.Id
                };

                _dbContext.ArticleRevisions.Add(revision);

                await _dbContext.SaveChangesAsync();

                try
                {
                    await _searchService.IndexArticle(article);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"Error indexing article ID {article.Id}");
                }

                return(Redirect(Url.ViewArticleLink(id, article.Slug)));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error updating article ID {id}", model);

                ModelState.AddModelError("", "Error updating article");
                return(View(model));
            }
        }
示例#12
0
        public IHttpActionResult PostArticleRevision(ArticleRevision articleRevision)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _db.ArticleRevisions.Add(articleRevision);
            _db.SaveChanges();

            return(Ok(articleRevision));
        }
示例#13
0
        public void TestInitialize()
        {
            moqPrincipal         = new Mock <IPrincipal>();
            moqControllerContext = new Mock <ControllerContext>();
            moqPrincipal.SetupGet(x => x.Identity.Name).Returns("testUser");
            moqControllerContext.SetupGet(x => x.HttpContext.User).Returns(moqPrincipal.Object);
            moqControllerContext.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);


            _controller = new HomeController();
            _controller.ControllerContext = moqControllerContext.Object;

            _comment0 = new ArticleComment {
                ArticleId = 0, Comment = "testComment0"
            };
            _comment1 = new ArticleComment {
                ArticleId = 0, Comment = "testComment1"
            };
            _article0 = new Article {
                Author     = "*****@*****.**",
                Title      = "Interesting article",
                DatePosted = DateTime.Now,
                Body       = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vulputate euismod sodales. Cras eleifend diam in tristique mattis. Vestibulum id vulputate urna, non vulputate diam. Ut in elementum velit, ut luctus lacus. Quisque et massa lacus. Praesent dolor turpis, ultricies sit amet arcu et, tincidunt faucibus nisl. Nulla faucibus, turpis et cursus porttitor, ex ex fermentum leo, vel semper risus ligula a nisl. Ut a fringilla enim. Quisque congue sagittis mauris, vel molestie mauris eleifend a. Sed elementum tempus pretium. ",
                Comments   = new List <ArticleComment>
                {
                    new ArticleComment
                    {
                        ArticleId = 0,
                        Comment   = "Wow, that's so interesting!"
                    }
                },
                Likes = new List <ArticleLike>()
            };

            _article1 = new Article {
                Author     = "testUser",
                Body       = "testBody",
                DatePosted = DateTime.Now,
                Title      = "testTitle",
                Comments   = new List <ArticleComment> {
                    _comment0, _comment1
                },
                Likes = new List <ArticleLike> {
                    new ArticleLike {
                        ArticleId = 1
                    }
                }
            };

            _revision = new ArticleRevision {
                ArticleId = 0, Revision = "testRevision"
            };
        }
 public void InsertOrUpdate(ArticleRevision articleRevision)
 {
     if (articleRevision.Id == default(int))
     {
         // New entity
         _context.ArticleRevisions.Add(articleRevision);
     }
     else
     {
         // Existing entity
         _context.Entry(articleRevision).State = EntityState.Modified;
     }
 }
 private void AddDemoToInMemoryContext()
 {
     _inMemoryArticle         = GetDemoArticle();
     _inMemoryArticleRevision = GetDemoArticleRevision();
     _inMemoryDepartment      = GetDemoDepartment();
     _inMemorySubSectionTab   = GetDemoSubSectionTab();
     _inMemoryTerm            = GetDemoTerm();
     _context.Articles.Add(_inMemoryArticle);
     _context.ArticleRevisions.Add(_inMemoryArticleRevision);
     _context.Departments.Add(_inMemoryDepartment);
     _context.SubSectionTabs.Add(_inMemorySubSectionTab);
     _context.Terms.Add(_inMemoryTerm);
 }
        public WikiDownArticleHtmlString(ArticleRevision articleRevision, Repository repository)
        {
            if (articleRevision == null)
            {
                throw new ArgumentNullException("articleRevision");
            }
            if (repository == null)
            {
                throw new ArgumentNullException("repository");
            }

            this.html       = MarkdownService.MakeHtml(articleRevision.MarkdownContent);
            this.repository = repository;
        }
        public ArticleRevisionApiModel SaveRevision(
            [FromUri] ArticleId slug,
            [FromBody] ArticleRevisionApiModel formData,
            [FromUri] bool publish = false)
        {
            var articleRevision = new ArticleRevision(
                slug,
                principal: this.User,
                markdownContent: formData.MarkdownContent,
                editSummary: formData.EditSummary);

            this.CurrentRepository.SaveArticleRevision(slug, articleRevision, publish);

            return(new ArticleRevisionApiModel(slug, articleRevision));
        }
        public ArticleRevisionApiModel(ArticleSlug articleSlug, ArticleRevision articleRevision)
        {
            this.Slug = articleSlug.Slug;

            if (articleRevision == null)
            {
                return;
            }

            this.MarkdownContent = articleRevision.MarkdownContent;

            var articleRevisionDate = new ArticleRevisionDate(articleRevision.CreatedAt);

            this.DateId = articleRevisionDate.DateTimeId;
            this.DateFormatted = articleRevisionDate.DateTimeFormatted;
        }
        public ArticleRevisionApiModel(ArticleId articleId, ArticleRevision articleRevision)
        {
            this.Slug = articleId.Slug;

            if (articleRevision == null)
            {
                return;
            }

            this.MarkdownContent = articleRevision.MarkdownContent;

            var articleRevisionDate = new ArticleRevisionDate(articleRevision.CreatedAt);

            this.DateId        = articleRevisionDate.DateTimeId;
            this.DateFormatted = articleRevisionDate.DateTimeFormatted;
        }
        public static void SendRejectedEmail(ArticleRevision articleRevision)
        {
            var _db      = new ClinicalGuidelinesAppContext();
            var author   = _db.Users.FirstOrDefault(a => a.Id == articleRevision.UserId);
            var approver = _db.Users.FirstOrDefault(ap => ap.UserName == articleRevision.ApprovalBy);
            // Create email message using stringbuilder
            var sb = new StringBuilder();

            sb.AppendLine($"<p>Dear {author.Forename} {author.Surname}, </p>");
            sb.AppendLine("<br>");
            sb.AppendLine($"<p>I have rejected the article - {articleRevision.Title}, please see my comments below for rejection reason(s).</p>");
            sb.AppendLine("<br>");
            sb.AppendLine($"<p>{articleRevision.ApprovalComments}</p>");
            sb.AppendLine("<br>");
            sb.AppendLine($"<p>Kind Regards, <br> {approver.Forename} {approver.Surname}</p>");

            var approvalMessage = sb.ToString();
            var approvalSubject = $"{articleRevision.Title} has been rejected.";
            var mailFromAddress = ConfigurationManager.AppSettings["mailFromAddress"];

            SendMail(author.EmailAddress, mailFromAddress, approvalSubject, approvalMessage);
        }
示例#21
0
 public static ArticleRevisionModel ToModel(this ArticleRevision revision) => Mapper.Map <ArticleRevisionModel>(revision);
 public void Load <TElement>(ArticleRevision articleRevision, Expression <Func <ArticleRevision, ICollection <TElement> > > includeProperty) where TElement : class
 {
     _context.ArticleRevisions.Attach(articleRevision);
     _context.Entry(articleRevision).Collection(includeProperty).Load();
 }
示例#23
0
 private void AddDemoToInMemoryContext()
 {
     _inMemoryArticleRevision = GetDemoArticleRevision();
     _context.ArticleRevisions.Add(_inMemoryArticleRevision);
 }
 public void MarkArticleRevisionAsModified(ArticleRevision articleRevision)
 {
 }