/// <summary> /// Get next page depending depending on the /// branching rules /// </summary> public int GetNextPage(int surveyId, int pageNumber, VoterAnswersData voterAnswers, bool evaluateScores) { BranchingRuleData surveyPageBranchingRules = new Surveys().GetSurveyPageBranchingRules(surveyId, pageNumber); if (surveyPageBranchingRules.BranchingRules.Rows.Count <= 0) { pageNumber++; return(pageNumber); } int num = pageNumber + 1; DataRow[] rowArray = null; foreach (BranchingRuleData.BranchingRulesRow row in surveyPageBranchingRules.BranchingRules.Rows) { int num2 = evaluateScores ? new Question().GetQuestionAnswersScore(row.QuestionId, voterAnswers) : 0; if ((evaluateScores && (row.ConditionalOperator == 3)) && (num2 == row.Score)) { return(row.TargetPageNumber); } if ((evaluateScores && (row.ConditionalOperator == 4)) && (num2 < row.Score)) { return(row.TargetPageNumber); } if ((evaluateScores && (row.ConditionalOperator == 5)) && (num2 > row.Score)) { return(row.TargetPageNumber); } if ((evaluateScores && (row.ConditionalOperator == 6)) && ((num2 >= row.Score) && (num2 <= row.ScoreMax))) { return(row.TargetPageNumber); } if (!row.IsAnswerIdNull() && !row.IsTextFilterNull()) { string expression = this.EscapeFilterString(row.TextFilter); if ((!row.IsExpressionOperatorNull() && (row.ExpressionOperator != 2)) && Information.IsDate(expression)) { expression = "#" + expression + "#"; } else if ((row.ExpressionOperator != 2) && !Information.IsNumeric(expression)) { expression = "'" + expression + "'"; } try { switch (row.ExpressionOperator) { case 1: rowArray = voterAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText = ", expression })); goto Label_0319; case 3: rowArray = voterAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText > ", expression })); goto Label_0319; case 4: rowArray = voterAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText < ", expression })); goto Label_0319; } rowArray = voterAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText like '%", expression, "%'" })); } catch (EvaluateException) { } } else if (!row.IsAnswerIdNull()) { rowArray = voterAnswers.VotersAnswers.Select("AnswerId=" + row.AnswerId); } else if (row.IsAnswerIdNull()) { rowArray = voterAnswers.VotersAnswers.Select("QuestionId=" + row.QuestionId); } else { rowArray = null; } Label_0319: if ((((rowArray != null) && (row.ConditionalOperator == 1)) && (rowArray.Length > 0)) || ((row.ConditionalOperator == 2) && (rowArray.Length == 0))) { return(row.TargetPageNumber); } } return(num); }
/// <summary> /// Get conditional thanks message based /// on user's answers /// </summary> public string GetThanksMessage(int surveyId, VoterAnswersData surveyAnswers, bool evaluateScores) { MessageConditionData surveyMessageConditions = new Surveys().GetSurveyMessageConditions(surveyId); if ((surveyMessageConditions.MessageConditions.Rows.Count > 0) && (surveyAnswers.Voters.Count > 0)) { DataRow[] rowArray = null; string thankYouMessage = null; int scoreTotal = evaluateScores ? this.GetScoreTotal(surveyAnswers) : 0; foreach (MessageConditionData.MessageConditionsRow row in surveyMessageConditions.MessageConditions.Rows) { if ((evaluateScores && (row.MessageConditionalOperator == 3)) && (scoreTotal < row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.MessageConditionalOperator == 2)) && (scoreTotal == row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.MessageConditionalOperator == 4)) && (scoreTotal > row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.MessageConditionalOperator == 5)) && ((scoreTotal >= row.Score) && (scoreTotal <= row.ScoreMax))) { thankYouMessage = row.ThankYouMessage; } if (row.MessageConditionalOperator != 1) { continue; } int num2 = evaluateScores ? new Question().GetQuestionAnswersScore(row.QuestionId, surveyAnswers) : 0; if ((evaluateScores && (row.ConditionalOperator == 3)) && (num2 == row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.ConditionalOperator == 4)) && (num2 < row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.ConditionalOperator == 5)) && (num2 > row.Score)) { thankYouMessage = row.ThankYouMessage; } if ((evaluateScores && (row.ConditionalOperator == 6)) && ((num2 >= row.Score) && (num2 <= row.ScoreMax))) { thankYouMessage = row.ThankYouMessage; } if (!row.IsAnswerIdNull() && !row.IsTextFilterNull()) { string expression = this.EscapeFilterString(row.TextFilter); if ((!row.IsExpressionOperatorNull() && (row.ExpressionOperator != 2)) && Information.IsDate(expression)) { expression = "#" + expression + "#"; } else if ((row.ExpressionOperator != 2) && !Information.IsNumeric(expression)) { expression = "'" + expression + "'"; } try { switch (row.ExpressionOperator) { case 1: rowArray = surveyAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText = ", expression })); goto Label_03F9; case 3: rowArray = surveyAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText > ", expression })); goto Label_03F9; case 4: rowArray = surveyAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText < ", expression })); goto Label_03F9; } rowArray = surveyAnswers.VotersAnswers.Select(string.Concat(new object[] { "AnswerId = ", row.AnswerId, " AND AnswerText like '%", expression, "%'" })); } catch (EvaluateException) { } } else if (!row.IsAnswerIdNull()) { rowArray = surveyAnswers.VotersAnswers.Select("AnswerId=" + row.AnswerId); } else if (row.IsAnswerIdNull()) { rowArray = surveyAnswers.VotersAnswers.Select("QuestionId=" + row.QuestionId); } else { rowArray = null; } Label_03F9: if ((((rowArray != null) && (row.ConditionalOperator == 1)) && (rowArray.Length > 0)) || ((row.ConditionalOperator == 2) && (rowArray.Length == 0))) { thankYouMessage = row.ThankYouMessage; break; } } if (thankYouMessage != null) { return(ParseThankYouMessage(thankYouMessage, scoreTotal)); } } return(null); }
/// <summary> /// Method to handle voter data once it has been stored in the database /// </summary> /// <param name="voter">Voter information as saved in the database and its answers</param> public void ProcessVoterData(VoterAnswersData voter) { }