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:
Nathan Heskew
2010-12-01 11:01:08 -08:00
parent 62fb3e8eb5
commit 91f21001df
4 changed files with 26 additions and 21 deletions

View File

@@ -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)

View File

@@ -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));
}
}
}

View File

@@ -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);
}
}

View File

@@ -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));
return _contentManager.Query(VersionOptions.Latest, localized.ContentItem.ContentType).Join<LocalizationPartRecord>()
|| l.MasterContentItemId == localized.MasterContentItem.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>());
return _contentManager.Query(versionOptions, localized.ContentItem.ContentType)
.Where<LocalizationPartRecord>(l => l.MasterContentItemId == localized.ContentItem.Id)
.List()
.Select(i => i.As<LocalizationPart>());
}
}
}