Provides access to store and retrieve surveys and related types
Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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();
        }
Ejemplo n.º 6
0
        /// <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 })
                    };
        }
Ejemplo n.º 10
0
        /// <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);
        }
Ejemplo n.º 11
0
 /// <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();
 }
Ejemplo n.º 12
0
        /// <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();
        }
Ejemplo n.º 13
0
        /// <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);
        }
Ejemplo n.º 14
0
        /// <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;
        }
Ejemplo n.º 15
0
        /// <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);
            }
        }