diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs index 0e5fd5fe4..a7a68133c 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationService.cs @@ -30,15 +30,10 @@ namespace Orchard.Localization.Services { if (localized == null) return null; - var masterContent = content.ContentItem.As().MasterContentItem != null ? content.ContentItem.As().MasterContentItem : content; - // Warning: Returns only the first of same culture localizations. - return _contentManager - .Query(versionOptions, content.ContentItem.ContentType) - .Where(l => - (l.Id == masterContent.Id || l.MasterContentItemId == masterContent.Id) - && l.CultureId == cultureRecord.Id) - .Slice(1) - .FirstOrDefault(); + if (localized.Culture.Culture == culture) + return localized; + + return ((ILocalizationService)this).GetLocalizations(content, versionOptions).FirstOrDefault(x=>x.Culture.Id == cultureRecord.Id); } string ILocalizationService.GetContentCulture(IContent content) { @@ -92,8 +87,8 @@ namespace Orchard.Localization.Services { } // Warning: May contain more than one localization of the same culture. - return query.List().ToList(); + return query.List(); } } -} \ No newline at end of file +} 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 c20783654..759790c68 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 @@ -28,7 +28,7 @@ } if (Model.MissingCultures.Any()) { - var contentItemId = Model.MasterContentItem != null ? Model.MasterContentItem.Id : Model.ContentItem.Id; + var contentItemId = Model.ContentItem.Id; if (returnUrl != "") {
@Html.ActionLink(T("+ New translation").Text, "Translate", "Admin", new { area = "Orchard.Localization", id = contentItemId, ReturnUrl = returnUrl }, new { itemprop = "UnsafeUrl" })
} @@ -39,14 +39,14 @@ @Html.Hidden(Html.FieldNameFor(m => m.SelectedCulture), Model.SelectedCulture) } - else if (Model.MasterContentItem != null) { + else { @T("This is the {0} variation of {1}", BuildSelectedCultureList( Html.FieldIdFor(m => m.SelectedCulture), Html.FieldNameFor(m => m.SelectedCulture), Model.MissingCultures, Model.SelectedCulture), - Html.ItemEditLink(Model.MasterContentItem)) + Html.ItemEditLink(Model.MasterContentItem != null?Model.MasterContentItem:Model.ContentLocalizations.Localizations.FirstOrDefault())) if (Model.ContentLocalizations.Localizations.Any()) {
@@ -64,14 +64,7 @@
} } - else { - @T("This is the {0} variation of the content", - BuildSelectedCultureList( - Html.FieldIdFor(m => m.SelectedCulture), - Html.FieldNameFor(m => m.SelectedCulture), - Model.MissingCultures, - Model.SelectedCulture)) - } + diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/LocalizedTaxonomyController.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/LocalizedTaxonomyController.cs index f3237c362..5682fe0fa 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/LocalizedTaxonomyController.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/LocalizedTaxonomyController.cs @@ -4,6 +4,7 @@ using System.Web.Mvc; using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.Environment.Extensions; +using Orchard.Localization.Models; using Orchard.Localization.Services; using Orchard.Taxonomies.Drivers; using Orchard.Taxonomies.Fields; @@ -56,8 +57,15 @@ namespace Orchard.Taxonomies.Controllers { ? _taxonomyService.GetTerms(taxonomy.Id).Where(t => !string.IsNullOrWhiteSpace(t.Name)).Select(t => t.CreateTermEntry()).Where(te => !te.HasDraft).ToList() : new List(0); List appliedTerms = new List(); + int firstTermIdForCulture = 0; if (contentId > 0) { appliedTerms = _taxonomyService.GetTermsForContentItem(contentId, taxonomyFieldName, VersionOptions.Published).Distinct(new TermPartComparer()).ToList(); + + // It takes the first term localized with the culture in order to set correctly the TaxonomyFieldViewModel.SingleTermId + var firstTermForCulture = appliedTerms.FirstOrDefault(x => x.As() != null && x.As().Culture != null && x.As().Culture.Culture == culture); + if (firstTermForCulture != null) { + firstTermIdForCulture = firstTermForCulture.Id; + } terms.ForEach(t => t.IsChecked = appliedTerms.Select(x => x.Id).Contains(t.Id)); } viewModel = new TaxonomyFieldViewModel { @@ -66,7 +74,7 @@ namespace Orchard.Taxonomies.Controllers { Terms = terms, SelectedTerms = appliedTerms, Settings = taxonomySettings, - SingleTermId = appliedTerms.Select(t => t.Id).FirstOrDefault(), + SingleTermId = firstTermIdForCulture, TaxonomyId = taxonomy != null ? taxonomy.Id : 0, HasTerms = taxonomy != null && _taxonomyService.GetTermsCount(taxonomy.Id) > 0 }; diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/LocalizedTaxonomyFieldHandler.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/LocalizedTaxonomyFieldHandler.cs index 74f7e9239..43d8cec6a 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/LocalizedTaxonomyFieldHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/LocalizedTaxonomyFieldHandler.cs @@ -70,20 +70,21 @@ namespace Orchard.Taxonomies.Handlers { if (partFieldDefinitions == null) return; // contentitem without taxonomy base.BuildEditorShape(context); - var missingCultures = localizationPart.HasTranslationGroup ? - RetrieveMissingCultures(localizationPart.MasterContentItem.As(), true) : - RetrieveMissingCultures(localizationPart, localizationPart.Culture != null); + var missingCultures = RetrieveMissingCultures(localizationPart, localizationPart.Culture != null); foreach (var partFieldDefinition in partFieldDefinitions) { if (partFieldDefinition.Settings.GetModel().TryToLocalize) { - var originalTermParts = _taxonomyService.GetTermsForContentItem(context.ContentItem.As().MasterContentItem.Id, partFieldDefinition.Name, VersionOptions.Latest).Distinct(new TermPartComparer()).ToList(); + var originalTermParts = _taxonomyService.GetTermsForContentItem(context.ContentItem.Id, partFieldDefinition.Name, VersionOptions.Latest).Distinct(new TermPartComparer()).ToList(); var newTermParts = new List(); foreach (var originalTermPart in originalTermParts) { var masterTermPart = _taxonomyExtensionsService.GetMasterItem(originalTermPart.ContentItem); if (masterTermPart != null) { foreach (var missingCulture in missingCultures) { var newTerm = _localizationService.GetLocalizedContentItem(masterTermPart, missingCulture); - if (newTerm != null) - newTermParts.Add(newTerm.ContentItem.As()); + if (newTerm != null) { + if (!newTermParts.Contains(newTerm.ContentItem.As())) { //Prevent duplicates + newTermParts.Add(newTerm.ContentItem.As()); + } + } else _notifier.Add(NotifyType.Warning, T("Term {0} can't be localized on {1}, term has been removed on this language", originalTermPart.ContentItem.As().Title, missingCulture)); }