public static void Create(Context context, SiteSettings ss, long id, bool force = false)
        {
            if (force)
            {
                var itemModel = new ItemModel(
                    context: context,
                    referenceId: id);
                switch (itemModel.ReferenceType)
                {
                case "Sites":
                    var siteModel = new SiteModel(context: context, siteId: id);
                    CreateFullText(
                        context: context,
                        id: id,
                        fullText: siteModel.FullText(
                            context: context,
                            ss: ss,
                            backgroundTask: true));
                    break;

                case "Issues":
                    var issueModel = new IssueModel(
                        context: context,
                        ss: ss,
                        issueId: id);
                    ss.Links?
                    .Where(o => ss.GetColumn(
                               context: context,
                               columnName: o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 context: context,
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        issueModel.PropertyValue(
                            context: context, name: link.ColumnName)
                    }));
                    CreateFullText(
                        context: context,
                        id: id,
                        fullText: issueModel.FullText(
                            context: context,
                            ss: ss,
                            backgroundTask: true));
                    break;

                case "Results":
                    var resultModel = new ResultModel(
                        context: context,
                        ss: ss,
                        resultId: id);
                    ss.Links?
                    .Where(o => ss.GetColumn(
                               context: context,
                               columnName: o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 context: context,
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        resultModel.PropertyValue(
                            context: context, name: link.ColumnName)
                    }));
                    CreateFullText(
                        context: context,
                        id: id,
                        fullText: resultModel.FullText(
                            context: context,
                            ss: ss,
                            backgroundTask: true));
                    break;

                case "Wikis":
                    var wikiModel = new WikiModel(
                        context: context,
                        ss: ss,
                        wikiId: id);
                    CreateFullText(
                        context: context,
                        id: id,
                        fullText: wikiModel.FullText(
                            context: context,
                            ss: ss,
                            backgroundTask: true));
                    break;
                }
            }
        }
        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());
                    }
        }
        public static void Initialize(Context context)
        {
            if (!context.HasPrivilege)
            {
                return;
            }
            var sqlExists = "exists (select * from {0} where {1}={2})";

            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.PhysicalDeleteItems(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Items_Deleted]",
                                                     "[Items_Deleted].[ReferenceId]",
                                                     "[Items].[ReferenceId]"))));
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.PhysicalDeleteSites(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Sites_Deleted]",
                                                     "[Sites_Deleted].[SiteId]",
                                                     "[Sites].[SiteId]"))));
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.DeleteSites(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Items_Deleted]",
                                                     "[Items_Deleted].[ReferenceId]",
                                                     "[Sites].[SiteId]"))));
            new SiteCollection(
                context: context,
                where : Rds.SitesWhere().Add(raw: "not " + sqlExists.Params(
                                                 "[Items]",
                                                 "[Items].[ReferenceId]",
                                                 "[Sites].[SiteId]")),
                tableType: Sqls.TableTypes.Normal)
            .ForEach(siteModel =>
            {
                if (siteModel.SiteSettings != null)
                {
                    var fullText = siteModel.FullText(
                        context: context.CreateContext(tenantId: siteModel.TenantId),
                        ss: siteModel.SiteSettings);
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: siteModel.TenantId),
                        connectionString: Parameters.Rds.OwnerConnectionString,
                        statements: new SqlStatement[]
                    {
                        Rds.IdentityInsertItems(on: true),
                        Rds.InsertItems(
                            param: Rds.ItemsParam()
                            .ReferenceId(siteModel.SiteId)
                            .ReferenceType("Sites")
                            .SiteId(siteModel.SiteId)
                            .Title(siteModel.Title.Value)
                            .FullText(fullText, _using: fullText != null)
                            .SearchIndexCreatedTime(DateTime.Now)),
                        Rds.IdentityInsertItems(on: false)
                    });
                }
            });
            new SiteCollection(
                context: context,
                where : Rds.SitesWhere().Add(raw: "not " + sqlExists.Params(
                                                 "[Items_Deleted]",
                                                 "[Items_Deleted].[ReferenceId]",
                                                 "[Sites].[SiteId]")),
                tableType: Sqls.TableTypes.Deleted)
            .ForEach(siteModel =>
            {
                if (siteModel.SiteSettings != null)
                {
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: siteModel.TenantId),
                        statements: new SqlStatement[]
                    {
                        Rds.InsertItems(
                            tableType: Sqls.TableTypes.Deleted,
                            param: Rds.ItemsParam()
                            .ReferenceId(siteModel.SiteId)
                            .Ver(siteModel.Ver)
                            .ReferenceType("Sites")
                            .SiteId(siteModel.SiteId)
                            .Title(siteModel.Title.Value))
                    });
                }
            });
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.PhysicalDeleteIssues(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Issues_Deleted]",
                                                     "[Issues_Deleted].[IssueId]",
                                                     "[Issues].[IssueId]"))));
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.DeleteIssues(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Items_Deleted]",
                                                     "[Items_Deleted].[ReferenceId]",
                                                     "[Issues].[IssueId]"))));
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectIssues(
                    tableType: Sqls.TableTypes.Normal,
                    column: Rds.IssuesColumn()
                    .SiteId()
                    .IssueId()
                    .Ver()
                    .Sites_TenantId(),
                    join: Rds.IssuesJoinDefault()
                    .Add(
                        tableName: "Items",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items].[ReferenceId]=[Issues].[IssueId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Issues].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .IssuesSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("IssueId"));
                var issueModel = new IssueModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                 .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Normal,
                    where : Rds.IssuesWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .IssueId(dataRow.Long("IssueId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    issueModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    var fullText = issueModel.FullText(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        ss: ss);
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        connectionString: Parameters.Rds.OwnerConnectionString,
                        statements: new SqlStatement[]
                    {
                        Rds.IdentityInsertItems(on: true),
                        Rds.InsertItems(
                            param: Rds.ItemsParam()
                            .ReferenceId(issueModel.IssueId)
                            .ReferenceType("Issues")
                            .SiteId(issueModel.SiteId)
                            .Title(issueModel.Title.DisplayValue)
                            .FullText(fullText, _using: fullText != null)
                            .SearchIndexCreatedTime(DateTime.Now)),
                        Rds.IdentityInsertItems(on: false)
                    });
                }
            });
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectIssues(
                    tableType: Sqls.TableTypes.Deleted,
                    column: Rds.IssuesColumn()
                    .SiteId()
                    .IssueId()
                    .Ver(),
                    join: Rds.IssuesJoinDefault()
                    .Add(
                        tableName: "Items_Deleted",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items_Deleted].[ReferenceId]=[Issues].[IssueId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Issues].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items_Deleted",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .IssuesSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("IssueId"));
                var issueModel = new IssueModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                 .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Deleted,
                    where : Rds.IssuesWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .IssueId(dataRow.Long("IssueId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    issueModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        statements: new SqlStatement[]
                    {
                        Rds.InsertItems(
                            tableType: Sqls.TableTypes.Deleted,
                            param: Rds.ItemsParam()
                            .ReferenceId(issueModel.IssueId)
                            .Ver(issueModel.Ver)
                            .ReferenceType("Issues")
                            .SiteId(issueModel.SiteId)
                            .Title(issueModel.Title.DisplayValue))
                    });
                }
            });
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.PhysicalDeleteResults(
                    where: Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                    "[Results_Deleted]",
                                                    "[Results_Deleted].[ResultId]",
                                                    "[Results].[ResultId]"))));
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.DeleteResults(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Items_Deleted]",
                                                     "[Items_Deleted].[ReferenceId]",
                                                     "[Results].[ResultId]"))));
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectResults(
                    tableType: Sqls.TableTypes.Normal,
                    column: Rds.ResultsColumn()
                    .SiteId()
                    .ResultId()
                    .Ver()
                    .Sites_TenantId(),
                    join: Rds.ResultsJoinDefault()
                    .Add(
                        tableName: "Items",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items].[ReferenceId]=[Results].[ResultId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Results].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .ResultsSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("ResultId"));
                var resultModel = new ResultModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                  .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Normal,
                    where : Rds.ResultsWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .ResultId(dataRow.Long("ResultId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    resultModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    var fullText = resultModel.FullText(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        ss: ss);
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        connectionString: Parameters.Rds.OwnerConnectionString,
                        statements: new SqlStatement[]
                    {
                        Rds.IdentityInsertItems(on: true),
                        Rds.InsertItems(
                            param: Rds.ItemsParam()
                            .ReferenceId(resultModel.ResultId)
                            .ReferenceType("Results")
                            .SiteId(resultModel.SiteId)
                            .Title(resultModel.Title.DisplayValue)
                            .FullText(fullText, _using: fullText != null)
                            .SearchIndexCreatedTime(DateTime.Now)),
                        Rds.IdentityInsertItems(on: false)
                    });
                }
            });
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectResults(
                    tableType: Sqls.TableTypes.Deleted,
                    column: Rds.ResultsColumn()
                    .SiteId()
                    .ResultId()
                    .Ver(),
                    join: Rds.ResultsJoinDefault()
                    .Add(
                        tableName: "Items_Deleted",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items_Deleted].[ReferenceId]=[Results].[ResultId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Results].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items_Deleted",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .ResultsSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("ResultId"));
                var resultModel = new ResultModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                  .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Deleted,
                    where : Rds.ResultsWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .ResultId(dataRow.Long("ResultId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    resultModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        statements: new SqlStatement[]
                    {
                        Rds.InsertItems(
                            tableType: Sqls.TableTypes.Deleted,
                            param: Rds.ItemsParam()
                            .ReferenceId(resultModel.ResultId)
                            .Ver(resultModel.Ver)
                            .ReferenceType("Results")
                            .SiteId(resultModel.SiteId)
                            .Title(resultModel.Title.DisplayValue))
                    });
                }
            });
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.PhysicalDeleteWikis(
                    where: Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                    "[Wikis_Deleted]",
                                                    "[Wikis_Deleted].[WikiId]",
                                                    "[Wikis].[WikiId]"))));
            Rds.ExecuteNonQuery(
                context: context,
                statements: Rds.DeleteWikis(
                    where : Rds.ItemsWhere().Add(raw: sqlExists.Params(
                                                     "[Items_Deleted]",
                                                     "[Items_Deleted].[ReferenceId]",
                                                     "[Wikis].[WikiId]"))));
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectWikis(
                    tableType: Sqls.TableTypes.Normal,
                    column: Rds.WikisColumn()
                    .SiteId()
                    .WikiId()
                    .Ver()
                    .Sites_TenantId(),
                    join: Rds.WikisJoinDefault()
                    .Add(
                        tableName: "Items",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items].[ReferenceId]=[Wikis].[WikiId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Wikis].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .WikisSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("WikiId"));
                var wikiModel = new WikiModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Normal,
                    where : Rds.WikisWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .WikiId(dataRow.Long("WikiId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    wikiModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    var fullText = wikiModel.FullText(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        ss: ss);
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        connectionString: Parameters.Rds.OwnerConnectionString,
                        statements: new SqlStatement[]
                    {
                        Rds.IdentityInsertItems(on: true),
                        Rds.InsertItems(
                            param: Rds.ItemsParam()
                            .ReferenceId(wikiModel.WikiId)
                            .ReferenceType("Wikis")
                            .SiteId(wikiModel.SiteId)
                            .Title(wikiModel.Title.DisplayValue)
                            .FullText(fullText, _using: fullText != null)
                            .SearchIndexCreatedTime(DateTime.Now)),
                        Rds.IdentityInsertItems(on: false)
                    });
                }
            });
            Rds.ExecuteTable(
                context: context,
                statements: Rds.SelectWikis(
                    tableType: Sqls.TableTypes.Deleted,
                    column: Rds.WikisColumn()
                    .SiteId()
                    .WikiId()
                    .Ver(),
                    join: Rds.WikisJoinDefault()
                    .Add(
                        tableName: "Items_Deleted",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Items_Deleted].[ReferenceId]=[Wikis].[WikiId]")
                    .Add(
                        tableName: "Sites",
                        joinType: SqlJoin.JoinTypes.LeftOuter,
                        joinExpression: "[Sites].[SiteId]=[Wikis].[SiteId]"),
                    where : Rds.ItemsWhere()
                    .ReferenceId(
                        tableName: "Items_Deleted",
                        _operator: " is null")))
            .AsEnumerable()
            .ForEach(dataRow =>
            {
                var siteId = dataRow.Long("SiteId");
                var ss     = new SiteModel().Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    where : Rds.SitesWhere().SiteId(siteId))?
                             .WikisSiteSettings(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    referenceId: dataRow.Long("WikiId"));
                var wikiModel = new WikiModel(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss)
                                .Get(
                    context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                    ss: ss,
                    tableType: Sqls.TableTypes.Deleted,
                    where : Rds.WikisWhere()
                    .SiteId(dataRow.Long("SiteId"))
                    .WikiId(dataRow.Long("WikiId"))
                    .Ver(dataRow.Int("Ver")));
                if (ss != null &&
                    wikiModel.AccessStatus == Databases.AccessStatuses.Selected)
                {
                    Rds.ExecuteNonQuery(
                        context: context.CreateContext(tenantId: dataRow.Int("TenantId")),
                        statements: new SqlStatement[]
                    {
                        Rds.InsertItems(
                            tableType: Sqls.TableTypes.Deleted,
                            param: Rds.ItemsParam()
                            .ReferenceId(wikiModel.WikiId)
                            .Ver(wikiModel.Ver)
                            .ReferenceType("Wikis")
                            .SiteId(wikiModel.SiteId)
                            .Title(wikiModel.Title.DisplayValue))
                    });
                }
            });
        }
        public static void Create(IContext context, SiteSettings ss, long id, bool force = false)
        {
            if (Parameters.Search.Provider.IsNullOrEmpty() && Parameters.Search.CreateIndexes)
            {
                var itemModel = new ItemModel(
                    context: context,
                    referenceId: id);
                switch (itemModel.ReferenceType)
                {
                case "Sites":
                    var siteModel = new SiteModel(context: context, siteId: id);
                    Task.Run(() => CreateIndexes(
                                 context: context,
                                 ss: ss,
                                 hash: siteModel.SearchIndexHash(context: context, ss: ss),
                                 id: id));
                    break;

                case "Issues":
                    var issueModel = new IssueModel(context: context, ss: ss, issueId: id);
                    Task.Run(() => CreateIndexes(
                                 context: context,
                                 ss: ss,
                                 hash: issueModel.SearchIndexHash(context: context, ss: ss),
                                 id: id));
                    break;

                case "Results":
                    var resultModel = new ResultModel(context: context, ss: ss, resultId: id);
                    Task.Run(() => CreateIndexes(
                                 context: context,
                                 ss: ss,
                                 hash: resultModel.SearchIndexHash(context: context, ss: ss),
                                 id: id));
                    break;

                case "Wikis":
                    var wikiModel = new WikiModel(context: context, ss: ss, wikiId: id);
                    Task.Run(() => CreateIndexes(
                                 context: context,
                                 ss: ss,
                                 hash: wikiModel.SearchIndexHash(context: context, ss: ss),
                                 id: id));
                    break;
                }
            }
            else if (force)
            {
                var itemModel = new ItemModel(
                    context: context,
                    referenceId: id);
                switch (itemModel.ReferenceType)
                {
                case "Sites":
                    var siteModel = new SiteModel(context: context, siteId: id);
                    switch (Parameters.Search.Provider)
                    {
                    case "FullText":
                        CreateFullText(
                            context: context,
                            id: id,
                            fullText: siteModel.FullText(
                                context: context,
                                ss: ss,
                                backgroundTask: true));
                        break;

                    default:
                        CreateIndexes(
                            context: context,
                            ss: ss,
                            hash: siteModel.SearchIndexHash(context: context, ss: ss),
                            id: id);
                        break;
                    }
                    break;

                case "Issues":
                    var issueModel = new IssueModel(
                        context: context,
                        ss: ss,
                        issueId: id);
                    ss.Links?
                    .Where(o => ss.GetColumn(
                               context: context,
                               columnName: o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 context: context,
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        issueModel.PropertyValue(
                            context: context, name: link.ColumnName)
                    }));
                    switch (Parameters.Search.Provider)
                    {
                    case "FullText":
                        CreateFullText(
                            context: context,
                            id: id,
                            fullText: issueModel.FullText(
                                context: context,
                                ss: ss,
                                backgroundTask: true));
                        break;

                    default:
                        CreateIndexes(
                            context: context,
                            ss: ss,
                            hash: issueModel.SearchIndexHash(
                                context: context,
                                ss: ss),
                            id: id);
                        break;
                    }
                    break;

                case "Results":
                    var resultModel = new ResultModel(
                        context: context,
                        ss: ss,
                        resultId: id);
                    ss.Links?
                    .Where(o => ss.GetColumn(
                               context: context,
                               columnName: o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 context: context,
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        resultModel.PropertyValue(
                            context: context, name: link.ColumnName)
                    }));
                    switch (Parameters.Search.Provider)
                    {
                    case "FullText":
                        CreateFullText(
                            context: context,
                            id: id,
                            fullText: resultModel.FullText(
                                context: context,
                                ss: ss,
                                backgroundTask: true));
                        break;

                    default:
                        CreateIndexes(
                            context: context,
                            ss: ss,
                            hash: resultModel.SearchIndexHash(
                                context: context,
                                ss: ss),
                            id: id);
                        break;
                    }
                    break;

                case "Wikis":
                    var wikiModel = new WikiModel(
                        context: context,
                        ss: ss,
                        wikiId: id);
                    switch (Parameters.Search.Provider)
                    {
                    case "FullText":
                        CreateFullText(
                            context: context,
                            id: id,
                            fullText: wikiModel.FullText(
                                context: context,
                                ss: ss,
                                backgroundTask: true));
                        break;

                    default:
                        CreateIndexes(
                            context: context,
                            ss: ss,
                            hash: wikiModel.SearchIndexHash(
                                context: context,
                                ss: ss),
                            id: id);
                        break;
                    }
                    break;
                }
            }
        }
Exemple #5
0
 public static void Initialize()
 {
     if (ItemsIsEmpty())
     {
         new SiteCollection().ForEach(siteModel =>
         {
             if (siteModel.SiteSettings != null)
             {
                 Rds.ExecuteNonQuery(
                     connectionString: Parameters.Rds.OwnerConnectionString,
                     statements: new SqlStatement[]
                 {
                     Rds.IdentityInsertItems(on: true),
                     Rds.InsertItems(
                         param: Rds.ItemsParam()
                         .ReferenceId(siteModel.SiteId)
                         .ReferenceType("Sites")
                         .SiteId(siteModel.SiteId)
                         .Title(siteModel.Title.Value)),
                     Rds.IdentityInsertItems(on: false)
                 });
             }
         });
         new SiteCollection(tableType: Sqls.TableTypes.Deleted).ForEach(siteModel =>
         {
             if (siteModel.SiteSettings != null)
             {
                 Rds.ExecuteNonQuery(
                     statements: new SqlStatement[]
                 {
                     Rds.InsertItems(
                         tableType: Sqls.TableTypes.Deleted,
                         param: Rds.ItemsParam()
                         .ReferenceId(siteModel.SiteId)
                         .Ver(siteModel.Ver)
                         .ReferenceType("Sites")
                         .SiteId(siteModel.SiteId)
                         .Title(siteModel.Title.Value))
                 });
             }
         });
         new SiteCollection(tableType: Sqls.TableTypes.History).ForEach(siteModel =>
         {
             if (siteModel.SiteSettings != null)
             {
                 Rds.ExecuteNonQuery(
                     statements: new SqlStatement[]
                 {
                     Rds.InsertItems(
                         tableType: Sqls.TableTypes.History,
                         param: Rds.ItemsParam()
                         .ReferenceId(siteModel.SiteId)
                         .Ver(siteModel.Ver)
                         .ReferenceType("Sites")
                         .SiteId(siteModel.SiteId)
                         .Title(siteModel.Title.Value))
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectIssues(
                              tableType: Sqls.TableTypes.Normal,
                              column: Rds.IssuesColumn()
                              .SiteId()
                              .IssueId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .IssuesSiteSettings(dataRow["IssueId"].ToLong());
             var issueModel = new IssueModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Normal,
                 where : Rds.IssuesWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .IssueId(dataRow["IssueId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 issueModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     connectionString: Parameters.Rds.OwnerConnectionString,
                     statements: new SqlStatement[]
                 {
                     Rds.IdentityInsertItems(on: true),
                     Rds.InsertItems(
                         param: Rds.ItemsParam()
                         .ReferenceId(issueModel.IssueId)
                         .ReferenceType("Issues")
                         .SiteId(issueModel.SiteId)
                         .Title(IssueUtilities.TitleDisplayValue(
                                    ss, issueModel))),
                     Rds.IdentityInsertItems(on: false)
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectIssues(
                              tableType: Sqls.TableTypes.Deleted,
                              column: Rds.IssuesColumn()
                              .SiteId()
                              .IssueId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .IssuesSiteSettings(dataRow["IssueId"].ToLong());
             var issueModel = new IssueModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Deleted,
                 where : Rds.IssuesWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .IssueId(dataRow["IssueId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 issueModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     statements: new SqlStatement[]
                 {
                     Rds.InsertItems(
                         tableType: Sqls.TableTypes.Deleted,
                         param: Rds.ItemsParam()
                         .ReferenceId(issueModel.IssueId)
                         .Ver(issueModel.Ver)
                         .ReferenceType("Issues")
                         .SiteId(issueModel.SiteId)
                         .Title(IssueUtilities.TitleDisplayValue(
                                    ss, issueModel)))
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectResults(
                              tableType: Sqls.TableTypes.Normal,
                              column: Rds.ResultsColumn()
                              .SiteId()
                              .ResultId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .ResultsSiteSettings(dataRow["ResultId"].ToLong());
             var resultModel = new ResultModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Normal,
                 where : Rds.ResultsWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .ResultId(dataRow["ResultId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 resultModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     connectionString: Parameters.Rds.OwnerConnectionString,
                     statements: new SqlStatement[]
                 {
                     Rds.IdentityInsertItems(on: true),
                     Rds.InsertItems(
                         param: Rds.ItemsParam()
                         .ReferenceId(resultModel.ResultId)
                         .ReferenceType("Results")
                         .SiteId(resultModel.SiteId)
                         .Title(ResultUtilities.TitleDisplayValue(
                                    ss, resultModel))),
                     Rds.IdentityInsertItems(on: false)
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectResults(
                              tableType: Sqls.TableTypes.Deleted,
                              column: Rds.ResultsColumn()
                              .SiteId()
                              .ResultId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .ResultsSiteSettings(dataRow["ResultId"].ToLong());
             var resultModel = new ResultModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Deleted,
                 where : Rds.ResultsWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .ResultId(dataRow["ResultId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 resultModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     statements: new SqlStatement[]
                 {
                     Rds.InsertItems(
                         tableType: Sqls.TableTypes.Deleted,
                         param: Rds.ItemsParam()
                         .ReferenceId(resultModel.ResultId)
                         .Ver(resultModel.Ver)
                         .ReferenceType("Results")
                         .SiteId(resultModel.SiteId)
                         .Title(ResultUtilities.TitleDisplayValue(
                                    ss, resultModel)))
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectWikis(
                              tableType: Sqls.TableTypes.Normal,
                              column: Rds.WikisColumn()
                              .SiteId()
                              .WikiId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .WikisSiteSettings(dataRow["WikiId"].ToLong());
             var wikiModel = new WikiModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Normal,
                 where : Rds.WikisWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .WikiId(dataRow["WikiId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 wikiModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     connectionString: Parameters.Rds.OwnerConnectionString,
                     statements: new SqlStatement[]
                 {
                     Rds.IdentityInsertItems(on: true),
                     Rds.InsertItems(
                         param: Rds.ItemsParam()
                         .ReferenceId(wikiModel.WikiId)
                         .ReferenceType("Wikis")
                         .SiteId(wikiModel.SiteId)
                         .Title(WikiUtilities.TitleDisplayValue(
                                    ss, wikiModel))),
                     Rds.IdentityInsertItems(on: false)
                 });
             }
         });
         Rds.ExecuteTable(statements: Rds.SelectWikis(
                              tableType: Sqls.TableTypes.Deleted,
                              column: Rds.WikisColumn()
                              .SiteId()
                              .WikiId()
                              .Ver())).AsEnumerable().ForEach(dataRow =>
         {
             var siteId = dataRow["SiteId"].ToLong();
             var ss     = new SiteModel().Get(where :
                                              Rds.SitesWhere().SiteId(siteId))?
                          .WikisSiteSettings(dataRow["WikiId"].ToLong());
             var wikiModel = new WikiModel(ss).Get(
                 ss: ss,
                 tableType: Sqls.TableTypes.Deleted,
                 where : Rds.WikisWhere()
                 .SiteId(dataRow["SiteId"].ToLong())
                 .WikiId(dataRow["WikiId"].ToLong())
                 .Ver(dataRow["Ver"].ToInt()));
             if (ss != null &&
                 wikiModel.AccessStatus == Databases.AccessStatuses.Selected)
             {
                 Rds.ExecuteNonQuery(
                     statements: new SqlStatement[]
                 {
                     Rds.InsertItems(
                         tableType: Sqls.TableTypes.Deleted,
                         param: Rds.ItemsParam()
                         .ReferenceId(wikiModel.WikiId)
                         .Ver(wikiModel.Ver)
                         .ReferenceType("Wikis")
                         .SiteId(wikiModel.SiteId)
                         .Title(WikiUtilities.TitleDisplayValue(
                                    ss, wikiModel)))
                 });
             }
         });
     }
 }
Exemple #6
0
 public IActionResult Wiki(WikiModel model)
 {
     return(View("WikiDisplay", model));
 }
Exemple #7
0
        public IActionResult Wiki()
        {
            var model = new WikiModel();

            return(View("Wiki", model));
        }
        private void Construct(
            Context context,
            List <SelectedSite> siteList,
            bool includeRecordPermission,
            bool includeColumnPermission)
        {
            var recordIdList = new List <long>();

            if ((siteList != null) && (siteList.Count > 0))
            {
                foreach (SelectedSite site in siteList)
                {
                    var siteModel = new SiteModel(
                        context: context,
                        siteId: site.SiteId);
                    var packageSiteModel = new PackageSiteModel(new SiteModel(
                                                                    context: context,
                                                                    siteId: site.SiteId));
                    if (packageSiteModel.ReferenceType == "Wikis")
                    {
                        var wikiId = Rds.ExecuteScalar_long(
                            context: context,
                            statements: Rds.SelectWikis(
                                top: 1,
                                column: Rds.WikisColumn().WikiId(),
                                where : Rds.WikisWhere().SiteId(siteModel.SiteId)));
                        var wikiModel = new WikiModel(
                            context: context,
                            ss: siteModel.SiteSettings,
                            wikiId: wikiId);
                        packageSiteModel.WikiId = wikiId;
                        packageSiteModel.Body   = wikiModel.Body;
                    }
                    if (includeColumnPermission == false)
                    {
                        packageSiteModel.SiteSettings.CreateColumnAccessControls?.Clear();
                        packageSiteModel.SiteSettings.ReadColumnAccessControls?.Clear();
                        packageSiteModel.SiteSettings.UpdateColumnAccessControls?.Clear();
                    }
                    Sites.Add(packageSiteModel);
                    string order = null;
                    if (siteModel.ReferenceType == "Sites")
                    {
                        var orderModel = new OrderModel(
                            context: context,
                            ss: siteModel.SiteSettings,
                            referenceId: siteModel.SiteId,
                            referenceType: "Sites");
                        order = orderModel.SavedData;
                    }
                    HeaderInfo.Add(
                        siteId: site.SiteId,
                        referenceType: packageSiteModel.ReferenceType,
                        includeData: site.IncludeData,
                        order: order,
                        siteTitle: packageSiteModel.Title);
                    recordIdList.Clear();
                    if (site.IncludeData == true)
                    {
                        switch (packageSiteModel.ReferenceType)
                        {
                        case "Issues":
                        case "Results":
                            var ss = siteModel.SiteSettings;
                            ss.SetPermissions(
                                context: context,
                                referenceId: ss.SiteId);
                            var export = new Export(ss.DefaultExportColumns(context: context));
                            export.Header = true;
                            export.Type   = Export.Types.Json;
                            export.Columns.ForEach(o => o.SiteId = ss.SiteId);
                            var gridData = Utilities.GetGridData(
                                context: context,
                                ss: ss,
                                export: export);
                            if (gridData.TotalCount > 0)
                            {
                                Data.Add(gridData.GetJsonExport(
                                             context: context,
                                             ss: ss,
                                             export: export));
                                foreach (DataRow dr in gridData.DataRows)
                                {
                                    recordIdList.Add(dr[0].ToLong());
                                }
                            }
                            break;
                        }
                    }
                    if (includeRecordPermission == true)
                    {
                        var packagePermissionModel = new PackagePermissionModel(
                            context: context,
                            siteModel: siteModel,
                            recordIdList: recordIdList);
                        Permissions.Add(packagePermissionModel);
                    }
                }
            }
        }
Exemple #9
0
        public static void Create(SiteSettings ss, long id, bool backgroundTask = false)
        {
            if (Parameters.Service.CreateIndexes)
            {
                var itemModel = new ItemModel(id);
                switch (itemModel.ReferenceType)
                {
                case "Sites":
                    var siteModel = new SiteModel(id);
                    Task.Run(() => CreateIndexes(
                                 ss,
                                 siteModel.SearchIndexHash(ss),
                                 id));
                    break;

                case "Issues":
                    var issueModel = new IssueModel(ss, id);
                    Task.Run(() => CreateIndexes(
                                 ss,
                                 issueModel.SearchIndexHash(ss),
                                 id));
                    break;

                case "Results":
                    var resultModel = new ResultModel(ss, id);
                    Task.Run(() => CreateIndexes(
                                 ss,
                                 resultModel.SearchIndexHash(ss),
                                 id));
                    break;

                case "Wikis":
                    var wikiModel = new WikiModel(ss, id);
                    Task.Run(() => CreateIndexes(
                                 ss,
                                 wikiModel.SearchIndexHash(ss),
                                 id));
                    break;
                }
            }
            else if (backgroundTask)
            {
                var itemModel = new ItemModel(id);
                switch (itemModel.ReferenceType)
                {
                case "Sites":
                    var siteModel = new SiteModel(id);
                    CreateIndexes(
                        ss,
                        siteModel.SearchIndexHash(ss),
                        id);
                    break;

                case "Issues":
                    var issueModel = new IssueModel(ss, id);
                    ss.Links?
                    .Where(o => ss.GetColumn(o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        issueModel.PropertyValue(link.ColumnName)
                    }));
                    CreateIndexes(
                        ss,
                        issueModel.SearchIndexHash(ss),
                        id);
                    break;

                case "Results":
                    var resultModel = new ResultModel(ss, id);
                    ss.Links?
                    .Where(o => ss.GetColumn(o.ColumnName).UseSearch == true)
                    .ForEach(link =>
                             ss.SetChoiceHash(
                                 columnName: link.ColumnName,
                                 selectedValues: new List <string>
                    {
                        resultModel.PropertyValue(link.ColumnName)
                    }));
                    CreateIndexes(
                        ss,
                        resultModel.SearchIndexHash(ss),
                        id);
                    break;

                case "Wikis":
                    var wikiModel = new WikiModel(ss, id);
                    CreateIndexes(
                        ss,
                        wikiModel.SearchIndexHash(ss),
                        id);
                    break;
                }
            }
        }