/// <summary> /// 管理モード記事一覧を検索するときのでふぉうと設定でインスタンスを生成するファクトリメソッド /// </summary> /// <param name="categoryId"></param> /// <returns></returns> public static ArticleSearchFilter CreateForManage(string categoryLinkTitle) { ArticleSearchFilter filter = new ArticleSearchFilter { CategoryLID = categoryLinkTitle, IsManageMode = true, IncludeShowMemberOnly = true, IncludeNonListed = true }; return(filter); }
/// <summary> /// 外部サイトで記事一覧を検索するときのデフォルト設定でインスタンスを生成するファクトリメソッド /// </summary> /// <param name="categoryId"></param> /// <param name="isAuthenticated"></param> public static ArticleSearchFilter CreateForPublic(string categoryLinkTitle, bool isAuthenticated) { ArticleSearchFilter filter = new ArticleSearchFilter { CategoryLID = categoryLinkTitle, IsManageMode = false, IncludeShowMemberOnly = isAuthenticated, IncludeNonListed = false }; return(filter); }
public ArticleSummaryListViewModel RetrieveArticleList(ArticleSearchFilter filter) { // フィルター条件準備 var query = TranslateFilter(_repository, filter); // トータル件数カウント int count = query.Count(); // 実レコード取得のためのフィルター条件を追加設定 // ソート条件とページング query = query.OrderByDescending(x => x.ReleaseDate).ThenByDescending(x => x.UpdatedDate); query = query.Skip((filter.PageNum) * filter.PageSize).Take(filter.PageSize); ArticleSummaryListViewModel model = new ArticleSummaryListViewModel(); if (!string.IsNullOrEmpty(filter.CategoryLID)) { var category = _categoryMapper.GetByLinkTitle(filter.CategoryLID); if (category != null) { model.CategoryDisplayTitle = category.DisplayTitle; model.CategoryLID = category.LID; } } if (!string.IsNullOrEmpty(filter.Series)) { model.Series = filter.Series; } model.Articles = CreateArticleListViewModels(query); model.PagingInfo = new Models.Shared.PagingInfo { CurrentPage = filter.PageNum, PageSize = filter.PageSize, TotalRecordCount = count }; return(model); }
/// <summary> /// フィルター条件を設定したQueryableオブジェクトに変換する /// </summary> /// <param name="repository"></param> /// <param name="filter"></param> /// <returns></returns> protected virtual IQueryable <Article> TranslateFilter(IContentRepository repository, ArticleSearchFilter filter) { var query = _repository.Articles; if (!string.IsNullOrEmpty(filter.CategoryLID)) { var category = _categoryMapper.GetByLinkTitle(filter.CategoryLID); if (category != null) { query = query.Where(x => x.CategoryID == category.ID); } } if (!string.IsNullOrEmpty(filter.Series)) { query = query.Where(x => x.Series == filter.Series); } if (!filter.IsManageMode) { // 承認されかつ、リリース日が現時点より前の記事 query = query.Where(x => x.ReleaseDate <= DateTime.Now && x.Approved == true); if (!filter.IncludeShowMemberOnly) { // メンバー専用の記事を表示しない場合は、除外するように設定 query = query.Where(x => x.OnlyForMembers == false); } if (!filter.IncludeNonListed) { // 一覧に表示が不許可のものを除外する場合は、一覧表示の許可が設定されているもののみ検索 query = query.Where(x => x.Listed == true); } } return(query.AsQueryable()); }