Exemplo n.º 1
0
        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)
                       ));
        }
Exemplo n.º 2
0
        // ------------
        // 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)));
        }