Exemple #1
0
        internal static UserGroup SaveProperties(UserGroup group)
        {
            var entities = QPContext.EFContext;
            var dal      = MapperFacade.UserGroupMapper.GetDalObject(group);

            dal.LastModifiedBy = QPContext.CurrentUserId;
            using (new QPConnectionScope())
            {
                dal.Created  = Common.GetSqlDate(QPConnectionScope.Current.DbConnection);
                dal.Modified = dal.Created;
            }

            entities.Entry(dal).State = EntityState.Added;

            if (group.ParentGroup != null)
            {
                var parentDal = MapperFacade.UserGroupMapper.GetDalObject(group.ParentGroup);
                entities.UserGroupSet.Attach(parentDal);
                var bind = new GroupToGroupBindDAL {
                    ParentGroup = parentDal, ChildGroup = dal
                };
                dal.ParentGroupToGroupBinds.Add(bind);
            }

            foreach (var u in MapperFacade.UserMapper.GetDalList(group.Users.ToList()))
            {
                entities.UserSet.Attach(u);
                var bind = new UserUserGroupBindDAL {
                    UserGroup = dal, User = u
                };
                dal.UserGroupBinds.Add(bind);
            }

            entities.SaveChanges();
            return(MapperFacade.UserGroupMapper.GetBizObject(dal));
        }
Exemple #2
0
        internal static UserGroup UpdateProperties(UserGroup group)
        {
            var entities = QPContext.EFContext;
            var dal      = MapperFacade.UserGroupMapper.GetDalObject(group);

            dal.LastModifiedBy = QPContext.CurrentUserId;

            using (new QPConnectionScope())
            {
                dal.Modified = Common.GetSqlDate(QPConnectionScope.Current.DbConnection);
            }

            entities.Entry(dal).State = EntityState.Modified;

            var dalDb = entities
                        .UserGroupSet
                        .Include(x => x.ParentGroupToGroupBinds).ThenInclude(y => y.ParentGroup)
                        .Include(x => x.UserGroupBinds).ThenInclude(y => y.User)
                        .Single(g => g.Id == dal.Id);

            foreach (var pg in dalDb.ParentGroupToGroupBinds.ToArray())
            {
                if (group.ParentGroup == null || pg.ParentGroup.Id != group.ParentGroup.Id)
                {
                    dalDb.ParentGroupToGroupBinds.Remove(pg);
                }
            }

            if (group.ParentGroup != null)
            {
                if (dalDb.ParentGroups.All(g => g.Id != group.ParentGroup.Id))
                {
                    var dalParent = entities.UserGroupSet.Single(g => g.Id == group.ParentGroup.Id);
                    entities.UserGroupSet.Attach(dalParent);
                    var bind = new GroupToGroupBindDAL {
                        ParentGroup = dalParent, ChildGroup = dal
                    };
                    dal.ParentGroupToGroupBinds.Add(bind);
                }
            }

            var inmemoryUserIDs = new HashSet <decimal>(group.Users.Select(u => Converter.ToDecimal(u.Id)));
            var indbUserIDs     = new HashSet <decimal>(dalDb.Users.Select(u => u.Id));

            foreach (var u in dalDb.UserGroupBinds.ToArray())
            {
                if (!inmemoryUserIDs.Contains(u.User.Id))
                {
                    dalDb.UserGroupBinds.Remove(u);
                }
            }
            foreach (var u in MapperFacade.UserMapper.GetDalList(group.Users.ToList()))
            {
                if (!indbUserIDs.Contains(u.Id))
                {
                    var bind = new UserUserGroupBindDAL {
                        UserId = u.Id, UserGroupId = group.Id
                    };
                    dal.UserGroupBinds.Add(bind);
                }
            }

            entities.SaveChanges();
            return(MapperFacade.UserGroupMapper.GetBizObject(dal));
        }
Exemple #3
0
        internal static User SaveProperties(User user)
        {
            var entities = QPContext.EFContext;
            var dal      = MapperFacade.UserMapper.GetDalObject(user);

            dal.LastModifiedBy = QPContext.CurrentUserId;
            using (new QPConnectionScope())
            {
                dal.Created          = Common.GetSqlDate(QPConnectionScope.Current.DbConnection);
                dal.Modified         = dal.Created;
                dal.PasswordModified = dal.Created;
            }

            var everyoneGroups = UserGroupRepository.GetEveryoneGroups();

            foreach (var everyoneGroup in everyoneGroups)
            {
                if (dal.UserGroupBinds.All(x => x.UserGroupId != everyoneGroup.Id))
                {
                    var newBind = new UserUserGroupBindDAL();
                    newBind.UserGroupId = everyoneGroup.Id;
                    dal.UserGroupBinds.Add(newBind);
                    entities.Add(newBind);
                }
            }

            entities.Entry(dal).State = EntityState.Added;


            if (QPContext.DatabaseType == DatabaseType.SqlServer)
            {
                ChangeInsertBindTriggerState(false);
            }

            entities.SaveChanges();


            // Save Groups
            foreach (var s in MapperFacade.UserGroupMapper.GetDalList(user.Groups.ToList()))
            {
                entities.UserGroupSet.Attach(s);
                var userGroupBind = new UserUserGroupBindDAL {
                    User = dal, UserGroup = s
                };
                dal.UserGroupBinds.Add(userGroupBind);
            }

            // User Default Filters
            foreach (var f in MapUserDefaultFilter(user, dal))
            {
                entities.Entry(f).State = EntityState.Added;
            }

            entities.SaveChanges();
            if (!string.IsNullOrEmpty(user.Password))
            {
                UpdatePassword(user.Id, user.Password);
            }

            if (QPContext.DatabaseType == DatabaseType.SqlServer)
            {
                ChangeInsertBindTriggerState(true);
            }

            var updated = MapperFacade.UserMapper.GetBizObject(dal);

            return(updated);
        }
Exemple #4
0
        private static User UpdateUser(User user, bool profileOnly = false)
        {
            var entities = QPContext.EFContext;
            var dal      = MapperFacade.UserMapper.GetDalObject(user);

            dal.LastModifiedBy = QPContext.CurrentUserId;
            using (new QPConnectionScope())
            {
                dal.Modified = Common.GetSqlDate(QPConnectionScope.Current.DbConnection);
            }

            entities.Entry(dal).State = EntityState.Modified;

            if (!profileOnly)
            {
                // Save Groups
                var dalDb = entities.UserSet
                            .Include(x => x.UserGroupBinds).ThenInclude(y => y.UserGroup)
                            .Single(u => u.Id == dal.Id);
                var inmemoryGroupIDs = new HashSet <decimal>(user.Groups.Select(g => Converter.ToDecimal(g.Id)));
                var indbGroupIDs     = new HashSet <decimal>(dalDb.Groups.Select(g => g.Id));
                foreach (var g in dalDb.UserGroupBinds.ToArray())
                {
                    if (!inmemoryGroupIDs.Contains(g.UserGroupId) && !g.UserGroup.IsReadOnly && !(g.UserGroup.BuiltIn && user.BuiltIn))
                    {
                        dalDb.UserGroupBinds.Remove(g);
                    }
                }
                foreach (var g in MapperFacade.UserGroupMapper.GetDalList(user.Groups.ToList()))
                {
                    if (!indbGroupIDs.Contains(g.Id))
                    {
                        entities.UserGroupSet.Attach(g);
                        var bind = new UserUserGroupBindDAL {
                            User = dal, UserGroup = g
                        };
                        dal.UserGroupBinds.Add(bind);
                    }
                }

                //-------------------
            }

            // User Default Filters
            foreach (var f in entities.UserDefaultFilterSet.Where(r => r.UserId == dal.Id))
            {
                entities.Entry(f).State = EntityState.Deleted;
            }
            foreach (var f in MapUserDefaultFilter(user, dal))
            {
                entities.Entry(f).State = EntityState.Added;
            }

            //--------------------------

            entities.SaveChanges();

            if (!string.IsNullOrEmpty(user.Password))
            {
                UpdatePassword(user.Id, user.Password);
            }

            var updated = MapperFacade.UserMapper.GetBizObject(dal);

            return(updated);
        }