decidim-proposals 0.29.2 → 0.30.0.rc2
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/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +1 -1
- data/app/cells/decidim/proposals/highlighted_proposals_for_component_cell.rb +1 -1
- data/app/cells/decidim/proposals/participatory_text_proposal_cell.rb +1 -1
- data/app/cells/decidim/proposals/proposal_g/show.erb +13 -0
- data/app/cells/decidim/proposals/proposal_g_cell.rb +13 -0
- data/app/cells/decidim/proposals/proposal_history_cell.rb +107 -0
- data/app/cells/decidim/proposals/proposal_l/show.erb +37 -0
- data/app/cells/decidim/proposals/proposal_l_cell.rb +9 -0
- data/app/cells/decidim/proposals/proposal_metadata_cell.rb +2 -2
- data/app/cells/decidim/proposals/proposal_vote/show.erb +75 -0
- data/app/cells/decidim/proposals/proposal_vote_cell.rb +43 -0
- data/app/commands/decidim/proposals/accept_coauthorship.rb +62 -0
- data/app/commands/decidim/proposals/admin/assign_proposals_to_valuator.rb +14 -0
- data/app/commands/decidim/proposals/admin/create_proposal.rb +6 -14
- data/app/commands/decidim/proposals/admin/create_proposal_note.rb +20 -11
- data/app/commands/decidim/proposals/admin/import_proposals.rb +0 -5
- data/app/commands/decidim/proposals/admin/merge_proposals.rb +2 -2
- data/app/commands/decidim/proposals/admin/proposal_notes_methods.rb +48 -0
- data/app/commands/decidim/proposals/admin/reply_proposal_note.rb +92 -0
- data/app/commands/decidim/proposals/admin/split_proposals.rb +2 -2
- data/app/commands/decidim/proposals/admin/update_proposal.rb +10 -16
- data/app/commands/decidim/proposals/admin/update_proposal_taxonomies.rb +34 -0
- data/app/commands/decidim/proposals/cancel_coauthorship.rb +32 -0
- data/app/commands/decidim/proposals/create_collaborative_draft.rb +1 -2
- data/app/commands/decidim/proposals/create_proposal.rb +1 -2
- data/app/commands/decidim/proposals/invite_coauthor.rb +45 -0
- data/app/commands/decidim/proposals/publish_collaborative_draft.rb +1 -2
- data/app/commands/decidim/proposals/reject_coauthorship.rb +54 -0
- data/app/commands/decidim/proposals/update_collaborative_draft.rb +1 -2
- data/app/commands/decidim/proposals/update_proposal.rb +1 -2
- data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +5 -1
- data/app/controllers/concerns/decidim/proposals/admin/needs_interpolations.rb +40 -0
- data/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +55 -2
- data/app/controllers/decidim/proposals/admin/proposal_notes_controller.rb +18 -0
- data/app/controllers/decidim/proposals/admin/proposals_controller.rb +41 -85
- data/app/controllers/decidim/proposals/collaborative_drafts_controller.rb +2 -4
- data/app/controllers/decidim/proposals/invite_coauthors_controller.rb +87 -0
- data/app/controllers/decidim/proposals/proposals_controller.rb +7 -32
- data/app/events/decidim/proposals/accepted_coauthorship_event.rb +8 -0
- data/app/events/decidim/proposals/admin/proposal_assigned_to_valuator_event.rb +27 -0
- data/app/events/decidim/proposals/admin/proposal_note_created_event.rb +5 -0
- data/app/events/decidim/proposals/coauthor_accepted_invite_event.rb +49 -0
- data/app/events/decidim/proposals/coauthor_invited_event.rb +45 -0
- data/app/events/decidim/proposals/coauthor_rejected_invite_event.rb +8 -0
- data/app/events/decidim/proposals/rejected_coauthorship_event.rb +8 -0
- data/app/events/decidim/proposals/update_proposal_taxonomies_event.rb +9 -0
- data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +1 -0
- data/app/forms/decidim/proposals/admin/proposal_base_form.rb +3 -31
- data/app/forms/decidim/proposals/admin/proposal_form.rb +11 -6
- data/app/forms/decidim/proposals/admin/proposals_import_form.rb +0 -5
- data/app/forms/decidim/proposals/collaborative_draft_form.rb +0 -8
- data/app/forms/decidim/proposals/proposal_form.rb +5 -32
- data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +25 -0
- data/app/helpers/decidim/proposals/admin/proposals_helper.rb +0 -1
- data/app/helpers/decidim/proposals/application_helper.rb +24 -14
- data/app/helpers/decidim/proposals/collaborative_draft_helper.rb +7 -7
- data/app/helpers/decidim/proposals/map_helper.rb +0 -18
- data/app/helpers/decidim/proposals/proposal_votes_helper.rb +15 -2
- data/app/jobs/decidim/proposals/admin/proposal_answer_job.rb +20 -0
- data/app/models/decidim/proposals/collaborative_draft.rb +10 -1
- data/app/models/decidim/proposals/proposal.rb +66 -5
- data/app/models/decidim/proposals/proposal_note.rb +11 -0
- data/app/models/decidim/proposals/proposal_state.rb +1 -1
- data/app/packs/entrypoints/decidim_proposals.js +1 -0
- data/app/packs/entrypoints/decidim_proposals_geocoding.js +2 -0
- data/app/packs/src/decidim/proposals/admin/proposals.js +16 -1
- data/app/packs/src/decidim/proposals/exit_handler.js +73 -0
- data/app/packs/stylesheets/decidim/proposals/proposals.scss +248 -3
- data/app/permissions/decidim/proposals/admin/permissions.rb +2 -5
- data/app/permissions/decidim/proposals/permissions.rb +42 -0
- data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +1 -1
- data/app/presenters/decidim/proposals/proposal_presenter.rb +1 -1
- data/app/queries/decidim/proposals/filtered_proposals.rb +2 -2
- data/app/queries/decidim/proposals/metrics/accepted_proposals_metric_manage.rb +2 -2
- data/app/queries/decidim/proposals/metrics/endorsements_metric_manage.rb +10 -10
- data/app/queries/decidim/proposals/metrics/proposal_followers_metric_measure.rb +4 -4
- data/app/queries/decidim/proposals/metrics/proposal_participants_metric_measure.rb +6 -6
- data/app/queries/decidim/proposals/metrics/proposals_metric_manage.rb +6 -6
- data/app/queries/decidim/proposals/metrics/votes_metric_manage.rb +6 -6
- data/app/services/decidim/proposals/proposal_builder.rb +1 -1
- data/app/views/decidim/proposals/admin/proposal_notes/_form.html.erb +3 -3
- data/app/views/decidim/proposals/admin/proposal_notes/_proposal_note.html.erb +28 -0
- data/app/views/decidim/proposals/admin/proposal_notes/_proposal_note_reply.html.erb +9 -0
- data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes.html.erb +4 -28
- data/app/views/decidim/proposals/admin/proposal_states/_form.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/_actions.html.erb +21 -0
- data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +3 -2
- data/app/views/decidim/proposals/admin/proposals/_form.html.erb +17 -24
- data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +12 -28
- data/app/views/decidim/proposals/admin/proposals/_proposals-thead.html.erb +45 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_apply_answer_template.html.erb +22 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +15 -11
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_taxonomy_change.html.erb +23 -0
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +17 -48
- data/app/views/decidim/proposals/admin/proposals/manage_trash.html.erb +18 -0
- data/app/views/decidim/proposals/admin/proposals/publish_answers.js.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/show.html.erb +14 -26
- data/app/views/decidim/proposals/admin/proposals/update_attribute.js.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals_imports/new.html.erb +0 -3
- data/app/views/decidim/proposals/collaborative_drafts/_collaborative_actions.html.erb +9 -0
- data/app/views/decidim/proposals/collaborative_drafts/_collaborative_draft_aside.html.erb +0 -15
- data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +4 -6
- data/app/views/decidim/proposals/collaborative_drafts/index.html.erb +6 -2
- data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +27 -11
- data/app/views/decidim/proposals/proposal_votes/update_buttons_and_counters.js.erb +29 -9
- data/app/views/decidim/proposals/proposals/_actions.html.erb +4 -7
- data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +17 -22
- data/app/views/decidim/proposals/proposals/_exit_modal.html.erb +17 -0
- data/app/views/decidim/proposals/proposals/_notification_alert_box.html.erb +1 -0
- data/app/views/decidim/proposals/proposals/_proposal_actions.html.erb +19 -0
- data/app/views/decidim/proposals/proposals/_proposal_aside.html.erb +9 -32
- data/app/views/decidim/proposals/proposals/_proposal_voting_rules.html.erb +33 -0
- data/app/views/decidim/proposals/proposals/_remaining_votes_count.html.erb +2 -2
- data/app/views/decidim/proposals/proposals/_remaining_votes_notification.html.erb +12 -0
- data/app/views/decidim/proposals/proposals/_update_proposal_voting_rules.html.erb +6 -0
- data/app/views/decidim/proposals/proposals/_vote_button.html.erb +12 -8
- data/app/views/decidim/proposals/proposals/_votes_count.html.erb +2 -1
- data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +1 -7
- data/app/views/decidim/proposals/proposals/index.html.erb +10 -18
- data/app/views/decidim/proposals/proposals/index.js.erb +1 -1
- data/app/views/decidim/proposals/proposals/participatory_texts/_proposal_vote_button.html.erb +3 -1
- data/app/views/decidim/proposals/proposals/show.html.erb +35 -15
- data/config/locales/ar.yml +18 -72
- data/config/locales/bg.yml +7 -89
- data/config/locales/bs-BA.yml +0 -13
- data/config/locales/ca.yml +212 -72
- data/config/locales/cs.yml +213 -73
- data/config/locales/de.yml +215 -75
- data/config/locales/el.yml +8 -82
- data/config/locales/en.yml +209 -69
- data/config/locales/es-MX.yml +213 -73
- data/config/locales/es-PY.yml +213 -73
- data/config/locales/es.yml +215 -75
- data/config/locales/eu.yml +217 -78
- data/config/locales/fi-plain.yml +216 -75
- data/config/locales/fi.yml +216 -75
- data/config/locales/fr-CA.yml +118 -87
- data/config/locales/fr.yml +118 -87
- data/config/locales/ga-IE.yml +0 -19
- data/config/locales/gl.yml +8 -43
- data/config/locales/hu.yml +6 -66
- data/config/locales/id-ID.yml +8 -40
- data/config/locales/is-IS.yml +0 -14
- data/config/locales/it.yml +8 -53
- data/config/locales/ja.yml +162 -87
- data/config/locales/lt.yml +8 -83
- data/config/locales/lv.yml +8 -50
- data/config/locales/nl.yml +6 -55
- data/config/locales/no.yml +8 -42
- data/config/locales/pl.yml +6 -88
- data/config/locales/pt-BR.yml +6 -74
- data/config/locales/pt.yml +8 -54
- data/config/locales/ro-RO.yml +10 -54
- data/config/locales/ru.yml +0 -18
- data/config/locales/sk.yml +8 -50
- data/config/locales/sr-CS.yml +0 -14
- data/config/locales/sv.yml +128 -85
- data/config/locales/tr-TR.yml +8 -51
- data/config/locales/uk.yml +0 -18
- data/config/locales/zh-CN.yml +8 -51
- data/config/locales/zh-TW.yml +8 -84
- data/db/migrate/20171220084719_add_published_at_to_proposals.rb +1 -1
- data/db/migrate/20181016132225_add_organization_as_author.rb +1 -1
- data/db/migrate/20200120215928_move_proposal_endorsements_to_core_endorsements.rb +1 -1
- data/db/migrate/20200827154156_add_commentable_counter_cache_to_proposals.rb +3 -3
- data/db/migrate/20210310102839_add_followable_counter_cache_to_proposals.rb +1 -1
- data/db/migrate/20240110203504_create_default_proposal_states.rb +1 -1
- data/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb +1 -1
- data/db/migrate/20240617091140_add_email_on_assigned_proposals_to_users.rb +7 -0
- data/db/migrate/20240617170052_add_parent_relation_to_decidim_proposal_notes.rb +7 -0
- data/db/migrate/20240828103755_add_deleted_at_to_decidim_proposals_proposals.rb +8 -0
- data/decidim-proposals.gemspec +1 -1
- data/lib/decidim/api/functions/proposal_finder_helper.rb +12 -0
- data/lib/decidim/api/functions/proposal_list_helper.rb +12 -0
- data/lib/decidim/api/proposal_type.rb +17 -25
- data/lib/decidim/api/proposals_type.rb +4 -19
- data/lib/decidim/proposals/admin_engine.rb +12 -3
- data/lib/decidim/proposals/admin_filter.rb +3 -6
- data/lib/decidim/proposals/component.rb +4 -5
- data/lib/decidim/proposals/download_your_data_proposal_serializer.rb +15 -0
- data/lib/decidim/proposals/engine.rb +5 -0
- data/lib/decidim/proposals/import/proposal_creator.rb +4 -4
- data/lib/decidim/proposals/proposal_serializer.rb +12 -29
- data/lib/decidim/proposals/seeds.rb +21 -17
- data/lib/decidim/proposals/test/factories.rb +2 -1
- data/lib/decidim/proposals/version.rb +1 -1
- data/lib/decidim/proposals.rb +4 -0
- metadata +65 -29
- data/app/commands/decidim/proposals/admin/update_proposal_category.rb +0 -70
- data/app/commands/decidim/proposals/admin/update_proposal_scope.rb +0 -75
- data/app/events/decidim/proposals/admin/update_proposal_category_event.rb +0 -11
- data/app/events/decidim/proposals/admin/update_proposal_scope_event.rb +0 -11
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_recategorize.html.erb +0 -15
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_scope-change.html.erb +0 -21
- data/app/views/decidim/proposals/collaborative_drafts/_actions.html.erb +0 -7
@@ -103,11 +103,213 @@
|
|
103
103
|
}
|
104
104
|
|
105
105
|
&__grid-text-title {
|
106
|
-
@apply flex justify-between flex-row md:flex-col
|
106
|
+
@apply flex justify-between items-start gap-y-2 flex-row md:flex-col lg:flex-row;
|
107
107
|
}
|
108
108
|
|
109
|
-
&__list-
|
110
|
-
|
109
|
+
&__list-list {
|
110
|
+
.card__proposals-item {
|
111
|
+
@apply border-l-4 rounded-[10px] md:rounded-md border-[#F5F5F5] hover:border-tertiary focus-visible:border-tertiary flex flex-col md:items-center md:flex-row md:justify-between min-h-0 md:min-h-[127px] lg:min-h-[83px];
|
112
|
+
|
113
|
+
.card__list {
|
114
|
+
@apply border-none md:flex-1 md:items-center mb-2.5 md:mb-0;
|
115
|
+
|
116
|
+
&-metadata {
|
117
|
+
@apply gap-y-1 md:flex md:flex-row md:items-center md:gap-x-2 md:mt-0.5;
|
118
|
+
|
119
|
+
& > div {
|
120
|
+
@apply md:pl-0 md:pr-2;
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
.card__proposals-votes {
|
126
|
+
@apply flex md:flex-col lg:flex-row bg-[#F5F5F5] justify-around md:flex-[0.6] lg:flex-[0.8] items-center md:items-stretch lg:items-center lg:min-w-[196px] h-[68px] md:h-auto lg:h-[68px];
|
127
|
+
|
128
|
+
button {
|
129
|
+
@apply bg-[var(--secondary)];
|
130
|
+
|
131
|
+
&[disabled] {
|
132
|
+
@apply opacity-50 text-white border-current cursor-not-allowed;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
|
136
|
+
&-limited {
|
137
|
+
@apply flex flex-col p-0 md:p-2 lg:p-0 md:flex-row md:flex-wrap lg:flex-col lg:flex-nowrap flex-1 md:flex-none lg:flex-1 justify-center;
|
138
|
+
|
139
|
+
.proposals__aside-progress {
|
140
|
+
@apply flex flex-col w-[80%] items-center md:order-1 lg:order-none md:flex-[1_1_100%] lg:flex-none;
|
141
|
+
}
|
142
|
+
|
143
|
+
.progress-bar {
|
144
|
+
&__units {
|
145
|
+
@apply md:order-none;
|
146
|
+
}
|
147
|
+
|
148
|
+
&__number {
|
149
|
+
span {
|
150
|
+
@apply text-sm;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
&-unlimited {
|
157
|
+
@apply flex flex-row flex-1 lg:flex-1 justify-center md:flex-none;
|
158
|
+
|
159
|
+
.progress-bar__number {
|
160
|
+
span {
|
161
|
+
@apply text-xl;
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
.progress-bar {
|
167
|
+
&__number {
|
168
|
+
@apply flex justify-center items-center mx-1;
|
169
|
+
|
170
|
+
span {
|
171
|
+
@apply leading-6 font-semibold #{!important};
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
&__units {
|
176
|
+
@apply text-sm leading-[22px] mx-1;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
&-container {
|
181
|
+
@apply flex-1 md:w-full md:flex-none p-2 lg:p-0 lg:m-3 lg:w-[164px];
|
182
|
+
|
183
|
+
button {
|
184
|
+
@apply text-sm leading-[18px] font-semibold py-1;
|
185
|
+
}
|
186
|
+
}
|
187
|
+
|
188
|
+
&-hidden {
|
189
|
+
@apply md:flex-none;
|
190
|
+
|
191
|
+
.card__proposals-votes-container {
|
192
|
+
@apply md:flex-none md:w-[130px] lg:w-[164px] lg:p-0;
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
199
|
+
&__grid-grid {
|
200
|
+
@apply md:gap-4;
|
201
|
+
|
202
|
+
.card__proposals-item {
|
203
|
+
@apply flex flex-col justify-between border-solid border-[#D3D5D9] border rounded;
|
204
|
+
|
205
|
+
.card__grid {
|
206
|
+
@apply mb-2.5 md:mb-0 flex-1 justify-between;
|
207
|
+
|
208
|
+
box-shadow: none !important;
|
209
|
+
|
210
|
+
&-text {
|
211
|
+
@apply justify-end lg:gap-y-8;
|
212
|
+
}
|
213
|
+
|
214
|
+
&-metadata {
|
215
|
+
@apply mt-0 md:flex md:flex-row;
|
216
|
+
|
217
|
+
> :first-child {
|
218
|
+
flex: 1 !important;
|
219
|
+
}
|
220
|
+
|
221
|
+
> :not(:first-child) {
|
222
|
+
@apply border-r border-[#D3D5D9];
|
223
|
+
}
|
224
|
+
|
225
|
+
& > div {
|
226
|
+
@apply px-2 md:px-2;
|
227
|
+
}
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
.card__proposals-votes {
|
232
|
+
@apply flex bg-[#F5F5F5EE] justify-around items-center px-4 h-[68px];
|
233
|
+
|
234
|
+
button {
|
235
|
+
@apply bg-[var(--secondary)];
|
236
|
+
|
237
|
+
&[disabled] {
|
238
|
+
@apply opacity-50 text-white border-current cursor-not-allowed;
|
239
|
+
}
|
240
|
+
}
|
241
|
+
|
242
|
+
&-limited {
|
243
|
+
@apply flex flex-col lg:items-start flex-1 md:mr-4 lg:mr-0;
|
244
|
+
|
245
|
+
.proposals__aside-progress {
|
246
|
+
@apply flex flex-col-reverse w-[80%] items-center;
|
247
|
+
}
|
248
|
+
|
249
|
+
.progress-bar {
|
250
|
+
&__number {
|
251
|
+
@apply lg:w-[80%];
|
252
|
+
|
253
|
+
span {
|
254
|
+
@apply text-sm;
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
&__units {
|
259
|
+
@apply flex justify-center w-[80%];
|
260
|
+
}
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
&-unlimited {
|
265
|
+
@apply flex flex-row flex-1 lg:flex-1 md:flex-none md:mr-4 lg:mr-0;
|
266
|
+
|
267
|
+
.progress-bar__number {
|
268
|
+
span {
|
269
|
+
@apply text-xl;
|
270
|
+
}
|
271
|
+
}
|
272
|
+
}
|
273
|
+
|
274
|
+
.progress-bar {
|
275
|
+
&__number {
|
276
|
+
@apply flex justify-center items-center;
|
277
|
+
|
278
|
+
span {
|
279
|
+
@apply leading-6 font-semibold #{!important};
|
280
|
+
}
|
281
|
+
}
|
282
|
+
|
283
|
+
&__units {
|
284
|
+
@apply text-sm leading-[22px] mx-1;
|
285
|
+
}
|
286
|
+
}
|
287
|
+
|
288
|
+
&-container {
|
289
|
+
@apply flex-1 lg:w-[164px] lg:flex-none;
|
290
|
+
|
291
|
+
button {
|
292
|
+
@apply text-sm leading-[18px] font-semibold py-1;
|
293
|
+
|
294
|
+
.already-voted-icon {
|
295
|
+
@apply w-4 h-4;
|
296
|
+
}
|
297
|
+
}
|
298
|
+
}
|
299
|
+
|
300
|
+
&-hidden {
|
301
|
+
@apply md:justify-end;
|
302
|
+
|
303
|
+
.card__proposals-votes-container {
|
304
|
+
@apply md:flex-none md:w-[130px] lg:w-[164px];
|
305
|
+
|
306
|
+
button {
|
307
|
+
@apply md:px-0 lg:px-6;
|
308
|
+
}
|
309
|
+
}
|
310
|
+
}
|
311
|
+
}
|
312
|
+
}
|
111
313
|
}
|
112
314
|
}
|
113
315
|
|
@@ -129,3 +331,46 @@
|
|
129
331
|
}
|
130
332
|
}
|
131
333
|
}
|
334
|
+
|
335
|
+
#proposal-voting-rules {
|
336
|
+
[id="dropdown-menu-proposal-voting-rules"] {
|
337
|
+
&[aria-hidden="true"] {
|
338
|
+
@apply hidden;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
|
342
|
+
[data-target="dropdown-menu-proposal-voting-rules"] {
|
343
|
+
@apply w-full flex items-center justify-between gap-2 p-2 first-of-type:[&>svg]:block last-of-type:[&>svg]:hidden;
|
344
|
+
|
345
|
+
& > span {
|
346
|
+
@apply hidden font-semibold text-secondary;
|
347
|
+
|
348
|
+
&:only-of-type,
|
349
|
+
&.is-active {
|
350
|
+
@apply flex items-center gap-2 [&_svg]:fill-current;
|
351
|
+
}
|
352
|
+
}
|
353
|
+
|
354
|
+
> svg {
|
355
|
+
@apply w-6 h-6 flex-none text-secondary fill-current;
|
356
|
+
}
|
357
|
+
|
358
|
+
&[aria-expanded="false"] > svg:last-of-type,
|
359
|
+
&[aria-expanded="true"] > svg:first-of-type {
|
360
|
+
@apply hidden;
|
361
|
+
}
|
362
|
+
|
363
|
+
&[aria-expanded="true"] > svg:last-of-type,
|
364
|
+
&[aria-expanded="false"] > svg:first-of-type {
|
365
|
+
@apply block;
|
366
|
+
}
|
367
|
+
}
|
368
|
+
}
|
369
|
+
|
370
|
+
.layout-item-complementary {
|
371
|
+
@apply container grid grid-cols-1 lg:grid-cols-12;
|
372
|
+
|
373
|
+
.item_voting_rules {
|
374
|
+
@apply lg:col-start-2 lg:col-span-10;
|
375
|
+
}
|
376
|
+
}
|
@@ -30,11 +30,8 @@ module Decidim
|
|
30
30
|
# time limit.
|
31
31
|
allow! if permission_action.subject == :proposal && permission_action.action == :edit && admin_edition_is_available?
|
32
32
|
|
33
|
-
# Every user allowed by the space can update the
|
34
|
-
allow! if permission_action.subject == :
|
35
|
-
|
36
|
-
# Every user allowed by the space can update the scope of the proposal
|
37
|
-
allow! if permission_action.subject == :proposal_scope && permission_action.action == :update
|
33
|
+
# Every user allowed by the space can update the taxonomy of the proposal
|
34
|
+
allow! if permission_action.subject == :proposal_taxonomy && permission_action.action == :update
|
38
35
|
|
39
36
|
# Every user allowed by the space can import proposals from another_component
|
40
37
|
allow! if permission_action.subject == :proposals && permission_action.action == :import
|
@@ -16,6 +16,8 @@ module Decidim
|
|
16
16
|
apply_proposal_permissions(permission_action) unless permission_action.action == :read
|
17
17
|
when :collaborative_draft
|
18
18
|
apply_collaborative_draft_permissions(permission_action)
|
19
|
+
when :proposal_coauthor_invites
|
20
|
+
apply_proposal_coauthor_invites(permission_action)
|
19
21
|
else
|
20
22
|
permission_action
|
21
23
|
end
|
@@ -159,6 +161,46 @@ module Decidim
|
|
159
161
|
|
160
162
|
toggle_allow(collaborative_draft.created_by?(user))
|
161
163
|
end
|
164
|
+
|
165
|
+
def apply_proposal_coauthor_invites(permission_action)
|
166
|
+
return toggle_allow(false) unless coauthor
|
167
|
+
return toggle_allow(false) unless proposal
|
168
|
+
|
169
|
+
case permission_action.action
|
170
|
+
when :invite
|
171
|
+
toggle_allow(valid_coauthor? && !notification_already_sent?)
|
172
|
+
when :cancel
|
173
|
+
toggle_allow(valid_coauthor? && notification_already_sent?)
|
174
|
+
when :accept, :decline
|
175
|
+
toggle_allow(can_be_coauthor?)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def coauthor
|
180
|
+
context.fetch(:coauthor, nil)
|
181
|
+
end
|
182
|
+
|
183
|
+
def notification_already_sent?
|
184
|
+
@notification_already_sent ||= proposal.coauthor_invitations_for(coauthor).any?
|
185
|
+
end
|
186
|
+
|
187
|
+
def coauthor_in_comments?
|
188
|
+
@coauthor_in_comments ||= proposal.comments.where(author: coauthor).any?
|
189
|
+
end
|
190
|
+
|
191
|
+
def valid_coauthor?
|
192
|
+
return false unless proposal.authors.include?(user)
|
193
|
+
return false unless proposal.user_has_actions?(coauthor)
|
194
|
+
|
195
|
+
coauthor_in_comments?
|
196
|
+
end
|
197
|
+
|
198
|
+
def can_be_coauthor?
|
199
|
+
return false unless user == coauthor
|
200
|
+
return false unless proposal.user_has_actions?(coauthor)
|
201
|
+
|
202
|
+
notification_already_sent?
|
203
|
+
end
|
162
204
|
end
|
163
205
|
end
|
164
206
|
end
|
@@ -40,7 +40,7 @@ module Decidim
|
|
40
40
|
def title(links: false, extras: true, html_escape: false, all_locales: false)
|
41
41
|
return unless proposal
|
42
42
|
|
43
|
-
super
|
43
|
+
super(proposal.title, links, html_escape, all_locales, extras:)
|
44
44
|
end
|
45
45
|
|
46
46
|
def id_and_title(links: false, extras: true, html_escape: false)
|
@@ -28,8 +28,8 @@ module Decidim
|
|
28
28
|
# by a range of dates.
|
29
29
|
def query
|
30
30
|
proposals = Decidim::Proposals::Proposal.where(component: @components)
|
31
|
-
proposals = proposals.where(
|
32
|
-
proposals = proposals.where(
|
31
|
+
proposals = proposals.where(created_at: @start_at..) if @start_at.present?
|
32
|
+
proposals = proposals.where(created_at: ..@end_at) if @end_at.present?
|
33
33
|
proposals
|
34
34
|
end
|
35
35
|
end
|
@@ -18,13 +18,13 @@ module Decidim
|
|
18
18
|
end
|
19
19
|
@query = Decidim::Proposals::Proposal.where(component: visible_components_from_spaces(spaces)).joins(:component)
|
20
20
|
.left_outer_joins(:category)
|
21
|
-
@query = @query.where(
|
21
|
+
@query = @query.where(decidim_proposals_proposals: { created_at: ..end_time }).accepted
|
22
22
|
@query = @query.group("decidim_categorizations.id", :participatory_space_type, :participatory_space_id)
|
23
23
|
@query
|
24
24
|
end
|
25
25
|
|
26
26
|
def quantity
|
27
|
-
@quantity ||= query.where(
|
27
|
+
@quantity ||= query.where(decidim_proposals_proposals: { created_at: start_time.. }).count
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -13,9 +13,9 @@ module Decidim
|
|
13
13
|
next if cumulative_value.zero?
|
14
14
|
|
15
15
|
quantity_value = quantity[key] || 0
|
16
|
-
|
16
|
+
taxonomy_id, space_type, space_id, proposal_id = key
|
17
17
|
record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
|
18
|
-
organization: @organization,
|
18
|
+
organization: @organization, decidim_taxonomy_id: taxonomy_id,
|
19
19
|
participatory_space_type: space_type, participatory_space_id: space_id,
|
20
20
|
related_object_type: "Decidim::Proposals::Proposal", related_object_id: proposal_id)
|
21
21
|
record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
|
@@ -31,18 +31,18 @@ module Decidim
|
|
31
31
|
components = Decidim::Component.where(participatory_space: retrieve_participatory_spaces).published
|
32
32
|
proposals = Decidim::Proposals::Proposal.where(component: components).not_withdrawn
|
33
33
|
join_components = "INNER JOIN decidim_components ON decidim_components.manifest_name = 'proposals' AND proposals.decidim_component_id = decidim_components.id"
|
34
|
-
|
35
|
-
LEFT OUTER JOIN
|
36
|
-
ON (proposals.id =
|
37
|
-
AND
|
34
|
+
join_taxonomies = <<~EOJOINCATS
|
35
|
+
LEFT OUTER JOIN decidim_taxonomizations
|
36
|
+
ON (proposals.id = decidim_taxonomizations.taxonomizable_id
|
37
|
+
AND decidim_taxonomizations.taxonomizable_type = 'Decidim::Proposals::Proposal')
|
38
38
|
EOJOINCATS
|
39
39
|
@query = Decidim::Endorsement.joins("INNER JOIN decidim_proposals_proposals proposals ON resource_id = proposals.id")
|
40
40
|
.joins(join_components)
|
41
|
-
.joins(
|
41
|
+
.joins(join_taxonomies)
|
42
42
|
.where(resource_id: proposals.pluck(:id))
|
43
43
|
.where(resource_type: Decidim::Proposals::Proposal.name)
|
44
|
-
@query = @query.where(
|
45
|
-
@query = @query.group("
|
44
|
+
@query = @query.where(decidim_endorsements: { created_at: ..end_time })
|
45
|
+
@query = @query.group("decidim_taxonomizations.taxonomy_id",
|
46
46
|
:participatory_space_type,
|
47
47
|
:participatory_space_id,
|
48
48
|
:resource_id)
|
@@ -50,7 +50,7 @@ module Decidim
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def quantity
|
53
|
-
@quantity ||= query.where(
|
53
|
+
@quantity ||= query.where(decidim_endorsements: { created_at: start_time.. }).count
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -30,17 +30,17 @@ module Decidim
|
|
30
30
|
|
31
31
|
def retrieve_proposals_followers(from_start: false)
|
32
32
|
@proposals_followers ||= Decidim::Follow.where(followable: retrieve_proposals).joins(:user)
|
33
|
-
.where(
|
33
|
+
.where(decidim_follows: { created_at: ..end_time })
|
34
34
|
|
35
|
-
return @proposals_followers.where(
|
35
|
+
return @proposals_followers.where(decidim_follows: { created_at: start_time.. }) if from_start
|
36
36
|
|
37
37
|
@proposals_followers
|
38
38
|
end
|
39
39
|
|
40
40
|
def retrieve_drafts_followers(from_start: false)
|
41
41
|
@drafts_followers ||= Decidim::Follow.where(followable: retrieve_collaborative_drafts).joins(:user)
|
42
|
-
.where(
|
43
|
-
return @drafts_followers.where(
|
42
|
+
.where(decidim_follows: { created_at: ..end_time })
|
43
|
+
return @drafts_followers.where(decidim_follows: { created_at: start_time.. }) if from_start
|
44
44
|
|
45
45
|
@drafts_followers
|
46
46
|
end
|
@@ -41,19 +41,19 @@ module Decidim
|
|
41
41
|
"Decidim::Meetings::Meeting"
|
42
42
|
]
|
43
43
|
})
|
44
|
-
.where(
|
44
|
+
.where(decidim_proposals_proposals: { published_at: ..end_time })
|
45
45
|
.not_withdrawn
|
46
46
|
|
47
|
-
return @proposals.where(
|
47
|
+
return @proposals.where(decidim_proposals_proposals: { published_at: start_time.. }) if from_start
|
48
48
|
|
49
49
|
@proposals
|
50
50
|
end
|
51
51
|
|
52
52
|
def retrieve_votes(from_start: false)
|
53
53
|
@votes ||= Decidim::Proposals::ProposalVote.joins(:proposal).where(proposal: retrieve_proposals).joins(:author)
|
54
|
-
.where(
|
54
|
+
.where(decidim_proposals_proposal_votes: { created_at: ..end_time })
|
55
55
|
|
56
|
-
return @votes.where(
|
56
|
+
return @votes.where(decidim_proposals_proposal_votes: { created_at: start_time.. }) if from_start
|
57
57
|
|
58
58
|
@votes
|
59
59
|
end
|
@@ -61,10 +61,10 @@ module Decidim
|
|
61
61
|
def retrieve_endorsements(from_start: false)
|
62
62
|
@endorsements ||= Decidim::Endorsement.joins("INNER JOIN decidim_proposals_proposals proposals ON resource_id = proposals.id")
|
63
63
|
.where(resource: retrieve_proposals)
|
64
|
-
.where(
|
64
|
+
.where(decidim_endorsements: { created_at: ..end_time })
|
65
65
|
.where(decidim_author_type: "Decidim::UserBaseEntity")
|
66
66
|
|
67
|
-
return @endorsements.where(
|
67
|
+
return @endorsements.where(decidim_endorsements: { created_at: start_time.. }) if from_start
|
68
68
|
|
69
69
|
@endorsements
|
70
70
|
end
|
@@ -13,9 +13,9 @@ module Decidim
|
|
13
13
|
next if cumulative_value.zero?
|
14
14
|
|
15
15
|
quantity_value = quantity[key] || 0
|
16
|
-
|
16
|
+
taxonomy_id, space_type, space_id = key
|
17
17
|
record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
|
18
|
-
organization: @organization,
|
18
|
+
organization: @organization, decidim_taxonomy_id: taxonomy_id,
|
19
19
|
participatory_space_type: space_type, participatory_space_id: space_id)
|
20
20
|
record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
|
21
21
|
record.save!
|
@@ -31,16 +31,16 @@ module Decidim
|
|
31
31
|
manifest.participatory_spaces.call(@organization)
|
32
32
|
end
|
33
33
|
@query = Decidim::Proposals::Proposal.where(component: visible_components_from_spaces(spaces)).joins(:component)
|
34
|
-
.left_outer_joins(:
|
35
|
-
@query = @query.where(
|
36
|
-
@query = @query.group("
|
34
|
+
.left_outer_joins(:taxonomizations)
|
35
|
+
@query = @query.where(decidim_proposals_proposals: { published_at: ..end_time }).not_withdrawn.not_hidden
|
36
|
+
@query = @query.group("decidim_taxonomizations.taxonomy_id",
|
37
37
|
:participatory_space_type,
|
38
38
|
:participatory_space_id)
|
39
39
|
@query
|
40
40
|
end
|
41
41
|
|
42
42
|
def quantity
|
43
|
-
@quantity ||= query.where(
|
43
|
+
@quantity ||= query.where(decidim_proposals_proposals: { published_at: start_time.. }).count
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -13,9 +13,9 @@ module Decidim
|
|
13
13
|
next if cumulative_value.zero?
|
14
14
|
|
15
15
|
quantity_value = quantity[key] || 0
|
16
|
-
|
16
|
+
taxonomy_id, space_type, space_id, proposal_id = key
|
17
17
|
record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
|
18
|
-
organization: @organization,
|
18
|
+
organization: @organization, decidim_taxonomy_id: taxonomy_id,
|
19
19
|
participatory_space_type: space_type, participatory_space_id: space_id,
|
20
20
|
related_object_type: "Decidim::Proposals::Proposal", related_object_id: proposal_id)
|
21
21
|
record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
|
@@ -33,10 +33,10 @@ module Decidim
|
|
33
33
|
end
|
34
34
|
proposal_ids = Decidim::Proposals::Proposal.where(component: visible_components_from_spaces(spaces)).not_withdrawn.not_hidden.pluck(:id)
|
35
35
|
@query = Decidim::Proposals::ProposalVote.joins(proposal: :component)
|
36
|
-
.left_outer_joins(proposal: :
|
36
|
+
.left_outer_joins(proposal: :taxonomizations)
|
37
37
|
.where(proposal: proposal_ids)
|
38
|
-
@query = @query.where(
|
39
|
-
@query = @query.group("
|
38
|
+
@query = @query.where(decidim_proposals_proposal_votes: { created_at: ..end_time })
|
39
|
+
@query = @query.group("decidim_taxonomizations.taxonomy_id",
|
40
40
|
:participatory_space_type,
|
41
41
|
:participatory_space_id,
|
42
42
|
:decidim_proposal_id)
|
@@ -44,7 +44,7 @@ module Decidim
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def quantity
|
47
|
-
@quantity ||= query.where(
|
47
|
+
@quantity ||= query.where(decidim_proposals_proposal_votes: { created_at: start_time.. }).count
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<%= decidim_form_for(@notes_form, url:
|
1
|
+
<%= decidim_form_for(@notes_form, url: form_path, html: { class: "form form-defaults new_proposal_note flex flex-col mt-4" }) do |f| %>
|
2
2
|
<div class="form__wrapper">
|
3
|
-
<%= f.text_area :body, rows: 4, label: t(".note"), class: "
|
3
|
+
<%= f.text_area :body, rows: 4, label: t(".note"), class: "js-mentions" %>
|
4
4
|
</div>
|
5
5
|
|
6
|
-
<%= f.submit t(".submit"), class: "button button__sm button__secondary" %>
|
6
|
+
<%= f.submit t(".submit"), class: "button button__sm button__secondary ml-auto" %>
|
7
7
|
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% reply_id = "note#{proposal_note.id}-reply" %>
|
2
|
+
|
3
|
+
<div class="comment">
|
4
|
+
<div class="comment__header">
|
5
|
+
<%= cell "decidim/author", present(proposal_note.author), from: proposal_note, context_actions: [:date], tooltip: false, show_icons: false %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="comment__content">
|
9
|
+
<%= simple_format proposal_note.formatted_body %>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="comment-actions">
|
13
|
+
<button class="button button__sm button__text-secondary" data-controls="panel-<%= reply_id %>" id="panel-<%= reply_id %>-trigger">
|
14
|
+
<%= icon "chat-1-line" %>
|
15
|
+
<span class="font-normal"><%= t("decidim.components.comment.reply") %></span>
|
16
|
+
<%= icon "close-circle-line" %>
|
17
|
+
<span class="font-normal"><%= t("decidim.components.comment.cancel_reply") %></span>
|
18
|
+
</button>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="mt-6 space-y-2">
|
22
|
+
<%= render partial: "decidim/proposals/admin/proposal_notes/proposal_note_reply", collection: proposal_note.replies %>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div id="panel-<%= reply_id %>" class="add-comment" data-additional-reply>
|
26
|
+
<%= render partial: "decidim/proposals/admin/proposal_notes/form", locals: { form_path: reply_proposal_proposal_note_path(proposal, proposal_note, @notes_form) } %>
|
27
|
+
</div>
|
28
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="comment-reply">
|
2
|
+
<div class="comment__header">
|
3
|
+
<%= cell "decidim/author", present(proposal_note_reply.author), from: proposal_note_reply, context_actions: [:date], tooltip: false, show_icons: false %>
|
4
|
+
</div>
|
5
|
+
|
6
|
+
<div class="comment__content">
|
7
|
+
<%= simple_format proposal_note_reply.formatted_body %>
|
8
|
+
</div>
|
9
|
+
</div>
|
@@ -1,37 +1,13 @@
|
|
1
1
|
<div class="component__show_notes" data-component="accordion" id="accordion-notes">
|
2
|
-
<button class="card-divider-button" data-controls="panel-notes"
|
2
|
+
<button type="button" class="card-divider-button" data-controls="panel-notes">
|
3
3
|
<%= icon "arrow-right-s-line" %>
|
4
4
|
<h2 class="card-title">
|
5
5
|
<%= t("title", scope: "decidim.proposals.admin.proposal_notes") %>
|
6
6
|
</h2>
|
7
7
|
</button>
|
8
|
+
|
8
9
|
<div id="panel-notes">
|
9
|
-
|
10
|
-
|
11
|
-
<div class="comment">
|
12
|
-
<div class="comment__header">
|
13
|
-
<div>
|
14
|
-
<div>
|
15
|
-
<div class="author">
|
16
|
-
<strong><span class="author__name"><%= note.author.name %></span></strong>
|
17
|
-
<span><%= l note.created_at, format: :decidim_short %></span>
|
18
|
-
</div>
|
19
|
-
</div>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
<div class="comment__content">
|
23
|
-
<%= simple_format note.body %>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
<% end %>
|
27
|
-
</div>
|
28
|
-
<div class="card add-comment">
|
29
|
-
<div class="card-divider">
|
30
|
-
<h2 class="card-title"><%= t("leave_your_note", scope: "decidim.proposals.admin.proposal_notes") %></h2>
|
31
|
-
</div>
|
32
|
-
<div class="card-section">
|
33
|
-
<%= render "decidim/proposals/admin/proposal_notes/form" %>
|
34
|
-
</div>
|
35
|
-
</div>
|
10
|
+
<%= render partial: "decidim/proposals/admin/proposal_notes/proposal_note", collection: proposal.notes.not_reply %>
|
11
|
+
<%= render partial: "decidim/proposals/admin/proposal_notes/form", locals: { form_path: proposal_proposal_notes_path(proposal, @notes_form) } %>
|
36
12
|
</div>
|
37
13
|
</div>
|