protected string GenerateLocaleList(List<long> selections, int defaultLocale, bool? addRemoveReplace) { plcLangsSelected.Visible = addRemoveReplace == null; Ektron.Cms.Framework.Localization.LocaleManager locale = new Ektron.Cms.Framework.Localization.LocaleManager(); Ektron.Cms.Framework.Localization.LocalizationObject lobj = new Ektron.Cms.Framework.Localization.LocalizationObject(); List<Ektron.Cms.Localization.LocaleData> locales = locale.GetEnabledLocales(); // If not adding/deleting, loop through each of the selected content items to try and find selected locales List<int> selectedLocales = new List<int>(); if (addRemoveReplace == null) { List<int> contentLocales = new List<int>(); lMultiNotice.Visible = false; foreach (long item in selections) { contentLocales = lobj.GetObjectLanguages(Ektron.Cms.Localization.LocalizableCmsObjectType.Content, item); contentLocales.Sort(); if (selectedLocales.Count == 0) selectedLocales.AddRange(contentLocales); if (!LocaleListsMatch(selectedLocales, contentLocales)) { selectedLocales = new List<int>(); lMultiNotice.Visible = true; break; } } if (!selectedLocales.Contains(defaultLocale)) selectedLocales.Add(defaultLocale); } DataTable dt = new DataTable("locales"); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Enabled", typeof(bool)); dt.Columns.Add("EnglishName", typeof(string)); dt.Columns.Add("Loc", typeof(string)); dt.Columns.Add("CombinedName", typeof(string)); dt.Columns.Add("FlagUrl", typeof(string)); dt.Columns.Add("Default", typeof(bool)); DataRow dr; foreach (Ektron.Cms.Localization.LocaleData ld in locales) { dr = dt.NewRow(); dr.ItemArray = new object[] { ld.Id, selectedLocales.Contains(ld.Id) || ld.Id == CurrentLanguageId, ld.EnglishName, ld.Loc, ld.CombinedName, ld.FlagUrl, ld.Id == defaultLocale }; dt.Rows.Add(dr); } DataTable sdt, adt; sdt = GetRowsFromArray(dt.Select("Enabled = true", "Loc")); adt = GetRowsFromArray(dt.Select("Enabled = false", "Loc")); // Databind rptSelectedLangs.DataSource = sdt; rptAvailableLangs.DataSource = adt; pnlLangSelector.DataBind(); List<int> availableLocales = locales.ConvertAll<int>(new Converter<Ektron.Cms.Localization.LocaleData, int>(delegate(Ektron.Cms.Localization.LocaleData ld) { return ld.Id; })); foreach (int l in selectedLocales) if (availableLocales.Contains(l)) availableLocales.Remove(l); // Set up the links plcSelectLinks.Controls.Clear(); if (adt.Rows.Count > 0) { string links = "<a onclick=\"" + SelectAllScript(true, availableLocales) + " return false;\" href=\"#\" title=\"" + GetMessage("lbl select all languages") + "\">" + GetMessage("lbl select all languages") + "</a> | " + "<a onclick=\"" + SelectAllScript(false, availableLocales) + " return false;\" href=\"#\" title=\"" + GetMessage("lbl deselect all languages") + "\">" + GetMessage("lbl deselect all languages") + "</a>"; plcSelectLinks.Controls.Add(new LiteralControl(links)); } else { rptAvailableLangs.Visible = false; } // Render return RenderControl(pnlLangSelector); }
/// <param name="addRemoveReplace">true for add, false for remove, null for replace</param> protected void SetLocales(List<long> selections, List<int> selectedLocales, int defaultLocale, bool? addRemoveReplace) { Ektron.Cms.Framework.Localization.LocaleManager locale = new Ektron.Cms.Framework.Localization.LocaleManager(); Ektron.Cms.Framework.Localization.LocalizationObject lobj = new Ektron.Cms.Framework.Localization.LocalizationObject(); List<Ektron.Cms.Localization.LocaleData> locales = locale.GetEnabledLocales(); // Loop through each of the selected content items to try and find selected locales List<int> contentLocales = new List<int>(); if (!selectedLocales.Contains(defaultLocale)) selectedLocales.Add(defaultLocale); selectedLocales.Sort(); List<int> localesToDelete = new List<int>(); List<int> localesToAdd = new List<int>(); List<Ektron.Cms.Localization.LocalizationObjectData> localeData = new List<Ektron.Cms.Localization.LocalizationObjectData>(); foreach (long item in selections) { Ektron.Cms.Localization.LocalizableCmsObjectType objectType = Ektron.Cms.Localization.LocalizableCmsObjectType.Content; contentLocales = lobj.GetObjectLanguages(Ektron.Cms.Localization.LocalizableCmsObjectType.Content, item); if (contentLocales.Count == 0) { objectType = Ektron.Cms.Localization.LocalizableCmsObjectType.DmsAsset; contentLocales = lobj.GetObjectLanguages(Ektron.Cms.Localization.LocalizableCmsObjectType.DmsAsset, item); } bool skip = true; if (addRemoveReplace == null && !LocaleListsMatch(selectedLocales, contentLocales)) skip = false; if (addRemoveReplace == true && !LocaleListContains(contentLocales, selectedLocales)) skip = false; if (addRemoveReplace == false && LocaleListContains(contentLocales, selectedLocales)) skip = false; if (!skip) { localeData = lobj.GetLocalizationObjectList(objectType, item, -1); localesToDelete.Clear(); localesToAdd.Clear(); if (addRemoveReplace == null || addRemoveReplace == true) foreach (int i in selectedLocales) if (!contentLocales.Contains(i)) localesToAdd.Add(i); if (addRemoveReplace == null) foreach (int i in contentLocales) if (!selectedLocales.Contains(i)) localesToDelete.Add(i); if (addRemoveReplace == false) foreach (int i in contentLocales) if (selectedLocales.Contains(i)) localesToDelete.Add(i); foreach (int i in localesToDelete) foreach (Ektron.Cms.Localization.LocalizationObjectData ldata in localeData) if (ldata.ObjectLanguage == i) lobj.Delete(ldata.Id); foreach (int i in localesToAdd) lobj.MarkReadyForTranslation(objectType, item, i); } } }