Example #1
0
        public void SendToGroup(Group group, MessageStruct messageInfo, GroupMessageRecipientType recipientType)
        {
            var recipientIdList = new List <Guid>();

            if (recipientType.HasFlag(GroupMessageRecipientType.Members))
            {
                recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where(
                                             x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.Approved).Select(uig => uig.UserId)
                                         .ToList());
            }

            if (recipientType.HasFlag(GroupMessageRecipientType.Moderators))
            {
                recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where(
                                             x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.Moderator).Select(uig => uig.UserId)
                                         .ToList());
            }

            if (recipientType.HasFlag(GroupMessageRecipientType.NotApprovedUsers))
            {
                recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where(
                                             x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.NotApproved).Select(uig => uig.UserId)
                                         .ToList());
            }

            recipientIdList = recipientIdList.Distinct().ToList();

            if (recipientIdList.Count > 0)
            {
                foreach (var userId in recipientIdList)
                {
                    var message = new MessageStruct
                    {
                        AuthorId    = messageInfo.AuthorId,
                        RecipientId = userId,
                        Text        = messageInfo.Text,
                        Type        = messageInfo.Type,
                        Date        = messageInfo.Date
                    };

                    Send(message);
                }

                DataService.PerThread.SaveChanges();
            }

            UserContextService.GroupMembersAbandon(group.Id);
        }
Example #2
0
        public Group UpdateGroup(EditGroupStruct newGroupData, bool saveChanges = true)
        {
            //var parentGroup = DataService.PerThread.GroupSet.Where(g => g.Id == groupData.ParentGroupId).SingleOrDefault();

            var parentGroup = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == ConstHelper.RootGroupId); //TODO: пока нет вложенности, будет так

            if (parentGroup == null)
            {
                throw new BusinessLogicException("В качестве родительской указана не существующая группа");
            }

            if (ExistAnotherGroupWithLabel(newGroupData.Label, newGroupData.GroupId))
            {
                throw new BusinessLogicException("Существует другая группа с указанным label (ЧПУ)");
            }

            var group = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == newGroupData.GroupId);

            if (group == null)
            {
                throw new BusinessLogicException("Такой группы не существует");
            }

            if (newGroupData.ElectionFrequency > 12)
            {
                throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в 12 месяцев");
            }
            if (newGroupData.ElectionFrequency < 1)
            {
                throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в месяц");
            }

            if (newGroupData.ModeratorsCount < 3)
            {
                throw new BusinessLogicException("В группе должно быть не менее 3х модераторов");
            }

            group.Name    = newGroupData.Name;
            group.Label   = newGroupData.Label;
            group.Summary = newGroupData.Summary;

            group.Categories.Clear();

            foreach (var cid in newGroupData.Categories)
            {
                var category = DataService.PerThread.GroupCategorySet.SingleOrDefault(x => x.Id == cid);
                if (category != null)
                {
                    group.Categories.Add(category);
                }
            }

            //IList<Tag> tagsToDelete = new List<Tag>();
            //IList<ExpertVote> evToDelete = new List<ExpertVote>();

            //foreach (var tag in group.Tags)
            //    if (!newTagsList.Contains(tag))
            //    {
            //        tagsToDelete.Add(tag);
            //        foreach (var gm in group.GroupMembers)
            //            if (gm.Expert != null)
            //                gm.Expert.Tags.Remove(tag);
            //        foreach (var ev in DataService.PerThread.ExpertVoteSet.Where(x => x.GroupMember.GroupId == group.Id && x.TagId == tag.Id))
            //            evToDelete.Add(ev);
            //    }
            //foreach (var ev in evToDelete)
            //    DataService.PerThread.ExpertVoteSet.DeleteObject(ev);
            //foreach (var tag in tagsToDelete)
            //    group.Tags.Remove(tag);

            //foreach (var tag in newTagsList)
            //    if (!group.Tags.Contains(tag))
            //        group.Tags.Add(tag);

            group.ModeratorsCount   = newGroupData.ModeratorsCount;
            group.ElectionFrequency = newGroupData.ElectionFrequency;
            group.ParentGroup       = parentGroup;
            group.PollQuorum        = newGroupData.PollQuorum;
            group.ElectionQuorum    = newGroupData.ElectionQuorum;

            if (saveChanges)
            {
                DataService.PerThread.SaveChanges();
            }

            CachService.DropViewModelByModel(group.Id);
            UserContextService.GroupMembersAbandon(group.Id);

            return(group);
        }