コード例 #1
0
        public async Task <IActionResult> OnPostDeleteAsync()
        {
            var article = await Service.FindByIdAsync(ArticleId.ToString());

            if (article == null)
            {
                return(NotFound());
            }

            var result = await Service.DeleteAsync(article);

            if (result.Successfull)
            {
                if (PageId == null)
                {
                    return(RedirectToPage("/Articles/Index"));
                }

                return(RedirectToPage("/WebPage/Articles/Index", new { pageId = PageId }));
            }

            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Message);
            }

            return(await OnGetAsync(article.Id));
        }
コード例 #2
0
        public async Task <IActionResult> OnPostUpdateAsync()
        {
            var article = await Service.FindByIdAsync(ArticleId.ToString());

            if (article == null)
            {
                return(NotFound());
            }

            var formDict = Request.Form.ToDictionary(k => k.Key.ToString(), k => k.Value);

            article.MarkdownText = MarkdownText;
            var result = await Service.UpdateAsync(article, formDict);

            if (result.Successfull)
            {
                return(RedirectToPage(new { id = article.Id }));
            }

            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Message);
            }

            return(await OnGetAsync(article.Id));
        }
コード例 #3
0
        public WikiArticleInfoViewModel(
            RequestContext requestContext,
            ArticleId articleId,
            UserManager <WikiDownUser> userManager)
            : base(requestContext, articleId, activeTab: HeaderTab.Info)
        {
            if (userManager == null)
            {
                throw new ArgumentNullException("userManager");
            }

            if (this.Article == null)
            {
                throw new ArticleNotFoundException("articleId");
            }

            this.userManager = userManager;

            this.ActiveArticleRevisionId = this.Article.ActiveRevisionId;

            var redirects = CurrentRepository.GetArticleRedirectsList(articleId);

            this.Redirects = redirects.Select(x => new KeyValuePair <string, string>(x.Slug, x.Title)).ToList();

            this.Tags = (this.Article.Tags ?? Enumerable.Empty <string>()).ToList();

            var articleRevisions = CurrentRepository.GetArticleRevisionsList(articleId);

            this.Revisions = articleRevisions.Select(x => new ArticleRevisionListItem(x, this.userManager)).ToList();
        }
コード例 #4
0
        public void Delete(ArticleId id)
        {
            var article = _context.Articles.Find(id);

            _context.Articles.Remove(article);
            _context.SaveChanges();
        }
コード例 #5
0
 public static string WikiDeleteArticleRevision(
     this UrlHelper urlHelper,
     ArticleId articleId,
     ArticleRevisionDate revisionDate)
 {
     return(urlHelper.RouteUrl(RouteNames.WikiArticleRevisionDelete, new { slug = articleId.Slug, revisionDate }));
 }
コード例 #6
0
        public Article Get(ArticleId id)
        {
            var article = _articleRepository.GetById(id);

            _eventPublisher.PublishRetrievalOf(article);
            return(article);
        }
コード例 #7
0
        public WikiSearchViewModel(RequestContext requestContext, string searchTerm)
        {
            this.SearchTerm = searchTerm ?? string.Empty;

            var searchTermArticleId = new ArticleId(this.SearchTerm);

            this.SearchTermFormatted = Capitalize(searchTermArticleId.Title);

            var repository = RepositoryRequestInstance.Get(requestContext);

            var searchResult = repository.SearchArticles(this.SearchTerm);

            this.SearchResults = searchResult.Items.Select(x => new SearchItem(x)).ToList();
            this.Suggestions   = searchResult.Suggestions;

            var articleExists = repository.GetArticleExists(searchTermArticleId);

            this.ArticleExists = (articleExists != null);

            bool isRedirect = (articleExists != null) && (articleExists.Title != SearchTermFormatted);

            this.ArticleTitle = (articleExists != null)
                                    ? (isRedirect ? articleExists.Title : this.SearchTermFormatted)
                                    : this.SearchTermFormatted;

            this.ArticleRedirectedFromTitle = (articleExists != null && isRedirect) ? this.SearchTermFormatted : null;
        }
コード例 #8
0
 public Article(ArticleId id, AuthorId authorId, Title title, Content content)
 {
     Id       = id;
     AuthorId = authorId;
     Title    = title;
     Content  = content;
 }
コード例 #9
0
        public InputMessageArticle(ArticleId id,
                                   String?name,
                                   String?dosageForm,
                                   String?packagingUnit,
                                   int?maxSubItemQuantity,
                                   IEnumerable <ProductCode>?productCodes,
                                   IEnumerable <InputMessagePack>?packs)
        {
            maxSubItemQuantity?.ThrowIfNegative();

            this.Id                 = id;
            this.Name               = name;
            this.DosageForm         = dosageForm;
            this.PackagingUnit      = packagingUnit;
            this.MaxSubItemQuantity = maxSubItemQuantity;

            if (productCodes is not null)
            {
                this.ProductCodes.AddRange(productCodes);
            }

            if (packs is not null)
            {
                this.Packs.AddRange(packs);
            }
        }
コード例 #10
0
        public void Publish(ArticleId articleId)
        {
            var article = _articleRepository.FindById(articleId);

            article.Publish();
            _articleRepository.Save(article);
        }
コード例 #11
0
ファイル: Comment.cs プロジェクト: satishchatap/simpleblog
 public Comment(CommentId commentId, ArticleId articleId, string description, string author)
 {
     CommentId   = commentId;
     ArticleId   = articleId;
     Description = description;
     Author      = author;
 }
コード例 #12
0
 public static string WikiArticleEdit(
     this UrlHelper urlHelper,
     ArticleId articleId,
     ArticleRevisionDate revisionDate = null)
 {
     return(urlHelper.RouteUrl(RouteNames.WikiArticleEdit, new { slug = articleId.Slug, revisionDate }));
 }
コード例 #13
0
        public ArticleRevisionDiffApiModel(
            ArticleId articleId,
            ArticleRevisionDate oldRevisionDate,
            ArticleRevisionDate newRevisionDate,
            Repository repository)
        {
            var    oldRevision = repository.GetArticleRevision(articleId, oldRevisionDate);
            string oldHtml     = ((oldRevision != null) ? MarkdownService.MakeTextHtmlLinebreaks(oldRevision.MarkdownContent) : null)
                                 ?? string.Empty;

            var    newRevision = repository.GetArticleRevision(articleId, newRevisionDate);
            string newHtml     = ((newRevision != null) ? MarkdownService.MakeTextHtmlLinebreaks(newRevision.MarkdownContent) : null)
                                 ?? string.Empty;

            var diff = new Helpers.HtmlDiff(oldHtml, newHtml);

            string diffHtml = diff.Build();

            this.HtmlDiff = diffHtml;

            this.OldText = (oldRevision != null)
                               ? oldRevision.CreatedAt.ToString(ArticleRevisionDate.FormattedDateTimeFormat)
                               : null;
            this.NewText = (newRevision != null)
                               ? newRevision.CreatedAt.ToString(ArticleRevisionDate.FormattedDateTimeFormat)
                               : null;
        }
コード例 #14
0
        public WikiArticleViewModelBase(
            RequestContext requestContext,
            ArticleId articleId,
            ArticleRevisionDate articleRevisionDate = null,
            HeaderTab activeTab = HeaderTab.None)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            if (articleId == null)
            {
                throw new ArgumentNullException("articleId");
            }

            this.CurrentRepository = RepositoryRequestInstance.Get(requestContext);
            this.CurrentPrincipal  = requestContext.HttpContext.User;

            this.ArticleId           = articleId;
            this.DisplayArticleId    = articleId;
            this.ArticleRevisionDate = articleRevisionDate;
            this.ActiveTab           = activeTab;

            this.Article = this.CurrentRepository.GetArticle(articleId);

            this.CanEditArticle = (this.Article == null) || this.Article.CanEdit(this.CurrentPrincipal);
        }
コード例 #15
0
        public void ArtileId_with_same_id_should_be_equal()
        {
            var id1 = new ArticleId(new Guid("dddddddddddddddddddddddddddddddd"));
            var id2 = new ArticleId(new Guid("dddddddddddddddddddddddddddddddd"));

            Assert.AreEqual(id1, id2);
        }
コード例 #16
0
 public override IDocEntity SaveChanges(bool ignoreCache, DocConstantPermission permission)
 {
     ArticleId   = ArticleId?.TrimAndPruneSpaces();
     ArticleLink = ArticleLink?.TrimAndPruneSpaces();
     SearchLink  = SearchLink?.TrimAndPruneSpaces();
     return(base.SaveChanges(ignoreCache, permission));
 }
コード例 #17
0
ファイル: StockInfoArticle.cs プロジェクト: ThomasReth/ITSS2
        public StockInfoArticle(ArticleId id,
                                int quantity,
                                String?name,
                                String?dosageForm,
                                String?packagingUnit,
                                int?maxSubItemQuantity,
                                IEnumerable <ProductCode>?productCodes,
                                IEnumerable <StockInfoPack>?packs)
        {
            quantity.ThrowIfNotPositive();
            maxSubItemQuantity?.ThrowIfNegative();

            this.Id                 = id;
            this.Quantity           = quantity;
            this.Name               = name;
            this.DosageForm         = dosageForm;
            this.PackagingUnit      = packagingUnit;
            this.MaxSubItemQuantity = maxSubItemQuantity;

            if (productCodes is not null)
            {
                this.ProductCodes.AddRange(productCodes);
            }

            if (packs is not null)
            {
                this.Packs.AddRange(packs);
            }
        }
コード例 #18
0
        public static bool Equals(OutputArticle?left, OutputArticle?right)
        {
            bool result = ArticleId.Equals(left?.Id, right?.Id);

            result &= (result ? (left?.Packs.SequenceEqual(right?.Packs)).GetValueOrDefault() : false);

            return(result);
        }
コード例 #19
0
 public WikiArticleEditViewModel(
     RequestContext requestContext,
     ArticleId articleId,
     ArticleRevisionDate articleRevisionDate = null)
     : base(requestContext, articleId, articleRevisionDate, HeaderTab.Edit)
 {
     this.IsCreateMode = (this.Article == null || string.IsNullOrWhiteSpace(this.Article.Id));
 }
コード例 #20
0
        public IReadOnlyCollection <string> SaveRedirects(
            [FromUri] ArticleId slug,
            [FromBody] IEnumerable <string> redirects)
        {
            var savedRedirects = this.CurrentRepository.SaveArticleRedirects(slug, redirects);

            return(savedRedirects.Select(x => x.RedirectFromArticleSlug).ToList());
        }
コード例 #21
0
        public static bool Equals(ArticlePriceResponseArticle?left, ArticlePriceResponseArticle?right)
        {
            bool result = ArticleId.Equals(left?.Id, right?.Id);

            result &= (result ? (left?.PriceInformations.SequenceEqual(right?.PriceInformations)).GetValueOrDefault() : false);

            return(result);
        }
コード例 #22
0
        public IReadOnlyCollection <string> GetTags([FromUri] ArticleId slug)
        {
            var article = this.GetEnsuredArticle(slug);

            var tags = article.Tags ?? Enumerable.Empty <string>();

            return(tags.ToList());
        }
コード例 #23
0
 public Article(ArticleId articleId, string title, string body, string summary, string author)
 {
     ArticleId = articleId;
     Title     = title;
     Body      = body;
     Summary   = summary;
     Author    = author;
 }
コード例 #24
0
        public ArticleRevisionDiffApiModel GetDiff([FromUri] ArticleId slug,
                                                   [FromUri] ArticleRevisionDate oldRevisionDate,
                                                   [FromUri] ArticleRevisionDate newRevisionDate)
        {
            var model = new ArticleRevisionDiffApiModel(slug, oldRevisionDate, newRevisionDate, this.CurrentRepository);

            return(model);
        }
コード例 #25
0
        public ActionResult <ArticleResponse> Get(
            [FromRoute][Required] Guid articleId)
        {
            var id = new ArticleId(articleId);

            var articleResponse = _articles.Get(id);

            return(Ok(articleResponse));
        }
コード例 #26
0
        public static bool Equals(InitiateInputRequestArticle?left, InitiateInputRequestArticle?right)
        {
            bool result = ArticleId.Equals(left?.Id, right?.Id);

            result &= (result ? String.Equals(left?.FmdId, right?.FmdId, StringComparison.OrdinalIgnoreCase) : false);
            result &= (result ? (left?.Packs.SequenceEqual(right?.Packs)).GetValueOrDefault() : false);

            return(result);
        }
コード例 #27
0
        public ArticleDetailResultDto GetDetail(ArticleGetDetailQuery query)
        {
            var articleId   = new ArticleId(query.ArticleId);
            var article     = articleRepository.Find(articleId);
            var transformer = new ArticleToDtoTransformer();
            var dto         = article.Match(x => Option <ArticleDto> .Create(x.Transform(transformer)), Option <ArticleDto> .None);

            return(new ArticleDetailResultDto(dto));
        }
コード例 #28
0
        public void DeleteRevision([FromUri] ArticleId slug, [FromUri] ArticleRevisionDate revisionDate)
        {
            bool deleteSuccess = this.CurrentRepository.DeleteArticleRevision(slug, revisionDate);

            if (!deleteSuccess)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }
コード例 #29
0
        public dynamic GetRevisionPreview([FromUri] ArticleId slug, [FromUri] ArticleRevisionDate revisionDate)
        {
            var articleRevision = this.GetEnsuredArticleRevision(slug, revisionDate);

            var text        = articleRevision.CreatedAt.ToString(ArticleRevisionDate.FormattedDateTimeFormat);
            var htmlContent = MarkdownService.MakeTextHtmlLinebreaks(articleRevision.MarkdownContent);

            return(new { text, htmlContent });
        }
コード例 #30
0
        public void RevertToDraft([FromUri] ArticleId slug)
        {
            bool revertSuccess = this.CurrentRepository.RevertArticleToDraft(slug);

            if (!revertSuccess)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }
コード例 #31
0
ファイル: RepositoryTest.cs プロジェクト: sebnilsson/WikiDown
        public void GetArticleResult_WithSlugContainingSpace_ShouldThrowArticleIdNotEnsuredException()
        {
            var repository = RepositoryTestHelper.GetMockRepository();

            string urlContainingSpace = "URL WITH SPACE";

            string exceptionEnsuredSlug = null;
            string exceptionOriginalSlug = null;
            try
            {
                repository.GetArticleResult(urlContainingSpace);
            }
            catch (ArticleIdNotEnsuredException ex)
            {
                exceptionEnsuredSlug = ex.EnsuredSlug;
                exceptionOriginalSlug = ex.OriginalSlug;
            }

            var expectedEnsuredId = new ArticleId(urlContainingSpace);

            Assert.AreEqual(expectedEnsuredId.Slug, exceptionEnsuredSlug);
            Assert.AreEqual(urlContainingSpace, exceptionOriginalSlug);
        }