protected override DriverResult Editor(AuditTrailSettingsPart part, IUpdateModel updater, dynamic shapeHelper) { if (!_authorizer.Authorize(Permissions.ManageAuditTrailSettings)) { return(null); } return(ContentShape("Parts_AuditTrailSettings_Edit", () => { var descriptors = _auditTrailManager.DescribeCategories(); var eventSettings = part.EventSettings.ToList(); var categoriesQuery = from categoryDescriptor in descriptors let eventsQuery = from eventDescriptor in categoryDescriptor.Events let eventSetting = GetOrCreate(eventSettings, eventDescriptor) select new AuditTrailEventSettingsViewModel { Event = eventDescriptor.Event, Name = eventDescriptor.Name, Description = eventDescriptor.Description, IsEnabled = eventDescriptor.IsMandatory || eventSetting.IsEnabled, IsMandatory = eventDescriptor.IsMandatory } select new AuditTrailCategorySettingsViewModel { Category = categoryDescriptor.Category, Name = categoryDescriptor.Name, Events = eventsQuery.ToList() }; var viewModel = new AuditTrailSettingsViewModel { Categories = categoriesQuery.ToList(), EnableClientIpAddressLogging = part.EnableClientIpAddressLogging }; // Update the settings as we may have added new settings. part.EventSettings = eventSettings; if (updater != null) { var eventsDictionary = _auditTrailManager.DescribeProviders().Describe().SelectMany(x => x.Events).ToDictionary(x => x.Event); if (updater.TryUpdateModel(viewModel, Prefix, null, null)) { foreach (var eventSettingViewModel in viewModel.Categories.SelectMany(x => x.Events)) { var eventSetting = eventSettings.First(x => x.EventName == eventSettingViewModel.Event); var descriptor = eventsDictionary[eventSetting.EventName]; eventSetting.IsEnabled = eventSettingViewModel.IsEnabled || descriptor.IsMandatory; } part.EventSettings = eventSettings; part.EnableClientIpAddressLogging = viewModel.EnableClientIpAddressLogging; } } return shapeHelper.EditorTemplate(TemplateName: "Parts.AuditTrailSettings", Model: viewModel, Prefix: Prefix); }).OnGroup("Audit Trail")); }
public override async Task <IDisplayResult> UpdateAsync(AuditTrailSettings settings, BuildEditorContext context) { if (context.GroupId == AuditTrailSettingsGroupId) { if (!await IsAuthorizedToManageAuditTrailSettingsAsync()) { return(null); } var model = new AuditTrailSettingsViewModel(); await context.Updater.TryUpdateModelAsync(model, Prefix); var eventSettings = model.Categories; var eventsDictionary = _auditTrailManager.DescribeProviders().Describe() .SelectMany(categoryDescriptor => categoryDescriptor.Events) .ToDictionary(eventDescriptor => eventDescriptor.FullEventName); foreach (var eventSettingViewModel in model.Categories.SelectMany(categorySettings => categorySettings.Events)) { var eventSetting = eventSettings .SelectMany(categorySettings => categorySettings.Events .Where(eventSettings => eventSettings.Event == eventSettingViewModel.Event)) .FirstOrDefault(); var descriptor = eventsDictionary[eventSetting.Event]; eventSetting.IsEnabled = eventSettingViewModel.IsEnabled || descriptor.IsMandatory; } settings.EnableClientIpAddressLogging = model.EnableClientIpAddressLogging; settings.BlacklistedContentTypes = model.BlacklistedContentTypes; settings.BlacklistedContentTypeNames = model.BlacklistedContentTypes .Where(blacklistedContentType => blacklistedContentType.Selected) .Select(blacklistedContentType => blacklistedContentType.Name).ToArray(); settings.EventSettings = eventSettings .SelectMany(categorySettings => categorySettings.Events .Select(eventSettings => new AuditTrailEventSetting { EventName = eventSettings.Event, IsEnabled = eventSettings.IsEnabled })); } return(await EditAsync(settings, context)); }
public async Task <IShape> BuildFilterDisplayAsync(Filters filters) { var filterDisplay = await _shapeFactory.CreateAsync("AuditTrailFilter"); var filterDisplayContext = new DisplayFilterContext(_shapeFactory, filters, filterDisplay as Shape); _auditTrailEventHandlers.Invoke((handler, context) => handler.DisplayFilterAsync(context), filterDisplayContext, Logger); // Give each provider a chance to provide a filter display. var providersContext = _auditTrailManager.DescribeProviders(); foreach (var action in providersContext.FilterDisplays) { await action(filterDisplayContext); } return(filterDisplay); }