public static PackageWriterBase GetWriter(PackageInfo package) { PackageWriterBase writer = null; switch (package.PackageType) { case "Auth_System": writer = new AuthenticationPackageWriter(package); break; case "Module": writer = new ModulePackageWriter(package); break; case "Container": writer = new ContainerPackageWriter(package); break; case "Skin": writer = new SkinPackageWriter(package); break; case "CoreLanguagePack": case "ExtensionLanguagePack": writer = new LanguagePackWriter(package); break; case "SkinObject": writer = new SkinControlPackageWriter(package); break; case "Provider": writer = new ProviderPackageWriter(package); break; case "Library": writer = new LibraryPackageWriter(package); break; case "Widget": writer = new WidgetPackageWriter(package); break; default: CommonLibrary.Common.Lists.ListController listController = new CommonLibrary.Common.Lists.ListController(); ListEntryInfo entry = listController.GetListEntryInfo("PackageWriter", package.PackageType); if (entry != null && !string.IsNullOrEmpty(entry.Text)) { writer = (PackageWriterBase)Reflection.CreateObject(entry.Text, "PackageWriter_" + entry.Value); } break; } return writer; }
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; } }