/// <summary>
        /// Get pending policies: policies for which the user has not yet expressed his opinion
        /// </summary>
        /// <param name="context">Context of the showing content</param>
        /// <param name="part">the PolicyPart that describe which policies should be checked</param>
        /// <returns>The IContentQuery that returns the list of the pending policies</returns>
        private IContentQuery GetPendingPolicies(LoadContentContext context, PolicyPart part)
        {
            var loggedUser = _workContext.GetContext().CurrentUser;
            int currentLanguageId;
            IContentQuery <PolicyTextInfoPart> query;

            if (context.ContentItem.As <LocalizationPart>() != null && context.ContentItem.As <LocalizationPart>().Culture != null && context.ContentItem.As <LocalizationPart>().Culture.Id > 0)
            {
                currentLanguageId = context.ContentItem.As <LocalizationPart>().Culture.Id;
            }
            else
            {
                //Nel caso di contenuto senza Localizationpart prendo la CurrentCulture
                currentLanguageId = _cultureManager.GetCultureByName(_workContext.GetContext().CurrentCulture).Id;
            }

            query = _contentManager.Query <PolicyTextInfoPart>().Join <LocalizationPartRecord>().Where(w => w.CultureId == currentLanguageId || w.CultureId == 0);

            //recupero solo le Policy Pendenti, alle quali l'utente non ha risposto ancora

            IContentQuery <PolicyTextInfoPart, PolicyTextInfoPartRecord> items;

            if (loggedUser != null)
            {
                var answeredIds = loggedUser.As <UserPolicyPart>().UserPolicyAnswers.Select(s => s.PolicyTextInfoPartRecord.Id).ToArray();
                items = query.Where <PolicyTextInfoPartRecord>(w => !answeredIds.Contains(w.Id));
            }
            else
            {
                IList <PolicyForUserViewModel> answers = _policyServices.GetCookieOrVolatileAnswers();
                var answeredIds = answers.Select(s => s.PolicyTextId).ToArray();
                items = query.Where <PolicyTextInfoPartRecord>(w => !answeredIds.Contains(w.Id));
            }

            var settings = part.Settings.GetModel <PolicyPartSettings>();

            if (!settings.PolicyTextReferences.Contains("{All}"))
            {
                int[] filterIds;

                string[] filterComplexIds = _policyServices.GetPoliciesForContent(part);

                if (filterComplexIds != null)
                {
                    if (filterComplexIds.Length == 1)
                    {
                        filterComplexIds = filterComplexIds[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    filterIds = filterComplexIds.Select(s => {
                        int id = 0;
                        int.TryParse(s.Replace("{", "").Replace("}", ""), out id);
                        return(id);
                    }).ToArray();

                    items = items.Where <PolicyTextInfoPartRecord>(w => filterIds.Contains(w.Id));
                }
            }

            return(items.OrderByDescending(x => x.Priority));
        }