fe 0.0.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +16 -36
- data/app/assets/javascripts/fe/admin.js +0 -1
- data/app/assets/javascripts/fe/fe.admin.js +40 -16
- data/app/assets/javascripts/fe/fe.common.js +48 -14
- data/app/assets/javascripts/fe/fe.public.js +1 -414
- data/app/assets/javascripts/fe/fe.public.nojquery.js +450 -0
- data/app/assets/javascripts/fe/jquery.validate.pack.js +3 -15
- data/app/assets/stylesheets/360front.css +0 -0
- data/app/assets/stylesheets/fe/fe.screen.css.scss.erb +69 -10
- data/app/controllers/fe/admin/elements_controller.rb +64 -48
- data/app/controllers/fe/admin/email_templates_controller.rb +2 -2
- data/app/controllers/fe/admin/question_pages_controller.rb +1 -1
- data/app/controllers/fe/admin/question_sheets_controller.rb +2 -103
- data/app/controllers/fe/concerns/admin/question_sheets_controller_concern.rb +112 -0
- data/app/controllers/fe/concerns/answer_pages_controller_concern.rb +2 -1
- data/app/controllers/fe/concerns/answer_sheets_controller_concern.rb +1 -1
- data/app/controllers/fe/concerns/application_controller_concern.rb +13 -0
- data/app/controllers/fe/reference_sheets_controller.rb +2 -0
- data/app/controllers/fe/references_controller.rb +1 -0
- data/app/helpers/fe/application_helper.rb +5 -0
- data/app/mailers/fe/notifier.rb +11 -4
- data/app/models/answer_sheet.rb +2 -0
- data/app/models/fe/application.rb +2 -1
- data/app/models/fe/concerns/answer_pages_presenter_concern.rb +10 -1
- data/app/models/fe/concerns/answer_sheet_concern.rb +38 -8
- data/app/models/fe/concerns/choice_field_concern.rb +17 -10
- data/app/models/fe/date_field.rb +1 -1
- data/app/models/fe/element.rb +105 -31
- data/app/models/fe/page.rb +52 -20
- data/app/models/fe/page_element.rb +6 -1
- data/app/models/fe/page_link.rb +6 -3
- data/app/models/fe/person.rb +11 -8
- data/app/models/fe/question.rb +2 -6
- data/app/models/fe/question_grid.rb +1 -1
- data/app/models/fe/question_grid_with_total.rb +15 -0
- data/app/models/fe/question_set.rb +1 -1
- data/app/models/fe/question_sheet.rb +15 -13
- data/app/models/fe/reference_question.rb +0 -10
- data/app/models/fe/reference_sheet.rb +17 -13
- data/app/models/staff.rb +2 -0
- data/app/validators/email_validator.rb +11 -0
- data/app/views/fe/admin/elements/create.js.erb +1 -0
- data/app/views/fe/admin/elements/drop.js.erb +1 -0
- data/app/views/fe/admin/elements/duplicate.js.erb +1 -0
- data/app/views/fe/admin/panels/_advanced_options.html.erb +9 -3
- data/app/views/fe/admin/panels/_common_fields.html.erb +19 -5
- data/app/views/fe/admin/panels/_page.html.erb +1 -1
- data/app/views/fe/admin/panels/_prop_choice_field.html.erb +20 -11
- data/app/views/fe/admin/panels/_prop_element.html.erb +2 -9
- data/app/views/fe/admin/panels/_prop_page.html.erb +8 -3
- data/app/views/fe/admin/panels/_prop_paragraph.html.erb +38 -24
- data/app/views/fe/admin/panels/_prop_section.html.erb +8 -2
- data/app/views/fe/admin/panels/_prop_sheet.html.erb +4 -1
- data/app/views/fe/admin/question_pages/_element.html.erb +11 -1
- data/app/views/fe/answer_pages/_answer_page.html.erb +9 -8
- data/app/views/fe/answer_pages/_element.html.erb +6 -7
- data/app/views/fe/answer_pages/_page_name.html.erb +1 -0
- data/app/views/fe/answer_pages/update.js.erb +3 -3
- data/app/views/fe/answer_sheets/_answer_sheet.html.erb +3 -3
- data/app/views/fe/answer_sheets/_element.html.erb +52 -34
- data/app/views/fe/answer_sheets/_incomplete.html.erb +1 -1
- data/app/views/fe/answer_sheets/_page_link.html.erb +2 -2
- data/app/views/fe/answer_sheets/_pages_list.html.erb +3 -3
- data/app/views/fe/answer_sheets/_submit_to.html.erb +1 -0
- data/app/views/fe/answer_sheets/edit.html.erb +14 -14
- data/app/views/fe/answer_sheets/incomplete.js.erb +3 -0
- data/app/views/fe/answer_sheets/index.html.erb +3 -3
- data/app/views/fe/answer_sheets/show.html.erb +1 -1
- data/app/views/fe/applications/_logout.html.erb +1 -0
- data/app/views/fe/applications/show.html.erb +1 -0
- data/app/views/fe/questions/fe/_acceptance.html.erb +3 -3
- data/app/views/fe/questions/fe/_attachment_field.html.erb +7 -3
- data/app/views/fe/questions/fe/_checkbox_field.html.erb +26 -24
- data/app/views/fe/questions/fe/_date_field.html.erb +1 -2
- data/app/views/fe/questions/fe/_date_field_mmyy.html.erb +2 -2
- data/app/views/fe/questions/fe/_drop_down_field.html.erb +3 -2
- data/app/views/fe/questions/fe/_paragraph.html.erb +1 -1
- data/app/views/fe/questions/fe/_question_grid.html.erb +14 -9
- data/app/views/fe/questions/fe/_question_grid_with_total.html.erb +21 -14
- data/app/views/fe/questions/fe/_questions.html.erb +2 -2
- data/app/views/fe/questions/fe/_radio_button_field.html.erb +12 -11
- data/app/views/fe/questions/fe/_rating.html.erb +9 -8
- data/app/views/fe/questions/fe/_reference_discipler.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_friend.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_parent.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_peer.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_question.html.erb +22 -15
- data/app/views/fe/questions/fe/_reference_roommate.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_spiritual.html.erb +1 -1
- data/app/views/fe/questions/fe/_reference_staff.html.erb +1 -1
- data/app/views/fe/questions/fe/_section.html.erb +1 -1
- data/app/views/fe/questions/fe/_text_area_field.html.erb +10 -3
- data/app/views/fe/questions/fe/_text_field.html.erb +1 -1
- data/app/views/fe/questions/fe/_yes_no_field.erb +3 -3
- data/app/views/fe/reference_pages/_reference.html.erb +11 -11
- data/app/views/fe/reference_pages/edit.html.erb +7 -7
- data/app/views/fe/reference_sheets/done.html.erb +2 -2
- data/app/views/fe/reference_sheets/not_found.html.erb +4 -4
- data/app/views/fe/references/edit.html.erb +6 -6
- data/app/views/fe/references/show.html.erb +7 -7
- data/app/views/fe/references/submit.js.erb +1 -1
- data/app/views/fe/submit_pages/_thankyou.html.erb +1 -1
- data/app/views/fe/submit_pages/edit.html.erb +9 -9
- data/app/views/layouts/fe/_error_messages_for.html.erb +7 -0
- data/app/views/layouts/fe/application.html.erb +1 -1
- data/config/routes.rb +0 -36
- data/db/migrate/20131003044250_create_reference_sheets.rb +1 -0
- data/db/migrate/20140623153424_create_fe_people.rb +1 -1
- data/db/migrate/20140624180246_create_fe_addresses.rb +1 -1
- data/db/migrate/20140624182216_create_fe_phone_numbers.rb +16 -0
- data/db/migrate/20140625160545_create_fe_users.rb +1 -1
- data/db/migrate/20150504221439_add_all_element_ids_to_pages.rb +5 -0
- data/db/migrate/20150713022326_add_locale_columns.rb +9 -0
- data/db/migrate/20150714220730_add_locale_to_answer_sheet.rb +5 -0
- data/db/migrate/20150928085325_change_pages_all_element_ids_to_text.rb +5 -0
- data/db/migrate/20150930191538_add_locale_to_reference_sheets.rb +5 -0
- data/lib/access_key_generator.rb +12 -0
- data/lib/distinct_distinct_patch.rb +20 -0
- data/lib/fe.rb +4 -0
- data/lib/fe/engine.rb +16 -4
- data/lib/fe/version.rb +1 -1
- data/spec/controllers/fe/admin/elements_controller_spec.rb +201 -1
- data/spec/controllers/fe/admin/email_templates_controller_spec.rb +26 -1
- data/spec/controllers/fe/admin/question_pages_controller_spec.rb +8 -1
- data/spec/controllers/fe/admin/question_sheets_controller_spec.rb +48 -1
- data/spec/controllers/fe/answer_pages_controller_spec.rb +73 -1
- data/spec/controllers/fe/answer_sheets_controller_spec.rb +80 -1
- data/spec/controllers/fe/reference_pages_controller.rb +4 -0
- data/spec/controllers/fe/references_controller_spec.rb +4 -0
- data/spec/controllers/fe/submit_pages_controller_spec.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +9 -0
- data/spec/dummy/app/models/application.rb +3 -0
- data/spec/dummy/app/models/person.rb +11 -0
- data/spec/dummy/app/models/user.rb +3 -0
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/database.yml +20 -17
- data/spec/dummy/config/environments/production.rb +1 -5
- data/spec/dummy/config/environments/test.rb +3 -1
- data/spec/dummy/config/initializers/fast_gettext.rb +5 -0
- data/spec/dummy/config/secrets.yml +2 -2
- data/spec/dummy/db/migrate/20141203214017_core.fe_engine.rb +92 -0
- data/spec/dummy/db/migrate/20141203214018_create_reference_sheets.fe_engine.rb +25 -0
- data/spec/dummy/db/migrate/20141203214019_add_element_and_answer_fields.fe_engine.rb +11 -0
- data/spec/dummy/db/migrate/20141203214020_create_email_templates.fe_engine.rb +18 -0
- data/spec/dummy/db/migrate/20141203214021_add_max_lengths.fe_engine.rb +9 -0
- data/spec/dummy/db/migrate/20141203214022_create_join_table.fe_engine.rb +12 -0
- data/spec/dummy/db/migrate/20141203214023_remove_question_id_from_element.fe_engine.rb +10 -0
- data/spec/dummy/db/migrate/20141203214024_create_fe_people.fe_engine.rb +13 -0
- data/spec/dummy/db/migrate/20141203214025_create_fe_addresses.fe_engine.rb +21 -0
- data/{db/migrate/20140624182216_create_create_fe_phone_numbers.rb → spec/dummy/db/migrate/20141203214026_create_create_fe_phone_numbers.fe_engine.rb} +1 -0
- data/spec/dummy/db/migrate/20141203214027_create_fe_users.fe_engine.rb +13 -0
- data/spec/dummy/db/migrate/20141203214028_add_conditional_type_to_elements.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20141203214029_add_conditional_answer_to_elements.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20141203214030_remove_short_value_column.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20141203214031_move_conditional_ids_used_for_choice_field_to_their_own_column.fe_engine.rb +8 -0
- data/spec/dummy/db/migrate/20150123215803_create_users.rb +9 -0
- data/spec/dummy/db/migrate/20150504222619_add_all_element_ids_to_pages.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20150930190001_create_fe_phone_numbers.fe_engine.rb +20 -0
- data/spec/dummy/db/migrate/20150930190002_add_locale_columns.fe_engine.rb +10 -0
- data/spec/dummy/db/migrate/20150930190003_add_locale_to_answer_sheet.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20150930190004_change_pages_all_element_ids_to_text.fe_engine.rb +6 -0
- data/spec/dummy/db/migrate/20150930191756_add_locale_to_reference_sheets.fe_engine.rb +6 -0
- data/spec/dummy/db/schema.rb +50 -20
- data/spec/dummy/log/development.log +5 -0
- data/spec/factories/applications.rb +0 -1
- data/spec/factories/dummy_applications.rb +6 -0
- data/spec/factories/dummy_people.rb +6 -0
- data/spec/factories/dummy_users.rb +6 -0
- data/spec/factories/elements.rb +28 -3
- data/spec/factories/email_templates.rb +5 -0
- data/spec/factories/fe_email_templates.rb +9 -0
- data/spec/factories/fe_people.rb +0 -2
- data/spec/factories/fe_user.rb +6 -0
- data/spec/factories/question_sheet.rb +1 -1
- data/spec/factories/reference_sheets.rb +9 -0
- data/spec/mailers/fe/notifier_spec.rb +39 -0
- data/spec/models/fe/choice_field_spec.rb +20 -0
- data/spec/models/fe/element_spec.rb +185 -0
- data/spec/models/fe/page_spec.rb +112 -0
- data/spec/models/fe/question_sheet_spec.rb +106 -0
- data/spec/models/fe/reference_sheet_spec.rb +20 -0
- data/spec/rails_helper.rb +41 -13
- data/spec/support/choices.xml +6 -0
- metadata +136 -48
- data/app/assets/javascripts/fe/rails.extra.js +0 -6
- data/app/controllers/fe/applications_controller.rb +0 -183
- data/app/controllers/fe/payments_controller.rb +0 -184
- data/app/models/fe/payment.rb +0 -77
- data/app/models/fe/payment_question.rb +0 -22
- data/app/views/fe/admin/panels/_prop_payment_question.html.erb +0 -1
- data/app/views/fe/application/_logout.html.erb +0 -1
- data/app/views/fe/payment_pages/_credit.html.erb +0 -47
- data/app/views/fe/payment_pages/_mail.html.erb +0 -27
- data/app/views/fe/payment_pages/_payment.html.erb +0 -6
- data/app/views/fe/payment_pages/_staff.html.erb +0 -25
- data/app/views/fe/payment_pages/_staff_results.html.erb +0 -17
- data/app/views/fe/payment_pages/edit.html.erb +0 -75
- data/app/views/fe/payment_pages/staff_search.js.erb +0 -2
- data/app/views/fe/payments/_credit.html.erb +0 -47
- data/app/views/fe/payments/_errors.html.erb +0 -1
- data/app/views/fe/payments/_payment.html.erb +0 -13
- data/app/views/fe/payments/_staff.html.erb +0 -21
- data/app/views/fe/payments/_staff_results.html.erb +0 -18
- data/app/views/fe/payments/approve.js.erb +0 -3
- data/app/views/fe/payments/create.js.erb +0 -19
- data/app/views/fe/payments/destroy.js.erb +0 -7
- data/app/views/fe/payments/edit.html.erb +0 -56
- data/app/views/fe/payments/error.js.erb +0 -3
- data/app/views/fe/payments/no_access.html.erb +0 -7
- data/app/views/fe/payments/staff_search.js.erb +0 -1
- data/app/views/fe/payments/update.html.erb +0 -24
- data/app/views/fe/questions/fe/_payment_question.html.erb +0 -70
- data/db/migrate/20140828045339_create_payments.rb +0 -13
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/factories/payments.rb +0 -7
- data/spec/models/fe/payment_question_spec.rb +0 -65
|
File without changes
|
|
@@ -182,6 +182,7 @@ ul#nav-controls li a:hover {
|
|
|
182
182
|
.list-elements #at a { background-image: url("<%= asset_path('fe/icons/paper-clip.png') %>");}
|
|
183
183
|
.list-elements #ref a { background-image: url("<%= asset_path('fe/icons/book-open-list.png') %>");}
|
|
184
184
|
|
|
185
|
+
.fe_textfield textarea { width: 90%; }
|
|
185
186
|
|
|
186
187
|
|
|
187
188
|
/* BODY SIDE */
|
|
@@ -236,7 +237,7 @@ span.required {
|
|
|
236
237
|
width:16px;
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
label {
|
|
240
|
+
label:not(.no_label_styles) { /* allow labels without styling, for the feature of clicking the label and having focus go to its corresponding input field */
|
|
240
241
|
min-width: 150px;
|
|
241
242
|
font-weight: bold;
|
|
242
243
|
font-size: 14px;
|
|
@@ -263,7 +264,8 @@ ul.questions li {
|
|
|
263
264
|
}
|
|
264
265
|
|
|
265
266
|
.field_check input[type=checkbox],
|
|
266
|
-
.field_check input[type=radio]
|
|
267
|
+
.field_check input[type=radio],
|
|
268
|
+
.radio-set input[type=radio] {
|
|
267
269
|
float: left;
|
|
268
270
|
}
|
|
269
271
|
|
|
@@ -473,6 +475,9 @@ td.actions a {padding: 2px 10px 2px 20px;}
|
|
|
473
475
|
.archive {background: url("<%= asset_path('fe/icons/briefcase.png') %>") no-repeat 0% 50%;}
|
|
474
476
|
.delete {background: url("<%= asset_path('fe/icons/minus-button.png') %>") no-repeat 0% 50%;}
|
|
475
477
|
|
|
478
|
+
table.ratings tr {
|
|
479
|
+
margin-right: 20px;
|
|
480
|
+
}
|
|
476
481
|
|
|
477
482
|
/* HEADER */
|
|
478
483
|
#header {
|
|
@@ -487,17 +492,17 @@ td.actions a {padding: 2px 10px 2px 20px;}
|
|
|
487
492
|
|
|
488
493
|
#header li a {
|
|
489
494
|
color: #fff;
|
|
490
|
-
padding:
|
|
495
|
+
padding: 6px;
|
|
496
|
+
display: block;
|
|
491
497
|
}
|
|
492
498
|
|
|
493
499
|
#header li {
|
|
494
500
|
float: left;
|
|
501
|
+
margin-right: 5px;
|
|
495
502
|
}
|
|
496
503
|
|
|
497
504
|
#header li.active a {
|
|
498
505
|
background: #2e7ba7;
|
|
499
|
-
padding: 6px;
|
|
500
|
-
display: block;
|
|
501
506
|
}
|
|
502
507
|
|
|
503
508
|
#nav-main {
|
|
@@ -524,10 +529,30 @@ td.actions a {padding: 2px 10px 2px 20px;}
|
|
|
524
529
|
width:auto;
|
|
525
530
|
}
|
|
526
531
|
.droppable-active {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
532
|
+
background: #EBFCEB;
|
|
533
|
+
min-height: 200px;
|
|
534
|
+
border-width: 4px;
|
|
535
|
+
padding: 4px;
|
|
536
|
+
margin: -8px;
|
|
537
|
+
}
|
|
538
|
+
.droppable-hover {
|
|
539
|
+
background: #2F7EAB;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.droppable.around-container {
|
|
543
|
+
//border: 1px solid black;
|
|
544
|
+
border: 0px;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.droppable.around-container:not(.droppable-activated) {
|
|
548
|
+
height: 0px;
|
|
549
|
+
}
|
|
550
|
+
.droppable-active.around-container {
|
|
551
|
+
//display: inline;
|
|
552
|
+
padding: 0px;
|
|
553
|
+
margin: 10px 0px 10px 0px;;
|
|
554
|
+
min-height: 100px;
|
|
555
|
+
border-width: 1px;
|
|
531
556
|
}
|
|
532
557
|
|
|
533
558
|
.inlinecheck {
|
|
@@ -543,4 +568,38 @@ td.actions a {padding: 2px 10px 2px 20px;}
|
|
|
543
568
|
color:red;
|
|
544
569
|
font-weight: bold;
|
|
545
570
|
}
|
|
546
|
-
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
.future_affect {
|
|
574
|
+
label { display: inline-block; min-width: 0px; }
|
|
575
|
+
input[type=radio] { margin-left: 10px; }
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/* SPINNER */
|
|
579
|
+
|
|
580
|
+
#page_ajax_spinner {
|
|
581
|
+
position: absolute;
|
|
582
|
+
top: -52px;
|
|
583
|
+
width: 1000px;
|
|
584
|
+
z-index: 100;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
#page_ajax_spinner div {
|
|
588
|
+
-moz-box-shadow: 0 0 10px #666666;
|
|
589
|
+
-webkit-box-shadow: 0 0 10px #666666;
|
|
590
|
+
box-shadow: 0 0 10px #666666;
|
|
591
|
+
background: none repeat scroll 0 0 #FFFFFF;
|
|
592
|
+
border: 2px solid #411E08;
|
|
593
|
+
color: #411E08;
|
|
594
|
+
margin: 0 auto;
|
|
595
|
+
padding: 10px;
|
|
596
|
+
text-align: center;
|
|
597
|
+
width: 200px;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
input[type="text"].char-count {
|
|
601
|
+
font-size: 10px;
|
|
602
|
+
display: inline-block;
|
|
603
|
+
width: 50px;
|
|
604
|
+
}
|
|
605
|
+
|
|
@@ -1,44 +1,35 @@
|
|
|
1
1
|
class Fe::Admin::ElementsController < ApplicationController
|
|
2
2
|
before_filter :check_valid_user
|
|
3
3
|
layout 'fe/fe.admin'
|
|
4
|
-
|
|
5
|
-
before_filter :get_page
|
|
6
|
-
|
|
7
|
-
# GET /elements/1
|
|
8
|
-
def show
|
|
9
|
-
@element = Fe::Element.find(params[:id])
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
format.js
|
|
13
|
-
end
|
|
14
|
-
end
|
|
5
|
+
before_filter :get_page
|
|
15
6
|
|
|
16
7
|
# GET /element/1/edit
|
|
17
8
|
def edit
|
|
18
|
-
@element =
|
|
19
|
-
|
|
9
|
+
@element = @page.all_elements.find(params[:id])
|
|
10
|
+
|
|
20
11
|
# for dependencies
|
|
21
12
|
if @element.question?
|
|
22
13
|
(3 - @element.conditions.length).times { @element.conditions.build }
|
|
23
|
-
@questions_before_this = @page.questions_before_position(@element.position(@page))
|
|
14
|
+
@questions_before_this = @page.questions_before_position(@element.position(@page))
|
|
24
15
|
end
|
|
25
|
-
|
|
16
|
+
|
|
26
17
|
respond_to do |format|
|
|
27
18
|
format.js
|
|
28
19
|
end
|
|
29
20
|
end
|
|
30
|
-
|
|
21
|
+
|
|
31
22
|
def new
|
|
32
23
|
@questions = params[:element_type].constantize.active.order('label')
|
|
33
24
|
|
|
34
25
|
@style = element_params[:style]
|
|
35
26
|
if @style
|
|
36
|
-
@questions = @questions.where(:style => @style).uniq
|
|
27
|
+
@questions = @questions.where(:style => @style).to_a.uniq
|
|
37
28
|
end
|
|
38
29
|
end
|
|
39
|
-
|
|
30
|
+
|
|
40
31
|
def use_existing
|
|
41
|
-
@element = Fe::Element.find(params[:id])
|
|
32
|
+
@element = Fe::Element.find(params[:id]) # NOTE the enclosing app might want to override this method and check that they have access to the questionnaire that the existing element is used on
|
|
42
33
|
# Don't put the same question on a questionnaire twice
|
|
43
34
|
unless @page.question_sheet.elements.include?(@element)
|
|
44
35
|
@page_element = Fe::PageElement.create(:element => @element, :page => @page)
|
|
@@ -54,24 +45,24 @@ class Fe::Admin::ElementsController < ApplicationController
|
|
|
54
45
|
@question_sheet = @page.question_sheet
|
|
55
46
|
|
|
56
47
|
respond_to do |format|
|
|
57
|
-
if @element.save
|
|
48
|
+
if @element.save
|
|
58
49
|
@page_element = Fe::PageElement.create(:element => @element, :page => @page)
|
|
59
50
|
format.js
|
|
60
51
|
else
|
|
61
|
-
format.js { render :action => 'error.
|
|
52
|
+
format.js { render :action => 'error.js.erb' }
|
|
62
53
|
end
|
|
63
54
|
end
|
|
64
55
|
end
|
|
65
56
|
|
|
66
57
|
# PUT /elements/1
|
|
67
58
|
def update
|
|
68
|
-
@element =
|
|
59
|
+
@element = @page.all_elements.find(params[:id])
|
|
69
60
|
|
|
70
61
|
respond_to do |format|
|
|
71
62
|
if @element.update_attributes(element_params)
|
|
72
63
|
format.js
|
|
73
64
|
else
|
|
74
|
-
format.js { render :action => 'error.
|
|
65
|
+
format.js { render :action => 'error.js.erb' }
|
|
75
66
|
end
|
|
76
67
|
end
|
|
77
68
|
end
|
|
@@ -79,11 +70,11 @@ class Fe::Admin::ElementsController < ApplicationController
|
|
|
79
70
|
# DELETE /elements/1
|
|
80
71
|
# DELETE /elements/1.xml
|
|
81
72
|
def destroy
|
|
82
|
-
@element =
|
|
73
|
+
@element = @page.all_elements.find(params[:id])
|
|
83
74
|
# Start by removing the element from the page
|
|
84
75
|
page_element = Fe::PageElement.where(:element_id => @element.id, :page_id => @page.id).first
|
|
85
76
|
page_element.destroy if page_element
|
|
86
|
-
|
|
77
|
+
|
|
87
78
|
# If this element is not on any other pages, is not a question or has no answers, Destroy it
|
|
88
79
|
if @element.reuseable? && (Fe::PageElement.where(:element_id => params[:id]).present? || @element.has_response?)
|
|
89
80
|
@element.update_attributes(:question_grid_id => nil, :conditional_id => nil)
|
|
@@ -95,24 +86,24 @@ class Fe::Admin::ElementsController < ApplicationController
|
|
|
95
86
|
format.js
|
|
96
87
|
end
|
|
97
88
|
end
|
|
98
|
-
|
|
99
|
-
def reorder
|
|
89
|
+
|
|
90
|
+
def reorder
|
|
100
91
|
# since we don't know the name of the list, just find the first param that is an array
|
|
101
|
-
params.each_key do |key|
|
|
92
|
+
params.each_key do |key|
|
|
102
93
|
if key.include?('questions_list')
|
|
103
94
|
grid_id = key.sub('questions_list_', '').to_i
|
|
104
95
|
# See if we're ordering inside of a grid
|
|
105
96
|
if grid_id > 0
|
|
106
|
-
|
|
97
|
+
@page.all_elements.find(grid_id).elements.each do |element|
|
|
107
98
|
if index = params[key].index(element.id.to_s)
|
|
108
|
-
element.position = index + 1
|
|
99
|
+
element.position = index + 1
|
|
109
100
|
element.save(:validate => false)
|
|
110
101
|
end
|
|
111
102
|
end
|
|
112
103
|
else
|
|
113
104
|
@page.page_elements.each do |page_element|
|
|
114
105
|
if index = params[key].index(page_element.element_id.to_s)
|
|
115
|
-
page_element.position = index + 1
|
|
106
|
+
page_element.position = index + 1
|
|
116
107
|
page_element.save(:validate => false)
|
|
117
108
|
@element = page_element.element
|
|
118
109
|
end
|
|
@@ -120,17 +111,36 @@ class Fe::Admin::ElementsController < ApplicationController
|
|
|
120
111
|
end
|
|
121
112
|
end
|
|
122
113
|
end
|
|
123
|
-
|
|
114
|
+
|
|
124
115
|
respond_to do |format|
|
|
125
116
|
format.js
|
|
126
117
|
end
|
|
127
118
|
end
|
|
128
|
-
|
|
119
|
+
|
|
129
120
|
def drop
|
|
130
|
-
element =
|
|
131
|
-
target =
|
|
121
|
+
element = @page.all_elements.find(params[:draggable_element].split('_')[1]) # element being dropped
|
|
122
|
+
target = @page.all_elements.find(params[:id])
|
|
123
|
+
|
|
124
|
+
if [params[:before], params[:after]].include?('true')
|
|
125
|
+
# move the element out of its parent and back onto the page directly, placing it before the target
|
|
126
|
+
page_element = Fe::PageElement.where(page_id: @page.id, element_id: element.id).first_or_create
|
|
127
|
+
@page.page_elements << page_element
|
|
128
|
+
|
|
129
|
+
parent_element = element.question_grid || element.choice_field
|
|
130
|
+
parent_page_element = @page.page_elements.find_by(element_id: parent_element.id)
|
|
131
|
+
if params[:before]
|
|
132
|
+
page_element.insert_at(parent_page_element.position)
|
|
133
|
+
else
|
|
134
|
+
page_element.insert_at(parent_page_element.position + 1)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# remove question grid / choice_field ref since it's directly on the page now
|
|
138
|
+
element.update_attributes(question_grid_id: nil, choice_field_id: nil)
|
|
139
|
+
return
|
|
140
|
+
end
|
|
141
|
+
|
|
132
142
|
case target.class.to_s
|
|
133
|
-
when 'QuestionGrid', 'QuestionGridWithTotal'
|
|
143
|
+
when 'Fe::QuestionGrid', 'Fe::QuestionGridWithTotal'
|
|
134
144
|
# abort if the element is already in this box
|
|
135
145
|
if element.question_grid_id == params[:id].to_i
|
|
136
146
|
render :nothing => true
|
|
@@ -138,48 +148,54 @@ class Fe::Admin::ElementsController < ApplicationController
|
|
|
138
148
|
element.question_grid_id = params[:id]
|
|
139
149
|
element.save!
|
|
140
150
|
end
|
|
141
|
-
when 'ChoiceField'
|
|
151
|
+
when 'Fe::ChoiceField'
|
|
142
152
|
# abort if the element is already in this box
|
|
143
|
-
if element.
|
|
153
|
+
if element.choice_field_id == params[:id].to_i
|
|
144
154
|
render :nothing => true
|
|
145
155
|
else
|
|
146
|
-
element.
|
|
156
|
+
element.choice_field_id = params[:id]
|
|
147
157
|
element.save!
|
|
148
158
|
end
|
|
149
159
|
end
|
|
150
160
|
# Remove page element for this page since it's now in a grid
|
|
151
161
|
Fe::PageElement.where(:page_id => @page.id, :element_id => element.id).first.try(:destroy)
|
|
152
162
|
end
|
|
153
|
-
|
|
163
|
+
|
|
154
164
|
def remove_from_grid
|
|
155
|
-
element =
|
|
165
|
+
element = @page.all_elements.find(params[:id])
|
|
156
166
|
Fe::PageElement.create(:element_id => element.id, :page_id => @page.id) unless Fe::PageElement.where(:element_id => element.id, :page_id => @page.id).first
|
|
157
167
|
if element.question_grid_id
|
|
158
|
-
element.set_position(element.question_grid.position(@page), @page)
|
|
168
|
+
element.set_position(element.question_grid.position(@page), @page)
|
|
159
169
|
element.question_grid_id = nil
|
|
160
170
|
elsif element.choice_field_id
|
|
161
|
-
element.set_position(element.choice_field.position(@page), @page)
|
|
171
|
+
element.set_position(element.choice_field.position(@page), @page)
|
|
162
172
|
element.choice_field_id = nil
|
|
163
173
|
end
|
|
164
174
|
element.save!
|
|
165
175
|
render :action => :drop
|
|
166
176
|
end
|
|
167
|
-
|
|
177
|
+
|
|
168
178
|
def duplicate
|
|
169
|
-
element =
|
|
170
|
-
@element = element.duplicate(@page, element.question_grid || element.choice_field)
|
|
179
|
+
element = @page.all_elements.find(params[:id])
|
|
180
|
+
@element = element.duplicate(@page, element.question_grid || element.question_grid_with_total || element.choice_field)
|
|
171
181
|
respond_to do |format|
|
|
172
|
-
format.js
|
|
182
|
+
format.js
|
|
173
183
|
end
|
|
174
184
|
end
|
|
175
|
-
|
|
185
|
+
|
|
176
186
|
private
|
|
177
187
|
def get_page
|
|
178
188
|
@page = Fe::Page.find(params[:page_id])
|
|
179
189
|
end
|
|
180
190
|
|
|
181
191
|
def element_params
|
|
182
|
-
params.fetch(:element, {}).permit(:
|
|
192
|
+
params.fetch(:element, {}).permit({label_translations: Fe::LANGUAGES.keys}, {tip_translations: Fe::LANGUAGES.keys}, {content_translations: Fe::LANGUAGES.keys},
|
|
193
|
+
:style, :label, :tooltip,
|
|
194
|
+
:position, :source, :value_xpath,
|
|
195
|
+
:text_xpath, :question_grid_id, :cols, :total_cols, :css_id, :css_class,
|
|
196
|
+
:related_question_sheet_id, :conditional_id, :hide_option_labels, :slug,
|
|
197
|
+
:required, :is_confidential, :hide_label, :object_name, :attribute_name,
|
|
198
|
+
:max_length, :content, :conditional_type, :conditional_id, :conditional_answer)
|
|
183
199
|
end
|
|
184
200
|
|
|
185
201
|
end
|
|
@@ -31,7 +31,7 @@ class Fe::Admin::EmailTemplatesController < ApplicationController
|
|
|
31
31
|
|
|
32
32
|
respond_to do |format|
|
|
33
33
|
if @email_template.save
|
|
34
|
-
format.html { redirect_to
|
|
34
|
+
format.html { redirect_to fe_admin_email_templates_path }
|
|
35
35
|
else
|
|
36
36
|
format.html { render :action => :new }
|
|
37
37
|
end
|
|
@@ -55,7 +55,7 @@ class Fe::Admin::EmailTemplatesController < ApplicationController
|
|
|
55
55
|
@email_template.destroy
|
|
56
56
|
|
|
57
57
|
respond_to do |format|
|
|
58
|
-
format.html { redirect_to
|
|
58
|
+
format.html { redirect_to fe_admin_email_templates_path }
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -108,6 +108,6 @@ class Fe::Admin::QuestionPagesController < ApplicationController
|
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def page_params
|
|
111
|
-
params.fetch(:fe_page, {}).permit(:label, :hidden, :no_cache)
|
|
111
|
+
params.fetch(:fe_page, {}).permit({label_translations: Fe::LANGUAGES.keys}, :label, :hidden, :no_cache)
|
|
112
112
|
end
|
|
113
113
|
end
|
|
@@ -1,107 +1,6 @@
|
|
|
1
1
|
# QuestionSheets is used exclusively on the administration side to design a Questionniare
|
|
2
2
|
# which can than be instantiated as an AnswerSheet for data capture on the front-end
|
|
3
|
-
|
|
4
3
|
class Fe::Admin::QuestionSheetsController < ApplicationController
|
|
5
|
-
|
|
6
|
-
before_filter :get_question_sheet, :only => [:show, :archive, :unarchive, :destroy, :edit, :update, :duplicate]
|
|
7
|
-
layout 'fe/fe.admin'
|
|
8
|
-
|
|
9
|
-
# list of all questionnaires/forms to edit
|
|
10
|
-
# GET /question_sheets
|
|
11
|
-
def index
|
|
12
|
-
@active_question_sheets = Fe::QuestionSheet.active.order('label')
|
|
13
|
-
@archived_question_sheets = Fe::QuestionSheet.archived.order('label')
|
|
14
|
-
|
|
15
|
-
respond_to do |format|
|
|
16
|
-
format.html # index.rhtml
|
|
17
|
-
format.xml { render :xml => @question_sheets.to_xml }
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def archive
|
|
22
|
-
@question_sheet.update_attribute(:archived, true)
|
|
23
|
-
redirect_to :back
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def unarchive
|
|
27
|
-
@question_sheet.update_attribute(:archived, false)
|
|
28
|
-
redirect_to :back
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def duplicate
|
|
32
|
-
@question_sheet.duplicate
|
|
33
|
-
redirect_to :back
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# entry point: display form designer with page 1 and panels loaded
|
|
37
|
-
# GET /question_sheets/1
|
|
38
|
-
def show
|
|
39
|
-
@all_pages = @question_sheet.pages
|
|
40
|
-
@page = @all_pages[0]
|
|
41
|
-
|
|
42
|
-
respond_to do |format|
|
|
43
|
-
format.html # show.rhtml
|
|
44
|
-
format.xml { render :xml => @question_sheet.to_xml }
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# create sheet with inital page, redirect to show
|
|
49
|
-
# POST /question_sheets
|
|
50
|
-
def create
|
|
51
|
-
@question_sheet = Fe::QuestionSheet.new_with_page
|
|
52
|
-
|
|
53
|
-
respond_to do |format|
|
|
54
|
-
if @question_sheet.save
|
|
55
|
-
format.html { redirect_to fe_admin_question_sheet_path(@question_sheet) }
|
|
56
|
-
format.xml { head :created, :location => admin_question_sheet_path(@question_sheet) }
|
|
57
|
-
else
|
|
58
|
-
format.html { render :action => "new" }
|
|
59
|
-
format.xml { render :xml => @question_sheet.errors.to_xml }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
# display sheet properties panel
|
|
66
|
-
# GET /question_sheets/1/edit
|
|
67
|
-
def edit
|
|
68
|
-
|
|
69
|
-
respond_to do |format|
|
|
70
|
-
format.js
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# save changes to properties panel (label, language)
|
|
75
|
-
# PUT /question_sheets/1
|
|
76
|
-
def update
|
|
77
|
-
params.require(:fe_question_sheet).permit!
|
|
78
|
-
|
|
79
|
-
respond_to do |format|
|
|
80
|
-
if @question_sheet.update_attributes(params[:fe_question_sheet])
|
|
81
|
-
format.html { redirect_to fe_admin_question_sheet_path(@question_sheet) }
|
|
82
|
-
format.js
|
|
83
|
-
format.xml { head :ok }
|
|
84
|
-
else
|
|
85
|
-
format.html { render :action => "edit" }
|
|
86
|
-
format.js { render :action => "error.rjs"}
|
|
87
|
-
format.xml { render :xml => @question_sheet.errors.to_xml }
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# mark sheet as destroyed
|
|
93
|
-
# DELETE /question_sheets/1
|
|
94
|
-
def destroy
|
|
95
|
-
@question_sheet.destroy
|
|
96
|
-
|
|
97
|
-
respond_to do |format|
|
|
98
|
-
format.html { redirect_to fe_admin_question_sheets_path }
|
|
99
|
-
format.xml { head :ok }
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
protected
|
|
104
|
-
def get_question_sheet
|
|
105
|
-
@question_sheet = Fe::QuestionSheet.find(params[:id])
|
|
106
|
-
end
|
|
4
|
+
include Fe::Admin::QuestionSheetsControllerConcern
|
|
107
5
|
end
|
|
6
|
+
|