diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs index a7132adec..a44334edc 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs @@ -25,11 +25,11 @@ namespace Orchard.Localization.Drivers { : part.Id; return Combined( ContentShape("Parts_Localization_ContentTranslations", - () => shapeHelper.Parts_Localization_ContentTranslations(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part))), + () => shapeHelper.Parts_Localization_ContentTranslations(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part, VersionOptions.Published))), ContentShape("Parts_Localization_ContentTranslations_Summary", - () => shapeHelper.Parts_Localization_ContentTranslations_Summary(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part))), + () => shapeHelper.Parts_Localization_ContentTranslations_Summary(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part, VersionOptions.Published))), ContentShape("Parts_Localization_ContentTranslations_SummaryAdmin", - () => shapeHelper.Parts_Localization_ContentTranslations_SummaryAdmin(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part))) + () => shapeHelper.Parts_Localization_ContentTranslations_SummaryAdmin(ContentPart: part, MasterId: masterId, Localizations: GetDisplayLocalizations(part, VersionOptions.Latest))) ); } @@ -56,8 +56,8 @@ namespace Orchard.Localization.Drivers { return Editor(part, shapeHelper); } - private IEnumerable GetDisplayLocalizations(LocalizationPart part) { - return _localizationService.GetLocalizations(part.ContentItem) + private IEnumerable GetDisplayLocalizations(LocalizationPart part, VersionOptions versionOptions) { + return _localizationService.GetLocalizations(part.ContentItem, versionOptions) .Select(c => { var localized = c.ContentItem.As(); if (localized.Culture == null) @@ -67,7 +67,7 @@ namespace Orchard.Localization.Drivers { } private IEnumerable GetEditorLocalizations(LocalizationPart part) { - return _localizationService.GetLocalizations(part.ContentItem) + return _localizationService.GetLocalizations(part.ContentItem, VersionOptions.Latest) .Select(c => { var localized = c.ContentItem.As(); if (localized.Culture == null) diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Handlers/LocalizationPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Localization/Handlers/LocalizationPartHandler.cs index 24574b2da..fd629a987 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Handlers/LocalizationPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Handlers/LocalizationPartHandler.cs @@ -39,7 +39,8 @@ namespace Orchard.Localization.Handlers { return masterContentItem; }); localizationPart.CultureField.Loader(ctx => _cultureManager.GetCultureById(localizationPart.Record.CultureId)); - localizationPart.MasterContentItemField.Loader(ctx => _contentManager.Get(localizationPart.Record.MasterContentItemId)); + localizationPart.MasterContentItemField.Loader(ctx => + _contentManager.Get(localizationPart.Record.MasterContentItemId, localizationPart.IsPublished() ? VersionOptions.Published : VersionOptions.Latest)); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/ILocalizationService.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/ILocalizationService.cs index 91022e48d..681a7227b 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/ILocalizationService.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/ILocalizationService.cs @@ -7,6 +7,6 @@ namespace Orchard.Localization.Services { LocalizationPart GetLocalizedContentItem(IContent masterContentItem, string culture); string GetContentCulture(IContent contentItem); void SetContentCulture(IContent contentItem, string culture); - IEnumerable GetLocalizations(IContent contentItem); + IEnumerable GetLocalizations(IContent contentItem, VersionOptions versionOptions); } } diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs index a3eade277..c9e3b46e4 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs @@ -15,10 +15,15 @@ namespace Orchard.Localization.Services { } LocalizationPart ILocalizationService.GetLocalizedContentItem(IContent content, string culture) { - return _contentManager.Query(content.ContentItem.ContentType).Join() + var cultureRecord = _cultureManager.GetCultureByName(culture); + + if (cultureRecord == null) + return null; + + return _contentManager.Query(content.ContentItem.ContentType) + .Where(l => l.MasterContentItemId == content.ContentItem.Id && l.CultureId == cultureRecord.Id) .List() .Select(i => i.As()) - .Where(l => l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == content.ContentItem.Id && string.Equals(l.Culture.Culture, culture, StringComparison.OrdinalIgnoreCase)) .SingleOrDefault(); } @@ -37,23 +42,22 @@ namespace Orchard.Localization.Services { localized.Culture = _cultureManager.GetCultureByName(culture); } - IEnumerable ILocalizationService.GetLocalizations(IContent content) { + IEnumerable ILocalizationService.GetLocalizations(IContent content, VersionOptions versionOptions) { var localized = content.As(); - //todo: (heskew) get scheduled content as well - if (localized.MasterContentItem != null) - return _contentManager.Query(VersionOptions.Latest, localized.ContentItem.ContentType).Join() - .List() - .Select(i => i.As()) - .Where(l => l.Id != localized.ContentItem.Id + return _contentManager.Query(versionOptions, localized.ContentItem.ContentType) + .Where(l => + l.Id != localized.ContentItem.Id && (l.Id == localized.MasterContentItem.ContentItem.Id - || l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == localized.MasterContentItem.ContentItem.Id)); + || l.MasterContentItemId == localized.MasterContentItem.ContentItem.Id)) + .List() + .Select(i => i.As()); - return _contentManager.Query(VersionOptions.Latest, localized.ContentItem.ContentType).Join() + return _contentManager.Query(versionOptions, localized.ContentItem.ContentType) + .Where(l => l.MasterContentItemId == localized.ContentItem.Id) .List() - .Select(i => i.As()) - .Where(l => l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == localized.ContentItem.Id); + .Select(i => i.As()); } } } \ No newline at end of file