コード例 #1
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string DeleteSiteImage(SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(siteModel, siteModel.SiteId);
            var invalid = BinaryValidators.OnDeletingSiteImage(siteModel.SiteSettings);

            switch (invalid)
            {
            case Error.Types.None: break;

            default: return(invalid.MessageJson());
            }
            var error = new BinaryModel(siteModel.SiteId).DeleteSiteImage();

            if (error.Has())
            {
                return(error.MessageJson());
            }
            else
            {
                return(new ResponseCollection()
                       .Html(
                           "#SiteImageIconContainer",
                           new HtmlBuilder().SiteImageIcon(
                               ss: siteModel.SiteSettings,
                               siteId: siteModel.SiteId))
                       .Html(
                           "#SiteImageSettingsEditor",
                           new HtmlBuilder().SiteImageSettingsEditor(
                               ss: siteModel.SiteSettings))
                       .Message(Messages.FileDeleteCompleted())
                       .ToJson());
            }
        }
コード例 #2
0
 public static void UpdateTitles(long siteId, IEnumerable <long> idList)
 {
     idList
     .Chunk(100)
     .SelectMany(chunked =>
                 Rds.ExecuteTable(statements: Rds.SelectLinks(
                                      column: Rds.LinksColumn()
                                      .SourceId()
                                      .SiteId(),
                                      join: Rds.LinksJoinDefault(),
                                      where : Rds.LinksWhere().DestinationId_In(chunked)))
                 .AsEnumerable())
     .Select(dataRow => new
     {
         Id     = dataRow.Long("SourceId"),
         SiteId = dataRow.Long("SiteId")
     })
     .GroupBy(o => o.SiteId)
     .ForEach(links =>
     {
         var targetSiteId = links.First().SiteId;
         var siteModel    = new SiteModel(targetSiteId);
         var ss           = siteModel.AccessStatus == Databases.AccessStatuses.Selected
                 ? SiteSettingsUtilities.Get(siteModel, targetSiteId)
                 : null;
         var columns = ss?.Links?
                       .Where(o => o.SiteId == siteId)
                       .Select(o => o.ColumnName)
                       .ToList();
         if (ss?.TitleColumns?.Any(o => columns?.Contains(o) == true) == true)
         {
             UpdateTitles(ss, links.Select(o => o.Id));
         }
     });
 }
コード例 #3
0
        public SiteModel GetSite(
            bool siteOnly           = false,
            bool initSiteSettings   = false,
            bool setSiteIntegration = false)
        {
            SiteModel siteModel;

            if (ReferenceType == "Sites" && Forms.Exists("Ver"))
            {
                siteModel = new SiteModel();
                siteModel.Get(
                    where : Rds.SitesWhere()
                    .SiteId(ReferenceId)
                    .Ver(Forms.Int("Ver")),
                    tableType: Sqls.TableTypes.NormalAndHistory);
                siteModel.VerType = Forms.Bool("Latest")
                    ? Versions.VerTypes.Latest
                    : Versions.VerTypes.History;
            }
            else
            {
                siteModel = siteOnly
                    ? new SiteModel(ReferenceId)
                    : new SiteModel(ReferenceType == "Sites" ? ReferenceId : SiteId);
            }
            if (initSiteSettings)
            {
                siteModel.SiteSettings = SiteSettingsUtilities.Get(
                    siteModel, ReferenceId, setSiteIntegration: setSiteIntegration);
            }
            return(siteModel);
        }
コード例 #4
0
        public Error.Types Update(
            RdsUser rdsUser          = null,
            SqlParamCollection param = null,
            List <SqlStatement> additionalStatements = null,
            bool paramAll = false,
            bool get      = true)
        {
            SetBySession();
            var timestamp  = Timestamp.ToDateTime();
            var statements = new List <SqlStatement>();

            UpdateStatements(statements, timestamp, param, paramAll, additionalStatements);
            var count = Rds.ExecuteScalar_int(
                rdsUser: rdsUser,
                transactional: true,
                statements: statements.ToArray());

            if (count == 0)
            {
                return(Error.Types.UpdateConflicts);
            }
            if (get)
            {
                Get();
            }
            var siteModel = new ItemModel(ReferenceId).GetSite();
            var ss        = SiteSettingsUtilities.Get(siteModel, siteModel.SiteId);

            Libraries.Search.Indexes.Create(ss, ReferenceId, force: true);
            return(Error.Types.None);
        }
コード例 #5
0
        public string SelectSearchDropDown()
        {
            SetSite();
            var ss        = SiteSettingsUtilities.Get(Site, ReferenceId);
            var controlId = Forms.Data("DropDownSearchTarget");
            var column    = ss.Columns.FirstOrDefault(o =>
                                                      controlId.EndsWith(ss.ReferenceType + "_" + o.ColumnName));

            ss.SetChoiceHash(
                columnName: column?.ColumnName,
                searchIndexes: Forms.Data("DropDownSearchText").SearchIndexes());
            var selected = Forms.List("DropDownSearchResults");
            var multiple = Forms.Bool("DropDownSearchMultiple");

            if (multiple)
            {
                return(SelectSearchDropDownResponse(controlId, column, selected, multiple));
            }
            else if (selected.Count() != 1)
            {
                return(new ResponseCollection()
                       .Message(Messages.SelectOne())
                       .ToJson());
            }
            else
            {
                return(SelectSearchDropDownResponse(controlId, column, selected, multiple));
            }
        }
コード例 #6
0
ファイル: HtmlLinks.cs プロジェクト: narsw/Implem.Pleasanter
        public static HtmlBuilder LinkTable(
            this HtmlBuilder hb,
            Context context,
            long siteId,
            string direction,
            string dataTableName)
        {
            var ss = SiteSettingsUtilities.Get(
                context: context,
                siteId: siteId);
            var view = Views.GetBySession(
                context: context,
                ss: ss,
                dataTableName: dataTableName,
                setSession: true);

            return(hb.LinkTable(
                       context: context,
                       ss: ss,
                       view: view,
                       dataRows: DataRows(
                           context: context,
                           ss: ss,
                           view: view,
                           direction: direction,
                           id: context.Id),
                       direction: direction,
                       dataTableName: dataTableName));
        }
コード例 #7
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string RebuildSearchIndexes(Context context, SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(
                context: context,
                siteModel: siteModel,
                referenceId: siteModel.SiteId);
            var ss      = siteModel.SiteSettings.SiteSettingsOnUpdate(context: context);
            var invalid = SiteValidators.OnUpdating(
                context: context,
                ss: ss,
                siteModel: siteModel);

            switch (invalid.Type)
            {
            case Error.Types.None: break;

            default: return(invalid.MessageJson(context: context));
            }
            RebuildSearchIndexes(
                context: context,
                siteId: siteModel.SiteId);
            return(new ResponseCollection()
                   .Message(Messages.RebuildingCompleted(context: context))
                   .ToJson());
        }
コード例 #8
0
 public static void UpdateTitles(long siteId, IEnumerable <long> idList)
 {
     Rds.ExecuteTable(statements: Rds.SelectLinks(
                          column: Rds.LinksColumn()
                          .SourceId()
                          .SiteId(),
                          join: Rds.LinksJoinDefault(),
                          where : Rds.LinksWhere().DestinationId_In(idList)))
     .AsEnumerable()
     .Select(o => new
     {
         Id     = o["SourceId"].ToLong(),
         SiteId = o["SiteId"].ToLong()
     })
     .GroupBy(o => o.SiteId)
     .ForEach(sites =>
     {
         var siteModel = new SiteModel(sites.First().SiteId);
         var ss        = siteModel.AccessStatus == Databases.AccessStatuses.Selected
                     ? SiteSettingsUtilities.Get(siteModel, sites.First().Id)
                     : null;
         var columns = ss.Links?
                       .Where(o => o.SiteId == siteId)
                       .Select(o => o.ColumnName)
                       .ToList();
         if (ss.TitleColumns?.Any(o => columns?.Contains(o) == true) == true)
         {
             UpdateTitles(ss, sites.Select(o => o.Id));
         }
     });
 }
コード例 #9
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static (byte[] bytes, string contentType) SiteImageIcon(Context context, SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(
                context: context,
                siteModel: siteModel,
                referenceId: siteModel.SiteId);
            var invalid = BinaryValidators.OnGetting(
                context: context,
                ss: siteModel.SiteSettings);

            switch (invalid.Type)
            {
            case Error.Types.None: break;

            default: return(null, null);
            }
            var binaryModel = new BinaryModel(
                context: context,
                referenceId: siteModel.SiteId,
                binaryType: "SiteImage");

            return(
                binaryModel.SiteImage(
                    context: context,
                    sizeType: Libraries.Images.ImageData.SizeTypes.Icon,
                    column: Rds.BinariesColumn().Icon()),
                binaryModel.ContentType.IsNullOrEmpty()
                    ? "image/bmp"
                    : binaryModel.ContentType);
        }
コード例 #10
0
 /// <summary>
 /// Fixed:
 /// </summary>
 public static void CreateInBackground()
 {
     if (Parameters.BackgroundTask.Enabled)
     {
         var hash = new Dictionary <long, SiteModel>();
         Rds.ExecuteTable(statements: Rds.SelectItems(
                              column: Rds.ItemsColumn()
                              .ReferenceId()
                              .SiteId()
                              .Updator()
                              .UpdatedTime(),
                              where : Rds.ItemsWhere().Add(
                                  raw: "[SearchIndexCreatedTime] is null or [SearchIndexCreatedTime]<>[UpdatedTime]"),
                              top: Parameters.BackgroundTask.CreateSearchIndexLot))
         .AsEnumerable()
         .Select(o => new
         {
             ReferenceId = o["ReferenceId"].ToLong(),
             SiteId      = o["SiteId"].ToLong(),
             Updator     = o["Updator"].ToInt(),
             UpdatedTime = o.Field <DateTime>("UpdatedTime")
                           .ToString("yyyy/M/d H:m:s.fff")
         })
         .ForEach(data =>
         {
             var siteModel = hash.Get(data.SiteId) ??
                             new SiteModel().Get(where : Rds.SitesWhere().SiteId(data.SiteId));
             System.Web.HttpContext.Current.Session["TenantId"] =
                 siteModel.TenantId;
             System.Web.HttpContext.Current.Session["RdsUser"] =
                 Rds.ExecuteTable(statements: Rds.SelectUsers(
                                      column: Rds.UsersColumn().UserId().DeptId(),
                                      where : Rds.UsersWhere().UserId(data.Updator)))
                 .AsEnumerable()
                 .Select(o => new RdsUser()
             {
                 DeptId = o["DeptId"].ToInt(),
                 UserId = o["UserId"].ToInt()
             })
                 .FirstOrDefault();
             if (!SiteInfo.TenantCaches.ContainsKey(Sessions.TenantId()))
             {
                 SiteInfo.Reflesh();
             }
             if (!hash.ContainsKey(data.SiteId))
             {
                 siteModel.SiteSettings = SiteSettingsUtilities.Get(
                     siteModel, siteModel.SiteId);
                 hash.Add(data.SiteId, siteModel);
             }
             Libraries.Search.Indexes.Create(
                 siteModel.SiteSettings, data.ReferenceId, force: true);
             Rds.ExecuteNonQuery(statements: Rds.UpdateItems(
                                     where : Rds.ItemsWhere().ReferenceId(data.ReferenceId),
                                     param: Rds.ItemsParam().SearchIndexCreatedTime(data.UpdatedTime),
                                     addUpdatorParam: false,
                                     addUpdatedTimeParam: false));
         });
     }
 }
コード例 #11
0
 /// <summary>
 /// Fixed:
 /// </summary>
 private static void Remind(DataRow dataRow)
 {
     Sessions.Set(dataRow.Int("TenantId"), dataRow.Int("Updator"));
     SiteSettingsUtilities.Get(dataRow.Long("SiteId"))?
     .Remind(new List <int> {
         dataRow.Int("Id")
     });
     Sessions.Clear("TenantId");
     Sessions.Clear("RdsUser");
 }
コード例 #12
0
            public long Count(object siteId, string view = null)
            {
                var ss = SiteSettingsUtilities.Get(
                    context: Context,
                    siteId: siteId.ToLong());

                return(ServerScriptUtilities.Aggregate(
                           context: Context,
                           ss: ss,
                           view: view));
            }
コード例 #13
0
            private decimal CreateAggregate(object siteId, string columnName, string view, Sqls.Functions function)
            {
                var ss = SiteSettingsUtilities.Get(
                    context: Context,
                    siteId: siteId.ToLong());

                return(ServerScriptUtilities.Aggregate(
                           context: Context,
                           ss: ss,
                           view: view,
                           columnName: columnName,
                           function: function));
            }
コード例 #14
0
        public static string LinkSourceResponse(long siteId, long id)
        {
            var siteModel = new SiteModel(siteId);
            var ss        = SiteSettingsUtilities.Get(siteModel, id);

            switch (ss.ReferenceType)
            {
            case "Issues": return(IssueUtilities.EditorJson(ss, id));

            case "Results": return(ResultUtilities.EditorJson(ss, id));

            default: return(null);
            }
        }
コード例 #15
0
 /// <summary>
 /// Fixed:
 /// </summary>
 private static void Remind(Context context, DataRow dataRow)
 {
     context = context.CreateContext(
         tenantId: dataRow.Int("TenantId"),
         userId: dataRow.Int("Updator"),
         deptId: dataRow.Int("DeptId"));
     SiteSettingsUtilities.Get(
         context: context,
         siteId: dataRow.Long("SiteId"),
         setSiteIntegration: true)?
     .Remind(
         context: context,
         idList: dataRow.Int("Id").ToSingleList());
 }
コード例 #16
0
 /// <summary>
 /// Fixed:
 /// </summary>
 private static void Remind(Context context, DataRow dataRow)
 {
     context.TenantId = dataRow.Int("TenantId");
     context.UserId   = dataRow.Int("Updator");
     context.DeptId   = dataRow.Int("DeptId");
     SiteSettingsUtilities.Get(
         context: context,
         siteId: dataRow.Long("SiteId"),
         setSiteIntegration: true)?
     .Remind(
         context: context,
         idList: dataRow.Int("Id").ToSingleList());
     Sessions.Clear("TenantId");
     Sessions.Clear("RdsUser");
 }
コード例 #17
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static byte[] SiteImageIcon(SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(siteModel, siteModel.SiteId);
            var invalid = BinaryValidators.OnGetting(siteModel.SiteSettings);

            switch (invalid)
            {
            case Error.Types.None: break;

            default: return(null);
            }
            return(new BinaryModel(siteModel.SiteId).SiteImage(
                       Libraries.Images.ImageData.SizeTypes.Icon,
                       Rds.BinariesColumn().Icon()));
        }
コード例 #18
0
        public long SiteId(string title)
        {
            var siteId = GetSiteId(title);

            if (siteId == 0)
            {
                return(0);
            }
            var ss = SiteSettingsUtilities.Get(
                context: Context,
                siteId: siteId);

            siteId = Context.HasPermission(ss: ss)
                ? siteId
                : 0;
            return(siteId);
        }
コード例 #19
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string UpdateSiteImage(Context context, SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(
                context: context,
                siteModel: siteModel,
                referenceId: siteModel.SiteId);
            var bin     = context.PostedFiles.FirstOrDefault()?.Byte();
            var invalid = BinaryValidators.OnUploadingSiteImage(
                context: context,
                ss: siteModel.SiteSettings,
                bin: bin);

            switch (invalid)
            {
            case Error.Types.None: break;

            default: return(invalid.MessageJson(context: context));
            }
            var error = new BinaryModel(siteModel.SiteId).UpdateSiteImage(
                context: context,
                ss: siteModel.SiteSettings,
                bin: bin);

            if (error.Has())
            {
                return(error.MessageJson(context: context));
            }
            else
            {
                return(new ResponseCollection()
                       .Html(
                           "#TenantImageLogoContainer",
                           new HtmlBuilder().SiteImageIcon(
                               context: context,
                               ss: siteModel.SiteSettings,
                               siteId: siteModel.TenantId))
                       .Html(
                           "#TenantImageSettingsEditor",
                           new HtmlBuilder().SiteImageSettingsEditor(
                               context: context,
                               ss: siteModel.SiteSettings))
                       .Message(Messages.FileUpdateCompleted(context: context))
                       .ToJson());
            }
        }
コード例 #20
0
 private static long CanManageSiteId(ContextImplement context)
 {
     if (context.SiteId == 0)
     {
         return(0);
     }
     else
     {
         var ss = SiteSettingsUtilities.Get(
             context: context,
             siteId: context.SiteId);
         var siteId = context.CanManageSite(
             ss: ss,
             site: true)
                 ? context.SiteId
                 : 0;
         return(siteId);
     }
 }
コード例 #21
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string UpdateSiteImage(Context context, SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(
                context: context,
                siteModel: siteModel,
                referenceId: siteModel.SiteId);
            var file    = Forms.File(Libraries.Images.ImageData.Types.SiteImage.ToString());
            var invalid = BinaryValidators.OnUploadingSiteImage(
                context: context,
                ss: siteModel.SiteSettings,
                file: file);

            switch (invalid)
            {
            case Error.Types.None: break;

            default: return(invalid.MessageJson());
            }
            var error = new BinaryModel(siteModel.SiteId).UpdateSiteImage(
                context: context, file: file);

            if (error.Has())
            {
                return(error.MessageJson());
            }
            else
            {
                return(new ResponseCollection()
                       .Html(
                           "#SiteImageIconContainer",
                           new HtmlBuilder().SiteImageIcon(
                               context: context,
                               ss: siteModel.SiteSettings,
                               siteId: siteModel.SiteId))
                       .Html(
                           "#SiteImageSettingsEditor",
                           new HtmlBuilder().SiteImageSettingsEditor(
                               context: context,
                               ss: siteModel.SiteSettings))
                       .Message(Messages.FileUpdateCompleted())
                       .ToJson());
            }
        }
コード例 #22
0
        private static void Update(
            IContext context, SiteModel siteModel, long id, IEnumerable <int> selected = null)
        {
            var hasFormula = siteModel.SiteSettings.Formulas?.Any() ?? false;
            var ss         = SiteSettingsUtilities.Get(
                context: context, siteModel: siteModel, referenceId: id);

            switch (siteModel.ReferenceType)
            {
            case "Issues":
                UpdateIssues(
                    context: context,
                    ss: ss,
                    siteId: siteModel.SiteId,
                    id: id,
                    selected: selected,
                    hasFormula: hasFormula);
                break;

            case "Results":
                UpdateResults(
                    context: context,
                    ss: ss,
                    siteId: siteModel.SiteId,
                    id: id,
                    selected: selected,
                    hasFormula: hasFormula);
                break;

            case "Wikis":
                UpdateWikis(
                    context: context,
                    ss: ss,
                    siteId: siteModel.SiteId,
                    id: id,
                    selected: selected,
                    hasFormula: hasFormula);
                break;

            default: break;
            }
        }
コード例 #23
0
        public string SearchDropDown()
        {
            SetSite();
            var ss        = SiteSettingsUtilities.Get(Site, ReferenceId);
            var controlId = Forms.Data("DropDownSearchTarget");
            var column    = ss.Columns.FirstOrDefault(o =>
                                                      controlId.EndsWith(ss.ReferenceType + "_" + o.ColumnName));

            ss.SetChoiceHash(
                columnName: column?.ColumnName,
                searchIndexes: Forms.Data("DropDownSearchText").SearchIndexes());
            return(new ResponseCollection()
                   .ReplaceAll(
                       "#DropDownSearchResults",
                       new HtmlBuilder().Selectable(
                           controlId: "DropDownSearchResults",
                           listItemCollection: column?.EditChoices()))
                   .ClearFormData("DropDownSearchResults")
                   .ToJson());
        }
コード例 #24
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static byte[] SiteImageIcon(Context context, SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(
                context: context,
                siteModel: siteModel,
                referenceId: siteModel.SiteId);
            var invalid = BinaryValidators.OnGetting(
                context: context,
                ss: siteModel.SiteSettings);

            switch (invalid.Type)
            {
            case Error.Types.None: break;

            default: return(null);
            }
            return(new BinaryModel(siteModel.SiteId).SiteImage(
                       context: context,
                       sizeType: Libraries.Images.ImageData.SizeTypes.Icon,
                       column: Rds.BinariesColumn().Icon()));
        }
コード例 #25
0
        private Column SearchDropDownColumn(string controlId, string searchText)
        {
            var ss     = SiteSettingsUtilities.Get(Site, ReferenceId, setSiteIntegration: true);
            var column = ss.GetColumn(controlId.Substring(
                                          controlId.StartsWith("ViewFilters__")
                    ? "ViewFilters__".Length
                    : (ss.ReferenceType + "_").Length));

            if (column?.Linked() == true)
            {
                column?.SetChoiceHash(
                    siteId: column.SiteId,
                    linkHash: column.SiteSettings.LinkHash(column.Name, searchText),
                    searchIndexes: searchText.SearchIndexes());
            }
            else
            {
                ss.SetChoiceHash(
                    columnName: column?.ColumnName,
                    searchText: Forms.Data("DropDownSearchText"));
            }
            return(column);
        }
コード例 #26
0
        public static void Synchronize(Context context, SiteSettings ss, Summary summary)
        {
            var destinationSs = SiteSettingsUtilities.Get(
                context: context, siteId: summary?.SiteId ?? 0);

            if (destinationSs != null && summary != null)
            {
                Synchronize(
                    context: context,
                    ss: ss,
                    destinationSs: destinationSs,
                    destinationSiteId: summary.SiteId,
                    destinationColumn: summary.DestinationColumn,
                    destinationCondition: destinationSs.Views?.Get(summary.DestinationCondition),
                    setZeroWhenOutOfCondition: summary.SetZeroWhenOutOfCondition == true,
                    sourceSiteId: ss.SiteId,
                    sourceReferenceType: ss.ReferenceType,
                    linkColumn: summary.LinkColumn,
                    type: summary.Type,
                    sourceColumn: summary.SourceColumn,
                    sourceCondition: ss.Views?.Get(summary.SourceCondition));
            }
        }
コード例 #27
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string UpdateSiteImage(SiteModel siteModel)
        {
            siteModel.SiteSettings = SiteSettingsUtilities.Get(siteModel, siteModel.SiteId);
            var invalid = BinaryValidators.OnUpdating(siteModel.SiteSettings);

            switch (invalid)
            {
            case Error.Types.None: break;

            default: return(invalid.MessageJson());
            }
            var error = new BinaryModel(siteModel.SiteId).UpdateSiteImage(
                Forms.File(Libraries.Images.ImageData.Types.SiteImage.ToString()));

            if (error.Has())
            {
                return(error.MessageJson());
            }
            else
            {
                return(Messages.ResponseFileUpdateCompleted().ToJson());
            }
        }
コード例 #28
0
        public Error.Types Update(
            RdsUser rdsUser          = null,
            SqlParamCollection param = null,
            bool paramAll            = false)
        {
            SetBySession();
            var statements = UpdateStatements(param, paramAll);
            var count      = Rds.ExecuteScalar_int(
                rdsUser: rdsUser,
                transactional: true,
                statements: statements.ToArray());

            if (count == 0)
            {
                return(Error.Types.UpdateConflicts);
            }
            Get();
            var siteModel = new ItemModel(ReferenceId).GetSite();
            var ss        = SiteSettingsUtilities.Get(siteModel, siteModel.SiteId);

            Libraries.Search.Indexes.Create(ss, ReferenceId);
            return(Error.Types.None);
        }
コード例 #29
0
        public static ResponseFile ExportSitePackage(Context context, SiteSettings ss)
        {
            if (!Parameters.SitePackage.Export ||
                !context.CanManageSite(ss: ss))
            {
                return(null);
            }
            var    useIndentOption           = context.QueryStrings.Bool("UseIndentOption");
            var    includeSitePermission     = context.QueryStrings.Bool("IncludeSitePermission");
            var    includeRecordPermission   = context.QueryStrings.Bool("IncludeRecordPermission");
            var    includeColumnPermission   = context.QueryStrings.Bool("IncludeColumnPermission");
            string sitePackagesSelectableAll = Regex.Replace(
                context.QueryStrings.Data("SitePackagesSelectableAll"),
                @"[^0-9-,(true|false)]", "");
            var sites = new List <SelectedSite>();

            sitePackagesSelectableAll.Split(',')
            .ForEach(e =>
                     sites.Add(new SelectedSite()
            {
                SiteId      = e.Split_1st('-').ToLong(),
                IncludeData = e.Split_2nd('-').ToBool()
            }));
            if (ExceededExportLimit(
                    context: context,
                    sites: sites))
            {
                return(null);
            }
            foreach (var site in sites)
            {
                var currentSs = ss.SiteId == site.SiteId
                    ? ss
                    : SiteSettingsUtilities.Get(
                    context: context,
                    siteId: site.SiteId);
                if (site.IncludeData &&
                    (context.ContractSettings.Export == false ||
                     !context.CanExport(ss: currentSs)))
                {
                    return(null);
                }
            }
            var sitePackage = new SitePackage(
                context: context,
                siteList: sites,
                includeSitePermission: includeSitePermission,
                includeRecordPermission: includeRecordPermission,
                includeColumnPermission: includeColumnPermission);
            var file = new ResponseFile(
                fileContent: sitePackage.RecordingJson(
                    context: context,
                    formatting: useIndentOption
                        ? Formatting.Indented
                        : Formatting.None),
                fileDownloadName: ExportUtilities.FileName(
                    context: context,
                    sitePackage.Sites.FirstOrDefault()?.Title,
                    extension: "json"));

            return(file);
        }
コード例 #30
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static void RebuildSearchIndexes(Context context, long siteId = -1)
        {
            var hash = new Dictionary <long, SiteModel>();

            Repository.ExecuteTable(
                context: context,
                statements: Rds.SelectItems(
                    column: Rds.ItemsColumn()
                    .ReferenceId()
                    .SiteId()
                    .UpdatedTime()
                    .Users_TenantId()
                    .Users_DeptId()
                    .Users_UserId(),
                    join: Rds.ItemsJoinDefault().Add(new SqlJoin(
                                                         tableBracket: "\"Users\"",
                                                         joinType: SqlJoin.JoinTypes.Inner,
                                                         joinExpression: "\"Users\".\"UserId\"=\"Items\".\"Updator\"")),
                    where : siteId > 0
                        ? Rds.ItemsWhere().SiteId(siteId)
                        : Rds.ItemsWhere().Add(raw: new List <string>()
            {
                "\"Items\".\"SearchIndexCreatedTime\" is null",
                "\"Items\".\"SearchIndexCreatedTime\"<>\"Items\".\"UpdatedTime\""
            }.Join(" or ")),
                    top: siteId > 0
                        ? 0
                        : Parameters.BackgroundTask.CreateSearchIndexLot))
            .AsEnumerable()
            .Select(o => new
            {
                ReferenceId = o["ReferenceId"].ToLong(),
                SiteId      = o["SiteId"].ToLong(),
                UpdatedTime = o.Field <DateTime>("UpdatedTime")
                              .ToString("yyyy/M/d H:m:s.fff"),
                TenantId = o.Int("TenantId"),
                DeptId   = o.Int("DeptId"),
                UserId   = o.Int("UserId")
            })
            .ForEach(data =>
            {
                var currentContext = context.CreateContext(
                    tenantId: data.TenantId,
                    deptId: data.DeptId,
                    userId: data.UserId);
                var siteModel = hash.Get(data.SiteId) ??
                                new SiteModel().Get(
                    context: currentContext,
                    where : Rds.SitesWhere().SiteId(data.SiteId));
                if (!hash.ContainsKey(data.SiteId))
                {
                    siteModel.SiteSettings = SiteSettingsUtilities.Get(
                        context: currentContext,
                        siteModel: siteModel,
                        referenceId: siteModel.SiteId);
                    hash.Add(data.SiteId, siteModel);
                }
                Create(
                    context: currentContext,
                    ss: siteModel.SiteSettings,
                    id: data.ReferenceId,
                    force: true);
                Repository.ExecuteNonQuery(
                    context: currentContext,
                    statements: Rds.UpdateItems(
                        where : Rds.ItemsWhere()
                        .ReferenceId(data.ReferenceId),
                        param: Rds.ItemsParam()
                        .SearchIndexCreatedTime(raw: "\"UpdatedTime\""),
                        addUpdatorParam: false,
                        addUpdatedTimeParam: false));
            });
        }