diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs index ae0a9d0d7..6bbfc1316 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs @@ -26,45 +26,28 @@ namespace Orchard.Localization.Drivers { ? part.Record.MasterContentItemId : part.Id; - var siteCultures = _cultureManager.ListCultures(); - return Combined( ContentShape("Parts_Localization_ContentTranslations", () => shapeHelper.Parts_Localization_ContentTranslations(Id: part.ContentItem.Id, MasterId: masterId, Culture: GetCulture(part), Localizations: GetDisplayLocalizations(part, VersionOptions.Published))), ContentShape("Parts_Localization_ContentTranslations_Summary", () => shapeHelper.Parts_Localization_ContentTranslations_Summary(Id: part.ContentItem.Id, MasterId: masterId, Culture: GetCulture(part), Localizations: GetDisplayLocalizations(part, VersionOptions.Published))), - ContentShape("Parts_Localization_ContentTranslations_SummaryAdmin", - () => shapeHelper.Parts_Localization_ContentTranslations_SummaryAdmin(Id: part.ContentItem.Id, MasterId: masterId, Culture: GetCulture(part), Localizations: GetDisplayLocalizations(part, VersionOptions.Latest), SiteCultures: siteCultures)) + ContentShape("Parts_Localization_ContentTranslations_SummaryAdmin", () => { + var siteCultures = _cultureManager.ListCultures(); + + return shapeHelper.Parts_Localization_ContentTranslations_SummaryAdmin(Id: part.ContentItem.Id, MasterId: masterId, Culture: GetCulture(part), Localizations: GetDisplayLocalizations(part, VersionOptions.Latest), SiteCultures: siteCultures); + }) ); } protected override DriverResult Editor(LocalizationPart part, dynamic shapeHelper) { - List localizations = GetEditorLocalizations(part).ToList(); + var localizations = GetEditorLocalizations(part).ToList(); - var siteCultures = _cultureManager.ListCultures().ToList(); - - List missingCultures; - - if (part.HasTranslationGroup) { - var localizationPart = part.MasterContentItem.As(); - missingCultures = - siteCultures.Where(s => GetEditorLocalizations(localizationPart).All(l => l.Culture.Culture != s)) - .ToList(); - - missingCultures.Remove(localizationPart.Culture.Culture); - } - else { - missingCultures = - siteCultures.Where(s => GetEditorLocalizations(part).All(l => l.Culture.Culture != s)) - .ToList(); - - if (part.Culture != null) - missingCultures.Remove(part.Culture.Culture); - } + var missingCultures = part.HasTranslationGroup ? + RetrieveMissingCultures(part.MasterContentItem.As(), true) : + RetrieveMissingCultures(part, part.Culture != null); var model = new EditLocalizationViewModel { SelectedCulture = GetCulture(part), - SiteCultures = siteCultures, MissingCultures = missingCultures, ContentItem = part, MasterContentItem = part.HasTranslationGroup ? part.MasterContentItem : null, @@ -84,6 +67,21 @@ namespace Orchard.Localization.Drivers { return Editor(part, shapeHelper); } + private List RetrieveMissingCultures(LocalizationPart part, bool excludePartCulture) { + var editorLocalizations = GetEditorLocalizations(part); + + var cultures = _cultureManager + .ListCultures() + .Where(s => editorLocalizations.All(l => l.Culture.Culture != s)) + .ToList(); + + if (excludePartCulture) { + cultures.Remove(part.Culture.Culture); + } + + return cultures; + } + private static string GetCulture(LocalizationPart part) { return part.Culture != null ? part.Culture.Culture : null; } @@ -91,11 +89,11 @@ namespace Orchard.Localization.Drivers { private IEnumerable GetDisplayLocalizations(LocalizationPart part, VersionOptions versionOptions) { return _localizationService.GetLocalizations(part.ContentItem, versionOptions) .Select(c => { - var localized = c.ContentItem.As(); - if (localized.Culture == null) - localized.Culture = _cultureManager.GetCultureByName(_cultureManager.GetSiteCulture()); - return c; - }).ToList(); + var localized = c.ContentItem.As(); + if (localized.Culture == null) + localized.Culture = _cultureManager.GetCultureByName(_cultureManager.GetSiteCulture()); + return c; + }).ToList(); } private IEnumerable GetEditorLocalizations(LocalizationPart part) { @@ -107,7 +105,7 @@ namespace Orchard.Localization.Drivers { return c; }).ToList(); } - + protected override void Importing(LocalizationPart part, ContentManagement.Handlers.ImportContentContext context) { var masterContentItem = context.Attribute(part.PartDefinition.Name, "MasterContentItem"); if (masterContentItem != null) { diff --git a/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/EditLocalizationViewModel.cs b/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/EditLocalizationViewModel.cs index 1ccd04bf5..c789a0d1e 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/EditLocalizationViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/EditLocalizationViewModel.cs @@ -4,7 +4,6 @@ using Orchard.ContentManagement; namespace Orchard.Localization.ViewModels { public class EditLocalizationViewModel { public string SelectedCulture { get; set; } - public IEnumerable SiteCultures { get; set; } public IEnumerable MissingCultures { get; set; } public IContent ContentItem { get; set; } public IContent MasterContentItem { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.Edit.cshtml index b0e4bf11b..231f2a543 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.Edit.cshtml @@ -13,7 +13,7 @@ BuildSelectedCultureList( Html.FieldIdFor(m => m.SelectedCulture), Html.FieldNameFor(m => m.SelectedCulture), - Model.SiteCultures, + Model.MissingCultures, Model.SelectedCulture)) } else { @@ -33,7 +33,7 @@ BuildSelectedCultureList( Html.FieldIdFor(m => m.SelectedCulture), Html.FieldNameFor(m => m.SelectedCulture), - Model.SiteCultures, + Model.MissingCultures, Model.SelectedCulture)) } else {