public static IEnumerable <(string Name, ServerScriptModelColumn Value)> Columns(
            Context context, SiteSettings ss, BaseItemModel model)
        {
            var mine    = model.Mine(context: context);
            var columns = Def
                          .ColumnDefinitionCollection
                          .Where(definition => definition.TableName == ss?.ReferenceType)
                          .Select(definition =>
            {
                Column column = null;
                ss?.ColumnHash?.TryGetValue(definition.ColumnName, out column);
                return(
                    definition.ColumnName,
                    model.ServerScriptModelRow.Columns?.Get(column?.ColumnName)
                    ?? new ServerScriptModelColumn(
                        labelText: column?.LabelText,
                        labelRaw: string.Empty,
                        rawText: string.Empty,
                        readOnly: column?.EditorReadOnly == true,
                        hide: column?.Hide == true,
                        validateRequired: column?.ValidateRequired == true,
                        extendedFieldCss: column?.ExtendedFieldCss,
                        extendedControlCss: column?.ExtendedControlCss,
                        extendedCellCss: column?.ExtendedCellCss,
                        extendedHtmlBeforeField: column?.ExtendedHtmlBeforeField,
                        extendedHtmlBeforeLabel: column?.ExtendedHtmlBeforeLabel,
                        extendedHtmlBetweenLabelAndControl: column?.ExtendedHtmlBetweenLabelAndControl,
                        extendedHtmlAfterControl: column?.ExtendedHtmlAfterControl,
                        extendedHtmlAfterField: column?.ExtendedHtmlAfterField));
            })
                          .ToArray();

            return(columns);
        }
예제 #2
0
        public PartialViewResult AddComment(Guid itemId, ItemTypeEnum itemType, Guid?parentCommentId, string commentText)
        {
            if (!string.IsNullOrEmpty(commentText) && User.UserId != null)
            {
                BaseItemModel data      = null;
                Guid          newItemId = DataService.AddComment(itemId, (Guid)User.UserId, parentCommentId, commentText, itemType);
                _mailService.NewComment(newItemId);
                switch (itemType)
                {
                case ItemTypeEnum.Author:
                    data = DataService.GetAuthor(itemId, User.UserId);
                    break;

                case ItemTypeEnum.Book:
                    data = DataService.GetBook(itemId, User.UserId);
                    break;

                case ItemTypeEnum.Serie:
                    data = DataService.GetSerie(itemId, User.UserId);
                    break;

                case ItemTypeEnum.Review:
                    data = DataService.GetReview(itemId, User.UserId);
                    break;
                }
                return(PartialView("~/Views/Partial/Comments.cshtml", data));
            }
            return(null);
        }
        public static ServerScriptModelRow Execute(
            Context context,
            SiteSettings ss,
            BaseItemModel itemModel,
            View view,
            Func <ServerScript, bool> where,
            string condition)
        {
            if (!(Parameters.Script.ServerScript != false &&
                  context.ContractSettings.ServerScript != false))
            {
                return(null);
            }
            var scripts = ss
                          ?.GetServerScripts(context: context)
                          ?.Where(where)
                          .ToArray();

            if (scripts?.Any() != true)
            {
                return(null);
            }
            var scriptValues = Execute(
                context: context,
                ss: ss,
                itemModel: itemModel,
                view: view,
                scripts: scripts,
                condition: condition,
                debug: scripts.Any(o => o.Debug));

            return(scriptValues);
        }
예제 #4
0
        public PartialViewResult SetRating(Guid itemId, ItemTypeEnum itemType, short ratingValue)
        {
            BaseItemModel model = GetNewItemByType(itemType);

            model.Id     = itemId;
            model.Rating = DoSetRating(itemId, (Guid)User.UserId, itemType, ratingValue);
            return(PartialView("~/Views/Partial/Rating.cshtml", model));
        }
 private static void SetExtendedColumnValues(
     Context context,
     BaseItemModel model,
     ExpandoObject data,
     Column[] columns)
 {
     columns?.ForEach(column => model?.GetValue(
                          context: context,
                          column: column,
                          value: String(
                              data: data,
                              columnName: column.ColumnName)));
 }
예제 #6
0
        private async Task NavigationAsync()
        {
            if (this.SelectedItem is FolderModel folder)
            {
                await this.NavigationService.NavigateToAsync <FolderViewModel>(folder);
            }
            else if (this.SelectedItem is NoteModel note)
            {
                await this.NavigationService.NavigateToAsync <NoteViewModel>(note);
            }

            this.SelectedItem = null;
        }
예제 #7
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 Column[] FilterCanUpdateColumns(
            Context context,
            SiteSettings ss,
            BaseItemModel model,
            IEnumerable <string> columnNames)
        {
            var mine    = model?.Mine(context: context);
            var columns = columnNames
                          .Distinct()
                          .Select(columnName => ss.ColumnHash.TryGetValue(columnName, out var column)
                    ? column
                    : null)
                          .Where(column => column?.CanEdit(
                                     context: context,
                                     ss: ss,
                                     mine: mine,
                                     skipCanReadCheck: true) == true)
                          .ToArray();

            return(columns);
        }
        private static Dictionary <string, ServerScriptModelColumn> SetColumns(
            Context context,
            SiteSettings ss,
            ExpandoObject columns,
            BaseItemModel model)
        {
            var mine         = model?.Mine(context: context);
            var scriptValues = new Dictionary <string, ServerScriptModelColumn>();

            columns?.ForEach(datam =>
            {
                if (!ss.ColumnHash.TryGetValue(datam.Key, out var column))
                {
                    return;
                }
                var serverScriptColumn = datam.Value as ServerScriptModelColumn;
                if (serverScriptColumn.Changed())
                {
                    scriptValues[datam.Key] = serverScriptColumn;
                }
            });
            return(scriptValues);
        }
예제 #10
0
        public static ServerScriptModelRow Execute(
            Context context,
            SiteSettings ss,
            BaseItemModel itemModel,
            View view,
            Func <ServerScript, bool> where)
        {
            if (!(Parameters.Script.ServerScript != false &&
                  context.ContractSettings.Script != false))
            {
                return(null);
            }
            var serverScripts = ss
                                ?.ServerScripts
                                ?.Where(where)
                                .ToArray();

            if (serverScripts?.Any() != true)
            {
                return(null);
            }
            ss.SetColumnAccessControls(
                context: context,
                mine: (itemModel is ResultModel resultModel)
                    ? resultModel.Mine(context: context)
                    : (itemModel is IssueModel issueModel)
                        ? issueModel.Mine(context: context)
                        : null);
            var scriptValues = Execute(
                context: context,
                ss: ss,
                itemModel: itemModel,
                view: view,
                scripts: serverScripts);

            return(scriptValues);
        }
예제 #11
0
        private BaseItemModel GetNewItemByType(ItemTypeEnum itemType)
        {
            BaseItemModel result = null;

            switch (itemType)
            {
            case ItemTypeEnum.Author:
                result = new AuthorItemModel();
                break;

            case ItemTypeEnum.Book:
                result = new BookItemModel();
                break;

            case ItemTypeEnum.Serie:
                result = new SerieItemModel();
                break;

            case ItemTypeEnum.Review:
                result = new ReviewItemModel();
                break;
            }
            return(result);
        }
        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 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);
        }
예제 #14
0
        public static IEnumerable <(string Name, object Value)> Values(SiteSettings ss, BaseItemModel model)
        {
            var values = new List <(string, object)>();

            values.AddRange(model
                            .ClassHash
                            .Select(element => ReadNameValue(
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value)));
            values.AddRange(model
                            .NumHash
                            .Select(element => ReadNameValue(
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value)));
            values.AddRange(model
                            .DateHash
                            .Select(element => ReadNameValue(
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value)));
            values.AddRange(model
                            .DescriptionHash
                            .Select(element => ReadNameValue(
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value)));
            values.AddRange(model
                            .CheckHash
                            .Select(element => ReadNameValue(
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value)));
            if (model is ResultModel resultModel)
            {
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(ResultModel.Title),
                               value: resultModel.Title?.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(ResultModel.Body),
                               value: resultModel.Body));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(ResultModel.Status),
                               value: resultModel.Status?.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(ResultModel.Manager),
                               value: resultModel.Manager.Id));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(ResultModel.Owner),
                               value: resultModel.Owner.Id));
            }
            if (model is IssueModel issueModel)
            {
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.Title),
                               value: issueModel.Title?.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.Body),
                               value: issueModel.Body));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.StartTime),
                               value: issueModel.StartTime));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.CompletionTime),
                               value: issueModel.CompletionTime.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.WorkValue),
                               value: issueModel.WorkValue.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.ProgressRate),
                               value: issueModel.ProgressRate.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.Status),
                               value: issueModel.Status?.Value));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.Manager),
                               value: issueModel.Manager.Id));
                values.Add(ReadNameValue(
                               ss: ss,
                               columnName: nameof(IssueModel.Owner),
                               value: issueModel.Owner.Id));
            }
            return(values.ToArray());
        }
예제 #15
0
        public static ServerScriptModelRow SetValues(
            Context context,
            SiteSettings ss,
            BaseItemModel model,
            View view,
            ServerScriptModel data)
        {
            var valueColumns = FilterCanUpdateColumns(
                ss: ss,
                columnNames: data.GetChangeItemNames());
            var valueColumnDictionary = valueColumns
                                        .ToDictionary(
                column => column.ColumnName,
                column => column);
            var scriptValues = SetRow(
                ss: ss,
                model: data.Data,
                columns: data.Columns);

            SetExtendedColumnValues(
                context: context,
                model: model,
                data: data.Data,
                columns: valueColumns);
            SetColumnFilterHachValues(
                context: context,
                view: view,
                columnFilterHach: data.View.Filters);
            SetColumnSorterHachValues(
                context: context,
                view: view,
                columnSorterHach: data.View.Sorters);
            switch (ss?.ReferenceType)
            {
            case "Issues":
                if (model is IssueModel issueModel)
                {
                    SetIssueModelValues(
                        context: context,
                        issueModel: issueModel,
                        data: data.Data,
                        columns: valueColumnDictionary);
                }
                break;

            case "Results":
                if (model is ResultModel resultModel)
                {
                    SetResultModelValues(
                        context: context,
                        resultModel: resultModel,
                        data: data.Data,
                        columns: valueColumnDictionary);
                }
                break;
            }
            SetViewValues(
                ss: ss,
                data: data.SiteSettings);
            return(scriptValues);
        }
        public static IEnumerable <(string Name, object Value)> Values(
            Context context, SiteSettings ss, BaseItemModel model)
        {
            var mine   = model?.Mine(context: context);
            var values = new List <(string, object)>();

            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.SiteId),
                           value: model.SiteId,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.Title),
                           value: model.Title?.Value,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.Body),
                           value: model.Body,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.Ver),
                           value: model.Ver,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.Creator),
                           value: model.Creator.Id,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.Updator),
                           value: model.Updator.Id,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.CreatedTime),
                           value: model.CreatedTime?.Value,
                           mine: mine));
            values.Add(ReadNameValue(
                           context: context,
                           ss: ss,
                           columnName: nameof(model.UpdatedTime),
                           value: model.UpdatedTime?.Value,
                           mine: mine));
            values.AddRange(model
                            .ClassHash
                            .Select(element => ReadNameValue(
                                        context: context,
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value,
                                        mine: mine)));
            values.AddRange(model
                            .NumHash
                            .Select(element => ReadNameValue(
                                        context: context,
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value.Value
                                        ?? (ss?.GetColumn(
                                                context: context,
                                                columnName: element.Key)
                                            ?.Nullable == true
                                    ? (decimal?)null
                                    : 0),
                                        mine: mine)));
            values.AddRange(model
                            .DateHash
                            .Select(element => ReadNameValue(
                                        context: context,
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value,
                                        mine: mine)));
            values.AddRange(model
                            .DescriptionHash
                            .Select(element => ReadNameValue(
                                        context: context,
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value,
                                        mine: mine)));
            values.AddRange(model
                            .CheckHash
                            .Select(element => ReadNameValue(
                                        context: context,
                                        ss: ss,
                                        columnName: element.Key,
                                        value: element.Value,
                                        mine: mine)));
            if (model is IssueModel issueModel)
            {
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.IssueId),
                               value: issueModel.IssueId,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.StartTime),
                               value: issueModel.StartTime,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.CompletionTime),
                               value: issueModel.CompletionTime.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.WorkValue),
                               value: issueModel.WorkValue.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.ProgressRate),
                               value: issueModel.ProgressRate.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.RemainingWorkValue),
                               value: issueModel.RemainingWorkValue.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.Status),
                               value: issueModel.Status?.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.Manager),
                               value: issueModel.Manager.Id,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.Owner),
                               value: issueModel.Owner.Id,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(IssueModel.Locked),
                               value: issueModel.Locked,
                               mine: mine));
            }
            if (model is ResultModel resultModel)
            {
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(ResultModel.ResultId),
                               value: resultModel.ResultId,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(ResultModel.Status),
                               value: resultModel.Status?.Value,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(ResultModel.Manager),
                               value: resultModel.Manager.Id,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(ResultModel.Owner),
                               value: resultModel.Owner.Id,
                               mine: mine));
                values.Add(ReadNameValue(
                               context: context,
                               ss: ss,
                               columnName: nameof(ResultModel.Locked),
                               value: resultModel.Locked,
                               mine: mine));
            }
            return(values.ToArray());
        }
 public ServerScriptModelApiModel(Context context, BaseItemModel model, bool onTesting)
 {
     Context   = context;
     Model     = model ?? new BaseItemModel();
     OnTesting = onTesting;
 }
        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 ServerScriptModelRow SetValues(
            Context context,
            SiteSettings ss,
            BaseItemModel model,
            View view,
            ServerScriptModel data)
        {
            var valueColumns = FilterCanUpdateColumns(
                context: context,
                ss: ss,
                model: model,
                columnNames: data.GetChangeItemNames());
            var valueColumnDictionary = valueColumns
                                        .ToDictionary(
                column => column.ColumnName,
                column => column);
            var scriptValues = SetRow(
                context: context,
                ss: ss,
                model: data.Model,
                columns: data.Columns,
                hidden: data.Hidden,
                elements: data.Elements,
                itemModel: model);

            SetExtendedColumnValues(
                context: context,
                model: model,
                data: data.Model,
                columns: valueColumns);
            if (view != null)
            {
                view.AlwaysGetColumns   = data.View.AlwaysGetColumns;
                view.OnSelectingWhere   = data.View.OnSelectingWhere;
                view.OnSelectingOrderBy = data.View.OnSelectingOrderBy;
                view.ColumnPlaceholders = data.View.ColumnPlaceholders;
            }
            SetColumnFilterHashValues(
                context: context,
                view: view,
                columnFilterHash: data.View.Filters);
            SetColumnSorterHashValues(
                context: context,
                view: view,
                columnSorterHash: data.View.Sorters);
            model.ReadOnly = Bool(
                data: data.Model,
                name: "ReadOnly");
            switch (ss?.ReferenceType)
            {
            case "Issues":
                if (model is IssueModel issueModel)
                {
                    SetIssueModelValues(
                        context: context,
                        ss: ss,
                        issueModel: issueModel,
                        data: data.Model,
                        columns: valueColumnDictionary);
                }
                break;

            case "Results":
                if (model is ResultModel resultModel)
                {
                    SetResultModelValues(
                        context: context,
                        ss: ss,
                        resultModel: resultModel,
                        data: data.Model,
                        columns: valueColumnDictionary);
                }
                break;
            }
            SetViewValues(
                ss: ss,
                data: data.SiteSettings);
            return(scriptValues);
        }
예제 #20
0
        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;
                    }
                });
            }));
        }
예제 #21
0
        internal static string Create(CodeDefinition codeDefinition, DataContainer dataContainer)
        {
            var code = codeDefinition.FormattedCode();

            foreach (var placeholder in code.RegexValues(CodePatterns.IdPlaceholder))
            {
                var id = placeholder.RegexFirst(CodePatterns.Id);
                var codeChildDefinition = Def.CodeDefinitionCollection
                                          .FirstOrDefault(o => o.Id == id);
                if (codeChildDefinition != null)
                {
                    Def.SetCodeDefinitionOption(placeholder, codeChildDefinition);
                    var codeChildCollection = new List <string>();
                    switch (codeChildDefinition.RepeatType)
                    {
                    case "DefinitionFile":
                        DefinitionFile.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "DefinitionRow":
                        DefinitionRow.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "DefinitionColumn":
                        DefinitionColumn.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "BaseModel":
                        BaseModel.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "BaseItemModel":
                        BaseItemModel.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "Table":
                        Table.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "Column":
                        Column.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "Join":
                        Join.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "Form":
                        Form.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    case "Display":
                        Display.SetCodeCollection(
                            codeChildDefinition, codeChildCollection, dataContainer);
                        break;

                    default:
                        switch (dataContainer.Type)
                        {
                        case "DefinitionFile":
                            DefinitionFile.SetCodeCollection_Default(
                                codeChildDefinition, codeChildCollection, dataContainer);
                            break;

                        case "Table":
                            Column.SetCodeCollection_Default(
                                codeChildDefinition, codeChildCollection, dataContainer);
                            break;

                        default:
                            break;
                        }
                        break;
                    }
                    code = CodeChildCollection(
                        code, placeholder, codeChildDefinition, codeChildCollection);
                    codeChildDefinition.RestoreBySavedMemory();
                }
                else
                {
                    Consoles.Write(
                        DisplayAccessor.Displays.Get("DefinitionNotFound").Params(
                            id, DefinitionFiles.CodeDefinitionFileName),
                        Consoles.Types.Error,
                        abort: true);
                }
            }
            ReplaceCode(ref code, dataContainer.TableName);
            return(code);
        }