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