Exemplo n.º 1
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);
        }