Example #1
0
        public static string ImportSitePackage(Context context, SiteSettings ss)
        {
            var includeData             = context.Forms.Bool("IncludeData");
            var includeSitePermission   = context.Forms.Bool("IncludeSitePermission");
            var includeRecordPermission = context.Forms.Bool("IncludeRecordPermission");
            var includeColumnPermission = context.Forms.Bool("IncludeColumnPermission");

            if (ss.SiteId == 0)
            {
                ss.PermissionType = context.SiteTopPermission();
            }
            if (!Parameters.SitePackage.Import ||
                !context.CanManageSite(ss: ss))
            {
                return(Messages.ResponseInvalidRequest(context: context).ToJson());
            }
            if (includeData && context.ContractSettings.Import == false)
            {
                return(Messages.ResponseInvalidRequest(context: context).ToJson());
            }
            var serializer = new JsonSerializer();

            using (var ms = new System.IO.MemoryStream(
                       buffer: context.PostedFiles.FirstOrDefault().Byte(),
                       writable: false))
                using (var sr = new System.IO.StreamReader(ms, Encoding.UTF8))
                    using (var reader = new JsonTextReader(sr))
                    {
                        var sitePackage = serializer.Deserialize <SitePackage>(reader);
                        if (context.ContractSettings.SitesLimit(
                                context: context,
                                number: sitePackage.Sites.Count()))
                        {
                            return(Messages.ResponseSitesLimit(context: context).ToJson());
                        }
                        if (includeData)
                        {
                            if (Parameters.General.ImportMax > 0 &&
                                Parameters.General.ImportMax < sitePackage.Data
                                .SelectMany(o => o.Body)
                                .Count())
                            {
                                return(Messages.ResponseImportMax(
                                           context: context,
                                           data: Parameters.General.ImportMax.ToString())
                                       .ToJson());
                            }
                            if (sitePackage.Data.Any(o => o.Header.Any(p =>
                                                                       context.ContractSettings.ItemsLimit(
                                                                           context: context,
                                                                           siteId: p.SiteId,
                                                                           number: o.Body.Count()))))
                            {
                                return(Messages.ResponseItemsLimit(
                                           context: context,
                                           data: Parameters.General.ImportMax.ToString())
                                       .ToJson());
                            }
                        }
                        sitePackage.HeaderInfo.SavedBaseSiteId        = context.SiteId;
                        sitePackage.HeaderInfo.SavedInheritPermission = ss.InheritPermission;
                        foreach (var conv in sitePackage.HeaderInfo.Convertors)
                        {
                            var response = Rds.ExecuteScalar_response(
                                context: context,
                                transactional: true,
                                selectIdentity: true,
                                statements: new SqlStatement[]
                            {
                                Rds.InsertItems(
                                    selectIdentity: true,
                                    param: Rds.ItemsParam()
                                    .ReferenceType("Sites")
                                    .Title(conv.SiteTitle)),
                                Rds.UpdateItems(
                                    where : Rds.ItemsWhere().ReferenceId(raw: Def.Sql.Identity),
                                    param: Rds.ItemsParam().SiteId(raw: Def.Sql.Identity)),
                            });
                            conv.SavedSiteId = response.Id;
                        }
                        foreach (var conv in sitePackage.HeaderInfo.Convertors)
                        {
                            var packageSiteModel = sitePackage.Sites
                                                   .Where(e => e.SiteId == conv.SiteId)
                                                   .FirstOrDefault();
                            packageSiteModel.SetSavedIds(
                                context: context,
                                ss: ss,
                                sitePackage: sitePackage,
                                savedSiteId: conv.SavedSiteId.ToLong(),
                                includeSitePermission: includeSitePermission &&
                                sitePackage.HeaderInfo.IncludeSitePermission);
                            packageSiteModel.SiteSettings = packageSiteModel.GetSavedSiteSettings(
                                context: context,
                                header: sitePackage.HeaderInfo,
                                includeColumnPermission: includeColumnPermission,
                                permissionIdList: sitePackage.PermissionIdList);
                            Rds.ExecuteScalar_response(
                                context: context,
                                transactional: true,
                                statements: new SqlStatement[]
                            {
                                Rds.InsertSites(param: Rds.SitesParam()
                                                .SiteId(packageSiteModel.SavedSiteId)
                                                .TenantId(packageSiteModel.SavedTenantId)
                                                .Title(packageSiteModel.Title)
                                                .Body(packageSiteModel.Body)
                                                .GridGuide(packageSiteModel.GridGuide)
                                                .EditorGuide(packageSiteModel.EditorGuide)
                                                .ReferenceType(packageSiteModel.ReferenceType.MaxLength(32))
                                                .ParentId(packageSiteModel.SavedParentId)
                                                .InheritPermission(packageSiteModel.SavedInheritPermission)
                                                .SiteSettings(packageSiteModel.SiteSettings.ToJson())
                                                .Publish(packageSiteModel.Publish)
                                                .Comments(packageSiteModel.Comments.ToJson())),
                                Rds.PhysicalDeleteLinks(
                                    where : Rds.LinksWhere().SourceId(packageSiteModel.SavedSiteId)),
                                LinkUtilities.Insert(link: packageSiteModel.SiteSettings.Links?
                                                     .Select(o => o.SiteId)
                                                     .Distinct()
                                                     .ToDictionary(o => o, o => packageSiteModel.SavedSiteId)
                                                     ?? new Dictionary <long, long>()),
                                Rds.InsertPermissions(
                                    param: Rds.PermissionsParam()
                                    .ReferenceId(packageSiteModel.SavedSiteId)
                                    .DeptId(0)
                                    .UserId(context.UserId)
                                    .PermissionType(Permissions.Manager()),
                                    _using: packageSiteModel.SavedInheritPermission == packageSiteModel.SavedSiteId),
                            });
                            var siteModel = new SiteModel(
                                context: context,
                                siteId: packageSiteModel.SavedSiteId);
                            var fullText = siteModel.FullText(
                                context: context,
                                ss: siteModel.SiteSettings);
                            Rds.ExecuteNonQuery(
                                context: context,
                                transactional: true,
                                statements: Rds.UpdateItems(
                                    where : Rds.ItemsWhere()
                                    .ReferenceId(packageSiteModel.SavedSiteId),
                                    param: Rds.ItemsParam()
                                    .FullText(fullText, _using: fullText != null)
                                    .SearchIndexCreatedTime(DateTime.Now, _using: fullText != null)));
                        }
                        var idHash = sitePackage.GetIdHashFromConverters();
                        foreach (long savedSiteId in sitePackage.HeaderInfo.Convertors.Select(e => e.SavedSiteId))
                        {
                            var siteModel = new SiteModel(
                                context: context,
                                siteId: savedSiteId);
                            switch (siteModel.ReferenceType)
                            {
                            case "Wikis":
                                var wikiModel = new WikiModel(
                                    context: context,
                                    ss: siteModel.SiteSettings)
                                {
                                    SiteId   = siteModel.SiteId,
                                    Title    = siteModel.Title,
                                    Body     = siteModel.Body,
                                    Comments = siteModel.Comments
                                };
                                wikiModel.Create(
                                    context: context,
                                    ss: siteModel.SiteSettings);
                                var wikiId = Rds.ExecuteScalar_long(
                                    context: context,
                                    statements: Rds.SelectWikis(
                                        top: 1,
                                        column: Rds.WikisColumn().WikiId(),
                                        where : Rds.WikisWhere().SiteId(siteModel.SiteId)));
                                idHash.Add(savedSiteId, wikiId);
                                break;

                            default:
                                Search.Indexes.Create(
                                    context: context,
                                    ss: siteModel.SiteSettings,
                                    id: siteModel.SiteId);
                                break;
                            }
                        }
                        int dataCount = 0;
                        if (includeData)
                        {
                            if (sitePackage.Data.Any())
                            {
                                ImportItems(
                                    context: context,
                                    sitePackage: sitePackage,
                                    idHash: idHash);
                                sitePackage.ConvertDataId(
                                    context: context,
                                    idHash: idHash);
                                dataCount = ImportData(
                                    context: context,
                                    sitePackage: sitePackage,
                                    idHash: idHash);
                            }
                        }
                        if (sitePackage.HeaderInfo.Convertors.Any())
                        {
                            foreach (var conv in sitePackage.HeaderInfo.Convertors)
                            {
                                if (conv.ReferenceType == "Sites")
                                {
                                    if ((!conv.Order.IsNullOrEmpty() && conv.Order.Equals("[]") == false))
                                    {
                                        var newOrders = new List <long>();
                                        var orders    = conv.Order.Deserialize <List <long> >()?.ToList()
                                                        ?? new List <long>();
                                        orders.ForEach(e => newOrders.Add(idHash.Get(e)));
                                        if (newOrders.Any())
                                        {
                                            new OrderModel()
                                            {
                                                ReferenceId   = conv.SavedSiteId.ToLong(),
                                                ReferenceType = "Sites",
                                                OwnerId       = 0,
                                                Data          = newOrders
                                            }.UpdateOrCreate(context: context);
                                        }
                                    }
                                }
                            }
                            var response = Rds.ExecuteScalar_response(
                                context: context,
                                transactional: true,
                                statements: StatusUtilities.UpdateStatus(
                                    tenantId: context.TenantId,
                                    type: StatusUtilities.Types.SitesUpdated));
                        }
                        if (sitePackage.Permissions.Any())
                        {
                            foreach (var conv in sitePackage.HeaderInfo.Convertors)
                            {
                                var packageSiteModel = sitePackage.Sites
                                                       .Where(e => e.SiteId == conv.SiteId)
                                                       .FirstOrDefault();
                                var packagePermissionModel = sitePackage.Permissions
                                                             .Where(e => e.SiteId == conv.SiteId)
                                                             .FirstOrDefault();
                                foreach (var permissionShortModel in packagePermissionModel.Permissions)
                                {
                                    if (includeSitePermission == false)
                                    {
                                        if (permissionShortModel.ReferenceId == packagePermissionModel.SiteId)
                                        {
                                            continue;
                                        }
                                    }
                                    if ((includeRecordPermission == false) || (dataCount == 0))
                                    {
                                        if (permissionShortModel.ReferenceId != packagePermissionModel.SiteId)
                                        {
                                            continue;
                                        }
                                    }
                                    var idConverter = new IdConverter(
                                        context: context,
                                        siteId: packageSiteModel.SavedSiteId,
                                        permissionShortModel: permissionShortModel,
                                        permissionIdList: sitePackage.PermissionIdList,
                                        convertSiteId: idHash[permissionShortModel.ReferenceId]);
                                    if (idConverter.Convert == true)
                                    {
                                        Rds.ExecuteNonQuery(
                                            context: context,
                                            transactional: true,
                                            statements: Rds.InsertPermissions(
                                                param: Rds.PermissionsParam()
                                                .ReferenceId(idHash[permissionShortModel.ReferenceId])
                                                .DeptId(idConverter.ConvertDeptId)
                                                .GroupId(idConverter.ConvertGroupId)
                                                .UserId(idConverter.ConvertUserId)
                                                .PermissionType(permissionShortModel.PermissionType)));
                                    }
                                }
                            }
                        }
                        SessionUtilities.Set(
                            context: context,
                            message: Messages.SitePackageImported(
                                context: context,
                                data: new string[]
                        {
                            sitePackage.HeaderInfo.Convertors.Count().ToString(),
                            dataCount.ToString()
                        }));
                        return(new ResponseCollection()
                               .Href(url: Locations.ItemIndex(
                                         context: context,
                                         id: ss.SiteId))
                               .ToJson());
                    }
        }
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            string deptCode,
            string deptName,
            string userCode,
            string name,
            string mailAddress,
            List <KeyValuePair <LdapExtendedAttribute, string> > attributes,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var statements   = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var exists = Rds.ExecuteScalar_int(
                context: context,
                statements: Rds.SelectUsers(
                    column: Rds.UsersColumn().UsersCount(),
                    where : Rds.UsersWhere().LoginId(
                        value: context.Sqls.EscapeValue(loginId),
                        _operator: context.Sqls.LikeWithEscape))) == 1;
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId, _using: !exists)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            attributes?.ForEach(attributeAndName =>
                                param.Add(
                                    $"\"Users\".\"{attributeAndName.Key.ColumnName}\"",
                                    attributeAndName.Key.ColumnName,
                                    attributeAndName.Value));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(
                                   value: context.Sqls.EscapeValue(loginId),
                                   _operator: context.Sqls.LikeWithEscape),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Repository.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
Example #3
0
        public static void UpdateOrInsert(
            Context context,
            int tenantId,
            string loginId,
            string name,
            string mailAddress,
            DateTime synchronizedTime,
            SamlAttributes attributes)
        {
            var deptCode     = attributes[nameof(UserModel.DeptCode)];
            var deptName     = attributes[nameof(UserModel.Dept)];
            var deptSettings = !deptCode.IsNullOrEmpty() &&
                               !deptName.IsNullOrEmpty();
            var isEmptyDeptCode = deptCode == string.Empty;
            var user            = new UserModel().Get(
                context: context,
                ss: null,
                where: Rds.UsersWhere()
                .TenantId(tenantId)
                .LoginId(loginId)
                .Name(name)
                .TenantManager(
                    attributes.TenantManager,
                    _using: attributes[nameof(UserModel.TenantManager)] != null)
                .FirstName(
                    attributes[nameof(UserModel.FirstName)],
                    _using: attributes[nameof(UserModel.FirstName)] != null)
                .LastName(
                    attributes[nameof(UserModel.LastName)],
                    _using: attributes[nameof(UserModel.LastName)] != null)
                .FirstAndLastNameOrder(
                    attributes[nameof(UserModel.FirstAndLastNameOrder)],
                    _using: attributes[nameof(UserModel.FirstAndLastNameOrder)] != null)
                .UserCode(
                    attributes[nameof(UserModel.UserCode)],
                    _using: attributes[nameof(UserModel.UserCode)] != null)
                .Birthday(
                    attributes[nameof(UserModel.Birthday)],
                    _using: attributes[nameof(UserModel.Birthday)] != null)
                .Gender(
                    attributes[nameof(UserModel.Gender)],
                    _using: attributes[nameof(UserModel.Gender)] != null)
                .Language(
                    attributes[nameof(UserModel.Language)],
                    _using: attributes[nameof(UserModel.Language)] != null)
                .TimeZone(
                    attributes[nameof(UserModel.TimeZone)],
                    _using: attributes[nameof(UserModel.TimeZone)] != null)
                .DeptId(
                    sub: Rds.SelectDepts(
                        column: Rds.DeptsColumn().DeptId(),
                        where : Rds.DeptsWhere().DeptCode(deptCode)),
                    _using: deptSettings)
                .Body(
                    attributes[nameof(UserModel.Body)],
                    _using: attributes[nameof(UserModel.Body)] != null));

            if (!isEmptyDeptCode &&
                user.AccessStatus == Databases.AccessStatuses.Selected)
            {
                if (mailAddress.IsNullOrEmpty())
                {
                    return;
                }
                var addressCount = Rds.ExecuteScalar_long(
                    context: context,
                    statements: new[]
                {
                    Rds.SelectMailAddresses(
                        dataTableName: "Count",
                        column: Rds.MailAddressesColumn().MailAddressesCount(),
                        where : Rds.MailAddressesWhere()
                        .OwnerType("Users")
                        .OwnerId(sub: Rds.SelectUsers(
                                     column: Rds.UsersColumn().UserId(),
                                     where : Rds.UsersWhere().LoginId(loginId)))
                        .MailAddress(mailAddress))
                });
                if (addressCount > 0)
                {
                    return;
                }
            }
            var statements = new List <SqlStatement>();

            if (deptSettings)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(tenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var param = Rds.UsersParam()
                        .TenantId(tenantId)
                        .LoginId(loginId)
                        .Name(name)
                        .TenantManager(attributes.TenantManager,
                                       _using: attributes[nameof(UserModel.TenantManager)] != null)
                        .SynchronizedTime(synchronizedTime)
                        .FirstName(
                attributes[nameof(UserModel.FirstName)],
                _using: attributes[nameof(UserModel.FirstName)] != null)
                        .LastName(
                attributes[nameof(UserModel.LastName)],
                _using: attributes[nameof(UserModel.LastName)] != null)
                        .FirstAndLastNameOrder(
                attributes[nameof(UserModel.FirstAndLastNameOrder)],
                _using: attributes[nameof(UserModel.FirstAndLastNameOrder)] != null)
                        .UserCode(
                attributes[nameof(UserModel.UserCode)],
                _using: attributes[nameof(UserModel.UserCode)] != null)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptSettings)
                        .DeptId(0, _using: isEmptyDeptCode)
                        .Birthday(
                attributes[nameof(UserModel.Birthday)],
                _using: attributes[nameof(UserModel.Birthday)] != null)
                        .Gender(
                attributes[nameof(UserModel.Gender)],
                _using: attributes[nameof(UserModel.Gender)] != null)
                        .Language(
                attributes[nameof(UserModel.Language)],
                _using: attributes[nameof(UserModel.Language)] != null)
                        .TimeZone(
                attributes[nameof(UserModel.TimeZone)],
                _using: attributes[nameof(UserModel.TimeZone)] != null)
                        .Body(
                attributes[nameof(UserModel.Body)],
                _using: attributes[nameof(UserModel.Body)] != null);

            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().TenantId(tenantId).LoginId(loginId),
                               addUpdatorParam: true,
                               addUpdatedTimeParam: true));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: tenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: tenantId, type: StatusUtilities.Types.UsersUpdated));
            Rds.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
Example #4
0
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            SearchResult result,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptCode = result.Property(
                context: context,
                name: ldap.LdapDeptCode,
                pattern: ldap.LdapDeptCodePattern);
            var deptName = result.Property(
                context: context,
                name: ldap.LdapDeptName,
                pattern: ldap.LdapDeptNamePattern);
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var userCode     = result.Property(
                context: context,
                name: ldap.LdapUserCode,
                pattern: ldap.LdapUserCodePattern);
            var name = Name(
                context: context,
                loginId: loginId,
                result: result,
                ldap: ldap);
            var mailAddress = result.Property(
                context: context,
                name: ldap.LdapMailAddress,
                pattern: ldap.LdapMailAddressPattern);
            var statements = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            ldap.LdapExtendedAttributes?.ForEach(attribute =>
                                                 param.Add(
                                                     $"[Users].[{attribute.ColumnName}]",
                                                     attribute.ColumnName,
                                                     result.Property(
                                                         context: context,
                                                         name: attribute.Name,
                                                         pattern: attribute.Pattern)));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(loginId),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Rds.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }