private static IList <ThemeInfo> GetThemes(ThemeType type, string strRoot) { var themes = new List <ThemeInfo>(); if (Directory.Exists(strRoot)) { foreach (var strFolder in Directory.GetDirectories(strRoot)) { var strName = strFolder.Substring(strFolder.LastIndexOf("\\") + 1); if (strName != "_default") { var themePath = strFolder.Replace(Globals.ApplicationMapPath, "").TrimStart('\\').ToLowerInvariant(); var isFallback = type == ThemeType.Skin ? IsFallbackSkin(themePath) : IsFallbackContainer(themePath); var canDelete = !isFallback && SkinController.CanDeleteSkin(strFolder, PortalSettings.Current.HomeDirectoryMapPath); var defaultThemeFile = GetDefaultThemeFileName(themePath, type); themes.Add(new ThemeInfo() { PackageName = strName, Type = type, Path = themePath, DefaultThemeFile = FormatThemePath(PortalSettings.Current, strFolder, defaultThemeFile, type), Thumbnail = GetThumbnail(themePath, defaultThemeFile), CanDelete = canDelete }); } } } return(themes); }
/// <summary> /// get skin files in the skin. /// </summary> /// <param name="portalSettings"></param> /// <param name="theme"></param> /// <returns></returns> public IList <ThemeFileInfo> GetThemeFiles(PortalSettings portalSettings, ThemeInfo theme) { var themePath = Path.Combine(Globals.ApplicationMapPath, theme.Path); var themeFiles = new List <ThemeFileInfo>(); if (Directory.Exists(themePath)) { bool fallbackSkin; if (theme.Type == ThemeType.Skin) { fallbackSkin = IsFallbackSkin(themePath); } else { fallbackSkin = IsFallbackContainer(themePath); } var strSkinType = themePath.IndexOf(Globals.HostMapPath, StringComparison.InvariantCultureIgnoreCase) != -1 ? "G" : "L"; var canDeleteSkin = SkinController.CanDeleteSkin(themePath, portalSettings.HomeDirectoryMapPath); var arrFiles = Directory.GetFiles(themePath, "*.ascx"); foreach (var strFile in arrFiles) { var file = strFile.ToLowerInvariant(); var themeFile = new ThemeFileInfo(); themeFile.ThemeName = theme.PackageName; themeFile.Type = theme.Type; themeFile.Level = theme.Level; var imagePath = string.Empty; foreach (var ext in ImageExtensions) { var path = Path.ChangeExtension(file, ext); if (File.Exists(path)) { imagePath = path; break; } } if (!string.IsNullOrEmpty(imagePath)) { themeFile.Thumbnail = CreateThumbnail(imagePath); } themeFile.Name = Path.GetFileNameWithoutExtension(file); themeFile.Path = FormatThemePath(portalSettings, themePath, Path.GetFileName(strFile), theme.Type); themeFile.CanDelete = (UserController.Instance.GetCurrentUserInfo().IsSuperUser || strSkinType == "L") && (!fallbackSkin && canDeleteSkin); themeFiles.Add(themeFile); } } return(themeFiles); }
public static bool CanDeletePackage(PackageInfo package, PortalSettings portalSettings) { bool bCanDelete = true; switch (package.PackageType) { case "Skin": case "Container": string strFolderPath = string.Empty; string strRootSkin = package.PackageType == "Skin" ? SkinController.RootSkin : SkinController.RootContainer; SkinPackageInfo _SkinPackageInfo = SkinController.GetSkinByPackageID(package.PackageID); foreach (System.Collections.Generic.KeyValuePair <int, string> kvp in _SkinPackageInfo.Skins) { if (kvp.Value.Contains(Common.Globals.HostMapPath)) { strFolderPath = Path.Combine(Path.Combine(Common.Globals.HostMapPath, strRootSkin), _SkinPackageInfo.SkinName); } else { strFolderPath = Path.Combine(Path.Combine(portalSettings.HomeDirectoryMapPath, strRootSkin), _SkinPackageInfo.SkinName); } break; } bCanDelete = SkinController.CanDeleteSkin(strFolderPath, portalSettings.HomeDirectoryMapPath); break; case "Provider": XmlDocument configDoc = Config.Load(); string providerName = package.Name; if (providerName.IndexOf(".") > Null.NullInteger) { providerName = providerName.Substring(providerName.IndexOf(".") + 1); } switch (providerName) { case "SchedulingProvider": providerName = "DNNScheduler"; break; case "SearchIndexProvider": providerName = "ModuleIndexProvider"; break; case "SearchProvider": providerName = "SearchDataStoreProvider"; break; } XPathNavigator providerNavigator = configDoc.CreateNavigator().SelectSingleNode("/configuration/dotnetnuke/*[@defaultProvider='" + providerName + "']"); bCanDelete = (providerNavigator == null); break; } return(bCanDelete); }
public static bool CanDeletePackage(PackageInfo package, PortalSettings portalSettings) { bool bCanDelete = true; switch (package.PackageType) { case "Skin": case "Container": //Need to get path of skin being deleted so we can call the public CanDeleteSkin function in the SkinController string strFolderPath = string.Empty; string strRootSkin = package.PackageType == "Skin" ? SkinController.RootSkin : SkinController.RootContainer; SkinPackageInfo _SkinPackageInfo = SkinController.GetSkinByPackageID(package.PackageID); if (_SkinPackageInfo.PortalID == Null.NullInteger) { strFolderPath = Path.Combine(Path.Combine(Globals.HostMapPath, strRootSkin), _SkinPackageInfo.SkinName); } else { strFolderPath = Path.Combine(Path.Combine(portalSettings.HomeDirectoryMapPath, strRootSkin), _SkinPackageInfo.SkinName); } bCanDelete = SkinController.CanDeleteSkin(strFolderPath, portalSettings.HomeDirectoryMapPath); break; case "Provider": //Check if the provider is the default provider XmlDocument configDoc = Config.Load(); string providerName = package.Name; if (providerName.IndexOf(".") > Null.NullInteger) { providerName = providerName.Substring(providerName.IndexOf(".") + 1); } switch (providerName) { case "SchedulingProvider": providerName = "DNNScheduler"; break; case "SearchIndexProvider": providerName = "ModuleIndexProvider"; break; case "SearchProvider": providerName = "SearchDataStoreProvider"; break; } XPathNavigator providerNavigator = configDoc.CreateNavigator().SelectSingleNode("/configuration/dotnetnuke/*[@defaultProvider='" + providerName + "']"); bCanDelete = (providerNavigator == null); break; } return(bCanDelete); }
public static List <SkinInfo> GetInstalledSkins() { var list = new List <SkinInfo>(); foreach (string folder in Directory.GetDirectories(Path.Combine(Globals.HostMapPath, "Skins"))) { if (!folder.EndsWith(Globals.glbHostSkinFolder)) { var skin = new SkinInfo(); skin.SkinName = folder.Substring(folder.LastIndexOf("\\") + 1); skin.InUse = isFallbackSkin(folder) || !SkinController.CanDeleteSkin(folder, ""); list.Add(skin); } } return(list); }
public static bool CanDeletePackage(PackageInfo package, PortalSettings portalSettings) { bool bCanDelete = true; var dependencies = Instance.GetPackageDependencies(d => d.PackageName == package.Name && d.Version <= package.Version); if (dependencies.Count > 0) { //There is at least one package dependent on this package. foreach (var dependency in dependencies) { var dep = dependency; //Check if there is an alternative package var packages = Instance.GetExtensionPackages(package.PortalID, p => p.Name == dep.PackageName && p.Version >= dep.Version && p.PackageID != package.PackageID); if (packages.Count == 0) { bCanDelete = false; } } } if (bCanDelete) { switch (package.PackageType) { case "Skin": case "Container": //Need to get path of skin being deleted so we can call the public CanDeleteSkin function in the SkinController string strRootSkin = package.PackageType == "Skin" ? SkinController.RootSkin : SkinController.RootContainer; SkinPackageInfo _SkinPackageInfo = SkinController.GetSkinByPackageID(package.PackageID); string strFolderPath = Path.Combine(_SkinPackageInfo.PortalID == Null.NullInteger ? Path.Combine(Globals.HostMapPath, strRootSkin) : Path.Combine(portalSettings.HomeDirectoryMapPath, strRootSkin), _SkinPackageInfo.SkinName); bCanDelete = SkinController.CanDeleteSkin(strFolderPath, portalSettings.HomeDirectoryMapPath); break; case "Provider": //Check if the provider is the default provider XmlDocument configDoc = Config.Load(); string providerName = package.Name; if (providerName.IndexOf(".", StringComparison.Ordinal) > Null.NullInteger) { providerName = providerName.Substring(providerName.IndexOf(".", StringComparison.Ordinal) + 1); } switch (providerName) { case "SchedulingProvider": providerName = "DNNScheduler"; break; case "SearchIndexProvider": providerName = "ModuleIndexProvider"; break; case "SearchProvider": providerName = "SearchDataStoreProvider"; break; } XPathNavigator providerNavigator = configDoc.CreateNavigator().SelectSingleNode("/configuration/dotnetnuke/*[@defaultProvider='" + providerName + "']"); bCanDelete = (providerNavigator == null); break; } } return(bCanDelete); }
private void ProcessSkins(string strFolderPath, string type) { const int kColSpan = 5; HtmlTable tbl; HtmlTableRow row = null; HtmlTableCell cell; Panel pnlMsg; string[] arrFiles; string strURL; var intIndex = 0; if (Directory.Exists(strFolderPath)) { bool fallbackSkin; string strRootSkin; if (type == "Skin") { tbl = tblSkins; strRootSkin = SkinController.RootSkin.ToLower(); fallbackSkin = IsFallbackSkin(strFolderPath); pnlMsg = pnlMsgSkins; } else { tbl = tblContainers; strRootSkin = SkinController.RootContainer.ToLower(); fallbackSkin = IsFallbackContainer(strFolderPath); pnlMsg = pnlMsgContainers; } var strSkinType = strFolderPath.ToLower().IndexOf(Globals.HostMapPath.ToLower()) != -1 ? "G" : "L"; var canDeleteSkin = SkinController.CanDeleteSkin(strFolderPath, PortalSettings.HomeDirectoryMapPath); arrFiles = Directory.GetFiles(strFolderPath, "*.ascx"); int colSpan = arrFiles.Length == 0 ? 1: arrFiles.Length; tbl.Width = "auto"; if (fallbackSkin || !canDeleteSkin) { var pnl = new Panel { CssClass = "dnnFormMessage dnnFormWarning" }; var lbl = new Label { Text = Localization.GetString(type == "Skin" ? "CannotDeleteSkin.ErrorMessage" : "CannotDeleteContainer.ErrorMessage", LocalResourceFile) }; pnl.Controls.Add(lbl); pnlMsg.Controls.Add(pnl); cmdDelete.Visible = false; } if (arrFiles.Length == 0) { var pnl = new Panel { CssClass = "dnnFormMessage dnnFormWarning" }; var lbl = new Label { Text = Localization.GetString(type == "Skin" ? "NoSkin.ErrorMessage" : "NoContainer.ErrorMessage", LocalResourceFile) }; pnl.Controls.Add(lbl); pnlMsg.Controls.Add(pnl); } var strFolder = strFolderPath.Substring(strFolderPath.LastIndexOf("\\") + 1); foreach (var strFile in arrFiles) { var file = strFile.ToLower(); intIndex += 1; if (intIndex == kColSpan + 1) { intIndex = 1; } if (intIndex == 1) { //Create new row row = new HtmlTableRow(); tbl.Rows.Add(row); } cell = new HtmlTableCell { Align = "center", VAlign = "bottom" }; cell.Attributes["class"] = "NormalBold"; //thumbnail if (File.Exists(file.Replace(".ascx", ".jpg"))) { var imgLink = new HyperLink(); strURL = file.Substring(strFile.LastIndexOf("\\portals\\")); imgLink.NavigateUrl = ResolveUrl("~" + strURL.Replace(".ascx", ".jpg")); imgLink.Target = "_new"; var img = new System.Web.UI.WebControls.Image { ImageUrl = CreateThumbnail(file.Replace(".ascx", ".jpg")), BorderWidth = new Unit(1) }; imgLink.Controls.Add(img); cell.Controls.Add(imgLink); } else { var img = new System.Web.UI.WebControls.Image { ImageUrl = ResolveUrl("~/images/thumbnail_black.png"), BorderWidth = new Unit(1) }; cell.Controls.Add(img); } cell.Controls.Add(new LiteralControl("<br />")); strURL = file.Substring(strFile.IndexOf("\\" + strRootSkin + "\\")); strURL.Replace(".ascx", ""); //name var label = new Label { Text = getReducedFileName(Path.GetFileNameWithoutExtension(file)), ToolTip = Path.GetFileNameWithoutExtension(file), CssClass = "skinTitle" }; cell.Controls.Add(label); cell.Controls.Add(new LiteralControl("<br />")); //Actions var previewLink = new HyperLink(); if (type == "Skin") { previewLink.NavigateUrl = Globals.NavigateURL(PortalSettings.HomeTabId, Null.NullString, "SkinSrc=" + "[" + strSkinType + "]" + Globals.QueryStringEncode(strURL.Replace(".ascx", "").Replace("\\", "/"))); } else { previewLink.NavigateUrl = Globals.NavigateURL(PortalSettings.HomeTabId, Null.NullString, "ContainerSrc=" + "[" + strSkinType + "]" + Globals.QueryStringEncode(strURL.Replace(".ascx", "").Replace("\\", "/"))); } previewLink.CssClass = "dnnSecondaryAction"; previewLink.Target = "_new"; previewLink.Text = Localization.GetString("cmdPreview", LocalResourceFile); cell.Controls.Add(previewLink); cell.Controls.Add(new LiteralControl(" ")); var applyButton = new LinkButton { Text = Localization.GetString("cmdApply", LocalResourceFile), CommandName = "Apply" + type, CommandArgument = "[" + strSkinType + "]" + strRootSkin + "/" + strFolder + "/" + Path.GetFileName(strFile), CssClass = "dnnSecondaryAction applyAction" }; applyButton.Command += OnCommand; cell.Controls.Add(applyButton); if ((UserInfo.IsSuperUser || strSkinType == "L") && (!fallbackSkin && canDeleteSkin)) { cell.Controls.Add(new LiteralControl(" ")); var deleteButton = new LinkButton { Text = Localization.GetString("cmdDelete"), CommandName = "Delete", CommandArgument = "[" + strSkinType + "]" + strRootSkin + "/" + strFolder + "/" + Path.GetFileName(strFile), CssClass = "dnnSecondaryAction" }; deleteButton.Command += OnCommand; cell.Controls.Add(deleteButton); } row.Cells.Add(cell); } if (File.Exists(strFolderPath + "/" + Globals.glbAboutPage)) { row = new HtmlTableRow(); cell = new HtmlTableCell { ColSpan = colSpan, Align = "center" }; var strFile = strFolderPath + "/" + Globals.glbAboutPage; strURL = strFile.Substring(strFile.IndexOf("\\portals\\")); var copyrightLink = new HyperLink { NavigateUrl = ResolveUrl("~" + strURL), CssClass = "dnnSecondaryAction", Target = "_new", Text = string.Format(Localization.GetString("About", LocalResourceFile), strFolder) }; cell.Controls.Add(copyrightLink); row.Cells.Add(cell); tbl.Rows.Add(row); } } }