Пример #1
0
 public PoliciesForUserViewModel GetPoliciesForCurrentUser(bool writeMode, string language = null)
 {
     return(GetPoliciesForUserOrSession(_workContext.GetContext().CurrentUser, writeMode, language));
 }
        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
            });
        }