Beispiel #1
0
 public void UpdateContentCache(Content content)
 {
     if (content.GroupId.HasValue)
     {
         CachService.DropViewModelByModel(content.GroupId.Value);
     }
     if (content.AuthorId.HasValue)
     {
         CachService.DropViewModelByModel(content.AuthorId.Value);
     }
 }
Beispiel #2
0
        private void UpdateGroupState(Guid groupId)
        {
            var group = DataService.PerThread.GroupSet.SingleOrDefault(x => x.Id == groupId);

            if (group == null)
            {
                throw new BusinessLogicException("Указан неверный идентификатор группы");
            }

            if (group.Type != (byte)GroupType.Root)
            {
                if (group.State == (byte)GroupState.Blank && group.ModeratorsCount < ConstHelper.MinModeratorsInGroup && group.CreationDate < DateTime.Now.AddDays(-7))
                {
                    //TODO: Удалять группу
                }

                if (group.State != (byte)GroupState.Archive)
                {
                    //Если группа фаундинг и кол-во модеров упало ниже минимального, то группа станет архивной
                    if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) < ConstHelper.MinModeratorsInGroup && group.State == (byte)GroupState.Founding)
                    {
                        group.State = (byte)GroupState.Archive;
                    }

                    //Если группа бланк и кол-во модеров стало больше равно установленному в настройках, то группа станет фаундинг
                    if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) >= group.ModeratorsCount && group.State == (byte)GroupState.Blank)
                    {
                        if (!group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration))
                        {
                            foreach (var member in group.GroupMembers)
                            {
                                if (member.State == (byte)GroupMemberState.NotApproved)
                                {
                                    ChangeMemberStatus(member.UserId, member.GroupId, GroupMemberState.Approved);
                                }
                            }
                        }
                        group.State = (byte)GroupState.Founding;
                    }

                    //TODO: условия превращения в Formed группу и обратно (полный состав модераторов - определенное количество пользователей)
                }
                else
                {
                    if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) >= group.ModeratorsCount)
                    {
                        group.State = (byte)GroupState.Founding;
                    }
                }

                DataService.PerThread.SaveChanges();
                CachService.DropViewModelByModel(group.Id);
            }
        }
Beispiel #3
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);
        }