Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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);
        }
Exemple #6
0
        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("&nbsp;"));

                    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("&nbsp;"));

                        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);
                }
            }
        }