Module: Decidim::Templates::Admin::QuestionnaireCopier
- Included in:
- ApplyQuestionnaireTemplate, CopyQuestionnaireTemplate
- Defined in:
- decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb
Instance Method Summary collapse
- #copy_question_display_conditions(original_question, destination_question) ⇒ Object
- #copy_questionnaire_answer_options(original_question, new_question) ⇒ Object
- #copy_questionnaire_matrix_rows(original_question, new_question) ⇒ Object
- #copy_questionnaire_questions(original_questionnaire, new_questionnaire) ⇒ Object
- #find_answer_option_by_body(answer_options, body) ⇒ Object
- #find_question_by_position(questions, position) ⇒ Object
Instance Method Details
#copy_question_display_conditions(original_question, destination_question) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 40 def copy_question_display_conditions(original_question, destination_question) original_question.display_conditions.each do |original_display_condition| new_display_condition = original_display_condition.dup new_display_condition.question = destination_question destination_question_to_be_checked = find_question_by_position(destination_question.questionnaire.questions, original_display_condition.condition_question.position) new_display_condition.condition_question = destination_question_to_be_checked if original_display_condition.answer_option new_display_condition.answer_option = find_answer_option_by_body(destination_question_to_be_checked., original_display_condition.answer_option.body) end new_display_condition.save! destination_question.display_conditions << new_display_condition end end |
#copy_questionnaire_answer_options(original_question, new_question) ⇒ Object
24 25 26 27 28 29 30 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 24 def (original_question, new_question) original_question..each do |original_answer_option| new_answer_option = original_answer_option.dup new_answer_option.question = new_question new_answer_option.save! end end |
#copy_questionnaire_matrix_rows(original_question, new_question) ⇒ Object
32 33 34 35 36 37 38 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 32 def copy_questionnaire_matrix_rows(original_question, new_question) original_question.matrix_rows.each do |original_matrix_row| new_matrix_row = original_matrix_row.dup new_matrix_row.question = new_question new_matrix_row.save! end end |
#copy_questionnaire_questions(original_questionnaire, new_questionnaire) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 8 def copy_questionnaire_questions(original_questionnaire, new_questionnaire) # start by copying the questions so that they already exist when cross referencing them in the conditions original_questionnaire.reload.questions.includes(:answer_options, :matrix_rows, :display_conditions) original_questionnaire.questions.each do |original_question| new_question = original_question.dup new_question.questionnaire = new_questionnaire new_question.save! (original_question, new_question) copy_questionnaire_matrix_rows(original_question, new_question) end # once all questions are copied, copy display conditions original_questionnaire.questions.zip(new_questionnaire.questions.load).each do |original_question, new_question| copy_question_display_conditions(original_question, new_question) end end |
#find_answer_option_by_body(answer_options, body) ⇒ Object
60 61 62 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 60 def find_answer_option_by_body(, body) .to_a.find { |ao| ao.body == body } end |
#find_question_by_position(questions, position) ⇒ Object
56 57 58 |
# File 'decidim-templates/app/commands/decidim/templates/admin/questionnaire_copier.rb', line 56 def find_question_by_position(questions, position) questions.to_a.find { |q| q.position == position } end |