Exemplo n.º 1
0
        public static Expert CreateExpertWithoutSaving(GroupMember expertGroupMember)
        {
            var expert = new Expert { GroupMember = expertGroupMember };
            DataService.PerThread.ExpertSet.AddObject(expert);

            return expert;
        }
Exemplo n.º 2
0
 public GroupRequestsViewModel_RequestViewModel(GroupMember member)
 {
     if (member != null)
     {
         Id = member.UserId;
         GroupMemberId = member.Id;
         FullName = member.User.FullName;
         Avatar = ImageService.GetImageUrl<User>(member.User.Avatar);
     }
 }
Exemplo n.º 3
0
 public GroupContainer(GroupMember groupMember)
 {
     if (groupMember != null)
     {
         Id = groupMember.Group.Id;
         Name = groupMember.Group.Name;
         State = (GroupState)groupMember.Group.State;
         Url = groupMember.Group.Url;
         Logo = groupMember.Group.Logo;
         IsApprovedMember = groupMember.State == (byte)GroupMemberState.Approved || groupMember.State == (byte)GroupMemberState.Moderator;
         IsModerator = groupMember.State == (byte)GroupMemberState.Moderator;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Добавление указанного пользователя в группу
        /// </summary>
        /// <param name="userId">идентификатор пользователя</param>
        /// <param name="groupId">идентификатор группы</param>
        /// <returns>экземпляр участника группы</returns>
        public GroupMember AddMember(Guid userId, Guid groupId, bool saveChanges = true)
        {
            var group = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == groupId);
            if (group == null)
                throw new BusinessLogicException("Не найдена группа с указанным идентификатором");

            var gm = DataService.PerThread.GroupMemberSet.SingleOrDefault(m => m.GroupId == groupId && m.UserId == userId);
            if (gm == null)
            {
                gm = new GroupMember
                {
                    EntryDate = DateTime.Now,
                    GroupId = groupId,
                    State = (byte)GroupMemberState.NotApproved,
                    UserId = userId
                };

                if (!group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration) && group.State != (byte)GroupState.Blank || group.State == (byte)GroupState.Archive)
                    gm.State = (byte)GroupMemberState.Approved;

                DataService.PerThread.GroupMemberSet.AddObject(gm);
                DataService.PerThread.SaveChanges();

                if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) == 0)
                    GroupService.ChangeMemberStatus(userId, group.Id, GroupMemberState.Moderator);

                SubscriptionService.SubscribeToGroup(group.Url, gm.UserId);
            }
            else if (gm.State != (byte)GroupMemberState.Approved && gm.State != (byte)GroupMemberState.Moderator)
            {
                if (gm.State == (byte)GroupMemberState.Banned && DateTime.Now < gm.ExitDate.Value.AddMonths(2))
                    throw new BusinessLogicException("Вы не можете вступать в эту группу еще " + (gm.ExitDate.Value.AddMonths(2) - DateTime.Now).Days + ", так как были заблокированы");

                if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) == 0)
                {
                    GroupService.ChangeMemberStatus(userId, group.Id, GroupMemberState.Moderator);
                }
                else if (!group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration) && group.State != (byte)GroupState.Blank)
                {
                    gm.State = (byte)GroupMemberState.Approved;
                }
                else
                    gm.State = (byte)GroupMemberState.NotApproved;
            }

            UpdateGroupState(group.Id);

            return gm;
        }
Exemplo n.º 5
0
        public static Tag AddTagByUser(string title, string description, GroupMember groupMember)
        {
            var tag = GetTag(title, groupMember.Group, true);

            if (groupMember.State == (byte)GroupMemberState.Approved)
            {
                if (tag.TopicState == (byte)TopicState.NotTopic)
                {
                    tag.TopicState = (byte)TopicState.ProposedTopic;
                    tag.Description = description;
                }
                else if (tag.TopicState == (byte)TopicState.GroupTopic)
                    throw new ValidationException("Такая тема группы уже существует");
                else if (tag.TopicState == (byte)TopicState.ProposedTopic)
                    throw new ValidationException("Такая тема группы уже преждложена и ожидает решения модераторов.");
            }
            else if (groupMember.State == (byte)GroupMemberState.Moderator)
            {
                if (tag.TopicState == (byte)TopicState.NotTopic || tag.TopicState == (byte)TopicState.ProposedTopic)
                {
                    tag.TopicState = (byte)TopicState.GroupTopic;
                    tag.Description = description;
                    tag.IsRecommended = true;
                }
                else if (tag.TopicState == (byte)TopicState.GroupTopic)
                    throw new ValidationException("Такая тема группы уже существует");
            }

            DataService.PerThread.SaveChanges();

            if (groupMember.Group.State == (byte)GroupMemberState.Approved)
            {
                var date = DateTime.Now;
                MessageService.SendToGroup(groupMember.Group,
                new MessageStruct
                {
                    Text = MessageComposer.ComposeGroupModeratorNotice(groupMember.Group.Id, "Поступило предложение на добавление новой темы группы: <a href='" + tag.GetTopicUrl(false) + "'>" + tag.Title + "</a>"),
                    Type = (byte)MessageType.GroupModeratorNotice,
                    Date = date
                }
                , GroupMessageRecipientType.Moderators);
            }

            return tag;
        }
        public UserGroups_GroupMemberViewModel(GroupMember gm)
        {
            if (gm != null)
            {
                EntryDate = gm.EntryDate;
                GroupLogo = ImageService.GetImageUrl<Group>(gm.Group.Logo);
                GroupName = gm.Group.Name;
                GroupId = gm.Group.Id;
                GroupUrl = gm.Group.Url;
                MembersCount = gm.Group.GroupMembers.Count;

                IsApproved = gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator;
                IsModerator = gm.State == (byte)GroupMemberState.Moderator;

                foreach (var tag in gm.Group.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic))
                    Tags.Add(new TagViewModel(tag));
            }
        }
Exemplo n.º 7
0
        private void FixupOwner(GroupMember previousValue)
        {
            if (previousValue != null && previousValue.Bulletins.Contains(this))
            {
                previousValue.Bulletins.Remove(this);
            }

            if (Owner != null)
            {
                if (!Owner.Bulletins.Contains(this))
                {
                    Owner.Bulletins.Add(this);
                }
                if (OwnerId != Owner.Id)
                {
                    OwnerId = Owner.Id;
                }
            }
        }
Exemplo n.º 8
0
        private void FixupGroupMember(GroupMember previousValue)
        {
            if (previousValue != null && ReferenceEquals(previousValue.Candidate, this))
            {
                previousValue.Candidate = null;
            }

            if (GroupMember != null)
            {
                GroupMember.Candidate = this;
            }
        }
Exemplo n.º 9
0
        public Group_Election_CandidateViewModel(Candidate candidate, GroupMember gm)
        {
            if (candidate != null)
            {
                Id = candidate.Id;
                UserId = candidate.GroupMember.UserId;
                Avatar = ImageService.GetImageUrl<User>(candidate.GroupMember.User.Avatar);
                FullName = candidate.GroupMember.User.FullName;
                Votes = DeclinationService.OfNumber(candidate.Electorate.Count, "голос", "голоса", "голосов");
                PetitionId = candidate.Petition == null ? (Guid?)null : candidate.Petition.Id;

                if (gm != null)
                    IsChecked = candidate.Electorate.Count(x => x.OwnerId == gm.Id) > 0;
            }
        }
Exemplo n.º 10
0
        private void FixupGroupMember(GroupMember previousValue)
        {
            if (previousValue != null && previousValue.ExpertVotes.Contains(this))
            {
                previousValue.ExpertVotes.Remove(this);
            }

            if (GroupMember != null)
            {
                if (!GroupMember.ExpertVotes.Contains(this))
                {
                    GroupMember.ExpertVotes.Add(this);
                }
                if (GroupMemberId != GroupMember.Id)
                {
                    GroupMemberId = GroupMember.Id;
                }
            }
        }
Exemplo n.º 11
0
        private void FixupGroupMember(GroupMember previousValue)
        {
            if (previousValue != null && ReferenceEquals(previousValue.Expert, this))
            {
                previousValue.Expert = null;
            }

            if (GroupMember != null)
            {
                GroupMember.Expert = this;
            }
        }
Exemplo n.º 12
0
        public static bool UpdateTagByUser(Guid tagid, string title, string description, GroupMember groupMember)
        {
            var tag = DataService.PerThread.TagSet.SingleOrDefault(x => x.Id == tagid);

            if (tag == null)
                throw new BusinessLogicException("Указанная тема не найдена");

            if (groupMember.State != (byte)GroupMemberState.Moderator)
                throw new BusinessLogicException("У вас недастаточно прав для редактирования темы");

            var result = UpdateTag(tag, title, description);

            DataService.PerThread.SaveChanges();

            return result;
        }