Beispiel #1
0
        public async Task <ActionResult> Index()
        {
            var vm = new IndexPageViewModel();

            if (Request.IsAuthenticated)
            {
                var user   = GetUser();
                var cond   = new PageCondition(0, WebConsts.RefListsPageSize);
                var result = await _favoriteHandler.GetAllFavoriteRefListsAsync(user.Id, cond, RefListSortKind.PublishedDateDescending);

                Mapper.Map <PagedRefLists, PagedRefListsViewModel>(result, vm);
                return(View(vm));
            }
            else
            {
                if (Request.IsGoogleCrawl())
                {
                    var req = new GetRefListsRequest(
                        null, null, null, null, null, null, PublishingStatusConditionKind.PublishOnly, 0, WebConsts.RefListsPageSize,
                        RefListSortKind.PublishedDateDescending
                        );
                    var result = await _refListHandler.GetRefListsAsync(req);

                    vm.RefLists = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists);
                    return(View("IndexStatic", vm));
                }
                else
                {
                    return(View(vm));
                }
            }
        }
Beispiel #2
0
        public async Task <ActionResult> AddByBookmarklet(string url)
        {
            /// bindするとvalidateで「<」とか「>」とかがだめになる
            var title = Request.Unvalidated.QueryString["title"];

            SystemContract.RequireNotNullOrWhiteSpace(url, "url");
            BusinessContract.Require(url.Length <= WebConsts.MaxRefLinkUrlLength, Errors.UrlTooLong);

            if (!string.IsNullOrWhiteSpace(title) && title.Length > WebConsts.MaxRefLinkTitleLength)
            {
                title = title.Substring(0, WebConsts.MaxRefLinkTitleLength);
            }

            var model = new AddByBookmarkletPageViewModel()
            {
                Uri   = url,
                Title = title,
            };

            var user = GetUser();
            var req  = new GetRefListsRequest(
                user.Id, null, null, null, "", null, PublishingStatusConditionKind.All, 0, 500, RefListSortKind.UpdatedDateDescending
                );
            var resp = await _refListHandler.GetRefListsAsync(req);

            model.RefLists = Mapper.Map <ICollection <RefListViewModel> >(resp.RefLists);

            return(View(model));
        }
Beispiel #3
0
        /// <summary>
        /// createdUserIdが作成したRefListを返します。
        /// </summary>
        public async Task <PagedRefLists> GetRefListsAsync(GetRefListsRequest req)
        {
            var query = _refsContext.RefLists.Include("Author").Include("TagUses.Tag").Include("Statistics").AsNoTracking();

            query = AppendQueryForAuthorId(query, req.AuthorId);
            query = AppendQueryForAuthorUserName(query, req.AuthorUserName);
            query = AppendQueryForTagUseId(query, req.TagUseId);
            query = AppendQueryForTagName(query, req.TagName, req.TagUseId);
            query = AppendQueryForFromDate(query, req.FromDate);
            query = AppendQueryForSearchText(query, req.TitleSearch);
            query = AppendQueryForPublishingStatus(query, req.PublishingStatusCondition);

            var storedRefListCount = await query.CountAsync();

            query = QueryUtil.AppendQueryForRefListSort(query, req.Sort);

            query = query.Skip(req.PageIndex * req.PageSize);
            query = query.Take(req.PageSize);

            var storedLists = await query.ToArrayAsync();

            var ret = new PagedRefLists()
            {
                PageIndex       = req.PageIndex,
                PageCount       = IndexUtil.GetPageCount(storedRefListCount, req.PageSize),
                AllRefListCount = storedRefListCount,
                RefLists        = storedLists,
            };

            return(ret);
        }
Beispiel #4
0
        public async Task <ActionResult> Sitemap()
        {
            var req = new GetRefListsRequest(
                null, null, null, null, null, null, PublishingStatusConditionKind.PublishOnly, 0, 500,
                RefListSortKind.UpdatedDateDescending
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var xml = SitemapUtil.GetXmlString(result.RefLists, Url);

            return(Content(xml, "text/xml", Encoding.UTF8));
        }
Beispiel #5
0
        public async Task <ActionResult> GetRefLists()
        {
            var user = GetUser();
            var req  = new GetRefListsRequest(
                user.Id, null, null, null, null, null, PublishingStatusConditionKind.All,
                0, 500, RefListSortKind.UpdatedDateDescending
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var lists = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists);

            return(JsonNet(lists, JsonRequestBehavior.AllowGet));
        }
Beispiel #6
0
        [OutputCache(Duration = 600)] /// 10分
        public ActionResult NewlyArrivedRefLists()
        {
            var refListHandler = MochaContainer.Resolve <IRefListHandler>();
            var req            = new GetRefListsRequest(
                null, null, null, null, null, null, PublishingStatusConditionKind.PublishOnly,
                0, 10, RefListSortKind.PublishedDateDescending
                );
            var task   = Task.Run(() => refListHandler.GetRefListsAsync(req));
            var result = task.Result;
            var vm     = Mapper.Map <IEnumerable <RefListViewModel> >(result.RefLists);

            return(View("Action/_NewlyArrivedRefLists", vm));
        }
Beispiel #7
0
        private async Task <ManagePageViewModel> PrepareManagePageViewModel(
            long?authorId, string userName, string titleSearch, string tag, PublishingStatusConditionKind publishingStatusCondition,
            int pageIndex, int pageSize, RefListSortKind sort
            )
        {
            var req = new GetRefListsRequest(
                authorId, userName, null, tag, titleSearch, null, publishingStatusCondition, pageIndex, pageSize, sort
                );

            var resp = await _refListHandler.GetRefListsAsync(req);

            var vm = Mapper.Map <ManagePageViewModel>(resp);

            ++vm.PageIndex;
            vm.TitleSearch = titleSearch;
            vm.TagUse      = tag;

            return(vm);
        }
Beispiel #8
0
        public async Task <ActionResult> Index(string userName = "", string titleSearch = "", string tag = "")
        {
            var req = new GetRefListsRequest(
                null, userName, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly,
                0, WebConsts.RefListsPageSize,
                RefListSortKind.PublishedDateDescending
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var vm = new IndexPageViewModel()
            {
                Tag       = tag,
                PageIndex = result.PageIndex + 1,
                PageCount = result.PageCount,
                RefLists  = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            return(View(vm));
        }
Beispiel #9
0
        public async Task <ActionResult> Detail(string userName, string titleSearch = "", string tag = null)
        {
            if (string.IsNullOrWhiteSpace(userName))
            {
                return(RedirectToAction("Index", "User"));
            }

            var author = await _UserHandler.GetUserByUserNameAsync(userName);

            BusinessContract.Require(author != null, Errors.UserNotFound, userName);

            /// 非公開設定の確認のため本人でもPublishしか見れないようにする。
            var req = new GetRefListsRequest(
                author.Id, null, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly, 0, WebConsts.RefListsPageSize,
                RefListSortKind.PublishedDateDescending
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var tagUses = await _tagHandler.GetAllTagUsesAsync(author.Id);

            var vm = new DetailPageViewModel()
            {
                Author       = Mapper.Map <UserViewModel>(author),
                OwnedTagUses = Mapper.Map <ICollection <TagUseViewModel> >(tagUses),
                TitleSearch  = titleSearch,
                TagUse       = tag,
                PageIndex    = result.PageIndex + 1,
                PageCount    = result.PageCount,
                RefLists     = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            var isFavored = false;

            if (IsAuthenticated())
            {
                var user = GetUser();
                isFavored = await _favoriteHandler.ExistsFavoriteUserAsync(user.Id, author.Id);
            }
            vm.IsFavored = isFavored;

            return(View(vm));
        }
Beispiel #10
0
        public async Task <ActionResult> Detail(string tag, string titleSearch = "")
        {
            if (string.IsNullOrWhiteSpace(tag) || tag == CoreConsts.UnsetTagName)
            {
                return(RedirectToAction("Index"));
            }

            var tagEntity = await _tagHandler.GetTagAsync(tag);

            if (tagEntity == null)
            {
                return(HttpNotFound());
            }
            var tagVm = Mapper.Map <TagViewModel>(tagEntity);

            /// 非公開設定の確認のため本人でもPublishしか見れないようにする。
            var req = new GetRefListsRequest(
                null, null, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly, 0, WebConsts.RefListsPageSize,
                RefListSortKind.PublishedDateDescending
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var vm = new DetailPageViewModel()
            {
                Tag         = tagVm,
                TitleSearch = titleSearch,
                PageIndex   = result.PageIndex + 1,
                PageCount   = result.PageCount,
                RefLists    = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            var isFavored = false;

            if (IsAuthenticated())
            {
                var user = GetUser();
                isFavored = await _favoriteHandler.ExistsFavoriteTagAsync(user.Id, tagVm.Id);
            }
            vm.IsFavored = isFavored;

            return(View(vm));
        }
Beispiel #11
0
        public async Task <ActionResult> NarrowIndex(
            long?authorId, string titleSearch = "", string tag = "", int pageIndex = 1,
            RefListSortKind sort = RefListSortKind.PublishedDateDescending
            )
        {
            var req = new GetRefListsRequest(
                authorId, null, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly,
                pageIndex - 1, WebConsts.RefListsPageSize,
                sort
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var vm = new IndexPageViewModel()
            {
                Tag       = tag,
                PageIndex = result.PageIndex + 1,
                PageCount = result.PageCount,
                RefLists  = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            return(JsonNet(vm, JsonRequestBehavior.AllowGet));
        }
Beispiel #12
0
        public async Task <ActionResult> NarrowDetail(
            string tag, string titleSearch = "", int pageIndex = 1, RefListSortKind sort = RefListSortKind.PublishedDateDescending
            )
        {
            SystemContract.RequireNotNull(tag, "tag");
            SystemContract.Require(tag != CoreConsts.UnsetTagName, "$unsetが指定されました");

            /// 非公開設定の確認のため本人でもPublishしか見れないようにする。
            var req = new GetRefListsRequest(
                null, null, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly,
                pageIndex - 1, WebConsts.RefListsPageSize, sort
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var vm = new PagedRefListsViewModel()
            {
                PageIndex = result.PageIndex + 1,
                PageCount = result.PageCount,
                RefLists  = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            return(JsonNet(vm, JsonRequestBehavior.AllowGet));
        }
Beispiel #13
0
        public async Task <ActionResult> NarrowDetail(
            long?id, string titleSearch = "", string tag = null, int pageIndex = 1,
            RefListSortKind sort        = RefListSortKind.PublishedDateDescending
            )
        {
            SystemContract.RequireNotNull(id, "id");

            //var isPublishOnly = !IsCurrentUserId(id.Value); /// Author以外のユーザーの場合、Publishなリストだけを対象にする
            /// 非公開設定の確認のため本人でもPublishしか見れないようにする。
            var req = new GetRefListsRequest(
                id.Value, null, null, tag, titleSearch, null, PublishingStatusConditionKind.PublishOnly,
                pageIndex - 1, WebConsts.RefListsPageSize, sort
                );
            var result = await _refListHandler.GetRefListsAsync(req);

            var vm = new PagedRefListsViewModel()
            {
                PageIndex = result.PageIndex + 1,
                PageCount = result.PageCount,
                RefLists  = Mapper.Map <ICollection <RefListViewModel> >(result.RefLists),
            };

            return(JsonNet(vm, JsonRequestBehavior.AllowGet));
        }