public GroupDetailsViewModel(Group group, Guid?userId = null) { if (group != null) { GroupId = group.Id; Url = group.Url; Logo = group.Logo; Name = group.Name; Summary = group.Summary; PollQuorum = group.PollQuorum; ElectionQuorum = group.ElectionQuorum; if (group.Categories.Count > 0) { Category = group.Categories.First().Title; } IsContentModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.ContentModeration); IsMemberModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration); IsPrivateDiscussion = group.PrivacyEnum.HasFlag(GroupPrivacy.PrivateDiscussion); Badges = new _BadgesViewModel(group); MembersCount = group.GroupMembers.Count(gm => gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator); MaxModeratorsCount = group.ModeratorsCount; ModeratorList = new Group_ModersViewModel(group); Topics = group.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic).OrderByDescending(x => x.LowerTitle).Select(x => new TagViewModel(x)).ToList(); Tags = group.Tags.Where(x => x.TopicState != (byte)TopicState.GroupTopic).OrderByDescending(x => x.Weight).Select(x => new TagViewModel(x)).Take(50).ToList(); if (userId.HasValue) { var uig = GroupService.UserInGroup(userId.Value, group.Id); if (uig != null && uig.State == (byte)GroupMemberState.Moderator) { ProposedTags = group.Tags.Where(x => x.TopicState == (byte)TopicState.ProposedTopic).Select(x => new TagViewModel(x)).ToList(); } } } }
public GroupMembersViewModel(Group group, string query = null) { if (group != null) { GroupId = group.Id; GroupUrl = group.Url; GroupName = group.Name; GroupPrivacy = (GroupPrivacy)group.Privacy; MaxModers = group.ModeratorsCount; IsMemberModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration); IsBlank = group.State == (byte)GroupState.Blank; MembersTotalCount = DataService.PerThread.GroupMemberSet.Count(x => x.GroupId == group.Id && (x.State == (byte)GroupMemberState.Approved || x.State == (byte)GroupMemberState.Moderator)); var groupMembers = group.GroupMembers; RequestsCount = groupMembers.Count(x => x.State == (byte)GroupMemberState.NotApproved); Moderators = new Group_ModersViewModel(group); NoPhotoCount = groupMembers.Count(x => x.State == (byte)GroupMemberState.Approved && x.User.Avatar == null); if (string.IsNullOrWhiteSpace(query)) { Members = groupMembers.Where(x => x.State == (byte)GroupMemberState.Approved && x.User.Avatar != null) .OrderBy(x => Guid.NewGuid()).Take(ShowCount).Select(x => new GroupMembers_MemberViewModel(x)).ToList(); } else { Query = query; var fullnamed = groupMembers .Where(x => !string.IsNullOrEmpty(x.User.SurName) && !string.IsNullOrEmpty(x.User.FirstName) && query.Contains(x.User.SurName) && query.Contains(x.User.FirstName)); var lastnamed = groupMembers.Where(x => !string.IsNullOrEmpty(x.User.SurName) && query.Contains(x.User.SurName)); var firstnamed = groupMembers.Where(x => !string.IsNullOrEmpty(x.User.FirstName) && query.Contains(x.User.FirstName)); Members = fullnamed.Union(lastnamed.Union(firstnamed)).Distinct().Take(ShowCount).Select(x => new GroupMembers_MemberViewModel(x)).ToList(); } } }
public GroupMembersViewModel(Group group, string query = null) { if (group != null) { GroupId = group.Id; GroupUrl = group.Url; GroupName = group.Name; GroupPrivacy = (GroupPrivacy)group.Privacy; MaxModers = group.ModeratorsCount; IsMemberModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration); IsBlank = group.State == (byte)GroupState.Blank; MembersTotalCount = DataService.PerThread.GroupMemberSet.Count(x => x.GroupId == group.Id && (x.State == (byte)GroupMemberState.Approved || x.State == (byte)GroupMemberState.Moderator)); var groupMembers = group.GroupMembers; RequestsCount = groupMembers.Count(x => x.State == (byte)GroupMemberState.NotApproved); Moderators = new Group_ModersViewModel(group); NoPhotoCount = groupMembers.Count(x => x.State == (byte)GroupMemberState.Approved && x.User.Avatar == null); if (string.IsNullOrWhiteSpace(query)) { Members = groupMembers.Where(x => x.State == (byte)GroupMemberState.Approved && x.User.Avatar != null) .OrderBy(x => Guid.NewGuid()).Take(ShowCount).Select(x => new GroupMembers_MemberViewModel(x)).ToList(); } else { Query = query; var fullnamed = groupMembers .Where(x => !string.IsNullOrEmpty(x.User.SurName) && !string.IsNullOrEmpty(x.User.FirstName) && query.Contains(x.User.SurName) && query.Contains(x.User.FirstName)); var lastnamed = groupMembers.Where(x => !string.IsNullOrEmpty(x.User.SurName) && query.Contains(x.User.SurName)); var firstnamed = groupMembers.Where(x => !string.IsNullOrEmpty(x.User.FirstName) && query.Contains(x.User.FirstName)); Members = fullnamed.Union(lastnamed.Union(firstnamed)).Distinct().Take(ShowCount).Select(x => new GroupMembers_MemberViewModel(x)).ToList(); } } }
public GroupDetailsViewModel(Group group, Guid? userId = null) { if (group != null) { GroupId = group.Id; Url = group.Url; Logo = group.Logo; Name = group.Name; Summary = group.Summary; PollQuorum = group.PollQuorum; ElectionQuorum = group.ElectionQuorum; if (group.Categories.Count > 0) Category = group.Categories.First().Title; IsContentModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.ContentModeration); IsMemberModeration = group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration); IsPrivateDiscussion = group.PrivacyEnum.HasFlag(GroupPrivacy.PrivateDiscussion); Badges = new _BadgesViewModel(group); MembersCount = group.GroupMembers.Count(gm => gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator); MaxModeratorsCount = group.ModeratorsCount; ModeratorList = new Group_ModersViewModel(group); Topics = group.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic).OrderByDescending(x=>x.LowerTitle).Select(x=>new TagViewModel(x)).ToList(); Tags = group.Tags.Where(x => x.TopicState != (byte)TopicState.GroupTopic).OrderByDescending(x => x.Weight).Select(x => new TagViewModel(x)).Take(50).ToList(); if (userId.HasValue) { var uig = GroupService.UserInGroup(userId.Value, group.Id); if (uig != null && uig.State == (byte)GroupMemberState.Moderator) ProposedTags = group.Tags.Where(x => x.TopicState == (byte)TopicState.ProposedTopic).Select(x => new TagViewModel(x)).ToList(); } } }
public override ICachedViewModel Initialize() { var group = GroupService.GetGroupByLabelOrId(_groupId); var membersCount = DataService.PerThread.GroupMemberSet.Count(gm => gm.GroupId == group.Id && (gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator)); var moderatorsCount = DataService.PerThread.GroupMemberSet.Count(gm => gm.GroupId == group.Id && gm.State == (byte)GroupMemberState.Moderator); State = (GroupState)group.State; GroupId = group.Id; MembersCount = membersCount; Name = group.Name; Summary = TextHelper.CleanTags(group.Summary); if (Summary.Length > 500) Summary = Summary.Substring(0, 500) + "…"; Url = group.Url; GroupTagsCount = group.Tags.Count; RequiredModers = group.ModeratorsCount - moderatorsCount; IsExpertable = group.Tags.Count != 0; IsEditEnabled = group.Content.OfType<Election>().Count(x => !x.IsFinished) == 0; IsInvisible = group.PrivacyEnum.HasFlag(GroupPrivacy.Invisible); IsCreateElectionEnabled = GroupService.CanElectionsBeStarted(group); Topics = group.Tags.Where(x => x.TopicState == (byte) TopicState.GroupTopic).OrderByDescending(x => x.Weight).Take(5).ToList() .Select(x => new GroupIndex_TopicViewModel(x)).ToList(); IQueryable<Content> feedQueue; if (_userId.HasValue && _userId.Value != Guid.Empty) { var uig = GroupService.UserInGroup(_userId.Value, GroupId); if (uig != null) { MemberId = uig.Id; feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && (x.State == (byte)ContentState.Approved || (x.State == (byte)ContentState.Premoderated && (x.AuthorId.HasValue && x.AuthorId.Value == _userId.Value || uig.State == (byte)GroupMemberState.Moderator)))); } else feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && x.State == (byte)ContentState.Approved); } else feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && x.State == (byte)ContentState.Approved); if (ByDate.HasValue && ByDate.Value) feedQueue = feedQueue.OrderByDescending(x => x.PublishDate ?? DateTime.Now); else { /*feedQueue = (from content in feedQueue.Where(x => x.PublishDate.HasValue) join comment in DataService.PerThread.CommentSet on content.Id equals comment.ContentId join like in DataService.PerThread.LikeSet on content.Id equals like.ContentId let commentsCount = content.Comments.Count let likesCount = content.Likes.Count let plusesCount = content.Likes.Count(x => x.Value) let minusesCount = content.Likes.Count(x => !x.Value) //orderby (Math.Pow(plusesCount * likesCount, 0.5) + commentsCount / 10) / // Math.Pow(EntityFunctions.DiffDays(content.PublishDate.Value, DateTime.Now).Value + 0.01, 0.5) / // Math.Pow(minusesCount + 1, 0.5) descending orderby (Math.Pow(plusesCount * likesCount, 0.5) + commentsCount / 10 + 7) / Math.Pow((EntityFunctions.DiffDays(content.PublishDate.Value, DateTime.Now).Value + 0.01) * (minusesCount + 1), 0.5) descending select content);*/ feedQueue = feedQueue.OrderByDescending(x => (Math.Pow(x.Likes.Count(y => y.Value) * x.Likes.Count, 0.5) + x.Comments.Count / 10 + 7) / Math.Pow((EntityFunctions.DiffDays(x.PublishDate.Value, DateTime.Now).Value + 0.01) * (x.Likes.Count(y => !y.Value) + 1), 0.5)); } if (TopicId.HasValue) feedQueue = feedQueue.Where(x => x.Tags.Count(y => y.Id == TopicId.Value) != 0); Feed = new _ContentFeedViewModel(feedQueue, Url); Moders = new Group_ModersViewModel(group); return this; }
public override ICachedViewModel Initialize() { var group = GroupService.GetGroupByLabelOrId(_groupId); var membersCount = DataService.PerThread.GroupMemberSet.Count(gm => gm.GroupId == group.Id && (gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator)); var moderatorsCount = DataService.PerThread.GroupMemberSet.Count(gm => gm.GroupId == group.Id && gm.State == (byte)GroupMemberState.Moderator); State = (GroupState)group.State; GroupId = group.Id; MembersCount = membersCount; Name = group.Name; Summary = TextHelper.CleanTags(group.Summary); if (Summary.Length > 500) { Summary = Summary.Substring(0, 500) + "…"; } Url = group.Url; GroupTagsCount = group.Tags.Count; RequiredModers = group.ModeratorsCount - moderatorsCount; IsExpertable = group.Tags.Count != 0; IsEditEnabled = group.Content.OfType <Election>().Count(x => !x.IsFinished) == 0; IsInvisible = group.PrivacyEnum.HasFlag(GroupPrivacy.Invisible); IsCreateElectionEnabled = GroupService.CanElectionsBeStarted(group); Topics = group.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic).OrderByDescending(x => x.Weight).Take(5).ToList() .Select(x => new GroupIndex_TopicViewModel(x)).ToList(); IQueryable <Content> feedQueue; if (_userId.HasValue && _userId.Value != Guid.Empty) { var uig = GroupService.UserInGroup(_userId.Value, GroupId); if (uig != null) { MemberId = uig.Id; feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && (x.State == (byte)ContentState.Approved || (x.State == (byte)ContentState.Premoderated && (x.AuthorId.HasValue && x.AuthorId.Value == _userId.Value || uig.State == (byte)GroupMemberState.Moderator)))); } else { feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && x.State == (byte)ContentState.Approved); } } else { feedQueue = DataService.PerThread.ContentSet.Where(x => x.GroupId.HasValue && x.GroupId.Value == _groupId && x.State == (byte)ContentState.Approved); } if (ByDate.HasValue && ByDate.Value) { feedQueue = feedQueue.OrderByDescending(x => x.PublishDate ?? DateTime.Now); } else { /*feedQueue = (from content in feedQueue.Where(x => x.PublishDate.HasValue) * join comment in DataService.PerThread.CommentSet on content.Id equals comment.ContentId * join like in DataService.PerThread.LikeSet on content.Id equals like.ContentId * let commentsCount = content.Comments.Count * let likesCount = content.Likes.Count * let plusesCount = content.Likes.Count(x => x.Value) * let minusesCount = content.Likes.Count(x => !x.Value) * //orderby (Math.Pow(plusesCount * likesCount, 0.5) + commentsCount / 10) / * // Math.Pow(EntityFunctions.DiffDays(content.PublishDate.Value, DateTime.Now).Value + 0.01, 0.5) / * // Math.Pow(minusesCount + 1, 0.5) descending * orderby (Math.Pow(plusesCount * likesCount, 0.5) + commentsCount / 10 + 7) / * Math.Pow((EntityFunctions.DiffDays(content.PublishDate.Value, DateTime.Now).Value + 0.01) * (minusesCount + 1), 0.5) * descending * select content);*/ feedQueue = feedQueue.OrderByDescending(x => (Math.Pow(x.Likes.Count(y => y.Value) * x.Likes.Count, 0.5) + x.Comments.Count / 10 + 7) / Math.Pow((EntityFunctions.DiffDays(x.PublishDate.Value, DateTime.Now).Value + 0.01) * (x.Likes.Count(y => !y.Value) + 1), 0.5)); } if (TopicId.HasValue) { feedQueue = feedQueue.Where(x => x.Tags.Count(y => y.Id == TopicId.Value) != 0); } Feed = new _ContentFeedViewModel(feedQueue, Url); Moders = new Group_ModersViewModel(group); return(this); }