/// <summary> /// Writes the response entry. /// </summary> /// <param name="responseHeaderId">The response header id.</param> /// <param name="section">The section.</param> /// <param name="question">The question.</param> /// <param name="answer">The answer.</param> /// <param name="responseText">The response text.</param> private void WriteResponseEntry(int responseHeaderId, ISection section, IQuestion question, IAnswer answer, string responseText) { var surveyRepository = new SurveyRepository(); var response = surveyRepository.CreateResponse(responseHeaderId, 1); response.SurveyId = this.SurveyId; response.SurveyText = this.Text; response.ShowSurveyText = this.ShowText; response.TitleOption = this.TitleOption; response.SectionText = section.Text; response.SectionRelativeOrder = section.RelativeOrder; response.ShowSectionText = false; response.SectionId = section.SectionId; response.SectionRelativeOrder = section.RelativeOrder; response.SectionFormatOption = this.SectionFormatOption; response.QuestionId = question.QuestionId; response.QuestionText = question.Text; response.QuestionRelativeOrder = question.RelativeOrder; response.QuestionFormatOption = this.QuestionFormatOption; response.ControlType = question.ControlType; if (answer != null) { response.AnswerId = answer.AnswerId; response.AnswerText = answer.Text; response.AnswerRelativeOrder = answer.RelativeOrder; response.AnswerIsCorrect = answer.IsCorrect; } response.UserResponse = responseText; surveyRepository.SubmitChanges(); Debug.WriteLine(response.ResponseId); }
/// <summary> /// Creates the response header. /// </summary> /// <param name="userId">The user id.</param> /// <returns>The ID of the created <see cref="ResponseHeader"/></returns> private static int CreateResponseHeader(int userId) { var surveyRepository = new SurveyRepository(); var header = surveyRepository.CreateResponseHeader(userId); surveyRepository.SubmitChanges(); return(header.ResponseHeaderId); }
public void DeleteSurvey(int surveyId) { var surveyRepository = new SurveyRepository(); var moduleId = surveyRepository.GetModuleIdForSurvey(surveyId); if (!this.CanEditModule(moduleId)) { this.DenyAccess(); } surveyRepository.DeleteSurvey(surveyId, moduleId); }
public void DeleteQuestion(int questionId) { var surveyRepository = new SurveyRepository(); var moduleId = surveyRepository.GetModuleIdForQuestion(questionId); if (!this.CanEditModule(moduleId)) { this.DenyAccess(); } surveyRepository.DeleteQuestion(questionId); }
/// <summary> /// Binds the data. /// </summary> private void BindData() { var surveys = new SurveyRepository().LoadSurveys(this.ModuleId, this.IsAdmin); // Hides surveys with no questions from non-administrators if (!this.IsEditable) { surveys = surveys.Where(s => s.Sections.Any(section => section.Questions.Any())); } this.SurveyGrid.DataSource = surveys; this.SurveyGrid.DataBind(); }
/// <summary> /// Gets the answer choices. /// </summary> /// <value>The answer choices.</value> public List <IAnswer> GetAnswers() { var answers = new SurveyRepository().LoadReadOnlyAnswers(this.ResponseHeaderId, this.QuestionId); // Initialize the responses this.Responses = answers.Select(answer => new UserResponse { RelationshipKey = answer.RelationshipKey, AnswerValue = answer.AnswerValue }).ToList(); return(answers.Cast <IAnswer>().ToList()); }
public void ReorderQuestions(int surveyId, Dictionary<string, int> questionOrderMap) { var surveyRepository = new SurveyRepository(); var moduleId = surveyRepository.GetModuleIdForSurvey(surveyId); if (!this.CanEditModule(moduleId)) { this.DenyAccess(); } var survey = surveyRepository.LoadSurvey(surveyId); foreach (var questionIdOrderPair in questionOrderMap) { var questionId = int.Parse(questionIdOrderPair.Key, CultureInfo.InvariantCulture); var relativeOrder = questionIdOrderPair.Value; survey.Sections[0].Questions.Where(q => q.QuestionId == questionId).Single().RelativeOrder = relativeOrder; } surveyRepository.SubmitChanges(); }
public int UpdateSurvey(Survey survey) { int moduleId; Survey surveyToUpdate; var surveyRepository = new SurveyRepository(); if (survey.SurveyId > 0) { surveyToUpdate = surveyRepository.LoadSurvey(survey.SurveyId); surveyToUpdate.RevisingUser = surveyToUpdate.Sections[0].RevisingUser = survey.RevisingUser; moduleId = surveyToUpdate.ModuleId; } else { surveyToUpdate = surveyRepository.CreateSurvey(survey.RevisingUser, survey.PortalId, survey.ModuleId); moduleId = survey.ModuleId; } if (!this.CanEditModule(moduleId)) { this.DenyAccess(); } // TODO: store dates in UTC surveyToUpdate.Text = survey.Text; surveyToUpdate.PortalId = survey.PortalId; surveyToUpdate.ModuleId = survey.ModuleId; surveyToUpdate.ShowText = true; surveyToUpdate.StartDate = survey.StartDate; surveyToUpdate.PreStartMessage = survey.PreStartMessage; surveyToUpdate.EndDate = survey.EndDate; surveyToUpdate.PostEndMessage = survey.PostEndMessage; surveyToUpdate.SendNotification = survey.SendNotification; surveyToUpdate.NotificationFromEmailAddress = survey.NotificationFromEmailAddress; surveyToUpdate.NotificationToEmailAddresses = survey.NotificationToEmailAddresses; surveyToUpdate.SendThankYou = survey.SendThankYou; surveyToUpdate.ThankYouFromEmailAddress = survey.ThankYouFromEmailAddress; surveyToUpdate.FinalMessageOption = survey.FinalMessageOption; surveyToUpdate.FinalMessage = survey.FinalMessage; surveyToUpdate.FinalUrl = survey.FinalUrl; surveyToUpdate.Sections.First().Text = survey.Sections.First().Text; surveyToUpdate.Sections.First().ShowText = true; surveyRepository.SubmitChanges(); return surveyToUpdate.SurveyId; }
public object UpdateQuestion(int surveyId, Question question) { var surveyRepository = new SurveyRepository(); var survey = surveyRepository.LoadSurvey(surveyId); if (!this.CanEditModule(survey.ModuleId)) { this.DenyAccess(); } Question questionToUpdate; if (question.QuestionId > 0) { questionToUpdate = survey.Sections.First().Questions.Where(q => q.QuestionId == question.QuestionId).Single(); questionToUpdate.RevisingUser = question.RevisingUser; } else { questionToUpdate = surveyRepository.CreateQuestion(question.RevisingUser); survey.Sections.First().Questions.Add(questionToUpdate); } questionToUpdate.Text = question.Text; questionToUpdate.IsRequired = question.IsRequired; questionToUpdate.RelativeOrder = question.RelativeOrder; questionToUpdate.ControlType = question.ControlType; var answersToDelete = from answer in questionToUpdate.Answers where !question.Answers.Any(a => a.AnswerId == answer.AnswerId) select answer; surveyRepository.DeleteAnswers(answersToDelete, true); int answerOrder = 0; foreach (var answer in question.Answers) { Answer answerToUpdate; if (answer.AnswerId > 0) { var lambdaAnswer = answer; answerToUpdate = questionToUpdate.Answers.Where(a => a.AnswerId == lambdaAnswer.AnswerId).Single(); answerToUpdate.RevisingUser = question.RevisingUser; } else { answerToUpdate = surveyRepository.CreateAnswer(question.RevisingUser); questionToUpdate.Answers.Add(answerToUpdate); } answerToUpdate.Text = answer.Text; answerToUpdate.RelativeOrder = ++answerOrder; } surveyRepository.SubmitChanges(); return new { questionToUpdate.QuestionId, questionToUpdate.ControlType, questionToUpdate.RelativeOrder, questionToUpdate.Text, questionToUpdate.IsRequired, Answers = questionToUpdate.Answers.OrderBy(a => a.RelativeOrder).Select( a => new { a.AnswerId, a.RelativeOrder, a.Text }) }; }
/// <summary> /// Parses out the survey HTML for use in an email or printing. /// </summary> /// <param name="responseHeaderId">The response header id.</param> /// <param name="title">The title.</param> /// <param name="displayName">The display name.</param> /// <returns> /// A string containing table based html that represents a survey. /// </returns> private string GenerateTableBasedSurvey(int responseHeaderId, string title, string displayName) { var builder = new StringBuilder(); string body = this.Localize("SurveyCompleted_Body.Text"); if (body != null) { body = body.Replace(Utility.UserNameMarker, displayName); body = body.Replace(Utility.SurveyInformationMarker, title); var survey = new SurveyRepository().LoadReadOnlySurvey(responseHeaderId, this.ModuleId); var table = new Table(); var sb = new StringBuilder(); var writer = new HtmlTextWriter(new StringWriter(sb)); survey.Render(table, new DnnLocalizer(this.LocalResourceFile)); table.RenderControl(writer); body = body.Replace(Utility.SurveyTableMarker, sb.ToString()); builder.Append(body); } ////Because the output of the controls are type "input" the disabled, checked and selected properties must be changed ////to just disabled, checked and selected to be recognized by certain email clients i.e. Hotmail. return builder.ToString().Replace('"', '\'').Replace(Environment.NewLine, string.Empty).Replace("\t", string.Empty).Replace( "='selected'", string.Empty).Replace("='disabled'", string.Empty).Replace("='checked'", string.Empty); }
/// <summary> /// Gets the sections. /// </summary> /// <returns>List of ISections for this survey</returns> public List<ISection> GetSections() { var sections = new SurveyRepository().LoadReadOnlySections(this.ResponseHeaderId, this.SurveyId); return sections.Cast<ISection>().ToList(); }
/// <summary> /// Gets the answer choices. /// </summary> /// <value>The answer choices.</value> public List<IAnswer> GetAnswers() { var answers = new SurveyRepository().LoadReadOnlyAnswers(this.ResponseHeaderId, this.QuestionId); // Initialize the responses this.Responses = answers.Select(answer => new UserResponse { RelationshipKey = answer.RelationshipKey, AnswerValue = answer.AnswerValue }).ToList(); return answers.Cast<IAnswer>().ToList(); }
/// <summary> /// Creates the response header. /// </summary> /// <param name="userId">The user id.</param> /// <returns>The ID of the created <see cref="ResponseHeader"/></returns> private static int CreateResponseHeader(int userId) { var surveyRepository = new SurveyRepository(); var header = surveyRepository.CreateResponseHeader(userId); surveyRepository.SubmitChanges(); return header.ResponseHeaderId; }
/// <summary> /// Gets the sections. /// </summary> /// <returns>List of ISections for this survey</returns> public List <ISection> GetSections() { var sections = new SurveyRepository().LoadReadOnlySections(this.ResponseHeaderId, this.SurveyId); return(sections.Cast <ISection>().ToList()); }
/// <summary> /// Creates the graphs for each question. /// </summary> private void CreateGraphs() { var questions = new SurveyRepository().LoadAnswerResponseCounts(this.SurveyId); foreach (var questionPair in questions) { var question = questionPair.First; var answers = questionPair.Second.ToArray(); const int TitleHeight = 25; const int AnswerHeight = 16; const int HeaderFooterHeight = 70; var linesOfTitleText = (int)Math.Ceiling(question.Text.Length / (double)35); var chart = new RadChart { ChartTitle = { TextBlock = { Text = this.GetQuestionLabel(question.RelativeOrder, question.Text, false) } }, SeriesOrientation = ChartSeriesOrientation.Horizontal, Skin = TelerikChartsSkin, Height = Unit.Pixel((linesOfTitleText * TitleHeight) + (AnswerHeight * answers.Length) + HeaderFooterHeight), Legend = { Visible = false }, AutoTextWrap = true, AutoLayout = true, HttpHandlerUrl = this.ResolveUrl("~/ChartImage.axd"), EnableHandlerDetection = false, PlotArea = { XAxis = { Appearance = { TextAppearance = { Visible = false } } }, YAxis = { AxisLabel = { TextBlock = { Text = this.Localize("Axis Label.Text") }, Visible = true } } }, }; var chartSeries = new ChartSeries(); foreach (var answerPair in answers) { var answer = answerPair.First; var answerCount = answerPair.Second; chartSeries.Items.Insert(0, new ChartSeriesItem(answerCount, this.GetAnswerLabel(answer.RelativeOrder, answer.Text, false))); } chart.Series.Add(chartSeries); this.ChartsPanel.Controls.Add(chart); } var charts = this.ChartsPanel.Controls.OfType<RadChart>(); if (!charts.Any()) { return; } var maxHeight = charts.Select(c => (int)c.Height.Value).Max(); foreach (var chart in charts) { chart.Height = Unit.Pixel(maxHeight); } }