public override async Task <IViewProviderResult> BuildEditAsync(ThemeAdmin model, IViewProviderContext updater) { // We are adding a new theme if (String.IsNullOrEmpty(model.ThemeId)) { var createViewModel = new CreateThemeViewModel() { AvailableThemes = GetAvailableThemes() }; return(Views( View <CreateThemeViewModel>("Admin.Create.Header", viewModel => createViewModel).Zone("header").Order(1), View <CreateThemeViewModel>("Admin.Create.Content", viewModel => createViewModel).Zone("content").Order(1), View <CreateThemeViewModel>("Admin.Create.Footer", viewModel => createViewModel).Zone("footer").Order(1) )); } var file = _siteThemeFileManager.GetFile(model.ThemeId, model.Path); // We are editing an existing theme var editViewModel = new EditThemeViewModel() { ThemeId = model.ThemeId, Path = model.Path, File = file, FileContents = await _siteThemeFileManager.ReadFileAsync(file), Files = !string.IsNullOrEmpty(model.Path) ? _siteThemeFileManager.GetFiles(model.ThemeId, model.Path) : _siteThemeFileManager.GetFiles(model.ThemeId) }; return(Views( View <EditThemeViewModel>("Admin.Edit.Header", viewModel => editViewModel).Zone("header").Order(1), View <EditThemeViewModel>("Admin.Edit.Content", viewModel => editViewModel).Zone("content").Order(1) )); }
// ------------ // Edit // ------------ public async Task <IActionResult> Edit(string id, string path) { // Ensure we have permission if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditThemes)) { return(Unauthorized()); } // Get theme var theme = _siteThemeLoader .AvailableThemes.FirstOrDefault(t => t.Id.Equals(id, StringComparison.OrdinalIgnoreCase)); // Ensure we found the theme if (theme == null) { return(NotFound()); } // Get theme files for current theme and path var themeFile = _themeFileManager.GetFile(id, path); // Build breadcrumb _breadCrumbManager.Configure(builder => { builder.Add(S["Home"], home => home .Action("Index", "Admin", "Plato.Admin") .LocalNav()) .Add(S["Themes"], theming => theming .Action("Index", "Admin", "Plato.Theming") .LocalNav()); // Build parents var parents = _themeFileManager.GetParents(id, path); if (parents != null) { builder.Add(S[theme.Name], home => home .Action("Edit", "Admin", "Plato.Theming", new RouteValueDictionary() { ["id"] = theme.Id, ["path"] = "" }).LocalNav()); foreach (var parent in parents) { if (string.IsNullOrEmpty(parent.RelativePath)) { // don't render root - handled above continue; } if (parent.RelativePath.Equals(path, StringComparison.OrdinalIgnoreCase)) { builder.Add(S[parent.Name], home => home .LocalNav()); } else { builder.Add(S[parent.Name], home => home .Action("Edit", "Admin", "Plato.Theming", new RouteValueDictionary() { ["id"] = theme.Id, ["path"] = parent.RelativePath }).LocalNav()); } } } else { builder.Add(S[theme.Name], home => home .LocalNav()); } }); return(View((LayoutViewModel)await _viewProvider.ProvideEditAsync(new ThemeAdmin() { ThemeId = id, Path = path }, this))); }