public void ApplyFilter(OProjections.Descriptors.Filter.FilterContext context) { // recupera il context da un campo tokenized var questionnaireContext = (string)(context.State.Context); var currentUser = _orchardServices.WorkContext.CurrentUser; if (currentUser != null) { List <Int32> elencoIdQuestionnaires = _userAnswersRecord.Fetch(x => x.User_Id == currentUser.Id && x.Context == questionnaireContext).Select(y => y.QuestionnairePartRecord_Id).Distinct().ToList(); if (elencoIdQuestionnaires.Count == 0) { elencoIdQuestionnaires.Add(0); } foreach (var id in elencoIdQuestionnaires) { var termId = id; Action <IAliasFactory> selector = alias => alias.ContentPartRecord <QuestionnairePartRecord>(); Action <IHqlExpressionFactory> filter = x => x.NotEqProperty("Id", id.ToString()); context.Query.Where(selector, filter); } } else { // non estrae nulla: la condizione seguente è sempre falsa Action <IAliasFactory> selector = alias => alias.ContentPartRecord <QuestionnairePartRecord>(); Action <IHqlExpressionFactory> filter = x => x.EqProperty("Id", "-100"); context.Query.Where(selector, filter); } }
public void ApplyFilter(OProjections.Descriptors.Filter.FilterContext context) { List <int> elencoIdQuestionnaires = new List <int>(); // recupera il context da un campo tokenized var aux = (string)(context.State.QuestionnaireId); var questionnaireId = string.IsNullOrWhiteSpace(aux) ? 0 : Convert.ToInt32(aux); // recupera il questionnaire context var questionnaireContext = (string)(context.State.Context); string uniqueId = ""; var currentUser = _orchardServices.WorkContext.CurrentUser; if (currentUser != null) { elencoIdQuestionnaires = _userAnswersRecord .Fetch(x => x.User_Id == currentUser.Id && x.QuestionnairePartRecord_Id == questionnaireId && x.Context == questionnaireContext) .Select(y => y.QuestionnairePartRecord_Id) .Distinct().ToList(); } else { var request = _orchardServices.WorkContext.HttpContext.Request; if (request != null && request.Headers["x-uuid"] != null) { uniqueId = request.Headers["x-uuid"]; } else { uniqueId = _orchardServices.WorkContext.HttpContext.Session.SessionID; } if (!string.IsNullOrWhiteSpace(uniqueId)) { elencoIdQuestionnaires = _userAnswersRecord .Fetch(x => x.SessionID == uniqueId && x.QuestionnairePartRecord_Id == questionnaireId && x.Context == questionnaireContext) .Select(y => y.QuestionnairePartRecord_Id) .Distinct().ToList(); } } if (currentUser != null || !string.IsNullOrWhiteSpace(uniqueId)) { Action <IAliasFactory> selector = alias => alias.ContentPartRecord <QuestionnairePartRecord>(); Action <IHqlExpressionFactory> filter1 = x => x.Eq("Id", questionnaireId); context.Query.Where(selector, filter1); foreach (var id in elencoIdQuestionnaires) { Action <IHqlExpressionFactory> filter2 = x => x.NotEqProperty("Id", id.ToString()); context.Query.Where(selector, filter2); } } }
public LocalizedString DisplayFilter(OProjections.Descriptors.Filter.FilterContext context) { return(T("Only unanswered Questionnare for current user on a specific context")); }