decidim-consultations 0.11.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +51 -0
  3. data/Rakefile +3 -0
  4. data/app/assets/config/decidim_consultations_manifest.js +5 -0
  5. data/app/assets/config/decidim_consultations_manifest.scss +3 -0
  6. data/app/assets/images/decidim/consultations/icon.svg +70 -0
  7. data/app/assets/images/decidim/consultations/icon2.svg +88 -0
  8. data/app/assets/javascripts/decidim/consultations/show_more.js.es6 +12 -0
  9. data/app/assets/javascripts/decidim/consultations/social_share.js +2 -0
  10. data/app/assets/javascripts/decidim/consultations/utils.js.es6 +19 -0
  11. data/app/assets/javascripts/decidim/consultations/vote_dialog.js +36 -0
  12. data/app/assets/stylesheets/decidim/consultations/_question.scss +46 -0
  13. data/app/assets/stylesheets/decidim/consultations/_stats.scss +22 -0
  14. data/app/assets/stylesheets/decidim/consultations/_video_wrapper.scss +14 -0
  15. data/app/assets/stylesheets/decidim/consultations/banners/_block-banner.scss +39 -0
  16. data/app/assets/stylesheets/decidim/consultations/consultations.scss +6 -0
  17. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-banner.scss +13 -0
  18. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-card.scss +17 -0
  19. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-header.scss +115 -0
  20. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-home-banner.scss +15 -0
  21. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-home-intro.scss +30 -0
  22. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-intro.scss +11 -0
  23. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations-title.scss +26 -0
  24. data/app/assets/stylesheets/decidim/consultations/consultations/_consultations_nav.scss +7 -0
  25. data/app/assets/stylesheets/decidim/consultations/consultations/introductory_image.scss +3 -0
  26. data/app/assets/stylesheets/decidim/consultations/highlighted-content-banner.css.scss +42 -0
  27. data/app/assets/stylesheets/decidim/consultations/social_share.css.scss +18 -0
  28. data/app/commands/decidim/consultations/admin/create_consultation.rb +61 -0
  29. data/app/commands/decidim/consultations/admin/create_question.rb +68 -0
  30. data/app/commands/decidim/consultations/admin/create_response.rb +39 -0
  31. data/app/commands/decidim/consultations/admin/publish_consultation.rb +34 -0
  32. data/app/commands/decidim/consultations/admin/publish_consultation_results.rb +34 -0
  33. data/app/commands/decidim/consultations/admin/publish_question.rb +34 -0
  34. data/app/commands/decidim/consultations/admin/unpublish_consultation.rb +34 -0
  35. data/app/commands/decidim/consultations/admin/unpublish_consultation_results.rb +34 -0
  36. data/app/commands/decidim/consultations/admin/unpublish_question.rb +34 -0
  37. data/app/commands/decidim/consultations/admin/update_consultation.rb +64 -0
  38. data/app/commands/decidim/consultations/admin/update_question.rb +72 -0
  39. data/app/commands/decidim/consultations/admin/update_response.rb +46 -0
  40. data/app/commands/decidim/consultations/unvote_question.rb +37 -0
  41. data/app/commands/decidim/consultations/vote_question.rb +42 -0
  42. data/app/constraints/decidim/consultations/current_component.rb +28 -0
  43. data/app/constraints/decidim/consultations/current_question.rb +36 -0
  44. data/app/controllers/concerns/decidim/consultations/action_authorization.rb +38 -0
  45. data/app/controllers/concerns/decidim/consultations/admin/consultation_admin.rb +24 -0
  46. data/app/controllers/concerns/decidim/consultations/admin/question_admin.rb +28 -0
  47. data/app/controllers/concerns/decidim/consultations/needs_consultation.rb +54 -0
  48. data/app/controllers/concerns/decidim/consultations/needs_question.rb +79 -0
  49. data/app/controllers/concerns/decidim/consultations/orderable.rb +52 -0
  50. data/app/controllers/decidim/consultations/admin/application_controller.rb +14 -0
  51. data/app/controllers/decidim/consultations/admin/categories_controller.rb +13 -0
  52. data/app/controllers/decidim/consultations/admin/component_permissions_controller.rb +13 -0
  53. data/app/controllers/decidim/consultations/admin/components_controller.rb +13 -0
  54. data/app/controllers/decidim/consultations/admin/consultation_publications_controller.rb +44 -0
  55. data/app/controllers/decidim/consultations/admin/consultation_results_publications_controller.rb +44 -0
  56. data/app/controllers/decidim/consultations/admin/consultations_controller.rb +100 -0
  57. data/app/controllers/decidim/consultations/admin/question_attachments_controller.rb +25 -0
  58. data/app/controllers/decidim/consultations/admin/question_publications_controller.rb +44 -0
  59. data/app/controllers/decidim/consultations/admin/questions_controller.rb +88 -0
  60. data/app/controllers/decidim/consultations/admin/responses_controller.rb +85 -0
  61. data/app/controllers/decidim/consultations/consultation_widgets_controller.rb +25 -0
  62. data/app/controllers/decidim/consultations/consultations_controller.rb +75 -0
  63. data/app/controllers/decidim/consultations/question_votes_controller.rb +40 -0
  64. data/app/controllers/decidim/consultations/question_widgets_controller.rb +26 -0
  65. data/app/controllers/decidim/consultations/questions_controller.rb +23 -0
  66. data/app/forms/decidim/consultations/admin/consultation_form.rb +56 -0
  67. data/app/forms/decidim/consultations/admin/question_form.rb +74 -0
  68. data/app/forms/decidim/consultations/admin/response_form.rb +18 -0
  69. data/app/forms/decidim/consultations/vote_form.rb +28 -0
  70. data/app/helpers/decidim/consultations/admin/consultations_helper.rb +14 -0
  71. data/app/helpers/decidim/consultations/admin/questions_helper.rb +14 -0
  72. data/app/helpers/decidim/consultations/consultations_helper.rb +17 -0
  73. data/app/models/concerns/decidim/consultations/override_categorization.rb +21 -0
  74. data/app/models/concerns/decidim/consultations/publicable_results.rb +51 -0
  75. data/app/models/decidim/consultation.rb +79 -0
  76. data/app/models/decidim/consultations/abilities/admin/consultation_admin_ability.rb +34 -0
  77. data/app/models/decidim/consultations/abilities/admin/question_admin_ability.rb +30 -0
  78. data/app/models/decidim/consultations/abilities/admin/response_admin_ability.rb +26 -0
  79. data/app/models/decidim/consultations/abilities/current_user_ability.rb +45 -0
  80. data/app/models/decidim/consultations/abilities/everyone_ability.rb +23 -0
  81. data/app/models/decidim/consultations/application_record.rb +9 -0
  82. data/app/models/decidim/consultations/question.rb +127 -0
  83. data/app/models/decidim/consultations/response.rb +19 -0
  84. data/app/models/decidim/consultations/vote.rb +26 -0
  85. data/app/presenters/decidim/consultations/question_stats_presenter.rb +52 -0
  86. data/app/queries/decidim/consultations/admin/admin_users.rb +40 -0
  87. data/app/queries/decidim/consultations/organization_active_consultations.rb +20 -0
  88. data/app/queries/decidim/consultations/organization_consultations.rb +20 -0
  89. data/app/queries/decidim/consultations/organization_questions.rb +20 -0
  90. data/app/services/decidim/consultations/consultation_search.rb +51 -0
  91. data/app/views/decidim/consultations/_consultation.html.erb +32 -0
  92. data/app/views/decidim/consultations/admin/consultations/_form.html.erb +58 -0
  93. data/app/views/decidim/consultations/admin/consultations/edit.html.erb +42 -0
  94. data/app/views/decidim/consultations/admin/consultations/index.html.erb +74 -0
  95. data/app/views/decidim/consultations/admin/consultations/new.html.erb +11 -0
  96. data/app/views/decidim/consultations/admin/questions/_form.html.erb +84 -0
  97. data/app/views/decidim/consultations/admin/questions/edit.html.erb +32 -0
  98. data/app/views/decidim/consultations/admin/questions/index.html.erb +74 -0
  99. data/app/views/decidim/consultations/admin/questions/new.html.erb +13 -0
  100. data/app/views/decidim/consultations/admin/responses/_form.html.erb +11 -0
  101. data/app/views/decidim/consultations/admin/responses/edit.html.erb +18 -0
  102. data/app/views/decidim/consultations/admin/responses/index.html.erb +48 -0
  103. data/app/views/decidim/consultations/admin/responses/new.html.erb +13 -0
  104. data/app/views/decidim/consultations/consultation_widgets/show.html.erb +5 -0
  105. data/app/views/decidim/consultations/consultations/_consultation_card.html.erb +24 -0
  106. data/app/views/decidim/consultations/consultations/_consultation_details.html.erb +17 -0
  107. data/app/views/decidim/consultations/consultations/_consultations.html.erb +16 -0
  108. data/app/views/decidim/consultations/consultations/_count.html.erb +1 -0
  109. data/app/views/decidim/consultations/consultations/_filters.html.erb +25 -0
  110. data/app/views/decidim/consultations/consultations/_filters_small_view.html.erb +23 -0
  111. data/app/views/decidim/consultations/consultations/_highlighted_questions.html.erb +13 -0
  112. data/app/views/decidim/consultations/consultations/_question.html.erb +40 -0
  113. data/app/views/decidim/consultations/consultations/_regular_questions.html.erb +14 -0
  114. data/app/views/decidim/consultations/consultations/finished.html.erb +15 -0
  115. data/app/views/decidim/consultations/consultations/index.html.erb +27 -0
  116. data/app/views/decidim/consultations/consultations/index.js.erb +10 -0
  117. data/app/views/decidim/consultations/consultations/show.html.erb +11 -0
  118. data/app/views/decidim/consultations/question_votes/update_vote_button.js.erb +9 -0
  119. data/app/views/decidim/consultations/question_widgets/show.html.erb +2 -0
  120. data/app/views/decidim/consultations/questions/_results.html.erb +15 -0
  121. data/app/views/decidim/consultations/questions/_right_column.html.erb +20 -0
  122. data/app/views/decidim/consultations/questions/_statistics.html.erb +31 -0
  123. data/app/views/decidim/consultations/questions/_technical_data.html.erb +38 -0
  124. data/app/views/decidim/consultations/questions/_vote_button.html.erb +76 -0
  125. data/app/views/decidim/consultations/questions/_vote_modal.html.erb +27 -0
  126. data/app/views/decidim/consultations/questions/_vote_modal_confirm.html.erb +33 -0
  127. data/app/views/decidim/consultations/questions/show.html.erb +58 -0
  128. data/app/views/layouts/decidim/_consultation_header.html.erb +16 -0
  129. data/app/views/layouts/decidim/_consultation_voting_data.html.erb +10 -0
  130. data/app/views/layouts/decidim/_question_components.html.erb +38 -0
  131. data/app/views/layouts/decidim/_question_header.html.erb +46 -0
  132. data/app/views/layouts/decidim/admin/consultation.html.erb +28 -0
  133. data/app/views/layouts/decidim/admin/consultations.html.erb +16 -0
  134. data/app/views/layouts/decidim/admin/question.html.erb +72 -0
  135. data/app/views/layouts/decidim/consultation.html.erb +17 -0
  136. data/app/views/layouts/decidim/consultation_choose.html.erb +7 -0
  137. data/app/views/layouts/decidim/question.html.erb +19 -0
  138. data/config/locales/ca.yml +248 -0
  139. data/config/locales/en.yml +249 -0
  140. data/config/locales/es.yml +248 -0
  141. data/config/locales/eu.yml +248 -0
  142. data/config/locales/fi.yml +248 -0
  143. data/config/locales/fr.yml +248 -0
  144. data/config/locales/gl.yml +248 -0
  145. data/config/locales/it.yml +248 -0
  146. data/config/locales/nl.yml +248 -0
  147. data/config/locales/pl.yml +258 -0
  148. data/config/locales/pt-BR.yml +248 -0
  149. data/config/locales/pt.yml +248 -0
  150. data/config/locales/ru.yml +6 -0
  151. data/config/locales/sv.yml +248 -0
  152. data/config/locales/uk.yml +6 -0
  153. data/db/migrate/20180109092205_create_decidim_consultations.rb +37 -0
  154. data/db/migrate/20180112053247_create_decidim_consultations_questions.rb +35 -0
  155. data/db/migrate/20180115132000_add_end_voting_date_to_decidim_consultations.rb +18 -0
  156. data/db/migrate/20180115170933_add_slug_to_decidim_consultations_questions.rb +32 -0
  157. data/db/migrate/20180119084217_create_decidim_consultations_votes.rb +17 -0
  158. data/db/migrate/20180119084331_add_votes_count_to_decidim_consultations_question.rb +7 -0
  159. data/db/migrate/20180122113155_add_origin_scope_to_decidim_consultations_questions.rb +8 -0
  160. data/db/migrate/20180122113400_add_origin_title_to_decidim_consultations_questions.rb +8 -0
  161. data/db/migrate/20180122113447_add_origin_string_to_decidim_consultations_questions.rb +7 -0
  162. data/db/migrate/20180126142459_add_enable_highlighted_banner_to_decidim_consultations.rb +7 -0
  163. data/db/migrate/20180129063438_add_i_frame_url_to_decidim_consultations_questions.rb +8 -0
  164. data/db/migrate/20180129063700_create_decidim_consultations_responses.rb +14 -0
  165. data/db/migrate/20180129122226_rename_decidim_consultations_vote_to_decidim_consultations_endorsement.rb +7 -0
  166. data/db/migrate/20180129122504_rename_decidim_consultations_questions_votes_count_to_endorsements_count.rb +7 -0
  167. data/db/migrate/20180130060754_add_responses_count_to_decidim_consultations_questions.rb +22 -0
  168. data/db/migrate/20180130110449_rename_vote_related_attributes.rb +9 -0
  169. data/db/migrate/20180130142018_add_decidim_user_group_id_to_decidim_consultations_endorsements.rb +7 -0
  170. data/db/migrate/20180130142411_rename_vote_indexes_to_endorsement_indexes.rb +36 -0
  171. data/db/migrate/20180131083844_add_response_to_decidim_consultations_endorsements.rb +10 -0
  172. data/db/migrate/20180201135823_rename_endorsement_to_vote.rb +23 -0
  173. data/db/migrate/20180202050920_add_hero_image_to_decidim_consultations_question.rb +8 -0
  174. data/db/migrate/20180202085309_add_results_published_at_to_decidim_consultations.rb +7 -0
  175. data/db/migrate/20180202133655_add_votes_count_to_decidim_consultations_response.rb +7 -0
  176. data/db/migrate/20180212100503_remove_enable_highlighted_banner_flag.rb +7 -0
  177. data/db/migrate/20180219092120_add_order_to_decidim_consultations_questions.rb +7 -0
  178. data/db/migrate/20180320100658_add_introductory_image_to_decidim_consultations.rb +7 -0
  179. data/db/seeds/Exampledocument.pdf +0 -0
  180. data/db/seeds/city.jpeg +0 -0
  181. data/db/seeds/city2.jpeg +0 -0
  182. data/db/seeds/homepage_image.jpg +0 -0
  183. data/lib/decidim/consultations.rb +18 -0
  184. data/lib/decidim/consultations/admin.rb +10 -0
  185. data/lib/decidim/consultations/admin_engine.rb +72 -0
  186. data/lib/decidim/consultations/engine.rb +83 -0
  187. data/lib/decidim/consultations/participatory_space.rb +171 -0
  188. data/lib/decidim/consultations/test/factories.rb +104 -0
  189. data/lib/decidim/consultations/version.rb +9 -0
  190. metadata +288 -0
@@ -0,0 +1,13 @@
1
+ //whole banner is a link
2
+ .consultations-banner{
3
+ color: inherit;
4
+
5
+ &:hover,
6
+ &:active{
7
+ color: $primary;
8
+ }
9
+ }
10
+
11
+ .consultations-banner__action{
12
+ margin-bottom: 0;
13
+ }
@@ -0,0 +1,17 @@
1
+ .card--process__column .consultations-card__image{
2
+ min-height: 0;
3
+
4
+ &::after{
5
+ display: none;
6
+ }
7
+
8
+ > div{
9
+ height: 100%;
10
+ display: flex;
11
+ align-items: center;
12
+ }
13
+
14
+ .button{
15
+ margin-bottom: 0;
16
+ }
17
+ }
@@ -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
+ }
@@ -0,0 +1,15 @@
1
+ .consultations-home-banner{
2
+ .consultations-header__main{
3
+ &::after{
4
+ display: none;
5
+ }
6
+ }
7
+
8
+ .consultations-header__container{
9
+ min-height: 8rem;
10
+ }
11
+
12
+ p:last-child{
13
+ margin-bottom: 0;
14
+ }
15
+ }
@@ -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,11 @@
1
+ .consultations-intro{
2
+ max-width: 40em;
3
+ margin-left: auto;
4
+ margin-right: auto;
5
+ text-align: center;
6
+ margin-bottom: $margin-s;
7
+
8
+ @include breakpoint(medium){
9
+ margin-bottom: $margin-sm;
10
+ }
11
+ }
@@ -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,7 @@
1
+ .consultations-nav{
2
+ margin-bottom: $margin-s;
3
+
4
+ @include breakpoint(medium){
5
+ margin-bottom: $margin-sm;
6
+ }
7
+ }
@@ -0,0 +1,3 @@
1
+ .introductory-image{
2
+ min-height: 290px;
3
+ }
@@ -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