public IEnumerable <PolicyTextInfoPart> GetPolicies(string culture = null, int[] ids = null) { var siteLanguage = _workContext.GetContext().CurrentSite.SiteCulture; // figure out the culture Id we should use in the query int currentLanguageId; IContentQuery <PolicyTextInfoPart> query; CultureRecord cultureRecord = null; if (!string.IsNullOrWhiteSpace(culture)) { cultureRecord = GetCultureByName(culture); } if (cultureRecord == null) { //Nel caso di contenuto senza Localizationpart prendo la CurrentCulture cultureRecord = GetCultureByName(_workContext.GetContext().CurrentCulture); } if (cultureRecord == null) { cultureRecord = GetCultureByName(_cultureManager.GetSiteCulture()); } currentLanguageId = cultureRecord.Id; // cacheKey = KeyBase_List_of_Ids var cacheKey = string.Join("_", KeyBase, currentLanguageId.ToString(), ids == null ? "NoID" : string.Join("_", ids.Select(i => i.ToString()))); // cache the query results return(_cacheManager.Get(cacheKey, true, ctx => { ctx.Monitor(_signals.When("PolicyTextInfoPart_EvictAll")); if (ids != null) { query = _contentManager.Query <PolicyTextInfoPart, PolicyTextInfoPartRecord>() .Where(x => ids.Contains(x.Id)) .OrderByDescending(o => o.Priority) .Join <LocalizationPartRecord>() .Where(w => w.CultureId == currentLanguageId || (w.CultureId == 0 && (siteLanguage.Equals(culture) || culture == null))) .ForVersion(VersionOptions.Published); } else { query = _contentManager.Query <PolicyTextInfoPart, PolicyTextInfoPartRecord>() .OrderByDescending(o => o.Priority) .Join <LocalizationPartRecord>() .Where(w => w.CultureId == currentLanguageId || (w.CultureId == 0 && (siteLanguage.Equals(culture) || culture == null))) .ForVersion(VersionOptions.Published); } return query.List <PolicyTextInfoPart>(); })); }
public IEnumerable <LocalizationPart> GetLocalizations(LocalizationPart part, VersionOptions versionOptions) { CultureRecord siteCulture = null; return(new[] { (part.MasterContentItem ?? part.ContentItem).As <LocalizationPart>() } .Union(part.Id > 0 ? _localizationService.GetLocalizations(part.MasterContentItem ?? part.ContentItem, versionOptions) : new LocalizationPart[0]) .Select(c => { var localized = c.ContentItem.As <LocalizationPart>(); if (localized.Culture == null) { localized.Culture = siteCulture ?? (siteCulture = _cultureManager.GetCultureByName(GetSiteCulture())); } return c; })); }
public IEnumerable <PolicyTextInfoPart> GetPolicies(string culture = null, int[] ids = null) { var siteLanguage = _workContext.GetContext().CurrentSite.SiteCulture; int currentLanguageId; IList <PolicyForUserViewModel> model = new List <PolicyForUserViewModel>(); IContentQuery <PolicyTextInfoPart> query; CultureRecord cultureRecord = null; if (!String.IsNullOrWhiteSpace(culture)) { cultureRecord = _cultureManager.GetCultureByName(culture); } if (cultureRecord == null) { //Nel caso di contenuto senza Localizationpart prendo la CurrentCulture cultureRecord = _cultureManager.GetCultureByName(_workContext.GetContext().CurrentCulture); } if (cultureRecord == null) { cultureRecord = _cultureManager.GetCultureByName(_cultureManager.GetSiteCulture()); } currentLanguageId = cultureRecord.Id; if (ids != null) { query = _contentManager.Query <PolicyTextInfoPart, PolicyTextInfoPartRecord>() .Where(x => ids.Contains(x.Id)) .OrderByDescending(o => o.Priority) .Join <LocalizationPartRecord>() .Where(w => w.CultureId == currentLanguageId || (w.CultureId == 0 && (siteLanguage.Equals(culture) || culture == null))) .ForVersion(VersionOptions.Published); } else { query = _contentManager.Query <PolicyTextInfoPart, PolicyTextInfoPartRecord>() .OrderByDescending(o => o.Priority) .Join <LocalizationPartRecord>() .Where(w => w.CultureId == currentLanguageId || (w.CultureId == 0 && (siteLanguage.Equals(culture) || culture == null))) .ForVersion(VersionOptions.Published); } return(query.List <PolicyTextInfoPart>()); }
public IEnumerable <Tuple <string, int> > GetLocalizationsIds(ContentItem item) { CultureRecord siteCulture = null; LocalizationPart part = item.As <LocalizationPart>(); if (part != null) { return(new[] { (part.MasterContentItem ?? item).As <LocalizationPart>() } .Union(part.Id > 0 ? _localizationService.GetLocalizations(part.MasterContentItem ?? item, VersionOptions.Published) : new LocalizationPart[0]) .Select(c => { var localized = c.ContentItem.As <LocalizationPart>(); if (localized.Culture == null) { localized.Culture = siteCulture ?? (siteCulture = _lazyCultureManager.Value.GetCultureByName(GetSiteCulture())); } return new Tuple <string, int>(localized.Culture.Culture, localized.Id); })); } return(new[] { new Tuple <string, int>(GetSiteCulture(), item.Id) }); // new Tuple<string, int>[0] }
private void UpdateCulture(FavoriteCulturePart part) { bool isSiteCulture = true; if (part.Culture != null) { CultureRecord contentCulture = _cultureRepository.Table.Where(r => r.Culture == part.Culture) .ToList().FirstOrDefault(); if (contentCulture != null) { isSiteCulture = false; part.Culture = contentCulture.Culture; part.Culture_Id = contentCulture.Id; } } if (isSiteCulture) { CultureRecord siteCulture = _cultureRepository.Table.Where(r => r.Culture == _orchardService.WorkContext.CurrentCulture) .ToList().FirstOrDefault(); part.Culture_Id = siteCulture.Id; part.Culture = siteCulture.Culture; } }
public PoliciesForUserViewModel GetPoliciesForUserOrSession(bool writeMode, string language = null) { var loggedUser = _workContext.GetContext().CurrentUser; var siteLanguage = _workContext.GetContext().CurrentSite.SiteCulture; int currentLanguageId; IList <PolicyForUserViewModel> model = new List <PolicyForUserViewModel>(); IContentQuery <PolicyTextInfoPart> query; // language may be a string that does not represent any language. We should handle that case. CultureRecord currentLanguageRecord = null; if (!string.IsNullOrWhiteSpace(language)) { currentLanguageRecord = _cultureManager.GetCultureByName(language); } // if the language string is not a valid language (or it's empty): if (currentLanguageRecord == null) { currentLanguageRecord = _cultureManager.GetCultureByName(_workContext.GetContext().CurrentCulture); } if (currentLanguageRecord == null) { currentLanguageRecord = _cultureManager.GetCultureByName(_cultureManager.GetSiteCulture()); } currentLanguageId = currentLanguageRecord.Id; query = _contentManager.Query <PolicyTextInfoPart, PolicyTextInfoPartRecord>() .OrderByDescending(o => o.Priority) .Join <LocalizationPartRecord>() .Where(w => w.CultureId == currentLanguageId || (w.CultureId == 0 && (siteLanguage.Equals(language) || language == null))) .ForVersion(VersionOptions.Published); if (loggedUser != null) // loggato { model = query.List().Select(s => { var answer = loggedUser.As <UserPolicyPart>().UserPolicyAnswers.Where(w => w.PolicyTextInfoPartRecord.Id.Equals(s.Id)).SingleOrDefault(); return(new PolicyForUserViewModel { PolicyText = s, PolicyTextId = s.Id, AnswerId = answer != null ? answer.Id : 0, AnswerDate = answer != null ? answer.AnswerDate : DateTime.MinValue, OldAccepted = answer != null ? answer.Accepted : false, Accepted = answer != null ? answer.Accepted : false, UserId = (answer != null && answer.UserPartRecord != null) ? (int?)answer.UserPartRecord.Id : null }); }).ToList(); } else // non loggato { IList <PolicyForUserViewModel> answers = GetCookieOrVolatileAnswers(); model = query.List().Select(s => { var answer = answers.Where(w => w.PolicyTextId.Equals(s.Id)).SingleOrDefault(); return(new PolicyForUserViewModel { PolicyText = s, PolicyTextId = s.Id, AnswerId = answer != null ? answer.AnswerId : 0, AnswerDate = answer != null ? answer.AnswerDate : DateTime.MinValue, OldAccepted = answer != null ? answer.Accepted : false, Accepted = answer != null ? answer.Accepted : false, UserId = answer != null ? answer.UserId : null }); }).ToList(); } CreateAndAttachPolicyCookie(model.ToList(), writeMode); return(new PoliciesForUserViewModel { Policies = model }); }
protected override DriverResult Editor(TermPart termPart, IUpdateModel updater, dynamic shapeHelper) { if (updater.TryUpdateModel(termPart, Prefix, null, null)) { //If the term is localized and has a parent term I check if the term culture is the same of its parent culture if (termPart.Has <LocalizationPart>()) { if (IsParentLocalized(termPart, updater)) { //Retrieving the parent taxonomy and the parent term ContentItem parentTerm = _taxonomyExtensionsService.GetParentTerm(termPart); ContentItem parentTaxonomy = _taxonomyExtensionsService.GetParentTaxonomy(termPart); if (termPart.As <LocalizationPart>().Culture != null) { CultureRecord termCulture = termPart.As <LocalizationPart>().Culture; CultureRecord taxonomyCulture = null; //If a parent term exists I retrieve its localized version. ContentItem localizedParentTerm = parentTerm; if (parentTerm != null) { if (parentTerm.Has <LocalizationPart>()) { CultureRecord parentTermCulture = parentTerm.As <LocalizationPart>().Culture; if (parentTermCulture != null && termCulture.Id != parentTermCulture.Id) { IContent masterParentTerm = _taxonomyExtensionsService.GetMasterItem(parentTerm); var localizedParent = _localizationService.GetLocalizedContentItem(masterParentTerm, termCulture.Culture); if (localizedParent != null) { localizedParentTerm = localizedParent.As <ContentItem>(); } } } } //Retrieving the localized version of the Taxonomy ContentItem localizedParentTaxonomy = parentTaxonomy; if (parentTaxonomy.Has <LocalizationPart>()) { if (parentTaxonomy.As <LocalizationPart>().Culture != null) { taxonomyCulture = parentTaxonomy.As <LocalizationPart>().Culture; if (termCulture.Id != taxonomyCulture.Id) { IContent masterTaxonomy = _taxonomyExtensionsService.GetMasterItem(parentTaxonomy); var localizedTaxonomy = _localizationService.GetLocalizedContentItem(masterTaxonomy, termCulture.Culture); if (localizedTaxonomy != null) { localizedParentTaxonomy = localizedTaxonomy.As <ContentItem>(); } } } } //Assigning to the term the corresponding localized container if ((localizedParentTerm == null && localizedParentTaxonomy != parentTaxonomy) || (localizedParentTerm != null && localizedParentTerm != parentTerm && localizedParentTerm.Id != termPart.Id)) { termPart.Container = localizedParentTerm == null?localizedParentTaxonomy.As <TaxonomyPart>().ContentItem : localizedParentTerm.As <TermPart>().ContentItem; termPart.Path = localizedParentTerm != null?localizedParentTerm.As <TermPart>().FullPath + "/" : "/"; if (localizedParentTerm == null) { termPart.TaxonomyId = localizedParentTaxonomy.Id; } else { termPart.TaxonomyId = localizedParentTerm.As <TermPart>().TaxonomyId; } if (localizedParentTaxonomy != parentTaxonomy) { _notifier.Add(NotifyType.Information, T("The parent taxonomy has been changed to its localized version associated to the culture {0}.", localizedParentTaxonomy.As <LocalizationPart>().Culture.Culture)); } if (localizedParentTerm != null && localizedParentTerm != parentTerm) { _notifier.Add(NotifyType.Information, T("The parent term has been changed to its localized version associated to the culture {0}.", localizedParentTerm.As <LocalizationPart>().Culture.Culture)); } } else if (termCulture != taxonomyCulture && taxonomyCulture != null && _localizationService.GetLocalizations(parentTaxonomy).Count() > 0) { //I can associate to a taxonomy a term of a different culture only if the taxonomy is unlocalized or has no translations updater.AddModelError("WrongTaxonomyLocalization", T("A localization of the taxonomy in the specified language does not exist. Please create it first.")); } } } } } return(null); }
// static method because it is called in the contructor private static Dictionary <string, List <TermPart> > TranslateTaxonomies(ContentItem ci, CultureRecord culture, ILocalizationService localizationService) { var translations = new Dictionary <string, List <TermPart> >(); var taxoFields = ci.Parts.SelectMany(p => p.Fields.Where(f => f is TaxonomyField).Select(f => f as TaxonomyField)); foreach (var field in taxoFields) { var settings = field.PartFieldDefinition.Settings.GetModel <TaxonomyFieldLocalizationSettings>(); if (settings != null && settings.TryToLocalize) { // translate terms var newTerms = new List <TermPart>(); foreach (var term in field.Terms) { // adds translated term if it exists (same ogic of LocalizedTaxonomyFieldHandler.BuildEditorShape) var translatedTerm = localizationService.GetLocalizedContentItem(term, culture.Culture); if (translatedTerm != null) { newTerms.Add(translatedTerm.ContentItem.As <TermPart>()); } } translations.Add(field.PartFieldDefinition.Name, newTerms); } else { // copy terms var newTerms = new List <TermPart>(); foreach (var term in field.Terms) { newTerms.Add(term.ContentItem.As <TermPart>()); } translations.Add(field.PartFieldDefinition.Name, newTerms); } } return(translations); }