public async Task <ActionResult> Index() { var installThemes = await _authorizationService.AuthorizeAsync(User, StandardPermissions.SiteOwner); // only site owners if (!installThemes) { return(Forbid()); } //&& _shellSettings.Name == ShellSettings.; // of the default tenant //&& _featureManager.GetEnabledFeatures().FirstOrDefault(f => f.Id == "PackagingServices") != null //var featuresThatNeedUpdate = _dataMigrationManager.GetFeaturesThatNeedUpdate(); var currentSiteThemeExtensionInfo = await _siteThemeService.GetSiteThemeAsync(); var currentAdminThemeExtensionInfo = await _adminThemeService.GetAdminThemeAsync(); var currentAdminTheme = currentAdminThemeExtensionInfo != null ? new ThemeEntry(currentAdminThemeExtensionInfo) : default(ThemeEntry); var currentSiteTheme = currentSiteThemeExtensionInfo != null ? new ThemeEntry(currentSiteThemeExtensionInfo) : default(ThemeEntry); var enabledFeatures = await _shellFeaturesManager.GetEnabledFeaturesAsync(); var themes = _extensionManager.GetExtensions().OfType <IThemeExtensionInfo>().Where(extensionDescriptor => { var tags = extensionDescriptor.Manifest.Tags.ToArray(); var isHidden = tags.Any(x => string.Equals(x, "hidden", StringComparison.OrdinalIgnoreCase)); // Is the theme allowed for this tenant? // allowed = _shellSettings.Themes.Length == 0 || _shellSettings.Themes.Contains(extensionDescriptor.Id); return(!isHidden); }) .Select(extensionDescriptor => { var isAdmin = IsAdminTheme(extensionDescriptor.Manifest); var themeId = isAdmin ? currentAdminTheme?.Extension.Id : currentSiteTheme?.Extension.Id; var isCurrent = extensionDescriptor.Id == themeId; var isEnabled = enabledFeatures.Any(x => x.Extension.Id == extensionDescriptor.Id); var themeEntry = new ThemeEntry(extensionDescriptor) { //NeedsUpdate = featuresThatNeedUpdate.Contains(extensionDescriptor.Id), //IsRecentlyInstalled = _themeService.IsRecentlyInstalled(extensionDescriptor), Enabled = isEnabled, CanUninstall = installThemes, IsAdmin = isAdmin, IsCurrent = isCurrent }; //if (_extensionDisplayEventHandler != null) //{ // foreach (string notification in _extensionDisplayEventHandler.Displaying(themeEntry.Descriptor, ControllerContext.RequestContext)) // { // themeEntry.Notifications.Add(notification); // } //} return(themeEntry); }) .OrderByDescending(x => x.IsCurrent); var model = new SelectThemesViewModel { CurrentSiteTheme = currentSiteTheme, CurrentAdminTheme = currentAdminTheme, Themes = themes }; return(View(model)); }
public async Task <ActionResult> Index() { var installThemes = await _authorizationService.AuthorizeAsync(User, StandardPermissions.SiteOwner); // only site owners if (!installThemes) { return(Forbid()); } var currentSiteThemeExtensionInfo = await _siteThemeService.GetSiteThemeAsync(); var currentAdminThemeExtensionInfo = await _adminThemeService.GetAdminThemeAsync(); var currentAdminTheme = currentAdminThemeExtensionInfo != null ? new ThemeEntry(currentAdminThemeExtensionInfo) : default(ThemeEntry); var currentSiteTheme = currentSiteThemeExtensionInfo != null ? new ThemeEntry(currentSiteThemeExtensionInfo) : default(ThemeEntry); var enabledFeatures = await _shellFeaturesManager.GetEnabledFeaturesAsync(); var themes = (await _shellFeaturesManager.GetAvailableFeaturesAsync()) .Where(f => { if (!f.IsTheme()) { return(false); } var tags = f.Extension.Manifest.Tags.ToArray(); var isHidden = tags.Any(t => String.Equals(t, "hidden", StringComparison.OrdinalIgnoreCase)); if (isHidden) { return(false); } return(true); }) .Select(f => { var isAdmin = IsAdminTheme(f.Extension.Manifest); var themeId = isAdmin ? currentAdminTheme?.Extension.Id : currentSiteTheme?.Extension.Id; var isCurrent = f.Id == themeId; var isEnabled = enabledFeatures.Any(e => e.Id == f.Id); var themeEntry = new ThemeEntry(f.Extension) { Enabled = isEnabled, CanUninstall = installThemes, IsAdmin = isAdmin, IsCurrent = isCurrent }; return(themeEntry); }) .OrderByDescending(t => t.IsCurrent); var model = new SelectThemesViewModel { CurrentSiteTheme = currentSiteTheme, CurrentAdminTheme = currentAdminTheme, Themes = themes }; return(View(model)); }