public static void ProcessLegacyLanguages()
 {
     string filePath = Common.Globals.ApplicationMapPath + Localization.Localization.SupportedLocalesFile.Substring(1).Replace("/", "\\");
     if (File.Exists(filePath))
     {
         XPathDocument doc = new XPathDocument(filePath);
         HostSettingsController controller = new HostSettingsController();
         XPathNavigator browserNav = doc.CreateNavigator().SelectSingleNode("root/browserDetection");
         if (browserNav != null)
         {
             controller.UpdateHostSetting("EnableBrowserLanguage", Util.ReadAttribute(browserNav, "enabled", false, null, Null.NullString, "true"));
         }
         XPathNavigator urlNav = doc.CreateNavigator().SelectSingleNode("root/languageInUrl");
         if (urlNav != null)
         {
             controller.UpdateHostSetting("EnableUrlLanguage", Util.ReadAttribute(urlNav, "enabled", false, null, Null.NullString, "true"));
         }
         foreach (XPathNavigator nav in doc.CreateNavigator().Select("root/language"))
         {
             if (nav.NodeType != XPathNodeType.Comment)
             {
                 Locale language = new Locale();
                 language.Text = Util.ReadAttribute(nav, "name");
                 language.Code = Util.ReadAttribute(nav, "key");
                 language.Fallback = Util.ReadAttribute(nav, "fallback");
                 if (language.Code != Localization.Localization.SystemLocale)
                 {
                     PackageInfo package = new PackageInfo(new InstallerInfo());
                     package.Name = language.Text;
                     package.FriendlyName = language.Text;
                     package.Description = Null.NullString;
                     package.Version = new Version(1, 0, 0);
                     package.PackageType = "CoreLanguagePack";
                     package.License = Util.PACKAGE_NoLicense;
                     LanguagePackWriter packageWriter = new LanguagePackWriter(language, package);
                     package.Manifest = packageWriter.WriteManifest(true);
                     PackageController.SavePackage(package);
                     Localization.Localization.SaveLanguage(language);
                     LanguagePackInfo languagePack = new LanguagePackInfo();
                     languagePack.LanguageID = language.LanguageID;
                     languagePack.PackageID = package.PackageID;
                     languagePack.DependentPackageID = -2;
                     LanguagePackController.SaveLanguagePack(languagePack);
                 }
             }
         }
     }
     foreach (PortalInfo portal in new PortalController().GetPortals())
     {
         int portalID = portal.PortalID;
         filePath = string.Format(Common.Globals.ApplicationMapPath + Localization.Localization.ApplicationResourceDirectory.Substring(1).Replace("/", "\\") + "\\Locales.Portal-{0}.xml", portalID.ToString());
         if (File.Exists(filePath))
         {
             XPathDocument doc = new XPathDocument(filePath);
             XPathNavigator browserNav = doc.CreateNavigator().SelectSingleNode("locales/browserDetection");
             if (browserNav != null)
             {
                 PortalController.UpdatePortalSetting(portalID, "EnableBrowserLanguage", Util.ReadAttribute(browserNav, "enabled", false, null, Null.NullString, "true"));
             }
             XPathNavigator urlNav = doc.CreateNavigator().SelectSingleNode("locales/languageInUrl");
             if (urlNav != null)
             {
                 PortalController.UpdatePortalSetting(portalID, "EnableUrlLanguage", Util.ReadAttribute(urlNav, "enabled", false, null, Null.NullString, "true"));
             }
             foreach (Locale installedLanguage in Localization.Localization.GetLocales(Null.NullInteger).Values)
             {
                 string code = installedLanguage.Code;
                 bool bFound = false;
                 foreach (XPathNavigator inactiveNav in doc.CreateNavigator().Select("locales/inactive/locale"))
                 {
                     if (inactiveNav.Value == code)
                     {
                         bFound = true;
                         break;
                     }
                 }
                 if (!bFound)
                 {
                     Localization.Localization.AddLanguageToPortal(portalID, installedLanguage.LanguageID, false);
                 }
             }
         }
         else
         {
             foreach (Locale installedLanguage in Localization.Localization.GetLocales(Null.NullInteger).Values)
             {
                 Localization.Localization.AddLanguageToPortal(portalID, installedLanguage.LanguageID, false);
             }
         }
     }
 }
        private void ReadManifest(Stream stream)
        {
            XPathDocument doc = new XPathDocument(stream);
            XPathNavigator rootNav = doc.CreateNavigator();
            XPathDocument legacyDoc = null;
            rootNav.MoveToFirstChild();
            string packageType = Null.NullString;
            string legacyManifest = Null.NullString;
            if (rootNav.Name == "CommonLibrary")
            {
                packageType = Util.ReadAttribute(rootNav, "type");
            }
            else if (rootNav.Name.ToLower() == "languagepack")
            {
                packageType = "LanguagePack";
            }
            else
            {
                InstallerInfo.Log.AddFailure(Util.PACKAGE_UnRecognizable);
            }
            switch (packageType.ToLower())
            {
                case "package":
                    InstallerInfo.IsLegacyMode = false;
                    ProcessPackages(rootNav);
                    break;
                case "module":
                    InstallerInfo.IsLegacyMode = true;
                    StringBuilder sb = new StringBuilder();
                    XmlWriter writer = XmlWriter.Create(sb, XmlUtils.GetXmlWriterSettings(ConformanceLevel.Fragment));
                    PackageWriterBase.WriteManifestStartElement(writer);
                    foreach (XPathNavigator folderNav in rootNav.Select("folders/folder"))
                    {
                        ModulePackageWriter modulewriter = new ModulePackageWriter(folderNav, InstallerInfo);
                        modulewriter.WriteManifest(writer, true);
                    }

                    PackageWriterBase.WriteManifestEndElement(writer);
                    writer.Close();
                    legacyDoc = new XPathDocument(new StringReader(sb.ToString()));
                    ProcessPackages(legacyDoc.CreateNavigator().SelectSingleNode("CommonLibrary"));
                    break;
                case "languagepack":
                    InstallerInfo.IsLegacyMode = true;
                    LanguagePackWriter languageWriter = new LanguagePackWriter(rootNav, InstallerInfo);
                    LegacyError = languageWriter.LegacyError;
                    if (string.IsNullOrEmpty(LegacyError))
                    {
                        legacyManifest = languageWriter.WriteManifest(false);
                        legacyDoc = new XPathDocument(new StringReader(legacyManifest));
                        ProcessPackages(legacyDoc.CreateNavigator().SelectSingleNode("CommonLibrary"));
                    }
                    break;
                case "skinobject":
                    InstallerInfo.IsLegacyMode = true;
                    SkinControlPackageWriter skinControlwriter = new SkinControlPackageWriter(rootNav, InstallerInfo);
                    legacyManifest = skinControlwriter.WriteManifest(false);
                    legacyDoc = new XPathDocument(new StringReader(legacyManifest));
                    ProcessPackages(legacyDoc.CreateNavigator().SelectSingleNode("CommonLibrary"));
                    break;
            }
        }