public async Task <IActionResult> GetOneForRender(string id)
        {
            var result = await _standardRepository.GetOneForRenderAsync(id);

            // Enhancement 0.9.0: We need to append more controls which are related to Composite Control
            if (result.Controls != null && result.Controls.Any())
            {
                var compositeControls = result.Controls.Where(a => a.Type == Entities.SectionParts.Controls.ControlType.Composite).ToList();
                foreach (var control in compositeControls)
                {
                    var compositeControl = await _compositeControlRepository.GetOneAsync(control.CompositeControlId);

                    foreach (var childControl in compositeControl.Controls)
                    {
                        childControl.HideSensitive();
                        childControl.CompositeControlId = control.Name;
                        childControl.Name = control.Name + "_" + childControl.Name;
                    }
                    result.Controls.AddRange(compositeControl.Controls);
                }
            }

            _logger.Info("Found standard component: {@result}", result);
            return(Ok(result));
        }
 public async Task <IActionResult> Get(string id)
 {
     return(Ok(await _controlRepository.GetOneAsync(id)));
 }
Exemplo n.º 3
0
        public async Task <IActionResult> FetchControlDatasource(string pageId, [FromBody] PageSelectionDatasourceModel model)
        {
            var page = await _pageRepository.GetOneAsync(pageId);

            if (page != null)
            {
                var section = page.Builder.Sections.First(a => a.Name == model.SectionName);
                if (section.ConstructionType == SectionContructionType.Standard)
                {
                    // Only support Standard component
                    var sectionStandard = (await _standardServiceProvider.GetStandardComponentsByIds(new List <string> {
                        section.ComponentId
                    })).First();

                    if (!model.IsChildCompositeControl)
                    {
                        var control = sectionStandard.Controls.First(a => a.Name == model.ControlName);
                        if (control.Type == Portal.Entities.SectionParts.Controls.ControlType.AutoComplete ||
                            control.Type == Portal.Entities.SectionParts.Controls.ControlType.Select)
                        {
                            var parameters = model?
                                             .Parameters
                                             .Select(a => new ExecuteParamModel {
                                Name = a.Name, RemoveQuotes = a.RemoveQuotes, ReplaceValue = a.ReplaceValue
                            }).ToList();

                            var result =
                                await _databaseServiceProvider
                                .ExecuteDatabase(
                                    control.DatasourceOptions.DatabaseOptions.DatabaseConnectionId,
                                    control.DatasourceOptions.DatabaseOptions.Query,
                                    parameters
                                    );

                            return(Ok(result));
                        }
                        return(BadRequest());
                    }
                    else
                    {
                        var compositeControl = await _controlRepository.GetOneAsync(model.CompositeControlId);

                        var control = compositeControl.Controls.First(a => a.Name == model.ControlName);
                        if (control.Type == Portal.Entities.SectionParts.Controls.ControlType.AutoComplete ||
                            control.Type == Portal.Entities.SectionParts.Controls.ControlType.Select)
                        {
                            var parameters = model?
                                             .Parameters
                                             .Select(a => new ExecuteParamModel {
                                Name = a.Name, RemoveQuotes = a.RemoveQuotes, ReplaceValue = a.ReplaceValue
                            }).ToList();

                            var result =
                                await _databaseServiceProvider
                                .ExecuteDatabase(
                                    control.DatasourceOptions.DatabaseOptions.DatabaseConnectionId,
                                    control.DatasourceOptions.DatabaseOptions.Query,
                                    parameters
                                    );

                            return(Ok(result));
                        }
                        return(BadRequest());
                    }
                }
                else
                {
                    return(BadRequest());
                }
            }

            return(NotFound());
        }