コード例 #1
0
        public ActionResult Sightings(SightingsQueryInput queryInput)
        {
            var userResult = _documentSession
                             .Query <All_Users.Result, All_Users>()
                             .AsProjection <All_Users.Result>()
                             .Where(x => x.UserId == _userContext.GetAuthenticatedUserId())
                             .First();

            if (queryInput.View.ToLower() == "thumbnails")
            {
                queryInput.PageSize = 15;
            }

            if (queryInput.View.ToLower() == "details")
            {
                queryInput.PageSize = 10;
            }

            if (string.IsNullOrWhiteSpace(queryInput.Sort) ||
                (queryInput.Sort.ToLower() != "newest" &&
                 queryInput.Sort.ToLower() != "oldest" &&
                 queryInput.Sort.ToLower() != "a-z" &&
                 queryInput.Sort.ToLower() != "z-a") &&
                queryInput.Sort.ToLower() != "popular")
            {
                queryInput.Sort = "newest";
            }

            queryInput.Category = queryInput.Category ?? string.Empty;
            if (!string.IsNullOrWhiteSpace(queryInput.Category) && !Categories.IsValidCategory(queryInput.Category))
            {
                queryInput.Category = string.Empty;
            }

            queryInput.Query = queryInput.Query ?? string.Empty;
            queryInput.Field = queryInput.Field ?? string.Empty;

            queryInput.Taxonomy = queryInput.Taxonomy ?? string.Empty;

            dynamic viewModel = new ExpandoObject();

            viewModel.User               = _userViewModelQuery.BuildUser(_userContext.GetAuthenticatedUserId());
            viewModel.Sightings          = _sightingViewModelQuery.BuildHomeSightingList(_userContext.GetAuthenticatedUserId(), queryInput);
            viewModel.CategorySelectList = Categories.GetSelectList(queryInput.Category);
            viewModel.Query              = new
            {
                Id = "home",     // We set the id to home, so that the mustache sightings list creates correct sorting URL
                queryInput.Page,
                queryInput.PageSize,
                queryInput.Sort,
                queryInput.View,
                queryInput.Category,
                queryInput.NeedsId,
                queryInput.Query,
                queryInput.Field,
                queryInput.Taxonomy,
                IsThumbnailsView = queryInput.View == "thumbnails",
                IsDetailsView    = queryInput.View == "details",
                IsMapView        = queryInput.View == "map"
            };
            viewModel.ShowUserWelcome = userResult.User.CallsToAction.Contains("user-welcome");
            viewModel.ShowSightings   = true;
            viewModel.FieldSelectList = new[]
            {
                new
                {
                    Text     = "Sighting Title",
                    Value    = "title",
                    Selected = queryInput.Field.ToLower() == "title"
                },
                new
                {
                    Text     = "Descriptions",
                    Value    = "descriptions",
                    Selected = queryInput.Field.ToLower() == "descriptions"
                },
                new
                {
                    Text     = "Tags",
                    Value    = "tags",
                    Selected = queryInput.Field.ToLower() == "tags"
                },
                new
                {
                    Text     = "Scientific Name",
                    Value    = "scientificname",
                    Selected = queryInput.Field.ToLower() == "scientificname"
                },
                new
                {
                    Text     = "Common Name",
                    Value    = "commonname",
                    Selected = queryInput.Field.ToLower() == "commonname"
                }
            };

            return(RestfulResult(
                       viewModel,
                       "home",
                       "sightings"));
        }