Example #1
0
        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>());
        }
Example #4
0
        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]
        }
Example #5
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);
        }