public IForumPost SelectPost(Guid forumPostId) { var serviceContext = Dependencies.GetServiceContext(); var postFetch = new Fetch { Entity = new FetchEntity("adx_communityforumpost") { Filters = new[] { new Filter { Conditions = new[] { new Condition("adx_communityforumpostid", ConditionOperator.Equal, forumPostId), new Condition("adx_forumthreadid", ConditionOperator.Equal, this.ForumThread.Id) } } } } }; var entity = serviceContext.RetrieveSingle(postFetch); if (entity == null) { return(null); } var website = Dependencies.GetWebsite(); var securityProvider = Dependencies.GetSecurityProvider(); var urlProvider = Dependencies.GetUrlProvider(); var viewEntity = new PortalViewEntity(serviceContext, entity, securityProvider, urlProvider); var cloudStorageAccount = AnnotationDataAdapter.GetStorageAccount(serviceContext); var cloudStorageContainerName = AnnotationDataAdapter.GetStorageContainerName(serviceContext); CloudBlobContainer cloudStorageContainer = null; if (cloudStorageAccount != null) { cloudStorageContainer = AnnotationDataAdapter.GetBlobContainer(cloudStorageAccount, cloudStorageContainerName); } var postInfo = serviceContext.FetchForumPostInfo(entity.Id, website.Id, cloudStorageContainer); var user = Dependencies.GetPortalUser(); return(new ForumPost(entity, viewEntity, postInfo, new Lazy <ApplicationPath>(() => Dependencies.GetEditPath(entity.ToEntityReference()), LazyThreadSafetyMode.None), new Lazy <ApplicationPath>(() => Dependencies.GetDeletePath(entity.ToEntityReference()), LazyThreadSafetyMode.None), canEdit: new Lazy <bool>(() => user != null && user.Equals(postInfo.Author.EntityReference), LazyThreadSafetyMode.None))); }
public IEnumerable <IForumPost> SelectPosts(bool descending, int startRowIndex, int maximumRows = -1) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("startRowIndex={0}, maximumRows={1}: Start", startRowIndex, maximumRows)); if (startRowIndex < 0) { throw new ArgumentException("Value must be a positive integer.", "startRowIndex"); } if (maximumRows == 0) { return(new IForumPost[] { }); } var serviceContext = Dependencies.GetServiceContext(); var securityProvider = Dependencies.GetSecurityProvider(); var query = serviceContext.CreateQuery("adx_communityforumpost") .Where(e => e.GetAttributeValue <EntityReference>("adx_forumthreadid") == ForumThread); query = descending ? query.OrderByDescending(e => e.GetAttributeValue <DateTime?>("adx_date")) : query.OrderBy(e => e.GetAttributeValue <DateTime?>("adx_date")); if (startRowIndex > 0) { query = query.Skip(startRowIndex); } if (maximumRows > 0) { query = query.Take(maximumRows); } var website = Dependencies.GetWebsite(); var entities = query.ToArray(); var firstPostEntity = entities.FirstOrDefault(); var cloudStorageAccount = AnnotationDataAdapter.GetStorageAccount(serviceContext); var cloudStorageContainerName = AnnotationDataAdapter.GetStorageContainerName(serviceContext); CloudBlobContainer cloudStorageContainer = null; if (cloudStorageAccount != null) { cloudStorageContainer = AnnotationDataAdapter.GetBlobContainer(cloudStorageAccount, cloudStorageContainerName); } var postInfos = serviceContext.FetchForumPostInfos(entities.Select(e => e.Id), website.Id, cloudStorageContainer: cloudStorageContainer); var urlProvider = Dependencies.GetUrlProvider(); var thread = Select(); var user = Dependencies.GetPortalUser(); var posts = entities.Select(entity => { IForumPostInfo postInfo; postInfo = postInfos.TryGetValue(entity.Id, out postInfo) ? postInfo : new UnknownForumPostInfo(); var viewEntity = new PortalViewEntity(serviceContext, entity, securityProvider, urlProvider); return(new ForumPost(entity, viewEntity, postInfo, new Lazy <ApplicationPath>(() => Dependencies.GetEditPath(entity.ToEntityReference()), LazyThreadSafetyMode.None), new Lazy <ApplicationPath>(() => Dependencies.GetDeletePath(entity.ToEntityReference()), LazyThreadSafetyMode.None), new Lazy <bool>(() => thread.Editable, LazyThreadSafetyMode.None), new Lazy <bool>(() => thread.ThreadType != null && thread.ThreadType.RequiresAnswer && (firstPostEntity == null || !firstPostEntity.ToEntityReference().Equals(entity.ToEntityReference())) && ((user != null && user.Equals(thread.Author.EntityReference)) || thread.Editable) && !thread.Locked, LazyThreadSafetyMode.None), canEdit: new Lazy <bool>(() => user != null && user.Equals(postInfo.Author.EntityReference) && !thread.Locked, LazyThreadSafetyMode.None))); }).ToArray(); ADXTrace.Instance.TraceInfo(TraceCategory.Application, "End"); return(posts); }