Exemple #1
0
 public static HtmlBuilder Header(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     long siteId,
     string referenceType,
     Error.Types errorType,
     bool useNavigationMenu,
     bool useSearch,
     ServerScriptModelRow serverScriptModelRow)
 {
     return(hb.Header(id: "Header", action: () => hb
                      .HeaderLogo(
                          context: context,
                          ss: ss)
                      .NavigationMenu(
                          context: context,
                          ss: ss,
                          siteId: siteId,
                          referenceType: referenceType,
                          errorType: errorType,
                          useNavigationMenu: useNavigationMenu,
                          useSearch: useSearch,
                          serverScriptModelRow: serverScriptModelRow)));
 }
 public static HtmlBuilder NavigationMenu(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     long siteId,
     string referenceType,
     Error.Types errorType,
     bool useNavigationMenu,
     bool useSearch,
     ServerScriptModelRow serverScriptModelRow)
 {
     return(errorType == Error.Types.None &&
            useNavigationMenu &&
            !context.Publish
             ? hb.Nav(
                id: "Navigations",
                css: "ui-widget-header",
                action: () => hb
                .Menus(
                    context: context,
                    ss: ss,
                    siteId: siteId,
                    referenceType: referenceType,
                    muenuId: "NavigationMenu",
                    menus: ExtendedAssembleNavigationMenu(
                        navigationMenus: Parameters.NavigationMenus,
                        extendedNavigationMenus: ExtendedNavigationMenu(context)),
                    serverScriptModelRow: serverScriptModelRow)
                .Search(
                    context: context,
                    _using: useSearch && !Parameters.Search.DisableCrossSearch))
            .ResponsiveMenu(
                context: context)
             : hb);
 }
Exemple #3
0
 public static ResponseCollection ViewMode(
     this ResponseCollection res,
     Context context,
     SiteSettings ss,
     View view,
     string invoke       = null,
     Message message     = null,
     bool editOnGrid     = false,
     bool loadScroll     = false,
     bool bodyOnly       = false,
     string bodySelector = null,
     ServerScriptModelRow serverScriptModelRow = null,
     HtmlBuilder body = null)
 {
     return(res
            .Html(!bodyOnly ? "#ViewModeContainer" : bodySelector, body)
            .View(context: context, ss: ss, view: view)
            .Invoke("initRelatingColumnWhenViewChanged")
            .ReplaceAll(
                "#Breadcrumb",
                new HtmlBuilder().Breadcrumb(
                    context: context,
                    ss: ss),
                _using: context.Controller == "items")
            .ReplaceAll("#Guide", new HtmlBuilder()
                        .Guide(
                            context: context,
                            ss: ss))
            .ReplaceAll("#CopyDirectUrlToClipboard", new HtmlBuilder()
                        .CopyDirectUrlToClipboard(
                            context: context,
                            view: view))
            .ReplaceAll("#Aggregations", new HtmlBuilder()
                        .Aggregations(
                            context: context,
                            ss: ss,
                            view: view))
            .ReplaceAll("#MainCommandsContainer", new HtmlBuilder()
                        .MainCommands(
                            context: context,
                            ss: ss,
                            view: view,
                            verType: Versions.VerTypes.Latest,
                            backButton: !context.Publish && !editOnGrid,
                            serverScriptModelRow: serverScriptModelRow))
            .SetMemory("formChanged", false, _using: !editOnGrid)
            .Invoke(invoke)
            .Message(message)
            .Messages(context.Messages)
            .LoadScroll(loadScroll)
            .ClearFormData(
                context: context,
                ss: ss,
                editOnGrid: editOnGrid)
            .Log(context.GetLog()));
 }
 private static HtmlBuilder HiddenData(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss = null,
     ServerScriptModelRow serverScriptModelRow = null)
 {
     return(!context.Ajax
         ? hb
            .Hidden(controlId: "ApplicationPath", value: Locations.Get(context: context))
            .Hidden(
                controlId: "Token",
                value: context.Token(),
                _using: Parameters.Security.TokenCheck)
            .Hidden(controlId: "Language", value: context.Language)
            .Hidden(controlId: "DeptId", value: context.DeptId.ToString())
            .Hidden(controlId: "UserId", value: context.UserId.ToString())
            .Hidden(controlId: "LoginId", value: context.LoginId)
            .Hidden(controlId: "Publish", value: "1", _using: context.Publish)
            .Hidden(controlId: "Responsive", value: "1", _using: context.Responsive)
            .Hidden(controlId: "TableName", value: ss?.ReferenceType)
            .Hidden(controlId: "Controller", value: context.Controller)
            .Hidden(controlId: "Action", value: context.Action)
            .Hidden(controlId: "Id", value: context.Id.ToString())
            .Hidden(controlId: "TenantId", value: context.TenantId.ToString())
            .Hidden(controlId: "SiteId", value: ss?.SiteId.ToString())
            .Hidden(controlId: "JoinedSites", value: ss?.JoinedSsHash
                    ?.Select(o => new
     {
         SiteId = o.Key,
         o.Value.ReferenceType,
         o.Value.Title
     })
                    .ToJson())
            .HiddenSiteSettings(
                context: context,
                ss: ss)
            .HiddenServerScript(
                context: context,
                ss: ss,
                serverScriptModelRow: serverScriptModelRow)
            .ExtendedSql(context: context)
            .Hidden(
                controlId: "Log",
                value: (new { Log = context.GetLog() }).ToJson())
            .Hidden(
                controlId: "data-validation-maxlength-type",
                value: Parameters.Validation.MaxLengthCountType)
            .Hidden(
                controlId: "data-validation-maxlength-regex",
                value: Parameters.Validation.SingleByteCharactorRegexClient)
         : hb);
 }
 public static HtmlBuilder MainContainer(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     View view,
     Versions.VerTypes verType,
     BaseModel.MethodTypes methodType,
     long siteId,
     long parentId,
     string referenceType,
     string siteReferenceType,
     string title,
     Error.Types errorType  = General.Error.Types.None,
     string[] messageData   = null,
     bool useBreadcrumb     = true,
     bool useTitle          = true,
     bool useSearch         = true,
     bool useNavigationMenu = true,
     ServerScriptModelRow serverScriptModelRow = null,
     Action action = null)
 {
     return(hb.Div(id: "MainContainer", action: () => hb
                   .Header(
                       context: context,
                       ss: ss,
                       siteId: siteId,
                       referenceType: referenceType,
                       errorType: errorType,
                       useNavigationMenu: useNavigationMenu,
                       useSearch: useSearch,
                       serverScriptModelRow: serverScriptModelRow)
                   .Content(
                       context: context,
                       ss: ss,
                       view: view,
                       errorType: errorType,
                       messageData: messageData,
                       siteId: siteId,
                       title: title,
                       useBreadcrumb: useBreadcrumb,
                       useTitle: useTitle,
                       action: action)
                   .Div(id: "BottomMargin")
                   .Footer()
                   .BackUrl(
                       context: context,
                       siteId: siteId,
                       parentId: parentId,
                       referenceType: referenceType,
                       siteReferenceType: siteReferenceType)));
 }
Exemple #6
0
        private static ServerScriptModelRow SetRow(
            SiteSettings ss,
            ExpandoObject model,
            ExpandoObject columns)
        {
            var row = new ServerScriptModelRow
            {
                ExtendedRowCss = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)),
                Columns        = SetColumns(
                    ss: ss,
                    columns: columns)
            };

            return(row);
        }
        private static HtmlBuilder HiddenServerScript(
            this HtmlBuilder hb,
            Context context,
            SiteSettings ss,
            ServerScriptModelRow serverScriptModelRow)
        {
            serverScriptModelRow?.Hidden?.ForEach(hidden => hb
                                                  .Hidden(controlId: hidden.Key, value: hidden.Value));
            var replaceFieldColumns = serverScriptModelRow?.ReplaceFieldColumns(context: context)
                                      ?? new List <string>();

            hb.Hidden(
                controlId: "ReplaceFieldColumns",
                value: replaceFieldColumns.ToJson());
            return(hb);
        }
Exemple #8
0
        public static ServerScriptModelRow Execute(
            Context context,
            SiteSettings ss,
            BaseItemModel itemModel,
            View view,
            ServerScript[] scripts)
        {
            if (!(Parameters.Script.ServerScript != false &&
                  context.ContractSettings.Script != false))
            {
                return(null);
            }
            itemModel = itemModel ?? new BaseItemModel();
            ServerScriptModelRow scriptValues = null;

            using (var model = new ServerScriptModel(
                       context: context,
                       ss: ss,
                       data: Values(
                           ss: ss,
                           model: itemModel),
                       columns: Columns(ss),
                       columnFilterHach: view?.ColumnFilterHash,
                       columnSorterHach: view?.ColumnSorterHash))
            {
                using (var engine = context.CreateScriptEngin())
                {
                    engine.AddHostObject("context", model.Context);
                    engine.AddHostObject("model", model.Data);
                    engine.AddHostObject("columns", model.Columns);
                    engine.AddHostObject("siteSettings", model.SiteSettings);
                    engine.AddHostObject("view", model.View);
                    foreach (var script in scripts)
                    {
                        engine.Execute(script.Body);
                    }
                }
                scriptValues = SetValues(
                    context: context,
                    ss: ss,
                    model: itemModel,
                    view: view,
                    data: model);
            }
            return(scriptValues);
        }
        private static HtmlBuilder HiddenServerScript(
            this HtmlBuilder hb,
            Context context,
            SiteSettings ss,
            ServerScriptModelRow scriptValues)
        {
            scriptValues?.Hidden?.ForEach(hidden => hb
                                          .Hidden(controlId: hidden.Key, value: hidden.Value));
            var needReplaceHtml = scriptValues?.NeedReplaceHtml(
                context: context,
                ss: ss) ?? new List <string>();

            hb.Hidden(
                controlId: "NeedReplaceHtml",
                value: needReplaceHtml.ToJson());
            return(hb);
        }
Exemple #10
0
 private static HtmlBuilder Button(
     this HtmlBuilder hb,
     ServerScriptModelRow serverScriptModelRow,
     View.CommandDisplayTypes?commandDisplayTypes,
     string controlId  = null,
     string text       = null,
     string controlCss = null,
     string title      = null,
     string accessKey  = null,
     string onClick    = null,
     string href       = null,
     string dataId     = null,
     string icon       = null,
     string selector   = null,
     string action     = null,
     string method     = null,
     string confirm    = null,
     string type       = "button",
     bool _using       = true)
 {
     return(hb.Button(
                controlId: controlId,
                text: text,
                controlCss: controlCss,
                style: serverScriptModelRow?.Elements?.Hidden(controlId) == true ||
                commandDisplayTypes == View.CommandDisplayTypes.Hidden
                 ? "display:none;"
                 : string.Empty,
                title: title,
                accessKey: accessKey,
                onClick: onClick,
                href: href,
                dataId: dataId,
                icon: icon,
                selector: selector,
                action: action,
                method: method,
                confirm: confirm,
                type: type,
                disabled: serverScriptModelRow?.Elements?.Disabled(controlId) == true ||
                commandDisplayTypes == View.CommandDisplayTypes.Disabled,
                _using: _using &&
                serverScriptModelRow?.Elements?.None(controlId) != true &&
                commandDisplayTypes != View.CommandDisplayTypes.None));
 }
        private static ServerScriptModelRow SetRow(
            Context context,
            SiteSettings ss,
            ExpandoObject model,
            ExpandoObject columns,
            ServerScriptModelHidden hidden)
        {
            var row = new ServerScriptModelRow
            {
                ExtendedRowCss = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)),
                Columns        = SetColumns(
                    context: context,
                    ss: ss,
                    columns: columns),
                Hidden = hidden.GetAll()
            };

            return(row);
        }
        public virtual ServerScriptModelRow SetByBeforeOpeningPageServerScript(
            Context context,
            SiteSettings ss,
            View view = null)
        {
            var scriptValues = ServerScriptUtilities.Execute(
                context: context,
                ss: ss,
                itemModel: null,
                view: view,
                where : script => script.BeforeOpeningPage == true,
                condition: "BeforeOpeningPage");

            if (scriptValues != null)
            {
                SetServerScriptModelColumns(context: context,
                                            ss: ss,
                                            scriptValues: scriptValues);
                ServerScriptModelRow = scriptValues;
            }
            return(scriptValues);
        }
        private static ServerScriptModelRow SetRow(
            Context context,
            SiteSettings ss,
            ExpandoObject model,
            ExpandoObject columns,
            ServerScriptModelHidden hidden,
            ServerScriptElements elements,
            BaseItemModel itemModel)
        {
            var row = new ServerScriptModelRow
            {
                ExtendedRowCss  = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)),
                ExtendedRowData = String(model, nameof(ServerScriptModelRow.ExtendedRowData)),
                Columns         = SetColumns(
                    context: context,
                    ss: ss,
                    columns: columns,
                    model: itemModel),
                Hidden   = hidden.GetAll(),
                Elements = elements
            };

            return(row);
        }
 public static HtmlBuilder Template(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     View view,
     Versions.VerTypes verType,
     BaseModel.MethodTypes methodType,
     long siteId                       = 0,
     long parentId                     = 0,
     string referenceType              = null,
     string siteReferenceType          = null,
     string title                      = null,
     string body                       = null,
     bool useBreadcrumb                = true,
     bool useTitle                     = true,
     bool useSearch                    = true,
     bool useNavigationMenu            = true,
     string script                     = null,
     string userScript                 = null,
     string userStyle                  = null,
     ServerScriptModelRow scriptValues = null,
     Action action                     = null)
 {
     return(hb.Container(
                context: context,
                ss: ss,
                body: body,
                action: () => hb
                .Raw(HtmlHtmls.ExtendedHtmls(
                         context: context,
                         id: "HtmlBodyTop"))
                .MainContainer(
                    context: context,
                    ss: ss,
                    view: view,
                    verType: verType,
                    methodType: methodType,
                    siteId: siteId,
                    parentId: parentId,
                    referenceType: referenceType,
                    siteReferenceType: siteReferenceType,
                    title: title,
                    useBreadcrumb: useBreadcrumb,
                    useTitle: useTitle,
                    useSearch: useSearch,
                    useNavigationMenu: useNavigationMenu,
                    action: action)
                .TemplateDialogs(
                    context: context,
                    ss: ss,
                    useNavigationMenu: useNavigationMenu)
                .HiddenData(
                    context: context,
                    ss: ss,
                    scriptValues: scriptValues)
                .VideoDialog(
                    context: context,
                    ss: ss)
                .Styles(
                    context: context,
                    ss: ss,
                    userStyle: userStyle)
                .Scripts(
                    context: context,
                    ss: ss,
                    script: script,
                    userScript: userScript)
                .Raw(HtmlHtmls.ExtendedHtmls(
                         context: context,
                         id: "HtmlBodyBottom"))));
 }
        public static HtmlBuilder Tr(
            this HtmlBuilder hb,
            Context context,
            SiteSettings ss,
            DataRow dataRow,
            IEnumerable <Column> columns,
            bool editRow,
            bool checkRow,
            string idColumn,
            RecordSelector recordSelector = null,
            FormDataSet formDataSet       = null)
        {
            var dataId      = dataRow.Long(idColumn);
            var dataVersion = dataRow.Int("Ver");
            var isHistory   = dataRow.Bool("IsHistory");
            var EditColumns = !isHistory
                ? columns.ToDictionary(
                column => column.ColumnName,
                column => EditColumn(
                    context: context,
                    column: column))
                : new Dictionary <string, bool>();

            BaseItemModel rowModel = null;

            switch (ss.ReferenceType)
            {
            case "Issues":
                var issueModel = new IssueModel(
                    context: context,
                    ss: ss,
                    dataRow: dataRow,
                    formData: editRow
                            ? formDataSet?.FirstOrDefault(o =>
                                                          o.Id == dataRow.Long("IssueId"))?.Data
                            : null);
                ss.SetColumnAccessControls(
                    context: context,
                    mine: issueModel.Mine(context: context));
                rowModel = issueModel;
                break;

            case "Results":
                var resultModel = new ResultModel(
                    context: context,
                    ss: ss,
                    dataRow: dataRow,
                    formData: editRow
                            ? formDataSet?.FirstOrDefault(o =>
                                                          o.Id == dataRow.Long("ResultId"))?.Data
                            : null);
                ss.SetColumnAccessControls(
                    context: context,
                    mine: resultModel.Mine(context: context));
                rowModel = resultModel;
                break;
            }
            ;
            var serverScriptRowValues = rowModel?.SetByBeforeOpeningPageServerScript(
                context: context,
                ss: ss);
            var extendedRowCss = serverScriptRowValues?.ExtendedRowCss;

            extendedRowCss = extendedRowCss.IsNullOrEmpty() ? string.Empty : " " + extendedRowCss;
            return(hb.Tr(
                       attributes: new HtmlAttributes()
                       .Class("grid-row" + extendedRowCss)
                       .DataId(dataId.ToString())
                       .DataVer(dataVersion)
                       .DataLatest(1, _using: !isHistory)
                       .Add(name: "data-history", value: "1", _using: isHistory)
                       .Add(name: "data-locked", value: "1", _using: dataRow.Bool("Locked")),
                       action: () =>
            {
                if (editRow)
                {
                    hb.Td(action: () => hb
                          .Button(
                              title: Displays.Reload(context: context),
                              controlCss: "button-icon",
                              onClick: $"$p.getData($(this)).Id={dataId};$p.send($(this));",
                              icon: "ui-icon-refresh",
                              action: "ReloadRow",
                              method: "post",
                              _using: !isHistory)
                          .Button(
                              title: Displays.Copy(context: context),
                              controlCss: "button-icon",
                              onClick: $"$p.getData($(this)).OriginalId={dataId};$p.send($(this));",
                              icon: "ui-icon-copy",
                              action: "CopyRow",
                              method: "post",
                              _using: !isHistory && context.CanCreate(ss: ss))
                          .Hidden(
                              controlId: $"{ss.ReferenceType}_Timestamp_{ss.SiteId}_{dataId}",
                              css: "timestamp",
                              value: dataRow
                              .Field <DateTime>("UpdatedTime")
                              .ToString("yyyy/M/d H:m:s.fff")));
                }
                else if (checkRow)
                {
                    hb.Td(action: () => hb
                          .CheckBox(
                              controlCss: "grid-check",
                              _checked: recordSelector.Checked(dataId),
                              dataId: dataId.ToString(),
                              _using: !isHistory));
                }
                var depts = new Dictionary <string, DeptModel>();
                var groups = new Dictionary <string, GroupModel>();
                var registrations = new Dictionary <string, RegistrationModel>();
                var users = new Dictionary <string, UserModel>();
                var sites = new Dictionary <string, SiteModel>();
                var issues = new Dictionary <string, IssueModel>();
                var results = new Dictionary <string, ResultModel>();
                ServerScriptModelRow serverScriptValues = null;
                columns.ForEach(column =>
                {
                    var key = column.TableName();
                    switch (column.SiteSettings?.ReferenceType)
                    {
                    case "Depts":
                        var deptModel = depts.Get(key);
                        if (deptModel == null)
                        {
                            deptModel = new DeptModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                tableAlias: column.TableAlias);
                            depts.Add(key, deptModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: deptModel.Mine(context: context));
                            serverScriptValues = deptModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        hb.TdValue(
                            context: context,
                            ss: column.SiteSettings,
                            column: column,
                            deptModel: deptModel);
                        break;

                    case "Groups":
                        var groupModel = groups.Get(key);
                        if (groupModel == null)
                        {
                            groupModel = new GroupModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                tableAlias: column.TableAlias);
                            groups.Add(key, groupModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: groupModel.Mine(context: context));
                            serverScriptValues = groupModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        hb.TdValue(
                            context: context,
                            ss: column.SiteSettings,
                            column: column,
                            groupModel: groupModel);
                        break;

                    case "Registrations":
                        var registrationModel = registrations.Get(key);
                        if (registrationModel == null)
                        {
                            registrationModel = new RegistrationModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                tableAlias: column.TableAlias);
                            registrations.Add(key, registrationModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: registrationModel.Mine(context: context));
                            serverScriptValues = registrationModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        hb.TdValue(
                            context: context,
                            ss: column.SiteSettings,
                            column: column,
                            registrationModel: registrationModel);
                        break;

                    case "Users":
                        var userModel = users.Get(key);
                        if (userModel == null)
                        {
                            userModel = new UserModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                tableAlias: column.TableAlias);
                            users.Add(key, userModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: userModel.Mine(context: context));
                            serverScriptValues = userModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        hb.TdValue(
                            context: context,
                            ss: column.SiteSettings,
                            column: column,
                            userModel: userModel);
                        break;

                    case "Sites":
                        var siteModel = sites.Get(key);
                        if (siteModel == null)
                        {
                            siteModel = new SiteModel(
                                context: context,
                                dataRow: dataRow,
                                formData: editRow
                                            ? formDataSet?.FirstOrDefault(o =>
                                                                          o.Id == dataRow.Long("SiteId"))?.Data
                                            : null,
                                tableAlias: column.TableAlias);
                            sites.Add(key, siteModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: siteModel.Mine(context: context));
                            serverScriptValues = siteModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        hb.TdValue(
                            context: context,
                            ss: column.SiteSettings,
                            column: column,
                            siteModel: siteModel);
                        break;

                    case "Issues":
                        var issueModel = issues.Get(key);
                        if (issueModel == null)
                        {
                            issueModel = new IssueModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                formData: editRow
                                            ? formDataSet?.FirstOrDefault(o =>
                                                                          o.Id == dataRow.Long("IssueId"))?.Data
                                            : null,
                                tableAlias: column.TableAlias);
                            issues.Add(key, issueModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: issueModel.Mine(context: context));
                            serverScriptValues = issueModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        if (!issueModel.Locked && EditColumns.Get(column.ColumnName) && column.CanUpdate(baseModel: issueModel))
                        {
                            hb.Td(
                                css: column.TextAlign == SiteSettings.TextAlignTypes.Right
                                            ? " right-align"
                                            : string.Empty,
                                action: () => hb.Field(
                                    context: context,
                                    column: column,
                                    issueModel: issueModel,
                                    ss: column.SiteSettings,
                                    controlOnly: true,
                                    idSuffix: issueModel.IdSuffix()));
                        }
                        else
                        {
                            hb.TdValue(
                                context: context,
                                ss: column.SiteSettings,
                                column: column,
                                issueModel: issueModel,
                                serverScriptValues: serverScriptValues
                                ?.Columns
                                ?.Get(column?.ColumnName));
                        }
                        break;

                    case "Results":
                        var resultModel = results.Get(key);
                        if (resultModel == null)
                        {
                            resultModel = new ResultModel(
                                context: context,
                                ss: column.SiteSettings,
                                dataRow: dataRow,
                                formData: editRow
                                            ? formDataSet?.FirstOrDefault(o =>
                                                                          o.Id == dataRow.Long("ResultId"))?.Data
                                            : null,
                                tableAlias: column.TableAlias);
                            results.Add(key, resultModel);
                            ss.SetColumnAccessControls(
                                context: context,
                                mine: resultModel.Mine(context: context));
                            serverScriptValues = resultModel.SetByBeforeOpeningPageServerScript(
                                context: context,
                                ss: ss);
                        }
                        if (!resultModel.Locked && EditColumns.Get(column.ColumnName) && column.CanUpdate(baseModel: resultModel))
                        {
                            hb.Td(
                                css: column.TextAlign == SiteSettings.TextAlignTypes.Right
                                            ? " right-align"
                                            : string.Empty,
                                action: () => hb.Field(
                                    context: context,
                                    column: column,
                                    resultModel: resultModel,
                                    ss: column.SiteSettings,
                                    controlOnly: true,
                                    idSuffix: resultModel.IdSuffix()));
                        }
                        else
                        {
                            hb.TdValue(
                                context: context,
                                ss: column.SiteSettings,
                                column: column,
                                resultModel: resultModel,
                                serverScriptValues: serverScriptValues
                                ?.Columns
                                ?.Get(column?.ColumnName));
                        }
                        break;
                    }
                });
            }));
        }
        public static ServerScriptModelRow Execute(
            Context context,
            SiteSettings ss,
            BaseItemModel itemModel,
            View view,
            ServerScript[] scripts,
            bool onTesting = false)
        {
            if (!(Parameters.Script.ServerScript != false &&
                  context.ContractSettings.NewFeatures() &&
                  context.ContractSettings.Script != false))
            {
                return(null);
            }
            if (!(context?.ServerScriptDepth < 10))
            {
                return(null);
            }
            itemModel = itemModel ?? new BaseItemModel();
            ServerScriptModelRow scriptValues = null;

            using (var model = new ServerScriptModel(
                       context: context,
                       ss: ss,
                       data: Values(
                           context: context,
                           ss: ss,
                           model: itemModel),
                       columns: Columns(
                           context: context,
                           ss: ss),
                       columnFilterHash: view?.ColumnFilterHash,
                       columnSorterHash: view?.ColumnSorterHash,
                       onTesting: onTesting))
            {
                using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine(
                           Microsoft.ClearScript.V8.V8ScriptEngineFlags.EnableDateTimeConversion))
                {
                    try
                    {
                        engine.ContinuationCallback = model.ContinuationCallback;
                        engine.AddHostObject("context", model.Context);
                        engine.AddHostObject("model", model.Model);
                        engine.AddHostObject("depts", model.Depts);
                        engine.AddHostObject("groups", model.Groups);
                        engine.AddHostObject("users", model.Users);
                        engine.AddHostObject("columns", model.Columns);
                        engine.AddHostObject("siteSettings", model.SiteSettings);
                        engine.AddHostObject("view", model.View);
                        engine.AddHostObject("items", model.Items);
                        engine.AddHostObject("hidden", model.Hidden);
                        engine.AddHostObject("extendedSql", model.ExtendedSql);
                        engine.AddHostObject("notifications", model.Notification);
                        foreach (var script in scripts)
                        {
                            engine.Execute(script.Body);
                        }
                    }
                    finally
                    {
                        engine.ContinuationCallback = null;
                    }
                }
                scriptValues = SetValues(
                    context: context,
                    ss: ss,
                    model: itemModel,
                    view: view,
                    data: model);
            }
            return(scriptValues);
        }
 public static void SetServerScriptModelColumns(Context context, SiteSettings ss, ServerScriptModelRow scriptValues)
 {
     scriptValues?.Columns.ForEach(scriptColumn =>
     {
         var column = ss.GetColumn(
             context: context,
             columnName: scriptColumn.Key);
         if (column != null)
         {
             if (scriptColumn.Value.ChoiceHash != null)
             {
                 var searchText    = context.Forms.Data("DropDownSearchText");
                 var searchIndexes = searchText.SearchIndexes();
                 column.ChoiceHash = scriptColumn.Value
                                     ?.ChoiceHash
                                     ?.Where(o => searchIndexes?.Any() != true ||
                                             searchIndexes.All(p =>
                                                               o.Key.ToString() == p ||
                                                               (o.Value?.ToString()).RegexLike(p).Any()))
                                     ?.ToDictionary(
                     o => o.Key.ToString(),
                     o => new Choice(
                         o.Key.ToString(),
                         o.Value?.ToString()));
                 column.AddChoiceHashByServerScript = true;
             }
             column.ServerScriptModelColumn = scriptColumn.Value;
         }
     });
 }
 private static HtmlBuilder Menus(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     long siteId,
     string referenceType,
     string muenuId,
     string css                  = null,
     string cssUiWidget          = null,
     List <NavigationMenu> menus = null,
     bool childMenu              = false,
     ServerScriptModelRow serverScriptModelRow = null)
 {
     if (menus?.Any() != true)
     {
         return(hb);
     }
     return(hb.Ul(
                id: muenuId,
                css: $"{css} {cssUiWidget}".Trim(),
                action: () => menus
                .ExtensionWhere <NavigationMenu>(context)
                .ForEach(menu =>
     {
         var id = menu.ContainerId ?? menu.MenuId;
         if (Check(
                 context: context,
                 ss: ss,
                 menus: menu,
                 _using: serverScriptModelRow?.Elements?.None(id) != true &&
                 Using(
                     context: context,
                     ss: ss,
                     referenceType: referenceType,
                     siteId: siteId,
                     menu: menu)))
         {
             hb.Li(
                 id: id,
                 css: menu.ChildMenus?.Any() != true
                             ? null
                             : "sub-menu",
                 attributes: new HtmlAttributes()
                 .Style(
                     value: "display:none;",
                     _using: serverScriptModelRow?.Elements?.Hidden(id) == true),
                 action: () => hb
                 .Content(
                     context: context,
                     ss: ss,
                     siteId: siteId,
                     childMenu: childMenu,
                     menu: menu)
                 .Menus(
                     context: context,
                     ss: ss,
                     siteId: siteId,
                     referenceType: referenceType,
                     muenuId: menu.MenuId,
                     css: "menu",
                     cssUiWidget: "ui-widget-content",
                     childMenu: true,
                     menus: menu.ChildMenus,
                     serverScriptModelRow: serverScriptModelRow));
         }
     })));
 }
Exemple #19
0
        public static HtmlBuilder MainCommands(
            this HtmlBuilder hb,
            Context context,
            SiteSettings ss,
            View view = null,
            Versions.VerTypes verType = Versions.VerTypes.Latest,
            bool readOnly             = false,
            bool backButton           = true,
            bool updateButton         = false,
            bool copyButton           = false,
            bool moveButton           = false,
            bool mailButton           = false,
            bool deleteButton         = false,
            ServerScriptModelRow serverScriptModelRow = null,
            Action extensions = null)
        {
            if (context.Controller == "items" &&
                context.Action == "edit" &&
                !ss.IsSite(context: context))
            {
                view = view ?? Views.GetBySession(
                    context: context,
                    ss: ss);
            }
            return(hb.Div(id: "MainCommandsContainer", action: () => hb
                          .Div(id: "MainCommands", action: () =>
            {
                if (backButton)
                {
                    hb.Button(
                        controlId: "GoBack",
                        text: Displays.GoBack(context: context),
                        controlCss: "button-icon",
                        accessKey: "q",
                        onClick: "$p.back();",
                        icon: "ui-icon-circle-arrow-w");
                }
                if (context.Action == "new")
                {
                    switch (context.Controller)
                    {
                    case "registrations":
                        hb.Button(
                            controlId: "RegistrationId",
                            controlCss: "button-icon validate",
                            text: Displays.Invite(context: context),
                            onClick: "$p.send($(this));",
                            icon: "ui-icon-mail-closed",
                            action: "Create",
                            method: "post");
                        break;

                    default:
                        hb.Button(
                            controlId: "CreateCommand",
                            text: Displays.Create(context: context),
                            controlCss: "button-icon validate",
                            accessKey: "s",
                            onClick: "$p.send($(this));",
                            icon: "ui-icon-disk",
                            action: "Create",
                            method: "post");
                        break;
                    }
                }
                else if (verType == Versions.VerTypes.Latest)
                {
                    switch (context.Controller)
                    {
                    case "users":
                        hb.Common(
                            context: context,
                            ss: ss,
                            view: view,
                            readOnly: readOnly,
                            updateButton: updateButton,
                            copyButton: copyButton,
                            moveButton: moveButton,
                            mailButton: mailButton,
                            deleteButton: deleteButton,
                            serverScriptModelRow: serverScriptModelRow);
                        switch (context.Action)
                        {
                        case "index":
                            hb
                            .Button(
                                controlId: "BulkDeleteCommand",
                                text: Displays.BulkDelete(context: context),
                                controlCss: "button-icon",
                                accessKey: "r",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-trash",
                                action: "BulkDelete",
                                method: "delete",
                                confirm: "ConfirmDelete",
                                _using: context.CanDelete(ss: ss) &&
                                !readOnly)
                            .Button(
                                controlId: "EditImportSettings",
                                text: Displays.Import(context: context),
                                controlCss: "button-icon",
                                accessKey: "w",
                                onClick: "$p.openImportSettingsDialog($(this));",
                                icon: "ui-icon-arrowreturnthick-1-e",
                                selector: "#ImportSettingsDialog",
                                _using: context.CanImport(ss: ss) &&
                                !readOnly)
                            .Button(
                                controlId: "OpenExportSelectorDialogCommand",
                                text: Displays.Export(context: context),
                                controlCss: "button-icon",
                                accessKey: "x",
                                onClick: "$p.openExportSelectorDialog($(this));",
                                icon: "ui-icon-arrowreturnthick-1-w",
                                action: "OpenExportSelectorDialog",
                                method: "post",
                                _using: context.CanExport(ss: ss));
                            break;
                        }
                        break;

                    case "registrations":
                        switch (context.Action)
                        {
                        case "login":
                            hb.Button(
                                controlId: "RegistrationId",
                                controlCss: "button-icon validate",
                                text: Displays.ApprovalRequest(context: context),
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-mail-closed",
                                action: "ApprovalRequest",
                                method: "post");
                            break;

                        case "edit":
                            hb
                            .Button(
                                controlId: "RegistrationApproval",
                                text: Displays.Approval(context: context),
                                controlCss: "button-icon",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-mail-closed",
                                action: "Approval",
                                method: "put",
                                _using: Permissions.PrivilegedUsers(loginId: context.LoginId))
                            .Button(
                                controlId: "DeleteCommand",
                                text: Displays.Delete(context: context),
                                controlCss: "button-icon",
                                accessKey: "r",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-trash",
                                action: "Delete",
                                method: "delete",
                                confirm: "ConfirmDelete",
                                _using: deleteButton &&
                                context.CanDelete(ss: ss) &&
                                !ss.IsSite(context: context) &&
                                !readOnly);
                            break;

                        case "index":
                            hb.Button(
                                controlId: "BulkDeleteCommand",
                                text: Displays.BulkDelete(context: context),
                                controlCss: "button-icon",
                                accessKey: "r",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-trash",
                                action: "BulkDelete",
                                method: "delete",
                                confirm: "ConfirmDelete",
                                _using: context.CanDelete(ss: ss) &&
                                !readOnly);
                            break;
                        }
                        break;

                    case "items":
                        hb.Common(
                            context: context,
                            ss: ss,
                            view: view,
                            readOnly: readOnly,
                            updateButton: updateButton,
                            copyButton: copyButton,
                            moveButton: moveButton,
                            mailButton: mailButton,
                            deleteButton: deleteButton,
                            serverScriptModelRow: serverScriptModelRow);
                        if (context.Forms.Bool("EditOnGrid"))
                        {
                            hb
                            .Button(
                                serverScriptModelRow: serverScriptModelRow,
                                commandDisplayTypes: view?.UpdateCommand,
                                controlId: "UpdateByGridCommand",
                                text: Displays.Update(context: context),
                                controlCss: "button-icon validate",
                                accessKey: "s",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-disk",
                                action: "UpdateByGrid",
                                method: "post",
                                _using: context.CanUpdate(ss: ss))
                            .Button(
                                serverScriptModelRow: serverScriptModelRow,
                                commandDisplayTypes: view?.EditOnGridCommand,
                                controlId: "EditOnGridCommand",
                                text: Displays.ListMode(context: context),
                                controlCss: "button-icon",
                                onClick: "$p.editOnGrid($(this),0);",
                                icon: "ui-icon-arrowreturnthick-1-w",
                                action: "Index",
                                method: "post");
                        }
                        else if (ss.ReferenceType != "Sites")
                        {
                            switch (context.Action)
                            {
                            case "index":
                                hb
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.BulkMoveTargetsCommand,
                                    controlId: "BulkMoveTargetsCommand",
                                    text: Displays.BulkMove(context: context),
                                    controlCss: "button-icon open-dialog",
                                    accessKey: "o",
                                    onClick: "$p.moveTargets($(this));",
                                    icon: "ui-icon-transferthick-e-w",
                                    selector: "#MoveDialog",
                                    action: "MoveTargets",
                                    method: "get",
                                    _using: ss.MoveTargets?.Any() == true &&
                                    context.CanUpdate(ss: ss) &&
                                    !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) &&
                                    ss.MoveTargetsOptions(sites: ss.NumberOfMoveTargetsTable(context: context))
                                    .Any(o => ss.MoveTargets.Contains(o.Key.ToLong())) &&
                                    !readOnly)
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.BulkDeleteCommand,
                                    controlId: "BulkDeleteCommand",
                                    text: Displays.BulkDelete(context: context),
                                    controlCss: "button-icon",
                                    accessKey: "r",
                                    onClick: "$p.send($(this));",
                                    icon: "ui-icon-trash",
                                    action: "BulkDelete",
                                    method: "delete",
                                    confirm: "ConfirmDelete",
                                    _using: context.CanDelete(ss: ss) &&
                                    !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) &&
                                    !readOnly)
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.EditImportSettings,
                                    controlId: "EditImportSettings",
                                    text: Displays.Import(context: context),
                                    controlCss: "button-icon",
                                    accessKey: "w",
                                    onClick: "$p.openImportSettingsDialog($(this));",
                                    icon: "ui-icon-arrowreturnthick-1-e",
                                    selector: "#ImportSettingsDialog",
                                    _using: context.CanImport(ss: ss) &&
                                    !readOnly)
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.OpenExportSelectorDialogCommand,
                                    controlId: "OpenExportSelectorDialogCommand",
                                    text: Displays.Export(context: context),
                                    controlCss: "button-icon",
                                    accessKey: "x",
                                    onClick: "$p.openExportSelectorDialog($(this));",
                                    icon: "ui-icon-arrowreturnthick-1-w",
                                    action: "OpenExportSelectorDialog",
                                    method: "post",
                                    _using: context.CanExport(ss: ss))
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.OpenBulkUpdateSelectorDialogCommand,
                                    controlId: "OpenBulkUpdateSelectorDialogCommand",
                                    text: Displays.BulkUpdate(context: context),
                                    controlCss: "button-icon",
                                    accessKey: "s",
                                    onClick: "$p.openBulkUpdateSelectorDialog($(this));",
                                    icon: "ui-icon-disk",
                                    action: "OpenBulkUpdateSelectorDialog",
                                    method: "post",
                                    _using: context.CanUpdate(ss: ss) &&
                                    ss.GetAllowBulkUpdateOptions(context: context)?.Any() == true &&
                                    !readOnly)
                                .Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.EditOnGridCommand,
                                    controlId: "EditOnGridCommand",
                                    text: Displays.EditMode(context: context),
                                    controlCss: "button-icon",
                                    onClick: "$p.editOnGrid($(this),1);",
                                    icon: "ui-icon-arrowreturnthick-1-w",
                                    action: "Index",
                                    method: "post",
                                    _using: ss.GridEditorType == SiteSettings.GridEditorTypes.Grid &&
                                    context.CanUpdate(ss: ss) &&
                                    !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) &&
                                    ss.IntegratedSites?.Any() != true &&
                                    !readOnly);
                                break;

                            case "crosstab":
                                hb.Button(
                                    serverScriptModelRow: serverScriptModelRow,
                                    commandDisplayTypes: view?.ExportCrosstabCommand,
                                    controlId: "ExportCrosstabCommand",
                                    text: Displays.Export(context: context),
                                    controlCss: "button-icon",
                                    accessKey: "x",
                                    onClick: "$p.exportCrosstab();",
                                    icon: "ui-icon-arrowreturnthick-1-w",
                                    _using: context.CanExport(ss: ss));
                                break;
                            }
                        }
                        break;

                    default:
                        hb.Common(
                            context: context,
                            ss: ss,
                            view: view,
                            readOnly: readOnly,
                            updateButton: updateButton,
                            copyButton: copyButton,
                            moveButton: moveButton,
                            mailButton: mailButton,
                            deleteButton: deleteButton,
                            serverScriptModelRow: serverScriptModelRow);
                        break;
                    }
                    extensions?.Invoke();
                }
            })));
        }
Exemple #20
0
 public static HtmlBuilder GridHeader(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     IEnumerable <Column> columns,
     View view     = null,
     bool sort     = true,
     bool editRow  = false,
     bool checkRow = true,
     bool checkAll = false,
     string action = "GridRows",
     ServerScriptModelRow serverScriptModelRow = null)
 {
     return(hb.Tr(
                css: "ui-widget-header",
                action: () =>
     {
         if (editRow)
         {
             hb.Th(
                 action: () =>
             {
                 if (editRow && context.CanCreate(ss: ss))
                 {
                     hb.Button(
                         title: Displays.New(context: context),
                         controlCss: "button-icon",
                         onClick: "$p.newOnGrid($(this));",
                         icon: "ui-icon-plus",
                         action: "NewOnGrid",
                         method: "post");
                 }
             });
         }
         else if (checkRow)
         {
             hb.Th(action: () => hb
                   .CheckBox(
                       controlId: "GridCheckAll",
                       _checked: checkAll));
         }
         columns.ForEach(column =>
         {
             var gridLabelText = column.GridLabelText;
             var serverScriptLabelText = serverScriptModelRow?.Columns
                                         ?.Get(column.ColumnName)
                                         ?.LabelText;
             if (gridLabelText == column.LabelText &&
                 serverScriptLabelText != null &&
                 serverScriptLabelText != column.LabelText)
             {
                 gridLabelText = serverScriptLabelText;
             }
             if (sort)
             {
                 hb.Th(
                     css: column.CellCss(css: "sortable"),
                     attributes: new HtmlAttributes()
                     .DataName(column.ColumnName),
                     action: () => hb
                     .Div(
                         attributes: new HtmlAttributes()
                         .DataId("ViewSorters__" + column.ColumnName)
                         .Add("data-order-type", OrderBy(
                                  view, column.ColumnName))
                         .DataAction(action)
                         .DataMethod("post"),
                         action: () => hb
                         .Span(action: () => hb
                               .Text(text: gridLabelText))
                         .SortIcon(
                             view: view,
                             key: column.ColumnName)));
             }
             else
             {
                 hb.Th(
                     css: column.CellCss(),
                     action: () => hb
                     .Text(text: gridLabelText));
             }
         });
     }));
 }
Exemple #21
0
 private static HtmlBuilder Common(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     View view,
     bool readOnly,
     bool updateButton,
     bool copyButton,
     bool moveButton,
     bool mailButton,
     bool deleteButton,
     ServerScriptModelRow serverScriptModelRow)
 {
     return(hb
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.UpdateCommand,
                controlId: "UpdateCommand",
                text: Displays.Update(context: context),
                controlCss: "button-icon validate",
                accessKey: "s",
                onClick: "$p.send($(this));",
                icon: "ui-icon-disk",
                action: "Update",
                method: "put",
                _using: updateButton &&
                context.CanUpdate(ss: ss) &&
                !readOnly)
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.OpenCopyDialogCommand,
                controlId: "OpenCopyDialogCommand",
                text: Displays.Copy(context: context),
                controlCss: "button-icon open-dialog",
                accessKey: "c",
                onClick: "$p.openDialog($(this));",
                icon: "ui-icon-copy",
                selector: "#CopyDialog",
                _using: copyButton &&
                context.CanCreate(ss: ss) &&
                (ss.IsSite(context: context) || ss.AllowCopy == true))
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.ReferenceCopyCommand,
                controlId: "ReferenceCopyCommand",
                text: Displays.ReferenceCopy(context: context),
                controlCss: "button-icon",
                accessKey: "k",
                onClick: $"location.href='{Locations.ItemNew(context: context, id: ss.SiteId)}?CopyFrom={context.Id}'",
                icon: "ui-icon-copy",
                _using: copyButton &&
                context.CanCreate(ss: ss) &&
                !ss.IsSite(context: context) &&
                ss.AllowReferenceCopy == true)
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.MoveTargetsCommand,
                controlId: "MoveTargetsCommand",
                text: Displays.Move(context: context),
                controlCss: "button-icon open-dialog",
                accessKey: "o",
                onClick: "$p.moveTargets($(this));",
                icon: "ui-icon-transferthick-e-w",
                selector: "#MoveDialog",
                action: "MoveTargets",
                method: "get",
                _using: moveButton &&
                ss.MoveTargets?.Any() == true &&
                context.CanUpdate(ss: ss) &&
                ss.MoveTargetsOptions(sites: ss.NumberOfMoveTargetsTable(context: context))
                .Any(o => ss.MoveTargets.Contains(o.Key.ToLong())) &&
                !readOnly)
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.EditOutgoingMail,
                controlId: "EditOutgoingMail",
                text: Displays.Mail(context: context),
                controlCss: "button-icon",
                onClick: "$p.openOutgoingMailDialog($(this));",
                icon: "ui-icon-mail-closed",
                action: "Edit",
                method: "put",
                accessKey: "m",
                _using: mailButton &&
                context.CanSendMail(ss: ss))
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.DeleteCommand,
                controlId: "DeleteCommand",
                text: Displays.Delete(context: context),
                controlCss: "button-icon",
                accessKey: "r",
                onClick: "$p.send($(this));",
                icon: "ui-icon-trash",
                action: "Delete",
                method: "delete",
                confirm: "ConfirmDelete",
                _using: deleteButton &&
                context.CanDelete(ss: ss) &&
                !ss.IsSite(context: context) &&
                !readOnly)
            .Button(
                serverScriptModelRow: serverScriptModelRow,
                commandDisplayTypes: view?.OpenDeleteSiteDialogCommand,
                controlId: "OpenDeleteSiteDialogCommand",
                text: Displays.DeleteSite(context: context),
                controlCss: "button-icon",
                accessKey: "r",
                onClick: "$p.openDeleteSiteDialog($(this));",
                icon: "ui-icon-trash",
                _using: deleteButton &&
                context.CanDelete(ss: ss) &&
                ss.IsSite(context: context) &&
                !readOnly));
 }
        public static ServerScriptModelRow Execute(
            Context context,
            SiteSettings ss,
            BaseItemModel itemModel,
            View view,
            ServerScript[] scripts,
            string condition,
            bool debug,
            bool onTesting = false)
        {
            if (!(Parameters.Script.ServerScript != false &&
                  context.ContractSettings.ServerScript != false &&
                  context.ServerScriptDisabled == false))
            {
                return(null);
            }
            if (!(context?.ServerScriptDepth < 10))
            {
                return(null);
            }
            itemModel = itemModel ?? new BaseItemModel();
            ServerScriptModelRow scriptValues = null;

            using (var model = new ServerScriptModel(
                       context: context,
                       ss: ss,
                       data: Values(
                           context: context,
                           ss: ss,
                           model: itemModel),
                       columns: Columns(
                           context: context,
                           ss: ss,
                           model: itemModel),
                       view: view,
                       condition: condition,
                       debug: debug,
                       onTesting: onTesting))
            {
                using (var engine = new ScriptEngine(debug: debug))
                {
                    try
                    {
                        engine.ContinuationCallback = model.ContinuationCallback;
                        engine.AddHostObject("context", model.Context);
                        engine.AddHostObject("model", model.Model);
                        engine.AddHostObject("depts", model.Depts);
                        engine.AddHostObject("groups", model.Groups);
                        engine.AddHostObject("users", model.Users);
                        engine.AddHostObject("columns", model.Columns);
                        engine.AddHostObject("siteSettings", model.SiteSettings);
                        engine.AddHostObject("view", model.View);
                        engine.AddHostObject("items", model.Items);
                        engine.AddHostObject("hidden", model.Hidden);
                        engine.AddHostObject("elements", model.Elements);
                        engine.AddHostObject("extendedSql", model.ExtendedSql);
                        engine.AddHostObject("notifications", model.Notification);
                        if (!Parameters.Script.DisableServerScriptHttpClient)
                        {
                            engine.AddHostObject("httpClient", model.HttpClient);
                        }
                        engine.AddHostObject("utilities", model.Utilities);
                        engine.Execute(scripts.Select(o => o.Body).Join("\n"));
                    }
                    finally
                    {
                        engine.ContinuationCallback = null;
                    }
                }
                scriptValues = SetValues(
                    context: context,
                    ss: ss,
                    model: itemModel,
                    view: view,
                    data: model);
            }
            return(scriptValues);
        }