Exemplo n.º 1
0
        public async Task <IActionResult> Index()
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageLayers))
            {
                return(Unauthorized());
            }

            var layers = await _layerService.GetLayersAsync();

            var widgets = await _layerService.GetLayerWidgetsAsync(c => c.Latest == true);

            var model = new LayersIndexViewModel {
                Layers = layers.Layers
            };

            model.Zones = (await _siteService.GetSiteSettingsAsync()).As <LayerSettings>()?.Zones ?? Array.Empty <string>();

            model.Widgets = new Dictionary <string, List <dynamic> >();

            foreach (var widget in widgets.OrderBy(x => x.Position))
            {
                var            zone = widget.Zone;
                List <dynamic> list;
                if (!model.Widgets.TryGetValue(zone, out list))
                {
                    model.Widgets.Add(zone, list = new List <dynamic>());
                }

                list.Add(await _contentItemDisplayManager.BuildDisplayAsync(widget.ContentItem, this, "SummaryAdmin"));
            }

            return(View(model));
        }
Exemplo n.º 2
0
        public override async Task <IDisplayResult> EditAsync(ContentItem model, BuildEditorContext context)
        {
            var layerMetadata = model.As <LayerMetadata>();

            if (layerMetadata == null)
            {
                layerMetadata = new LayerMetadata();

                // Are we loading an editor that requires layer metadata?
                if (await context.Updater.TryUpdateModelAsync(layerMetadata, "LayerMetadata", m => m.Zone, m => m.Position) &&
                    !String.IsNullOrEmpty(layerMetadata.Zone))
                {
                    model.Weld(layerMetadata);
                }
                else
                {
                    return(null);
                }
            }

            return(Shape <LayerMetadataEditViewModel>("LayerMetadata_Edit", async shape =>
            {
                shape.LayerMetadata = layerMetadata;
                shape.Layers = (await _layerService.GetLayersAsync()).Layers;
            })
                   .Location("Content:before"));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Index()
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageLayers))
            {
                return(Forbid());
            }

            var layers = await _layerService.GetLayersAsync();

            var widgets = await _layerService.GetLayerWidgetsMetadataAsync(c => c.Latest == true);

            var model = new LayersIndexViewModel {
                Layers = layers.Layers.ToList()
            };

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var contentDefinitions = _contentDefinitionManager.ListTypeDefinitions();

            model.Zones   = siteSettings.As <LayerSettings>().Zones ?? Array.Empty <string>();
            model.Widgets = new Dictionary <string, List <dynamic> >();

            foreach (var widget in widgets.OrderBy(x => x.Position))
            {
                var            zone = widget.Zone;
                List <dynamic> list;
                if (!model.Widgets.TryGetValue(zone, out list))
                {
                    model.Widgets.Add(zone, list = new List <dynamic>());
                }

                if (contentDefinitions.Any(c => c.Name == widget.ContentItem.ContentType))
                {
                    list.Add(await _contentItemDisplayManager.BuildDisplayAsync(widget.ContentItem, _updateModelAccessor.ModelUpdater, "SummaryAdmin"));
                }
                else
                {
                    _logger.LogWarning("The Widget content item with id {ContentItemId} has no matching {ContentType} content type definition.", widget.ContentItem.ContentItemId, widget.ContentItem.ContentType);
                    await _notifier.WarningAsync(H["The Widget content item with id {0} has no matching {1} content type definition.", widget.ContentItem.ContentItemId, widget.ContentItem.ContentType]);
                }
            }

            return(View(model));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Create(string queryType, string name, string type, string conditionGroupId)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageLayers))
            {
                return(Forbid());
            }

            var layers = await _layerService.GetLayersAsync();

            var layer = layers.Layers.FirstOrDefault(x => String.Equals(x.Name, name));

            if (layer == null)
            {
                return(NotFound());
            }

            var conditionGroup = FindConditionGroup(layer.LayerRule, conditionGroupId);

            if (conditionGroup == null)
            {
                return(NotFound());
            }

            var condition = _factories.FirstOrDefault(x => x.Name == type)?.Create();

            if (condition == null)
            {
                return(NotFound());
            }

            var model = new LayerRuleCreateViewModel
            {
                Name             = name,
                ConditionGroupId = conditionGroup.ConditionId,
                ConditionType    = type,
                Editor           = await _displayManager.BuildEditorAsync(condition, updater : _updateModelAccessor.ModelUpdater, isNew : true)
            };

            return(View(model));
        }
        public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result)
        {
            var allLayersState = step as AllLayersDeploymentStep;

            if (allLayersState == null)
            {
                return;
            }

            var layers = await _layerService.GetLayersAsync();

            result.Steps.Add(new JObject(
                                 new JProperty("name", "Layers"),
                                 new JProperty("Layers", layers.Layers.Select(JObject.FromObject))
                                 ));
        }
Exemplo n.º 6
0
        public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result)
        {
            var allLayersState = step as AllLayersDeploymentStep;

            if (allLayersState == null)
            {
                return;
            }

            var layers = await _layerService.GetLayersAsync();

            result.Steps.Add(new JObject(
                                 new JProperty("name", "Layers"),
                                 new JProperty("Layers", layers.Layers.Select(JObject.FromObject))
                                 ));

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            // Adding Layer settings
            result.Steps.Add(new JObject(
                                 new JProperty("name", "Settings"),
                                 new JProperty("LayerSettings", siteSettings.As <LayerSettings>().Zones)
                                 ));
        }
Exemplo n.º 7
0
        public async Task ExecuteAsync(RecipeExecutionContext context)
        {
            if (!String.Equals(context.Name, "Layers", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            var model = context.Step.ToObject <LayerStepModel>();

            var allLayers = await _layerService.GetLayersAsync();

            foreach (Layer layer in model.Layers)
            {
                var existing = allLayers.Layers.FirstOrDefault(x => String.Equals(x.Name, layer.Name, StringComparison.OrdinalIgnoreCase));

                if (existing != null)
                {
                    // Replace any property that is set in the recipe step
                    if (!String.IsNullOrEmpty(layer.Rule))
                    {
                        existing.Rule = layer.Rule;
                    }

                    if (!String.IsNullOrEmpty(layer.Description))
                    {
                        existing.Description = layer.Description;
                    }
                }
                else
                {
                    allLayers.Layers.Add(layer);
                }
            }

            await _layerService.UpdateAsync(allLayers);
        }
Exemplo n.º 8
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            // Should only run on the front-end for a full view
            if ((context.Result is ViewResult || context.Result is PageResult) &&
                !AdminAttribute.IsApplied(context.HttpContext))
            {
                // Even if the Admin attribute is not applied we might be using the admin theme, for instance in Login views.
                // In this case don't render Layers.
                var selectedTheme = (await _themeManager.GetThemeAsync())?.Id;
                var adminTheme    = await _adminThemeService.GetAdminThemeNameAsync();

                if (selectedTheme == adminTheme)
                {
                    await next.Invoke();

                    return;
                }

                var widgets = await _memoryCache.GetOrCreateAsync("OrchardCore.Layers.LayerFilter:AllWidgets", entry =>
                {
                    entry.AddExpirationToken(_signal.GetToken(LayerMetadataHandler.LayerChangeToken));
                    return(_layerService.GetLayerWidgetsAsync(x => x.Published));
                });

                var layers = (await _layerService.GetLayersAsync()).Layers.ToDictionary(x => x.Name);

                dynamic layout = await _layoutAccessor.GetLayoutAsync();

                var updater = _modelUpdaterAccessor.ModelUpdater;

                var engine = _scriptingManager.GetScriptingEngine("js");
                var scope  = engine.CreateScope(_scriptingManager.GlobalMethodProviders.SelectMany(x => x.GetMethods()), _serviceProvider, null, null);

                var layersCache = new Dictionary <string, bool>();

                foreach (var widget in widgets)
                {
                    var layer = layers[widget.Layer];

                    if (layer == null)
                    {
                        continue;
                    }

                    bool display;
                    if (!layersCache.TryGetValue(layer.Name, out display))
                    {
                        if (String.IsNullOrEmpty(layer.Rule))
                        {
                            display = false;
                        }
                        else
                        {
                            display = Convert.ToBoolean(engine.Evaluate(scope, layer.Rule));
                        }

                        layersCache[layer.Rule] = display;
                    }

                    if (!display)
                    {
                        continue;
                    }

                    var widgetContent = await _contentItemDisplayManager.BuildDisplayAsync(widget.ContentItem, updater);

                    widgetContent.Classes.Add("widget");
                    widgetContent.Classes.Add("widget-" + widget.ContentItem.ContentType.HtmlClassify());

                    var wrapper = new WidgetWrapper
                    {
                        Widget  = widget.ContentItem,
                        Content = widgetContent
                    };

                    wrapper.Metadata.Alternates.Add("Widget_Wrapper__" + widget.ContentItem.ContentType);
                    wrapper.Metadata.Alternates.Add("Widget_Wrapper__Zone__" + widget.Zone);

                    var contentZone = layout.Zones[widget.Zone];
                    contentZone.Add(wrapper);
                }
            }

            await next.Invoke();
        }
Exemplo n.º 9
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            // Should only run on the front-end for a full view
            if (context.Result is ViewResult && !AdminAttribute.IsApplied(context.HttpContext))
            {
                var widgets = await _layerService.GetLayerWidgetsAsync(x => x.Published);

                var layers = (await _layerService.GetLayersAsync()).Layers.ToDictionary(x => x.Name);

                var layout  = _layoutAccessor.GetLayout();
                var updater = _modelUpdaterAccessor.ModelUpdater;

                var engine = _scriptingManager.GetScriptingEngine("js");
                var scope  = engine.CreateScope(_scriptingManager.GlobalMethodProviders.SelectMany(x => x.GetMethods()), _serviceProvider);

                var layersCache = new Dictionary <string, bool>();

                foreach (var widget in widgets)
                {
                    var layer = layers[widget.Layer];

                    if (layer == null)
                    {
                        continue;
                    }

                    bool display;
                    if (!layersCache.TryGetValue(layer.Name, out display))
                    {
                        if (String.IsNullOrEmpty(layer.Rule))
                        {
                            display = false;
                        }
                        else
                        {
                            display = Convert.ToBoolean(engine.Evaluate(scope, layer.Rule));
                        }

                        layersCache[layer.Rule] = display;
                    }

                    if (!display)
                    {
                        continue;
                    }

                    IShape widgetContent = await _contentItemDisplayManager.BuildDisplayAsync(widget.ContentItem, updater);

                    widgetContent.Classes.Add("widget");
                    widgetContent.Classes.Add("widget-" + widget.ContentItem.ContentType.HtmlClassify());

                    var wrapper = _shapeFactory.Create("Widget_Wrapper", new { Widget = widget.ContentItem, Content = widgetContent });
                    wrapper.Metadata.Alternates.Add("Widget_Wrapper__" + widget.ContentItem.ContentType);

                    var contentZone = layout.Zones[widget.Zone];
                    contentZone.Add(wrapper);
                }
            }

            await next.Invoke();
        }