示例#1
0
        private static void DeleteSiteMenu(TenantCache tenantCache, List <long> siteIds)
        {
            var siteMenu = new SiteMenu();

            tenantCache.SiteMenu?.ForEach(data =>
                                          siteMenu.Add(data.Key, data.Value));
            siteMenu.RemoveAll((key, value) => siteIds.Contains(key));
            tenantCache.SiteMenu = siteMenu;
        }
示例#2
0
        private static void DeleteSites(TenantCache tenantCache, List <long> siteIds)
        {
            var sites = new Dictionary <long, DataRow>();

            tenantCache.Sites?.ForEach(data =>
                                       sites.Add(data.Key, data.Value));
            sites.RemoveAll((key, value) => siteIds.Contains(key));
            tenantCache.Sites = sites;
        }
示例#3
0
        private static void SetSites(TenantCache tenantCache, EnumerableRowCollection <DataRow> dataRows)
        {
            var sites = new Dictionary <long, DataRow>();

            tenantCache.Sites?.ForEach(data =>
                                       sites.Add(data.Key, data.Value));
            foreach (var dataRow in dataRows)
            {
                sites.AddOrUpdate(dataRow.Long("SiteId"), dataRow);
            }
            tenantCache.Sites = sites;
        }
示例#4
0
        private static void DeleteLinks(TenantCache tenantCache, List <long> siteIds)
        {
            var destinationKeyValues = new Dictionary <long, List <long> >();
            var sourceKeyValues      = new Dictionary <long, List <long> >();

            if (tenantCache.Links != null)
            {
                tenantCache.Links?.DestinationKeyValues.ForEach(data =>
                                                                destinationKeyValues.Add(data.Key, data.Value));
                tenantCache.Links?.SourceKeyValues.ForEach(data =>
                                                           sourceKeyValues.Add(data.Key, data.Value));
                destinationKeyValues.RemoveAll((key, value) => siteIds.Contains(key));
                sourceKeyValues.RemoveAll((key, value) => siteIds.Contains(key));
                tenantCache.Links.DestinationKeyValues = destinationKeyValues;
                tenantCache.Links.SourceKeyValues      = sourceKeyValues;
            }
        }
示例#5
0
        private static void SetSiteMenu(Context context, TenantCache tenantCache, EnumerableRowCollection <DataRow> dataRows)
        {
            var siteMenu = new SiteMenu();

            tenantCache.SiteMenu?.ForEach(data =>
                                          siteMenu.Add(data.Key, data.Value));
            foreach (var dataRow in dataRows)
            {
                siteMenu.AddOrUpdate(
                    dataRow.Long("SiteId"),
                    new SiteMenuElement(
                        context: context,
                        siteId: dataRow.Long("SiteId"),
                        referenceType: dataRow.String("ReferenceType"),
                        parentId: dataRow.Long("ParentId"),
                        title: dataRow.String("Title")));
            }
            tenantCache.SiteMenu = siteMenu;
        }
示例#6
0
        private static void SetSites(Context context, TenantCache tenantCache)
        {
            var sitesUpdatedTime = tenantCache.SitesUpdatedTime.ToDateTime();
            var dataRows         = Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectSites(
                    column: Rds.SitesColumn()
                    .SiteId()
                    .Title()
                    .Body()
                    .SiteName()
                    .SiteGroupName()
                    .GridGuide()
                    .EditorGuide()
                    .ReferenceType()
                    .ParentId()
                    .InheritPermission()
                    .SiteSettings()
                    .UpdatedTime(),
                    where : Rds.SitesWhere()
                    .TenantId(context.TenantId)
                    .UpdatedTime(sitesUpdatedTime, _operator: ">")))
                                   .AsEnumerable();

            SetSites(
                tenantCache: tenantCache,
                dataRows: dataRows);
            SetSiteMenu(
                context: context,
                tenantCache: tenantCache,
                dataRows: dataRows);
            SetLinks(
                context: context,
                tenantCache: tenantCache,
                sitesUpdatedTime: sitesUpdatedTime);
            if (dataRows.Any())
            {
                tenantCache.SitesUpdatedTime = dataRows
                                               .Max(o => o.Field <DateTime>("UpdatedTime"))
                                               .ToString("yyyy/M/d H:m:s.fff");
            }
        }
示例#7
0
        private static void SetLinks(
            Context context,
            TenantCache tenantCache,
            DateTime sitesUpdatedTime)
        {
            var dataRows = Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectLinks(
                    column: Rds.LinksColumn()
                    .DestinationId()
                    .SourceId(),
                    join: new SqlJoinCollection(
                        new SqlJoin(
                            tableBracket: "\"Sites\"",
                            joinType: SqlJoin.JoinTypes.Inner,
                            joinExpression: "\"DestinationSites\".\"SiteId\"=\"Links\".\"DestinationId\"",
                            _as: "DestinationSites"),
                        new SqlJoin(
                            tableBracket: "\"Sites\"",
                            joinType: SqlJoin.JoinTypes.Inner,
                            joinExpression: "\"SourceSites\".\"SiteId\"=\"Links\".\"SourceId\"",
                            _as: "SourceSites")),
                    where : Rds.SitesWhere()
                    .TenantId(context.TenantId, tableName: "DestinationSites")
                    .TenantId(context.TenantId, tableName: "SourceSites")
                    .ReferenceType("Wikis", tableName: "DestinationSites", _operator: "<>")
                    .ReferenceType("Wikis", tableName: "SourceSites", _operator: "<>")
                    .Or(or: Rds.SitesWhere()
                        .UpdatedTime(sitesUpdatedTime, tableName: "DestinationSites", _operator: ">")
                        .UpdatedTime(sitesUpdatedTime, tableName: "SourceSites", _operator: ">"))))
                           .AsEnumerable();

            if (dataRows.Any())
            {
                var destinationKeyValues = new Dictionary <long, List <long> >();
                var sourceKeyValues      = new Dictionary <long, List <long> >();
                tenantCache.Links?.DestinationKeyValues.ForEach(data =>
                                                                destinationKeyValues.Add(data.Key, data.Value));
                tenantCache.Links?.SourceKeyValues.ForEach(data =>
                                                           sourceKeyValues.Add(data.Key, data.Value));
                foreach (var data in dataRows.GroupBy(dataRow => dataRow.Long("DestinationId")))
                {
                    destinationKeyValues.AddOrUpdate(
                        data.Key,
                        (destinationKeyValues.Get(data.Key) ?? new List <long>())
                        .Concat(data.Select(dataRow => dataRow.Long("SourceId")))
                        .Distinct()
                        .ToList());
                }
                foreach (var data in dataRows.GroupBy(dataRow => dataRow.Long("SourceId")))
                {
                    sourceKeyValues.AddOrUpdate(
                        data.Key,
                        (sourceKeyValues.Get(data.Key) ?? new List <long>())
                        .Concat(data.Select(dataRow => dataRow.Long("DestinationId")))
                        .Distinct()
                        .ToList());
                }
                if (tenantCache.Links == null)
                {
                    tenantCache.Links = new LinkKeyValues();
                }
                tenantCache.Links.DestinationKeyValues = destinationKeyValues;
                tenantCache.Links.SourceKeyValues      = sourceKeyValues;
            }
        }