mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 03:25:23 +08:00
Fixing the display of links to localized versions of the displayed content item to appropriately restrict by published state
work item: 16620 --HG-- branch : dev
This commit is contained in:
@@ -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<LocalizationPart> GetDisplayLocalizations(LocalizationPart part) {
|
||||
return _localizationService.GetLocalizations(part.ContentItem)
|
||||
private IEnumerable<LocalizationPart> GetDisplayLocalizations(LocalizationPart part, VersionOptions versionOptions) {
|
||||
return _localizationService.GetLocalizations(part.ContentItem, versionOptions)
|
||||
.Select(c => {
|
||||
var localized = c.ContentItem.As<LocalizationPart>();
|
||||
if (localized.Culture == null)
|
||||
@@ -67,7 +67,7 @@ namespace Orchard.Localization.Drivers {
|
||||
}
|
||||
|
||||
private IEnumerable<LocalizationPart> GetEditorLocalizations(LocalizationPart part) {
|
||||
return _localizationService.GetLocalizations(part.ContentItem)
|
||||
return _localizationService.GetLocalizations(part.ContentItem, VersionOptions.Latest)
|
||||
.Select(c => {
|
||||
var localized = c.ContentItem.As<LocalizationPart>();
|
||||
if (localized.Culture == null)
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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<LocalizationPart> GetLocalizations(IContent contentItem);
|
||||
IEnumerable<LocalizationPart> GetLocalizations(IContent contentItem, VersionOptions versionOptions);
|
||||
}
|
||||
}
|
||||
|
@@ -15,10 +15,15 @@ namespace Orchard.Localization.Services {
|
||||
}
|
||||
|
||||
LocalizationPart ILocalizationService.GetLocalizedContentItem(IContent content, string culture) {
|
||||
return _contentManager.Query(content.ContentItem.ContentType).Join<LocalizationPartRecord>()
|
||||
var cultureRecord = _cultureManager.GetCultureByName(culture);
|
||||
|
||||
if (cultureRecord == null)
|
||||
return null;
|
||||
|
||||
return _contentManager.Query(content.ContentItem.ContentType)
|
||||
.Where<LocalizationPartRecord>(l => l.MasterContentItemId == content.ContentItem.Id && l.CultureId == cultureRecord.Id)
|
||||
.List()
|
||||
.Select(i => i.As<LocalizationPart>())
|
||||
.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<LocalizationPart> ILocalizationService.GetLocalizations(IContent content) {
|
||||
IEnumerable<LocalizationPart> ILocalizationService.GetLocalizations(IContent content, VersionOptions versionOptions) {
|
||||
var localized = content.As<LocalizationPart>();
|
||||
|
||||
//todo: (heskew) get scheduled content as well
|
||||
|
||||
if (localized.MasterContentItem != null)
|
||||
return _contentManager.Query(VersionOptions.Latest, localized.ContentItem.ContentType).Join<LocalizationPartRecord>()
|
||||
.List()
|
||||
.Select(i => i.As<LocalizationPart>())
|
||||
.Where(l => l.Id != localized.ContentItem.Id
|
||||
return _contentManager.Query(versionOptions, localized.ContentItem.ContentType)
|
||||
.Where<LocalizationPartRecord>(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<LocalizationPart>());
|
||||
|
||||
return _contentManager.Query(VersionOptions.Latest, localized.ContentItem.ContentType).Join<LocalizationPartRecord>()
|
||||
return _contentManager.Query(versionOptions, localized.ContentItem.ContentType)
|
||||
.Where<LocalizationPartRecord>(l => l.MasterContentItemId == localized.ContentItem.Id)
|
||||
.List()
|
||||
.Select(i => i.As<LocalizationPart>())
|
||||
.Where(l => l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == localized.ContentItem.Id);
|
||||
.Select(i => i.As<LocalizationPart>());
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user