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)); }
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")); }
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)); }
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)) )); }
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) )); }
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); }
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(); }
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(); }