protected override string GenerateQuestionsReport(bool onlyAnswered) { StringBuilder questionsReport = new StringBuilder(); _questionData = new Questions().GetQuestionHierarchy(_surveyId); questionsReport.Append(Environment.NewLine + "<br />" + ResourceManager.GetString("SurveyAnswersTitle") + Environment.NewLine + "<br />"); questionsReport.Append("-----------------------------------------" + Environment.NewLine + "<br />"); QuestionData.QuestionsRow[] parentQuestions = GetParentQuestions(); for (int i=0;i<parentQuestions.Length;i++) { string questionText = ((QuestionData.QuestionsRow)parentQuestions[i]).QuestionText; questionText = questionText.Replace("<br />", Environment.NewLine + "<br />"); questionText = new PipeManager().PipeValuesInText(((QuestionData.QuestionsRow)parentQuestions[i]).QuestionId, questionText, _voterAnswers.VotersAnswers, null); if (System.Web.HttpContext.Current != null) { questionText = System.Text.RegularExpressions.Regex.Replace(questionText, "<[^>]*>", " "); } // Check if the question has childs string filter = string.Format("ParentQuestionID = {0}", ((QuestionData.QuestionsRow)parentQuestions[i]).QuestionId); QuestionData.QuestionsRow[] childQuestions = (QuestionData.QuestionsRow[])_questionData.Questions.Select(filter,"DisplayOrder", DataViewRowState.CurrentRows); if (childQuestions.Length == 0) { StringBuilder answerReport = new StringBuilder(); for (int sectionNumber=0;sectionNumber<=GetQuestionSectionCount(((QuestionData.QuestionsRow)parentQuestions[i]).QuestionId);sectionNumber++) { answerReport.Append(GenerateAnswersReport(((QuestionData.QuestionsRow)parentQuestions[i]).QuestionId, onlyAnswered, sectionNumber)); answerReport.Append(Environment.NewLine + "<br />"); } if (answerReport.Length > 0 || !onlyAnswered) { questionsReport.Append( questionText + Environment.NewLine + "<br />"); questionsReport.Append(answerReport); if (isScored) { questionsReport.Append(Environment.NewLine + "<br />"); questionsReport.Append(ResourceManager.GetString("QuestionScoreLabel")+ _questionScore); } _totalScore += _questionScore; questionsReport.Append(Environment.NewLine + "<br />" + Environment.NewLine + "<br />"); } _questionScore = 0; } else { questionsReport.Append( "-----" + Environment.NewLine + "<br />"); questionsReport.Append( questionText + Environment.NewLine + "<br />" + Environment.NewLine + "<br />" ); for (int sectionNumber=0;sectionNumber<=GetMatrixSectionCount(new DataView(_questionData.Questions,filter,"DisplayOrder", DataViewRowState.CurrentRows));sectionNumber++) { questionsReport.Append(GenerateMatrixReport(childQuestions, onlyAnswered, sectionNumber)); questionsReport.Append(Environment.NewLine + "<br />"); } questionsReport.Append( "-----"+ Environment.NewLine + "<br />"); questionsReport.Append(Environment.NewLine + "<br />" + Environment.NewLine + "<br />"); } } return questionsReport.ToString(); }
/// <summary> /// Generates the answers list for the question /// </summary> /// <param name="questionId"></param> /// <param name="onlyAnswered">show only answers that have been answered</param> string GenerateAnswersReport(int questionId, bool onlyAnswered, int sectionNumber) { StringBuilder answersReport = new StringBuilder(); AnswerData questionAnswers = new Answers().GetAnswers(questionId, null); int longestTextLength = GetLongestAnswerLength(questionAnswers); foreach (AnswerData.AnswersRow answer in questionAnswers.Answers.Rows) { AnswerTypeMode typeMode = (AnswerTypeMode) answer.TypeMode; VoterAnswersData.VotersAnswersRow voterAnswer = _voterAnswers.VotersAnswers.FindByVoterIdAnswerIdSectionNumber(_voterAnswers.Voters[0].VoterId , answer.AnswerId, sectionNumber); string answerText = new PipeManager().PipeValuesInText(questionId, answer.AnswerText, _voterAnswers.VotersAnswers, null); if (voterAnswer != null) { // Check answer type if ((((typeMode & AnswerTypeMode.Field) > 0) || ((typeMode & AnswerTypeMode.Custom) > 0) || ((typeMode & AnswerTypeMode.DataSource) > 0)) && ((typeMode & AnswerTypeMode.Selection) == 0)) { if (voterAnswer.AnswerText.Length > 0) { answersReport.Append(" " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " " + voterAnswer.AnswerText + Environment.NewLine + "<br />"); } else if (!onlyAnswered) { answersReport.Append(" " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " " + ResourceManager.GetString("AnswerNotAnsweredMessage") + Environment.NewLine + "<br />"); } } else if (((AnswerTypeMode)answer.TypeMode & AnswerTypeMode.Field) > 0 && ((AnswerTypeMode)answer.TypeMode & AnswerTypeMode.Selection) > 0) { answersReport.Append( " " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " [x] " +voterAnswer.AnswerText+ Environment.NewLine + "<br />"); _questionScore += answer.ScorePoint; } else if(((AnswerTypeMode)typeMode & AnswerTypeMode.Upload) > 0) { answersReport.Append( " " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " " +GenerateFileList(voterAnswer.AnswerText)+ Environment.NewLine + "<br />"); } else { answersReport.Append( " " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " [x]" + Environment.NewLine + "<br />"); _questionScore += answer.ScorePoint; } } else if (!onlyAnswered) { // Check answer type if ((((typeMode & AnswerTypeMode.Field) > 0) || ((typeMode & AnswerTypeMode.Custom) > 0) || ((typeMode & AnswerTypeMode.DataSource) > 0)) && ((typeMode & AnswerTypeMode.Selection) == 0)) { answersReport.Append(" " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " " + ResourceManager.GetString("AnswerNotAnsweredMessage")+ Environment.NewLine + "<br />"); } else if ( ((AnswerTypeMode)answer.TypeMode & AnswerTypeMode.Field) > 0 && ((AnswerTypeMode)answer.TypeMode & AnswerTypeMode.Selection) > 0) { answersReport.Append( " " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " [] " +ResourceManager.GetString("AnswerNotAnsweredMessage")+ Environment.NewLine + "<br />"); } else { answersReport.Append( " " + answerText + GenerateMissingSpaces(answerText.Length, longestTextLength) + " []" + Environment.NewLine + "<br />"); } } } return answersReport.ToString(); }
/// <summary> /// Parse the given string and replace any /// available templates by their runtime values /// </summary> private static string ParseDefaultAnswerText(int questionId, string currentDefaultText, VoterAnswersData.VotersAnswersDataTable voterAnswersState, string languageCode) { currentDefaultText = new PipeManager().PipeValuesInText(questionId, currentDefaultText, voterAnswersState, languageCode); string str = new Regex(@"#{2}((\S)+)#{2}").Match(currentDefaultText).Groups[1].ToString(); if ((str.Length > 0) && (HttpContext.Current != null)) { currentDefaultText = (HttpContext.Current.Request[str] == null) ? string.Empty : HttpContext.Current.Request[str]; return currentDefaultText; } string str2 = new Regex(@"%{2}((\S)+)%{2}").Match(currentDefaultText).Groups[1].ToString(); if ((str2.Length > 0) && (HttpContext.Current != null)) { currentDefaultText = (HttpContext.Current.Request.ServerVariables[str2] == null) ? string.Empty : HttpContext.Current.Request.ServerVariables[str2]; return currentDefaultText; } string str3 = new Regex(@"@{2}((\S)+)@{2}").Match(currentDefaultText).Groups[1].ToString(); if ((str3.Length > 0) && (HttpContext.Current != null)) { currentDefaultText = (HttpContext.Current.Session[str3] == null) ? string.Empty : HttpContext.Current.Session[str3].ToString(); return currentDefaultText; } string str4 = new Regex(@"&{2}((\S)+)&{2}").Match(currentDefaultText).Groups[1].ToString(); if ((str4.Length > 0) && (HttpContext.Current != null)) { currentDefaultText = (HttpContext.Current.Request.Cookies[str4] == null) ? string.Empty : HttpContext.Current.Request.Cookies[str4].Value.ToString(); return currentDefaultText; } return currentDefaultText; }