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 }; }
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); }
/// <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; }
/// <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; }
/// <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; }
/// <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; }