decidim-consultations 0.11.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +51 -0
- data/Rakefile +3 -0
- data/app/assets/config/decidim_consultations_manifest.js +5 -0
- data/app/assets/config/decidim_consultations_manifest.scss +3 -0
- data/app/assets/images/decidim/consultations/icon.svg +70 -0
- data/app/assets/images/decidim/consultations/icon2.svg +88 -0
- data/app/assets/javascripts/decidim/consultations/show_more.js.es6 +12 -0
- data/app/assets/javascripts/decidim/consultations/social_share.js +2 -0
- data/app/assets/javascripts/decidim/consultations/utils.js.es6 +19 -0
- data/app/assets/javascripts/decidim/consultations/vote_dialog.js +36 -0
- data/app/assets/stylesheets/decidim/consultations/_question.scss +46 -0
- data/app/assets/stylesheets/decidim/consultations/_stats.scss +22 -0
- data/app/assets/stylesheets/decidim/consultations/_video_wrapper.scss +14 -0
- data/app/assets/stylesheets/decidim/consultations/banners/_block-banner.scss +39 -0
- data/app/assets/stylesheets/decidim/consultations/consultations.scss +6 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-banner.scss +13 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-card.scss +17 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-header.scss +115 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-home-banner.scss +15 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-home-intro.scss +30 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-intro.scss +11 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-title.scss +26 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/_consultations_nav.scss +7 -0
- data/app/assets/stylesheets/decidim/consultations/consultations/introductory_image.scss +3 -0
- data/app/assets/stylesheets/decidim/consultations/highlighted-content-banner.css.scss +42 -0
- data/app/assets/stylesheets/decidim/consultations/social_share.css.scss +18 -0
- data/app/commands/decidim/consultations/admin/create_consultation.rb +61 -0
- data/app/commands/decidim/consultations/admin/create_question.rb +68 -0
- data/app/commands/decidim/consultations/admin/create_response.rb +39 -0
- data/app/commands/decidim/consultations/admin/publish_consultation.rb +34 -0
- data/app/commands/decidim/consultations/admin/publish_consultation_results.rb +34 -0
- data/app/commands/decidim/consultations/admin/publish_question.rb +34 -0
- data/app/commands/decidim/consultations/admin/unpublish_consultation.rb +34 -0
- data/app/commands/decidim/consultations/admin/unpublish_consultation_results.rb +34 -0
- data/app/commands/decidim/consultations/admin/unpublish_question.rb +34 -0
- data/app/commands/decidim/consultations/admin/update_consultation.rb +64 -0
- data/app/commands/decidim/consultations/admin/update_question.rb +72 -0
- data/app/commands/decidim/consultations/admin/update_response.rb +46 -0
- data/app/commands/decidim/consultations/unvote_question.rb +37 -0
- data/app/commands/decidim/consultations/vote_question.rb +42 -0
- data/app/constraints/decidim/consultations/current_component.rb +28 -0
- data/app/constraints/decidim/consultations/current_question.rb +36 -0
- data/app/controllers/concerns/decidim/consultations/action_authorization.rb +38 -0
- data/app/controllers/concerns/decidim/consultations/admin/consultation_admin.rb +24 -0
- data/app/controllers/concerns/decidim/consultations/admin/question_admin.rb +28 -0
- data/app/controllers/concerns/decidim/consultations/needs_consultation.rb +54 -0
- data/app/controllers/concerns/decidim/consultations/needs_question.rb +79 -0
- data/app/controllers/concerns/decidim/consultations/orderable.rb +52 -0
- data/app/controllers/decidim/consultations/admin/application_controller.rb +14 -0
- data/app/controllers/decidim/consultations/admin/categories_controller.rb +13 -0
- data/app/controllers/decidim/consultations/admin/component_permissions_controller.rb +13 -0
- data/app/controllers/decidim/consultations/admin/components_controller.rb +13 -0
- data/app/controllers/decidim/consultations/admin/consultation_publications_controller.rb +44 -0
- data/app/controllers/decidim/consultations/admin/consultation_results_publications_controller.rb +44 -0
- data/app/controllers/decidim/consultations/admin/consultations_controller.rb +100 -0
- data/app/controllers/decidim/consultations/admin/question_attachments_controller.rb +25 -0
- data/app/controllers/decidim/consultations/admin/question_publications_controller.rb +44 -0
- data/app/controllers/decidim/consultations/admin/questions_controller.rb +88 -0
- data/app/controllers/decidim/consultations/admin/responses_controller.rb +85 -0
- data/app/controllers/decidim/consultations/consultation_widgets_controller.rb +25 -0
- data/app/controllers/decidim/consultations/consultations_controller.rb +75 -0
- data/app/controllers/decidim/consultations/question_votes_controller.rb +40 -0
- data/app/controllers/decidim/consultations/question_widgets_controller.rb +26 -0
- data/app/controllers/decidim/consultations/questions_controller.rb +23 -0
- data/app/forms/decidim/consultations/admin/consultation_form.rb +56 -0
- data/app/forms/decidim/consultations/admin/question_form.rb +74 -0
- data/app/forms/decidim/consultations/admin/response_form.rb +18 -0
- data/app/forms/decidim/consultations/vote_form.rb +28 -0
- data/app/helpers/decidim/consultations/admin/consultations_helper.rb +14 -0
- data/app/helpers/decidim/consultations/admin/questions_helper.rb +14 -0
- data/app/helpers/decidim/consultations/consultations_helper.rb +17 -0
- data/app/models/concerns/decidim/consultations/override_categorization.rb +21 -0
- data/app/models/concerns/decidim/consultations/publicable_results.rb +51 -0
- data/app/models/decidim/consultation.rb +79 -0
- data/app/models/decidim/consultations/abilities/admin/consultation_admin_ability.rb +34 -0
- data/app/models/decidim/consultations/abilities/admin/question_admin_ability.rb +30 -0
- data/app/models/decidim/consultations/abilities/admin/response_admin_ability.rb +26 -0
- data/app/models/decidim/consultations/abilities/current_user_ability.rb +45 -0
- data/app/models/decidim/consultations/abilities/everyone_ability.rb +23 -0
- data/app/models/decidim/consultations/application_record.rb +9 -0
- data/app/models/decidim/consultations/question.rb +127 -0
- data/app/models/decidim/consultations/response.rb +19 -0
- data/app/models/decidim/consultations/vote.rb +26 -0
- data/app/presenters/decidim/consultations/question_stats_presenter.rb +52 -0
- data/app/queries/decidim/consultations/admin/admin_users.rb +40 -0
- data/app/queries/decidim/consultations/organization_active_consultations.rb +20 -0
- data/app/queries/decidim/consultations/organization_consultations.rb +20 -0
- data/app/queries/decidim/consultations/organization_questions.rb +20 -0
- data/app/services/decidim/consultations/consultation_search.rb +51 -0
- data/app/views/decidim/consultations/_consultation.html.erb +32 -0
- data/app/views/decidim/consultations/admin/consultations/_form.html.erb +58 -0
- data/app/views/decidim/consultations/admin/consultations/edit.html.erb +42 -0
- data/app/views/decidim/consultations/admin/consultations/index.html.erb +74 -0
- data/app/views/decidim/consultations/admin/consultations/new.html.erb +11 -0
- data/app/views/decidim/consultations/admin/questions/_form.html.erb +84 -0
- data/app/views/decidim/consultations/admin/questions/edit.html.erb +32 -0
- data/app/views/decidim/consultations/admin/questions/index.html.erb +74 -0
- data/app/views/decidim/consultations/admin/questions/new.html.erb +13 -0
- data/app/views/decidim/consultations/admin/responses/_form.html.erb +11 -0
- data/app/views/decidim/consultations/admin/responses/edit.html.erb +18 -0
- data/app/views/decidim/consultations/admin/responses/index.html.erb +48 -0
- data/app/views/decidim/consultations/admin/responses/new.html.erb +13 -0
- data/app/views/decidim/consultations/consultation_widgets/show.html.erb +5 -0
- data/app/views/decidim/consultations/consultations/_consultation_card.html.erb +24 -0
- data/app/views/decidim/consultations/consultations/_consultation_details.html.erb +17 -0
- data/app/views/decidim/consultations/consultations/_consultations.html.erb +16 -0
- data/app/views/decidim/consultations/consultations/_count.html.erb +1 -0
- data/app/views/decidim/consultations/consultations/_filters.html.erb +25 -0
- data/app/views/decidim/consultations/consultations/_filters_small_view.html.erb +23 -0
- data/app/views/decidim/consultations/consultations/_highlighted_questions.html.erb +13 -0
- data/app/views/decidim/consultations/consultations/_question.html.erb +40 -0
- data/app/views/decidim/consultations/consultations/_regular_questions.html.erb +14 -0
- data/app/views/decidim/consultations/consultations/finished.html.erb +15 -0
- data/app/views/decidim/consultations/consultations/index.html.erb +27 -0
- data/app/views/decidim/consultations/consultations/index.js.erb +10 -0
- data/app/views/decidim/consultations/consultations/show.html.erb +11 -0
- data/app/views/decidim/consultations/question_votes/update_vote_button.js.erb +9 -0
- data/app/views/decidim/consultations/question_widgets/show.html.erb +2 -0
- data/app/views/decidim/consultations/questions/_results.html.erb +15 -0
- data/app/views/decidim/consultations/questions/_right_column.html.erb +20 -0
- data/app/views/decidim/consultations/questions/_statistics.html.erb +31 -0
- data/app/views/decidim/consultations/questions/_technical_data.html.erb +38 -0
- data/app/views/decidim/consultations/questions/_vote_button.html.erb +76 -0
- data/app/views/decidim/consultations/questions/_vote_modal.html.erb +27 -0
- data/app/views/decidim/consultations/questions/_vote_modal_confirm.html.erb +33 -0
- data/app/views/decidim/consultations/questions/show.html.erb +58 -0
- data/app/views/layouts/decidim/_consultation_header.html.erb +16 -0
- data/app/views/layouts/decidim/_consultation_voting_data.html.erb +10 -0
- data/app/views/layouts/decidim/_question_components.html.erb +38 -0
- data/app/views/layouts/decidim/_question_header.html.erb +46 -0
- data/app/views/layouts/decidim/admin/consultation.html.erb +28 -0
- data/app/views/layouts/decidim/admin/consultations.html.erb +16 -0
- data/app/views/layouts/decidim/admin/question.html.erb +72 -0
- data/app/views/layouts/decidim/consultation.html.erb +17 -0
- data/app/views/layouts/decidim/consultation_choose.html.erb +7 -0
- data/app/views/layouts/decidim/question.html.erb +19 -0
- data/config/locales/ca.yml +248 -0
- data/config/locales/en.yml +249 -0
- data/config/locales/es.yml +248 -0
- data/config/locales/eu.yml +248 -0
- data/config/locales/fi.yml +248 -0
- data/config/locales/fr.yml +248 -0
- data/config/locales/gl.yml +248 -0
- data/config/locales/it.yml +248 -0
- data/config/locales/nl.yml +248 -0
- data/config/locales/pl.yml +258 -0
- data/config/locales/pt-BR.yml +248 -0
- data/config/locales/pt.yml +248 -0
- data/config/locales/ru.yml +6 -0
- data/config/locales/sv.yml +248 -0
- data/config/locales/uk.yml +6 -0
- data/db/migrate/20180109092205_create_decidim_consultations.rb +37 -0
- data/db/migrate/20180112053247_create_decidim_consultations_questions.rb +35 -0
- data/db/migrate/20180115132000_add_end_voting_date_to_decidim_consultations.rb +18 -0
- data/db/migrate/20180115170933_add_slug_to_decidim_consultations_questions.rb +32 -0
- data/db/migrate/20180119084217_create_decidim_consultations_votes.rb +17 -0
- data/db/migrate/20180119084331_add_votes_count_to_decidim_consultations_question.rb +7 -0
- data/db/migrate/20180122113155_add_origin_scope_to_decidim_consultations_questions.rb +8 -0
- data/db/migrate/20180122113400_add_origin_title_to_decidim_consultations_questions.rb +8 -0
- data/db/migrate/20180122113447_add_origin_string_to_decidim_consultations_questions.rb +7 -0
- data/db/migrate/20180126142459_add_enable_highlighted_banner_to_decidim_consultations.rb +7 -0
- data/db/migrate/20180129063438_add_i_frame_url_to_decidim_consultations_questions.rb +8 -0
- data/db/migrate/20180129063700_create_decidim_consultations_responses.rb +14 -0
- data/db/migrate/20180129122226_rename_decidim_consultations_vote_to_decidim_consultations_endorsement.rb +7 -0
- data/db/migrate/20180129122504_rename_decidim_consultations_questions_votes_count_to_endorsements_count.rb +7 -0
- data/db/migrate/20180130060754_add_responses_count_to_decidim_consultations_questions.rb +22 -0
- data/db/migrate/20180130110449_rename_vote_related_attributes.rb +9 -0
- data/db/migrate/20180130142018_add_decidim_user_group_id_to_decidim_consultations_endorsements.rb +7 -0
- data/db/migrate/20180130142411_rename_vote_indexes_to_endorsement_indexes.rb +36 -0
- data/db/migrate/20180131083844_add_response_to_decidim_consultations_endorsements.rb +10 -0
- data/db/migrate/20180201135823_rename_endorsement_to_vote.rb +23 -0
- data/db/migrate/20180202050920_add_hero_image_to_decidim_consultations_question.rb +8 -0
- data/db/migrate/20180202085309_add_results_published_at_to_decidim_consultations.rb +7 -0
- data/db/migrate/20180202133655_add_votes_count_to_decidim_consultations_response.rb +7 -0
- data/db/migrate/20180212100503_remove_enable_highlighted_banner_flag.rb +7 -0
- data/db/migrate/20180219092120_add_order_to_decidim_consultations_questions.rb +7 -0
- data/db/migrate/20180320100658_add_introductory_image_to_decidim_consultations.rb +7 -0
- data/db/seeds/Exampledocument.pdf +0 -0
- data/db/seeds/city.jpeg +0 -0
- data/db/seeds/city2.jpeg +0 -0
- data/db/seeds/homepage_image.jpg +0 -0
- data/lib/decidim/consultations.rb +18 -0
- data/lib/decidim/consultations/admin.rb +10 -0
- data/lib/decidim/consultations/admin_engine.rb +72 -0
- data/lib/decidim/consultations/engine.rb +83 -0
- data/lib/decidim/consultations/participatory_space.rb +171 -0
- data/lib/decidim/consultations/test/factories.rb +104 -0
- data/lib/decidim/consultations/version.rb +9 -0
- metadata +288 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
.consultations-header{
|
2
|
+
margin-bottom: $margin-sm;
|
3
|
+
|
4
|
+
@include breakpoint(medium){
|
5
|
+
margin-bottom: $margin-m;
|
6
|
+
}
|
7
|
+
|
8
|
+
.heading2{
|
9
|
+
font-weight: bold;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
.consultations-header__main{
|
14
|
+
background-size: cover;
|
15
|
+
position: relative;
|
16
|
+
z-index: 0;
|
17
|
+
display: flex;
|
18
|
+
flex-direction: column;
|
19
|
+
|
20
|
+
&::after{
|
21
|
+
content: "";
|
22
|
+
display: block;
|
23
|
+
position: absolute;
|
24
|
+
z-index: -1;
|
25
|
+
top: 0;
|
26
|
+
width: 100%;
|
27
|
+
height: 100%;
|
28
|
+
background-color: rgba($black, .6);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
.consultations-header__container{
|
33
|
+
position: relative;
|
34
|
+
z-index: 1;
|
35
|
+
padding: 0 0 0 1rem;
|
36
|
+
|
37
|
+
@include breakpoint(mediumlarge){
|
38
|
+
display: flex;
|
39
|
+
align-items: stretch;
|
40
|
+
|
41
|
+
.columns{
|
42
|
+
> *{
|
43
|
+
height: 100%;
|
44
|
+
display: flex;
|
45
|
+
flex-direction: column;
|
46
|
+
justify-content: center;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
.consultations-header__info{
|
53
|
+
padding: 1rem 1.5rem 1rem 1rem;
|
54
|
+
text-align: center;
|
55
|
+
|
56
|
+
@include breakpoint(medium){
|
57
|
+
padding: 1rem 1.5rem 1rem 1rem;
|
58
|
+
}
|
59
|
+
|
60
|
+
@include breakpoint(mediumlarge){
|
61
|
+
padding-left: 2rem;
|
62
|
+
text-align: left;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
.consultations-header__link{
|
67
|
+
font-weight: 600;
|
68
|
+
color: $white;
|
69
|
+
|
70
|
+
&:hover,
|
71
|
+
&:focus{
|
72
|
+
color: $primary;
|
73
|
+
}
|
74
|
+
|
75
|
+
.icon{
|
76
|
+
width: 8px;
|
77
|
+
height: 8px;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
.consultations-header__extra{
|
82
|
+
background: rgba($dark-gray, .8);
|
83
|
+
color: $white;
|
84
|
+
text-align: center;
|
85
|
+
margin-left: auto;
|
86
|
+
margin-right: auto;
|
87
|
+
max-width: 16rem;
|
88
|
+
padding: 1rem;
|
89
|
+
margin-bottom: 1.5rem;
|
90
|
+
|
91
|
+
@include breakpoint(medium){
|
92
|
+
margin-left: -1rem;
|
93
|
+
margin-right: 0;
|
94
|
+
margin-bottom: 0;
|
95
|
+
max-width: 150%;
|
96
|
+
padding: 2rem 1rem;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
.consultations-header__extra-title{
|
101
|
+
display: block;
|
102
|
+
font-weight: 600;
|
103
|
+
font-size: 1rem;
|
104
|
+
|
105
|
+
@include breakpoint(medium){
|
106
|
+
font-size: 1.1rem;
|
107
|
+
}
|
108
|
+
|
109
|
+
line-height: 1;
|
110
|
+
text-transform: uppercase;
|
111
|
+
}
|
112
|
+
|
113
|
+
.consultations-header__extra-date{
|
114
|
+
font-weight: 900;
|
115
|
+
}
|
data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-home-intro.scss
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
.consultations-home-intro{
|
2
|
+
margin-top: $margin-s;
|
3
|
+
|
4
|
+
> :first-child{
|
5
|
+
margin-bottom: $margin-s;
|
6
|
+
}
|
7
|
+
|
8
|
+
@include breakpoint(medium){
|
9
|
+
margin-top: $margin-sm;
|
10
|
+
display: flex;
|
11
|
+
justify-content: center;
|
12
|
+
|
13
|
+
> :first-child{
|
14
|
+
margin-right: $margin-sm;
|
15
|
+
margin-bottom: 0;
|
16
|
+
}
|
17
|
+
|
18
|
+
p:last-child{
|
19
|
+
margin-bottom: 0;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
@include breakpoint(large){
|
24
|
+
align-items: center;
|
25
|
+
}
|
26
|
+
|
27
|
+
.heading6{
|
28
|
+
margin-bottom: 0;
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
.consultations-title{
|
2
|
+
margin-bottom: $margin-s;
|
3
|
+
|
4
|
+
@include breakpoint(medium){
|
5
|
+
margin-bottom: $margin-sm;
|
6
|
+
}
|
7
|
+
|
8
|
+
.heading1,
|
9
|
+
.heading2{
|
10
|
+
text-align: center;
|
11
|
+
|
12
|
+
@include breakpoint(medium down){
|
13
|
+
font-size: 1.5em;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.consultations-title__cta{
|
19
|
+
padding-left: 3rem;
|
20
|
+
padding-right: 3rem;
|
21
|
+
margin-top: $margin-s;
|
22
|
+
|
23
|
+
@include breakpoint(medium){
|
24
|
+
margin-top: $margin-sm;
|
25
|
+
}
|
26
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
@import "decidim/admin/utils/_settings";
|
2
|
+
|
3
|
+
.highligted-content-banner{
|
4
|
+
background-size: cover;
|
5
|
+
position: relative;
|
6
|
+
z-index: 0;
|
7
|
+
min-height: 255px;
|
8
|
+
margin-bottom: 2rem;
|
9
|
+
margin-top: 2rem;
|
10
|
+
|
11
|
+
&::after{
|
12
|
+
content: "";
|
13
|
+
display: block;
|
14
|
+
position: absolute;
|
15
|
+
top: 0;
|
16
|
+
width: 100%;
|
17
|
+
height: 100%;
|
18
|
+
background-color: rgba($black, .6);
|
19
|
+
}
|
20
|
+
|
21
|
+
.highligted-content-banner__container{
|
22
|
+
position: relative;
|
23
|
+
z-index: 1;
|
24
|
+
padding: 3rem 0;
|
25
|
+
|
26
|
+
@include breakpoint(medium){
|
27
|
+
padding: 4rem 0;
|
28
|
+
}
|
29
|
+
|
30
|
+
@include breakpoint(mediumlarge){
|
31
|
+
padding: 5rem 0;
|
32
|
+
}
|
33
|
+
|
34
|
+
@include breakpoint(large){
|
35
|
+
padding: 6rem 0;
|
36
|
+
}
|
37
|
+
|
38
|
+
.row{
|
39
|
+
max-width: 100rem;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$size: 45px;
|
2
|
+
|
3
|
+
.share-link:hover{
|
4
|
+
text-decoration: underline;
|
5
|
+
cursor: pointer;
|
6
|
+
}
|
7
|
+
|
8
|
+
.social-share-button{
|
9
|
+
display: inline-block;
|
10
|
+
vertical-align: top;
|
11
|
+
|
12
|
+
.ssb-icon{
|
13
|
+
margin-right: 5px;
|
14
|
+
background-size: $size $size;
|
15
|
+
height: $size;
|
16
|
+
width: $size;
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Consultations
|
5
|
+
module Admin
|
6
|
+
# A command with all the business logic when creating a new participatory
|
7
|
+
# consultation in the system.
|
8
|
+
class CreateConsultation < Rectify::Command
|
9
|
+
# Public: Initializes the command.
|
10
|
+
#
|
11
|
+
# form - A form object with the params.
|
12
|
+
def initialize(form)
|
13
|
+
@form = form
|
14
|
+
end
|
15
|
+
|
16
|
+
# Executes the command. Broadcasts these events:
|
17
|
+
#
|
18
|
+
# - :ok when everything is valid.
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
def call
|
23
|
+
return broadcast(:invalid) if form.invalid?
|
24
|
+
consultation = create_consultation
|
25
|
+
|
26
|
+
if consultation.persisted?
|
27
|
+
broadcast(:ok, consultation)
|
28
|
+
else
|
29
|
+
form.errors.add(:banner_image, consultation.errors[:banner_image]) if consultation.errors.include? :banner_image
|
30
|
+
form.errors.add(:introductory_image, consultation.errors[:introductory_image]) if consultation.errors.include? :introductory_image
|
31
|
+
broadcast(:invalid)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :form
|
38
|
+
|
39
|
+
def create_consultation
|
40
|
+
consultation = Consultation.new(
|
41
|
+
organization: form.current_organization,
|
42
|
+
title: form.title,
|
43
|
+
subtitle: form.subtitle,
|
44
|
+
description: form.description,
|
45
|
+
slug: form.slug,
|
46
|
+
banner_image: form.banner_image,
|
47
|
+
highlighted_scope: form.highlighted_scope,
|
48
|
+
introductory_video_url: form.introductory_video_url,
|
49
|
+
start_voting_date: form.start_voting_date,
|
50
|
+
end_voting_date: form.end_voting_date,
|
51
|
+
introductory_image: form.introductory_image
|
52
|
+
)
|
53
|
+
|
54
|
+
return consultation unless consultation.valid?
|
55
|
+
consultation.save
|
56
|
+
consultation
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Consultations
|
5
|
+
module Admin
|
6
|
+
# A command with all the business logic when creating a new question
|
7
|
+
class CreateQuestion < Rectify::Command
|
8
|
+
# Public: Initializes the command.
|
9
|
+
#
|
10
|
+
# form - A form object with the params.
|
11
|
+
def initialize(form)
|
12
|
+
@form = form
|
13
|
+
end
|
14
|
+
|
15
|
+
# Executes the command. Broadcasts these events:
|
16
|
+
#
|
17
|
+
# - :ok when everything is valid.
|
18
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
def call
|
22
|
+
return broadcast(:invalid) if form.invalid?
|
23
|
+
question = create_question
|
24
|
+
|
25
|
+
if question.persisted?
|
26
|
+
broadcast(:ok, question)
|
27
|
+
else
|
28
|
+
form.errors.add(:hero_image, question.errors[:hero_image]) if question.errors.include? :hero_image
|
29
|
+
form.errors.add(:banner_image, question.errors[:banner_image]) if question.errors.include? :banner_image
|
30
|
+
broadcast(:invalid)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :form
|
37
|
+
|
38
|
+
def create_question
|
39
|
+
question = Question.new(
|
40
|
+
consultation: form.context.current_consultation,
|
41
|
+
organization: form.context.current_consultation.organization,
|
42
|
+
decidim_scope_id: form.decidim_scope_id,
|
43
|
+
title: form.title,
|
44
|
+
slug: form.slug,
|
45
|
+
subtitle: form.subtitle,
|
46
|
+
what_is_decided: form.what_is_decided,
|
47
|
+
promoter_group: form.promoter_group,
|
48
|
+
participatory_scope: form.participatory_scope,
|
49
|
+
question_context: form.question_context,
|
50
|
+
hashtag: form.hashtag,
|
51
|
+
hero_image: form.hero_image,
|
52
|
+
banner_image: form.banner_image,
|
53
|
+
origin_scope: form.origin_scope,
|
54
|
+
origin_title: form.origin_title,
|
55
|
+
origin_url: form.origin_url,
|
56
|
+
external_voting: form.external_voting,
|
57
|
+
i_frame_url: form.i_frame_url,
|
58
|
+
order: form.order
|
59
|
+
)
|
60
|
+
|
61
|
+
return question unless question.valid?
|
62
|
+
question.save
|
63
|
+
question
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Consultations
|
5
|
+
module Admin
|
6
|
+
# A command with all the business logic when creating a new response
|
7
|
+
class CreateResponse < Rectify::Command
|
8
|
+
# Public: Initializes the command.
|
9
|
+
#
|
10
|
+
# form - A form object with the params.
|
11
|
+
def initialize(form)
|
12
|
+
@form = form
|
13
|
+
end
|
14
|
+
|
15
|
+
# Executes the command. Broadcasts these events:
|
16
|
+
#
|
17
|
+
# - :ok when everything is valid.
|
18
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
def call
|
22
|
+
return broadcast(:invalid) if form.invalid?
|
23
|
+
broadcast(:ok, create_response)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :form
|
29
|
+
|
30
|
+
def create_response
|
31
|
+
Response.create(
|
32
|
+
question: form.context.current_question,
|
33
|
+
title: form.title
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|