예제 #1
0
        public async Task<JsonResult> CommunityDetail(long? id)
        {
            if (CurrentUserId == 0)
            {
                await TryAuthenticateFromHttpContext(_communityService, _notificationService);
            }
            if (!id.HasValue)
            {
                return new JsonResult { Data = "error: invalid content id",
                JsonRequestBehavior=JsonRequestBehavior.AllowGet};
            }
            var contentDetail = _contentService.GetContentDetails(id.Value, CurrentUserId);

            var contentViewModel = new ContentViewModel();
            contentViewModel.SetValuesFrom(contentDetail);


            // It creates the prefix for id of links
            SetSiteAnalyticsPrefix(HighlightType.None);

            return new JsonResult { 
                Data = contentViewModel,
                JsonRequestBehavior=JsonRequestBehavior.AllowGet
            };
        }
예제 #2
0
        public async Task<JsonResult> GetCommunityContents(long communityId)
        {
            if (CurrentUserId == 0)
            {
                await TryAuthenticateFromHttpContext(_communityService, _notificationService);
            }
            var contents = await _communityService.GetCommunityContents(communityId, CurrentUserId);
            var entities = new List<EntityViewModel>();
            foreach (var item in contents)
            {
                var contentViewModel = new ContentViewModel();
                contentViewModel.SetValuesFrom(item);
                entities.Add(contentViewModel);
            }
            var children = await _communityService.GetChildCommunities(communityId, CurrentUserId);
            var childCommunities = new List<CommunityViewModel>();
            foreach (var child in children)
            {
                var communityViewModel = new CommunityViewModel();
                Mapper.Map(child, communityViewModel);
                childCommunities.Add(communityViewModel);
            }
            return Json(new{entities,childCommunities},JsonRequestBehavior.AllowGet);

        }
예제 #3
0
        /// <summary>
        /// Searches the presence of the given text in communities and contents tables (Name, description and tags fields).
        /// </summary>
        /// <param name="searchText">Text to be searched</param>
        /// <param name="userId">Id of the user who is accessing</param>
        /// <param name="pageDetails">Details about the pagination</param>
        /// <returns>Communities/Contents which are having the search text</returns>
        public async Task<IEnumerable<EntityViewModel>> SimpleSearch(string searchText, long userId, PageDetails pageDetails, SearchQueryDetails searchQueryDetails)
        {
            // Make sure pageDetails is not null
            this.CheckNotNull(() => new { pageDetails });

            IList<EntityViewModel> searchResults = new List<EntityViewModel>();

            // User Id to be used while searching. This will be used to see whether user is having permission or not.
            long? searchUserId = userId;

            if (_userRepository.GetUserRole(userId, null) == UserRole.SiteAdmin)
            {
                // Set user id as 0 for Site Administrators, so that role check will be ignored for private communities
                searchUserId = null;
            }

            // Gets the total communities/contents satisfying the search condition
            pageDetails.TotalCount = _searchViewRepository.SearchCount(searchText, searchUserId, searchQueryDetails);

            // Set the total pages for the search term
            pageDetails.TotalPages = (pageDetails.TotalCount / pageDetails.ItemsPerPage) + ((pageDetails.TotalCount % pageDetails.ItemsPerPage == 0) ? 0 : 1);

            // Get the skip count and take count for the given page
            var skipCount = (pageDetails.CurrentPage - 1) * pageDetails.ItemsPerPage;
            var takeCount = pageDetails.ItemsPerPage;
            var results = await _searchViewRepository.SearchAsync(searchText, searchUserId, skipCount, takeCount, searchQueryDetails);
            foreach (var entity in results)
            {
                EntityViewModel entityViewModel;

                if (entity.Entity == EntityType.Content.ToString())
                {
                    // In case of Content, need to create ContentViewModel instance which is expected by SearchResultView.
                    entityViewModel = new ContentViewModel();

                    // This is needed to avoid the FxCop warning.
                    var contentViewModel = entityViewModel as ContentViewModel;

                    // Setting the properties which are specific to Contents.
                    contentViewModel.IsLink = entity.ContentType == (int)ContentTypes.Link;
                    contentViewModel.ContentUrl = entity.ContentType == (int)ContentTypes.Link ? entity.ContentUrl : string.Empty;
                    contentViewModel.ContentAzureID = entity.ContentType == (int)ContentTypes.Link ? Guid.Empty : entity.ContentAzureID;
                }
                else
                {
                    entityViewModel = new EntityViewModel();
                }

                Mapper.Map(entity, entityViewModel);
                searchResults.Add(entityViewModel);
            }

            // TODO: Need to send the results based on relevance with following order: Title, Description, Tags and Parent.
            return searchResults;
        }
예제 #4
0
        /// <summary>
        /// It returns the entity list
        /// </summary>
        /// <param name="userId">User Id for whom page is rendered</param>
        /// <param name="entityType">Entity type (Community/Content)</param>
        /// <param name="pageDetails">Details about the pagination</param>
        /// <returns>List of entity objects</returns>
        private async Task<List<EntityViewModel>> GetEntities(long userId, EntityType entityType, PageDetails pageDetails)
        {
            // TODO: Need to create a model for passing parameters to this controller
            var highlightEntities = new List<EntityViewModel>();

            if (entityType == EntityType.Community)
            {
                var communities = ProfileService.GetCommunities(userId, pageDetails, userId != CurrentUserId);
                foreach (var community in communities)
                {
                    var communityViewModel = new CommunityViewModel();
                    Mapper.Map(community, communityViewModel);
                    highlightEntities.Add(communityViewModel);
                }
            }
            else if (entityType == EntityType.Content)
            {
                var contents = ProfileService.GetContents(userId, pageDetails, userId != CurrentUserId);
                foreach (var content in contents)
                {
                    var contentViewModel = new ContentViewModel();
                    contentViewModel.SetValuesFrom(content);
                    highlightEntities.Add(contentViewModel);
                }
            }

            return highlightEntities;
        }
예제 #5
0
        /// <summary>
        /// Gets the entities for the given community.
        /// </summary>
        /// <param name="entityId">Entity Id (Community/Content)</param>
        /// <param name="entityType">Entity type (Community/Content)</param>
        /// <param name="pageDetails">Details about the pagination</param>
        /// <param name="onlyItemCount">To get only item count, not the entities. When community details page is loaded first time, 
        /// no need to get the communities, only count is enough.</param>
        /// <returns>Collection of entities</returns>
        private List<EntityViewModel> GetCommunityEntities(long entityId, EntityType entityType, PageDetails pageDetails, bool onlyItemCount)
        {
            var entities = new List<EntityViewModel>();

            // Default value is 20 if the value is not specified or wrong in the configuration file.
            // Total pages will be set by the service.
            pageDetails.ItemsPerPage = Constants.HighlightEntitiesPerPage;

            // Do not hit the database if the entity is not valid. This will happen for private communities.
            if (entityId > 0)
            {
                if (entityType == EntityType.Community || entityType == EntityType.Folder)
                {
                    var subCommunities = _entityService.GetSubCommunities(entityId, CurrentUserId, pageDetails, onlyItemCount);
                    foreach (var item in subCommunities)
                    {
                        var subCommunityViewModel = new CommunityViewModel();
                        Mapper.Map(item, subCommunityViewModel);
                        entities.Add(subCommunityViewModel);
                    }
                }
                else
                {
                    var contents = _entityService.GetContents(entityId, CurrentUserId, pageDetails);
                    foreach (var item in contents)
                    {
                        var contentViewModel = new ContentViewModel();
                        contentViewModel.SetValuesFrom(item);
                        entities.Add(contentViewModel);
                    }
                }
            }

            return entities;
        }
예제 #6
0
        /// <summary>
        /// It returns the entity list
        /// </summary>
        /// <param name="entityType">Entity type (Community/Content)</param>
        /// <param name="entityHighlightFilter">Entity Highlight filter for the entities (Featured/Latest/Popular/Related)</param>
        /// <param name="pageDetails">Details about the pagination</param>
        /// <returns>entity object</returns>
        private async Task<List<EntityViewModel>> GetHighlightEntities(EntityType entityType, EntityHighlightFilter entityHighlightFilter, PageDetails pageDetails)
        {
            // TODO: Need to create a model for passing parameters to this controller
            var highlightEntities = new List<EntityViewModel>();

            // Set the user who is getting the highlight entities.
            entityHighlightFilter.UserID = CurrentUserId;

            // Total pages will be set by the service.
            if (pageDetails.ItemsPerPage == 0)
            {
                pageDetails.ItemsPerPage = Constants.HighlightEntitiesPerPage;
            }
            if (entityType == EntityType.Community)
            {
                var communities = await _entityService.GetCommunities(entityHighlightFilter, pageDetails);
                foreach (var community in communities)
                {
                    var communityViewModel = new CommunityViewModel();
                    Mapper.Map(community, communityViewModel);
                    highlightEntities.Add(communityViewModel);
                }
            }
            else if (entityType == EntityType.Content)
            {
                var contents = await _entityService.GetContents(entityHighlightFilter, pageDetails);
                foreach (var content in contents)
                {
                    var contentViewModel = new ContentViewModel();
                    contentViewModel.SetValuesFrom(content);
                    highlightEntities.Add(contentViewModel);
                }
            }

            return highlightEntities;
        }