surveyor_gui 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/README.md +22 -2
  4. data/app/controllers/surveyor_gui/answers_controller.rb +3 -0
  5. data/app/controllers/surveyor_gui/application_controller.rb +3 -0
  6. data/app/controllers/{dependencys_controller.rb → surveyor_gui/dependencys_controller.rb} +5 -5
  7. data/app/controllers/{question_groups_controller.rb → surveyor_gui/question_groups_controller.rb} +13 -7
  8. data/app/controllers/{questions_controller.rb → surveyor_gui/questions_controller.rb} +6 -6
  9. data/app/controllers/surveyor_gui/reports_controller.rb +6 -6
  10. data/app/controllers/surveyor_gui/responses_controller.rb +3 -1
  11. data/app/controllers/surveyor_gui/survey_controller.rb +1 -1
  12. data/app/controllers/{survey_sections_controller.rb → surveyor_gui/survey_sections_controller.rb} +5 -5
  13. data/app/controllers/{surveyforms_controller.rb → surveyor_gui/surveyforms_controller.rb} +1 -1
  14. data/app/controllers/{surveyor_controller.rb → surveyor_gui/surveyor_controller.rb} +2 -2
  15. data/app/helpers/surveyor_gui/application_helper.rb +2 -0
  16. data/app/helpers/{dependency_helper.rb → surveyor_gui/dependencys_helper.rb} +1 -1
  17. data/app/helpers/surveyor_gui/question_groups_helper.rb +3 -0
  18. data/app/helpers/{question_helper.rb → surveyor_gui/questions_helper.rb} +1 -1
  19. data/app/helpers/surveyor_gui/{report_helper.rb → reports_helper.rb} +1 -1
  20. data/app/helpers/surveyor_gui/surveyforms_helper.rb +160 -0
  21. data/app/helpers/{surveyor_helper.rb → surveyor_gui/surveyor_helper.rb} +1 -1
  22. data/app/models/question_group_tracker.rb +19 -0
  23. data/app/views/layouts/{application.html.erb → surveyor_gui/application.html.erb} +0 -0
  24. data/app/views/layouts/{surveyor_gui_blank.html.erb → surveyor_gui/surveyor_gui_blank.html.erb} +1 -0
  25. data/app/views/layouts/{surveyor_gui_default.html.erb → surveyor_gui/surveyor_gui_default.html.erb} +1 -0
  26. data/app/views/layouts/{surveyor_modified.html.erb → surveyor_gui/surveyor_modified.html.erb} +0 -0
  27. data/app/views/{dependencys → surveyor_gui/dependencys}/_column.html.erb +0 -0
  28. data/app/views/{dependencys → surveyor_gui/dependencys}/_dependency.html.erb +0 -0
  29. data/app/views/{dependencys → surveyor_gui/dependencys}/_dependency_condition_fields.html.erb +0 -0
  30. data/app/views/{dependencys → surveyor_gui/dependencys}/_form.html.erb +0 -0
  31. data/app/views/{dependencys → surveyor_gui/dependencys}/blank.html.erb +0 -0
  32. data/app/views/{dependencys → surveyor_gui/dependencys}/edit.html.erb +0 -0
  33. data/app/views/{dependencys → surveyor_gui/dependencys}/new.html.erb +0 -0
  34. data/app/views/{partials → surveyor_gui/partials}/_answer.html.haml +0 -0
  35. data/app/views/{partials → surveyor_gui/partials}/_question.html.haml +0 -0
  36. data/app/views/{partials → surveyor_gui/partials}/_question_group.html.haml +0 -0
  37. data/app/views/{partials → surveyor_gui/partials}/_section.html.haml +0 -0
  38. data/app/views/surveyor_gui/partials/_url_helpers.html.erb +5 -0
  39. data/app/views/{question_groups → surveyor_gui/question_groups}/_form.html.erb +2 -1
  40. data/app/views/{question_groups → surveyor_gui/question_groups}/_group_inline_field.html.erb +0 -0
  41. data/app/views/{question_groups → surveyor_gui/question_groups}/_group_inline_fields.html.erb +0 -0
  42. data/app/views/{question_groups → surveyor_gui/question_groups}/blank.html.erb +0 -0
  43. data/app/views/{question_groups → surveyor_gui/question_groups}/edit.html.erb +0 -0
  44. data/app/views/{question_groups → surveyor_gui/question_groups}/new.html.erb +0 -0
  45. data/app/views/{questions → surveyor_gui/questions}/_answer_fields.html.erb +0 -0
  46. data/app/views/{questions → surveyor_gui/questions}/_answer_options.html.erb +0 -0
  47. data/app/views/{questions → surveyor_gui/questions}/_form.html.erb +2 -1
  48. data/app/views/{questions → surveyor_gui/questions}/_grid_dropdown_columns.html.erb +0 -0
  49. data/app/views/{questions → surveyor_gui/questions}/_grid_dropdown_fields.html.erb +0 -0
  50. data/app/views/{questions → surveyor_gui/questions}/_grid_fields.html.erb +0 -0
  51. data/app/views/{questions → surveyor_gui/questions}/_no_picks.html.erb +0 -0
  52. data/app/views/{questions → surveyor_gui/questions}/_pick.html +0 -0
  53. data/app/views/{questions → surveyor_gui/questions}/_picks.html.erb +0 -0
  54. data/app/views/{questions → surveyor_gui/questions}/blank.html.erb +0 -0
  55. data/app/views/{questions → surveyor_gui/questions}/edit.html.erb +0 -0
  56. data/app/views/{questions → surveyor_gui/questions}/new.html.erb +0 -0
  57. data/app/views/surveyor_gui/responses/_survey_results.html.haml +1 -1
  58. data/app/views/surveyor_gui/responses/index.html.haml +1 -1
  59. data/app/views/surveyor_gui/shared/_report_data.html.haml +17 -14
  60. data/app/views/{survey_sections → surveyor_gui/survey_sections}/_form.html.erb +0 -0
  61. data/app/views/{survey_sections → surveyor_gui/survey_sections}/blank.html.erb +0 -0
  62. data/app/views/{survey_sections → surveyor_gui/survey_sections}/edit.html.erb +0 -0
  63. data/app/views/{survey_sections → surveyor_gui/survey_sections}/new.html.erb +0 -0
  64. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_form.html.erb +4 -4
  65. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_field.html.erb +0 -0
  66. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_group.html.erb +14 -14
  67. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_group_fields.html.erb +0 -0
  68. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_name_and_number.html.erb +0 -0
  69. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_section.html.erb +0 -0
  70. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_question_wrapper.html.erb +14 -15
  71. data/app/views/{surveyforms → surveyor_gui/surveyforms}/_survey_section_fields.html.erb +11 -12
  72. data/app/views/{surveyforms → surveyor_gui/surveyforms}/clone_survey.html.erb +0 -0
  73. data/app/views/surveyor_gui/surveyforms/edit.html.erb +5 -0
  74. data/app/views/{surveyforms → surveyor_gui/surveyforms}/index.html.erb +2 -2
  75. data/app/views/{surveyforms → surveyor_gui/surveyforms}/new.html.erb +0 -0
  76. data/app/views/{surveyforms → surveyor_gui/surveyforms}/show.html.erb +0 -0
  77. data/config/routes.rb +20 -22
  78. data/lib/assets/javascripts/surveyor_gui/surveyor_gui.js +25 -14
  79. data/lib/assets/stylesheets/surveyor_gui/surveyor_gui.sass +2 -0
  80. data/lib/generators/surveyor_gui/install_generator.rb +1 -1
  81. data/lib/generators/surveyor_gui/templates/app/views/layouts/{surveyor_gui_default.html.erb → surveyor_gui/surveyor_gui_default.html.erb} +1 -0
  82. data/lib/surveyor_gui/engine.rb +2 -1
  83. data/lib/surveyor_gui/models/response_set_methods.rb +2 -1
  84. data/lib/surveyor_gui/surveyforms_controller_methods.rb +1 -1
  85. data/lib/surveyor_gui/version.rb +1 -1
  86. data/spec/controllers/surveyforms_controller_spec.rb +10 -9
  87. data/spec/features/create_survey_spec.rb +2 -3
  88. data/spec/features/dependencies_spec.rb +1 -1
  89. data/spec/support/surveyforms_creation_helpers.rb +4 -4
  90. data/spec/views/questions/edit.html.erb_spec.rb +4 -3
  91. data/spec/views/surveyforms/edit.html.erb_spec.rb +1 -1
  92. metadata +71 -67
  93. data/app/controllers/answers_controller.rb +0 -3
  94. data/app/controllers/application_controller.rb +0 -3
  95. data/app/helpers/application_helper.rb +0 -2
  96. data/app/helpers/surveyform_helper.rb +0 -179
  97. data/app/views/surveyforms/edit.html.erb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01ff64c99fbe1b160d2a285be9d7542b78ae1475
4
- data.tar.gz: 5446a1b7ec3ed1a52075fe7581f303930c61b518
3
+ metadata.gz: 289785dc295cf459338fa764ccab75b77eb5a5f5
4
+ data.tar.gz: 856577a30296bc7a4db424363578859d95667e64
5
5
  SHA512:
6
- metadata.gz: 7483d8876d1d10aa8b685ae2f554443d5c3912b7af468a086f260adf0fc6de5d4579c1ed9799140b04bfd8a9c7e5d96223a575e2353640d2e21562d9c5142db0
7
- data.tar.gz: 8d7b4471e2a80f408842d765bc1421c233a0bc6ea6180f4fa66dac81e2bd5b21fc0f0ce839046e1fd10e11736f0c0c513ae94ff1eda8b5a4b13ec715eaf198bf
6
+ metadata.gz: 2fcbec126c907ee557bcca03d509f218631c185aa5bfecfeb778203f15051eff8432cf0bf23b6dbd87fdf3d68dee88d262519eac27dd8f2cb9ef90ae666e7163
7
+ data.tar.gz: 213a50cc096022c92529a88e6f50e00e1d1dc85a843f066330dd793955e1b1e4008b711cb1c5746b7d6ffe2176e5b0efbe4ee0765444f974c7215c01f7547d20
@@ -0,0 +1,32 @@
1
+ History for Surveyor
2
+ ====================
3
+
4
+ 0.1.0
5
+ ------
6
+
7
+ ### Features
8
+
9
+ - This gem is now a mountable engine and uses isolate_namespace.
10
+
11
+ ### Fixes
12
+
13
+ - Fixes error on preview report in which no users are shown and report data is empty. Will now show fake user names.
14
+ - Fixes error on preview response and show response when dependencies are set. Also shows correct user name on reponse
15
+ index.
16
+
17
+ 0.0.3
18
+ ------
19
+
20
+ ### Features
21
+
22
+ - Official support for Rails 4.0. Will work generally work with 4.1 but, Surveyor, a critical dependency, is not officially supported on 4.1.
23
+
24
+ - Supports survey creation and reporting.
25
+
26
+ - Provides preview of how surveys and reports will look as you are building a survey.
27
+
28
+ ### Fixes
29
+
30
+
31
+ ### Infrastructure
32
+
data/README.md CHANGED
@@ -11,7 +11,9 @@ Surveyor_gui meets this need by providing a gui to create surveys from scratch.
11
11
 
12
12
  Surveyor is feature-rich and can create very complex surveys. Surveyor-gui supports most of the features in Surveyor.
13
13
 
14
- This gem will also provide a reporting capability for Surveyor.
14
+ This gem also provides a reporting capability for Surveyor.
15
+
16
+ Surveyor_gui is a mountable engine.
15
17
 
16
18
  ## Requirements
17
19
 
@@ -86,6 +88,9 @@ This gem enforces locking on surveys. A survey may be modified up until a user
86
88
  can no longer be edited for structural changes (i.e., /surveyform/edit will not permit any changes). This protects the
87
89
  data integrity of the survey response data.
88
90
 
91
+ If you want to unlock a survey, you will need to manually delete all of the child ResponseSet records (e.g.,
92
+ Survey.find(1).response_set.all.each{|r| r.destroy} ). Use appropriate caution!
93
+
89
94
  ## Templates
90
95
 
91
96
  Surveys may be saved as templates. This allows them to be cloned when creating a new survey (cloning is a pending feature). It is
@@ -156,4 +161,19 @@ If you wanted the users full name, you could add something like this:
156
161
 
157
162
  @user ? @user.last_name + ', ' + @user.first_name : nil
158
163
 
159
- Note that SurveyorGui controllers expect to use surveyor_gui's own layout view, surveyor_gui_default.rb. A copy will be placed in your application's app/views/layouts directory. You may need edit it for various reasons, such as adding a Devise login/logout link.
164
+ Note that SurveyorGui controllers expect to use surveyor_gui's own layout view, surveyor_gui_default.rb. A copy will be placed in your application's app/views/layouts directory. You may need edit it for various reasons, such as adding a Devise login/logout link. Keep in mind that surveyor_gui works in an isolated namespace, so devise helpers need to be namespaced to the main app. That means that any view local to surveyor_gui would need to refer to Devise's new_user_registration_path as main_app.new_user_registration_path. If you wanted to add a login/logout link to the surveyor_gui_default layout, you might add something like this:
165
+
166
+ <% if user_signed_in? %>
167
+ Logged in as <strong><%= current_user.email %></strong>.
168
+ <%= link_to 'Edit profile', main_app.edit_user_registration_path %> |
169
+ <%= link_to "Logout", main_app.destroy_user_session_path, method: :delete %>
170
+ <% else %>
171
+ <%= link_to "Sign up", main_app.new_user_registration_path %> |
172
+ <%= link_to "Login", main_app.new_user_session_path %>
173
+ <% end %>
174
+
175
+
176
+ ## Surveyor
177
+
178
+ Please take a look at the NUBIC/surveyor on github. The README.doc file will help you to understand how the surveyor engine works. Also, the wiki has a very useful data diagram that will help you to grasp the data
179
+ structure of the surveys and responses.
@@ -0,0 +1,3 @@
1
+ class SurveyorGui::AnswersController < ApplicationController
2
+ layout 'surveyor_gui/surveyor_gui_blank'
3
+ end
@@ -0,0 +1,3 @@
1
+ class SurveyorGui::ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -1,5 +1,5 @@
1
- class DependencysController < ApplicationController
2
- layout 'surveyor_gui_blank'
1
+ class SurveyorGui::DependencysController < ApplicationController
2
+ layout 'surveyor_gui/surveyor_gui_blank'
3
3
 
4
4
  def new
5
5
  prep_variables
@@ -21,7 +21,7 @@ class DependencysController < ApplicationController
21
21
  if @question.save
22
22
  redirect_to :back
23
23
  else
24
- render :action => 'new', :layout => 'surveyor_gui_blank'
24
+ render :action => 'new', :layout => 'surveyor_gui/surveyor_gui_blank'
25
25
  end
26
26
  end
27
27
 
@@ -37,10 +37,10 @@ class DependencysController < ApplicationController
37
37
  end
38
38
  if update_object.update_attributes(update_params)
39
39
  update_object.dependency.destroy if update_object.dependency.dependency_conditions.blank?
40
- render :blank, :layout => 'surveyor_gui_blank'
40
+ render :blank, :layout => 'surveyor_gui/surveyor_gui_blank'
41
41
  else
42
42
  prep_variables
43
- render :action => 'edit', :layout => 'surveyor_gui_blank'
43
+ render :action => 'edit', :layout => 'surveyor_gui/surveyor_gui_blank'
44
44
  end
45
45
  end
46
46
 
@@ -1,8 +1,9 @@
1
- class QuestionGroupsController < ApplicationController
1
+ class SurveyorGui::QuestionGroupsController < ApplicationController
2
+ layout 'surveyor_gui/surveyor_gui_blank'
2
3
 
3
4
  def new
4
5
  @title = "Add Question"
5
- @survey_section_id = params[:survey_section_id]
6
+ @survey_section_id = question_params[:survey_section_id]
6
7
  @question_group = QuestionGroup.new(
7
8
  text: params[:text],
8
9
  question_type_id: params[:question_type_id])
@@ -25,7 +26,8 @@ class QuestionGroupsController < ApplicationController
25
26
  @title = "Edit Question Group"
26
27
  @question_group = QuestionGroup.includes(:questions).find(params[:id])
27
28
  @question_group.question_type_id = params[:question_type_id]
28
- @survey_section_id = @question_group.questions.first.survey_section_id
29
+ @survey_section_id = question_params[:survey_section_id]
30
+ p "edit survey sect id #{@survey_section_id}"
29
31
  end
30
32
 
31
33
  def create
@@ -34,11 +36,11 @@ class QuestionGroupsController < ApplicationController
34
36
  #@question_group.questions.update_attributes(survey_section_id: question_group_params[])
35
37
  original_question = Question.find(question_group_params[:question_id]) if !question_group_params[:question_id].blank?
36
38
  original_question.destroy if original_question
37
- render :inline => '<div id="cboxQuestionId">'+@question_group.questions.first.id.to_s+'</div>', :layout => 'surveyor_gui_blank'
39
+ render :inline => '<div id="cboxQuestionId">'+@question_group.questions.first.id.to_s+'</div>', :layout => 'surveyor_gui/surveyor_gui_blank'
38
40
  else
39
41
  @title = "Add Question"
40
42
  survey_section_id = question_group_params[:survey_section_id]
41
- redirect_to :action => 'new', :controller => 'questions', :layout => 'surveyor_gui_blank', :survey_section_id => survey_section_id
43
+ redirect_to :action => 'new', :controller => 'questions', :layout => 'surveyor_gui/surveyor_gui_blank', :survey_section_id => survey_section_id
42
44
  end
43
45
  end
44
46
 
@@ -46,7 +48,7 @@ class QuestionGroupsController < ApplicationController
46
48
  @title = "Update Question"
47
49
  @question_group = QuestionGroup.includes(:questions).find(params[:id])
48
50
  if @question_group.update_attributes(question_group_params)
49
- render :blank, :layout => 'surveyor_gui_blank'
51
+ render :blank, :layout => 'surveyor_gui/surveyor_gui_blank'
50
52
  #If a nested question is destroyed, the Question model performs a cascade delete
51
53
  #on the parent QuestionGroup (stuck with this behaviour as it is a Surveyor default).
52
54
  #Need to check for this and restore question group.
@@ -58,7 +60,7 @@ class QuestionGroupsController < ApplicationController
58
60
  QuestionGroup.create!(scrubbed_params)
59
61
  end
60
62
  else
61
- render :action => 'edit', :layout => 'surveyor_gui_blank'
63
+ render :action => 'edit', :layout => 'surveyor_gui/surveyor_gui_blank'
62
64
  end
63
65
  end
64
66
 
@@ -81,4 +83,8 @@ class QuestionGroupsController < ApplicationController
81
83
  def question_group_params
82
84
  ::PermittedParams.new(params[:question_group]).question_group
83
85
  end
86
+ def question_params
87
+ params.permit(:survey_section_id, :id, :text, :question_id, :question_type_id, :display_order, :pick, :display_type)
88
+ end
89
+
84
90
  end
@@ -1,5 +1,5 @@
1
- class QuestionsController < ApplicationController
2
- layout 'surveyor_gui_blank'
1
+ class SurveyorGui::QuestionsController < ApplicationController
2
+ layout 'surveyor_gui/surveyor_gui_blank'
3
3
 
4
4
  def new
5
5
  @title = "Add Question"
@@ -49,10 +49,10 @@ class QuestionsController < ApplicationController
49
49
  if @question.save
50
50
  @question.answers.each_with_index {|a, index| a.destroy if index > 0} if @question.pick == 'none'
51
51
  #load any page - if it has no flash errors, the colorbox that contains it will be closed immediately after the page loads
52
- render :inline => '<div id="cboxQuestionId">'+@question.id.to_s+'</div>', :layout => 'surveyor_gui_blank'
52
+ render :inline => '<div id="cboxQuestionId">'+@question.id.to_s+'</div>', :layout => 'surveyor_gui/surveyor_gui_blank'
53
53
  else
54
54
  @title = "Add Question"
55
- render :action => 'new', :layout => 'surveyor_gui_blank'
55
+ render :action => 'new', :layout => 'surveyor_gui/surveyor_gui_blank'
56
56
  end
57
57
  end
58
58
 
@@ -62,9 +62,9 @@ class QuestionsController < ApplicationController
62
62
  if @question.update_attributes(question_params)
63
63
  @question.answers.each_with_index {|a, index| a.destroy if index > 0} if @question.pick == 'none'
64
64
  #load any page - if it has no flash errors, the colorbox that contains it will be closed immediately after the page loads
65
- render :blank, :layout => 'surveyor_gui_blank'
65
+ render :blank, :layout => 'surveyor_gui/surveyor_gui_blank'
66
66
  else
67
- render :action => 'edit', :layout => 'surveyor_gui_blank'
67
+ render :action => 'edit', :layout => 'surveyor_gui/surveyor_gui_blank'
68
68
  end
69
69
  end
70
70
 
@@ -6,19 +6,19 @@ class SurveyorGui::ReportsController < ApplicationController
6
6
 
7
7
  # ReportPreviewWrapper wraps preview in a database transaction so test data is not permanently saved.
8
8
  around_action :wrap_in_transaction, only: :preview
9
- layout 'surveyor_gui_default'
9
+ layout 'surveyor_gui/surveyor_gui_default'
10
10
 
11
11
  def preview
12
12
  response_qty = 5
13
+ user_ids = response_qty.times.map{|i| -1*i}
13
14
  @title = "Preview Report for "+response_qty.to_s+" randomized responses"
14
15
  @survey = Survey.find(params[:survey_id])
15
- user_id = defined?(current_user) && current_user ? current_user.id : nil
16
- response_qty.times.each {
16
+ user_ids.each do |user_id|
17
17
  @response_set = ResponseSet.create(survey: @survey, user_id: user_id, test_data: true)
18
18
  ReportResponseGenerator.new(@survey).generate_1_result_set(@response_set)
19
- }
20
- @response_sets = ResponseSet.where(survey_id: @survey.id, test_data: true, user_id: user_id)
21
- @responses = Response.joins(:response_set, :answer).where('user_id = ? and survey_id = ? and test_data = ? and answers.is_comment = ?',user_id,params[:survey_id],true, false)
19
+ end
20
+ @response_sets = ResponseSet.where(survey_id: @survey.id, test_data: true).where('user_id in (?)', user_ids)
21
+ @responses = Response.joins(:response_set, :answer).where('user_id in (?) and survey_id = ? and test_data = ? and answers.is_comment = ?',user_ids,params[:survey_id],true, false)
22
22
  if (!@survey)
23
23
  flash[:notice] = "Survey/Questionnnaire not found."
24
24
  redirect_to :back
@@ -2,7 +2,7 @@ class SurveyorGui::ResponsesController < ApplicationController
2
2
  include ReportPreviewWrapper
3
3
  # ReportPreviewWrapper wraps preview in a database transaction so test data is not permanently saved.
4
4
  around_action :wrap_in_transaction, only: :preview
5
- layout 'surveyor_gui_default'
5
+ layout 'surveyor_gui/surveyor_gui_default'
6
6
 
7
7
  def index
8
8
  @title = "Survey Responses"
@@ -16,6 +16,7 @@ class SurveyorGui::ResponsesController < ApplicationController
16
16
  @response_set = ResponseSet.create(:survey => @survey, :user_id => user_id, :test_data => true)
17
17
  ReportResponseGenerator.new(@survey).generate_1_result_set(@response_set)
18
18
  @responses = @response_set.responses
19
+ @response_sets = [@response_set]
19
20
  if (!@survey)
20
21
  flash[:notice] = "Survey/Questionnnaire not found."
21
22
  redirect_to :back
@@ -28,6 +29,7 @@ class SurveyorGui::ResponsesController < ApplicationController
28
29
  @response_set = ResponseSet.find(params[:id])
29
30
  @survey = @response_set.survey
30
31
  @responses = @response_set.responses
32
+ @response_sets = [@response_set]
31
33
  if (!@response_set)
32
34
  flash[:error] = "Response not found"
33
35
  redirect_to :back
@@ -2,7 +2,7 @@ class SurveyorGui::SurveyController < ApplicationController
2
2
  def show
3
3
  @title = "User Will See this Survey"
4
4
  @survey = Survey.find(params[:survey_id])
5
- user_id = defined?(current_user) ? current_user.id : 1
5
+ user_id = defined?(current_user) && current_user ? current_user.id : 1
6
6
  ResponseSet.where('survey_id = ? and test_data = ? and user_id = ?',params[:survey_id],true, user_id).each {|r| r.destroy}
7
7
  @response_set = ResponseSet.create(:survey => @survey, :user_id => user_id, :test_data => true)
8
8
  if (@survey)
@@ -1,5 +1,5 @@
1
- class SurveySectionsController < ApplicationController
2
- layout 'surveyor_gui_blank'
1
+ class SurveyorGui::SurveySectionsController < ApplicationController
2
+ layout 'surveyor_gui/surveyor_gui_blank'
3
3
 
4
4
  def new
5
5
  @title = "Add Survey Section"
@@ -28,7 +28,7 @@ class SurveySectionsController < ApplicationController
28
28
  if @survey_section.save
29
29
  redirect_to :back
30
30
  else
31
- render :action => 'new', :layout => 'surveyor_gui_blank'
31
+ render :action => 'new', :layout => 'surveyor_gui/surveyor_gui_blank'
32
32
  end
33
33
  end
34
34
 
@@ -36,9 +36,9 @@ class SurveySectionsController < ApplicationController
36
36
  @title = "Update Survey Section"
37
37
  @survey_section = SurveySection.find(params[:id])
38
38
  if @survey_section.update_attributes(survey_section_params)
39
- render :blank, :layout => 'surveyor_gui_blank'
39
+ render :blank, :layout => 'surveyor_gui/surveyor_gui_blank'
40
40
  else
41
- render :action => 'edit', :layout => 'surveyor_gui_blank'
41
+ render :action => 'edit', :layout => 'surveyor_gui/surveyor_gui_blank'
42
42
  end
43
43
  end
44
44
 
@@ -1,4 +1,4 @@
1
- class SurveyformsController < ApplicationController
1
+ class SurveyorGui::SurveyformsController < ApplicationController
2
2
  include Surveyor::SurveyorControllerMethods
3
3
  include SurveyorGui::SurveyformsControllerMethods
4
4
  end
@@ -1,6 +1,6 @@
1
1
  module SurveyorControllerCustomMethods
2
2
  def self.included(base)
3
- base.send :layout, 'surveyor_modified'
3
+ base.send :layout, 'surveyor_gui/surveyor_modified'
4
4
  end
5
5
 
6
6
  def edit
@@ -83,7 +83,7 @@ module SurveyorControllerCustomMethods
83
83
 
84
84
  end
85
85
  end
86
- class SurveyorController < ApplicationController
86
+ class SurveyorGui::SurveyorController < ApplicationController
87
87
  include Surveyor::SurveyorControllerMethods
88
88
  include SurveyorControllerCustomMethods
89
89
  end
@@ -0,0 +1,2 @@
1
+ module SurveyorGui::ApplicationHelper
2
+ end
@@ -1,4 +1,4 @@
1
- module DependencyHelper
1
+ module SurveyorGui::DependencysHelper
2
2
  def link_to_remove_tbody (name, f)
3
3
  f.hidden_field(:_destroy) + link_to(image_tag("delete.png",:border => 0, :margin=>'-1em'), "#", onclick: "remove_dependency_condition(this);")
4
4
  end
@@ -0,0 +1,3 @@
1
+ module SurveyorGui::QuestionGroupsHelper
2
+ include SurveyorGui::QuestionsHelper
3
+ end
@@ -1,4 +1,4 @@
1
- module QuestionHelper
1
+ module SurveyorGui::QuestionsHelper
2
2
  def link_to_remove_fields (name, f, dom_to_hide=nil)
3
3
  f.hidden_field(:_destroy) + link_to(image_tag("delete.png",:border => 0, :margin=>'-1em'), "#", onclick: "remove_fields(this, \"#{dom_to_hide}\");")
4
4
  end
@@ -1,4 +1,4 @@
1
- module SurveyorGui::ReportHelper
1
+ module SurveyorGui::ReportsHelper
2
2
 
3
3
  def question_should_display(q)
4
4
  display=true
@@ -0,0 +1,160 @@
1
+ module SurveyorGui
2
+ module SurveyformsHelper
3
+ require 'deep_cloneable'
4
+
5
+ def list_dependencies(o)
6
+ controlling_questions = o.controlling_questions
7
+
8
+ controlling_question_ids = controlling_questions.map{|q| q.question_number.to_s+')'}.uniq
9
+ count = controlling_question_ids.count
10
+ retstr ='This question is shown depending on the '
11
+ retstr += 'answer'.pluralize(count)
12
+ retstr += ' to '
13
+ retstr += 'question'.pluralize(count) + ' '
14
+ retstr + list_phrase(controlling_question_ids)
15
+ end
16
+
17
+ def list_phrase(args)
18
+ ## given a list of word parameters, return a syntactically correct phrase
19
+ ## [dog] = "dog"
20
+ ## [dog, cat] = "dog and cat"
21
+ ## [dog, cat, bird] = "dog, cat and bird"
22
+ case args.count
23
+ when 0
24
+ ''
25
+ when 1
26
+ args[0]
27
+ when 2
28
+ args[0] + ' and ' + args[1]
29
+ else
30
+ last = args.count
31
+ args.take(last - 2).join(', ') + ', ' + args[last - 2] + ' and ' + args[last - 1]
32
+ end
33
+ end
34
+
35
+ def render_questions_and_groups_helper(q, ss)
36
+ #this method will render either a question or a complete question group.
37
+ #we always iterate through questions, and if we happen to notice a question
38
+ #belongs to a group, we process the group at that time.
39
+ #note that questions carry a question_group_id, and this is how we know
40
+ #that a question is part of a group, and that it should not be rendered individually,
41
+ #but as part of a group.
42
+ if q.object.part_of_group?
43
+ _render_initial_group(q, ss) || _respond_to_a_change_in_group_id(q, ss)
44
+ else
45
+ render "question_wrapper", f: q
46
+ end
47
+ end
48
+
49
+ def render_one_group(qg)
50
+ qg.simple_fields_for :questions, @current_group.questions do |f|
51
+ if f.object.is_comment != true
52
+ render "question_group_fields", f: f
53
+ elsif f.object.is_comment == true
54
+ "</div>".html_safe+(render "question_field", f: f)+"<div>".html_safe
55
+ end
56
+ end
57
+ end
58
+
59
+ def question_group_heading(f)
60
+ if f.object.question_type_id == :grid_dropdown
61
+ heading = f.object.question_group.columns
62
+ elsif f.object.question_group.display_type == "grid"
63
+ heading = f.object.answers
64
+ else
65
+ heading = []
66
+ end
67
+ heading.map {|a| "<span class=\"question_group_heading #{f.object.question_type_id.to_s}\" >#{a.text}<\/span>"}.join().html_safe
68
+ end
69
+
70
+ def row_label_if_question_group(question)
71
+ if question.part_of_group?
72
+ "<span class=\"row_name\">#{question.text}: </span>".html_safe
73
+ end
74
+ end
75
+
76
+ def question_group_class(question)
77
+ if @current_group.question_group.display_type == "inline"
78
+ "inline"
79
+ elsif @current_group.question_group.display_type == "default"
80
+ "default"
81
+ else
82
+ if question.question_type_id == :grid_dropdown
83
+ "dropdown"
84
+ else
85
+ "grid"
86
+ end
87
+ end
88
+ end
89
+
90
+ private
91
+ def _render_initial_group(q, ss)
92
+ if @current_group.nil?
93
+ @current_group = QuestionGroupTracker.new(q.object.question_group_id)
94
+ render "question_group", :ss => ss, :f => q
95
+ end
96
+ end
97
+
98
+ def _respond_to_a_change_in_group_id(q, ss)
99
+ if @current_group.question_group_id != q.object.question_group_id
100
+ @current_group = QuestionGroupTracker.new(q.object.question_group_id)
101
+ render "question_group", :ss => ss, :f => q
102
+ end
103
+ end
104
+
105
+ end
106
+
107
+ class SurveyCloneFactory
108
+ def initialize(id, as_template=false)
109
+ @survey = Surveyform.find(id.to_i)
110
+ @as_template = as_template
111
+ end
112
+
113
+ def clone
114
+ cloned_survey = _deep_clone
115
+ _set_api_keys(cloned_survey)
116
+ if cloned_survey.save!
117
+ return cloned_survey
118
+ else
119
+ raise cloned_survey.errors.messages.map{|m| m}.join(',')
120
+ return nil
121
+ end
122
+ end
123
+
124
+ private
125
+
126
+ def _initial_clone
127
+ initial_clone = @survey
128
+ initial_clone.api_id = Surveyor::Common.generate_api_id
129
+ initial_clone.survey_version = Survey.where(access_code: @survey.access_code).maximum(:survey_version) + 1
130
+ return initial_clone
131
+ end
132
+
133
+ def _deep_clone
134
+ _initial_clone.deep_clone include: {
135
+ sections:
136
+ {
137
+ questions: [
138
+ :answers,
139
+ {dependency: :dependency_conditions},
140
+ {question_group: :columns}
141
+ ]
142
+ }
143
+ },
144
+ use_dictionary: true
145
+ end
146
+
147
+ def _set_api_keys(cloned_survey)
148
+ cloned_survey.sections.each do |section|
149
+ section.questions.each do |question|
150
+ question.api_id = Surveyor::Common.generate_api_id
151
+ question.question_group.api_id = Surveyor::Common.generate_api_id if question.part_of_group?
152
+ question.answers.each do |answer|
153
+ answer.api_id = Surveyor::Common.generate_api_id
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+