decidim-centers 0.1.1
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 +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +144 -0
- data/Rakefile +40 -0
- data/app/commands/concerns/decidim/centers/create_omniauth_registration_override.rb +42 -0
- data/app/commands/concerns/decidim/centers/create_registration_override.rb +32 -0
- data/app/commands/concerns/decidim/centers/publish_center_update_event.rb +20 -0
- data/app/commands/concerns/decidim/centers/update_account_override.rb +35 -0
- data/app/commands/decidim/centers/admin/create_center.rb +50 -0
- data/app/commands/decidim/centers/admin/destroy_center.rb +47 -0
- data/app/commands/decidim/centers/admin/update_center.rb +47 -0
- data/app/commands/decidim/centers/create_or_update_center_user.rb +44 -0
- data/app/commands/decidim/centers/create_or_update_scope_user.rb +44 -0
- data/app/controllers/concerns/decidim/centers/admin/needs_select2_snippets.rb +35 -0
- data/app/controllers/concerns/decidim/centers/devise/omniauth_registrations_controller_override.rb +21 -0
- data/app/controllers/concerns/decidim/centers/devise/sessions_controller_override.rb +21 -0
- data/app/controllers/concerns/decidim/centers/with_scopes_helper.rb +15 -0
- data/app/controllers/decidim/centers/admin/application_controller.rb +24 -0
- data/app/controllers/decidim/centers/admin/centers_controller.rb +106 -0
- data/app/controllers/decidim/centers/admin/scopes_controller.rb +40 -0
- data/app/forms/concerns/decidim/centers/account_form_override.rb +36 -0
- data/app/forms/decidim/centers/admin/center_form.rb +18 -0
- data/app/forms/decidim/centers/verifications/center.rb +33 -0
- data/app/helpers/decidim/centers/application_helper.rb +17 -0
- data/app/jobs/decidim/centers/auto_verification_job.rb +46 -0
- data/app/jobs/decidim/centers/sync_center_user_job.rb +29 -0
- data/app/jobs/decidim/centers/sync_scope_user_job.rb +29 -0
- data/app/models/concerns/decidim/centers/unique_by_user.rb +19 -0
- data/app/models/concerns/decidim/centers/user_override.rb +33 -0
- data/app/models/decidim/centers/application_record.rb +10 -0
- data/app/models/decidim/centers/center.rb +25 -0
- data/app/models/decidim/centers/center_user.rb +28 -0
- data/app/models/decidim/centers/scope_user.rb +28 -0
- data/app/overrides/decidim/account/show/centers.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/omniauth_registrations/new/centers.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/registrations/new/centers.html.erb.deface +3 -0
- data/app/packs/entrypoints/decidim_centers_admin_select2.js +2 -0
- data/app/packs/src/decidim/centers/admin/resource_permissions_select2.js +68 -0
- data/app/packs/stylesheets/vendor/select2_foundation_theme.scss +345 -0
- data/app/permissions/decidim/centers/admin/permissions.rb +19 -0
- data/app/presenters/decidim/centers/admin_log/center_presenter.rb +29 -0
- data/app/views/decidim/centers/_profile_form.html.erb +5 -0
- data/app/views/decidim/centers/_registration_form.html.erb +11 -0
- data/app/views/decidim/centers/admin/centers/_form.html.erb +10 -0
- data/app/views/decidim/centers/admin/centers/edit.html.erb +8 -0
- data/app/views/decidim/centers/admin/centers/index.html.erb +45 -0
- data/app/views/decidim/centers/admin/centers/new.html.erb +8 -0
- data/config/assets.rb +8 -0
- data/config/i18n-tasks.yml +11 -0
- data/config/locales/en.yml +51 -0
- data/db/migrate/20231129114029_create_decidim_centers_centers.rb +13 -0
- data/db/migrate/20231130125631_create_decidim_centers_center_users.rb +12 -0
- data/db/migrate/20231205153627_create_decidim_centers_scope_users.rb +12 -0
- data/lib/decidim/centers/admin.rb +10 -0
- data/lib/decidim/centers/admin_engine.rb +40 -0
- data/lib/decidim/centers/engine.rb +79 -0
- data/lib/decidim/centers/test/factories.rb +25 -0
- data/lib/decidim/centers/test/shared_contexts.rb +22 -0
- data/lib/decidim/centers/verifications/center_action_authorizer.rb +49 -0
- data/lib/decidim/centers/verifications.rb +11 -0
- data/lib/decidim/centers/version.rb +10 -0
- data/lib/decidim/centers.rb +19 -0
- metadata +138 -0
@@ -0,0 +1,345 @@
|
|
1
|
+
span.select2-container--foundation {
|
2
|
+
vertical-align: top;
|
3
|
+
}
|
4
|
+
|
5
|
+
span.select2-container--foundation .selection {
|
6
|
+
margin: 0 0 1rem;
|
7
|
+
}
|
8
|
+
|
9
|
+
.select2-container--foundation {
|
10
|
+
/**
|
11
|
+
* Search field in the Select2 dropdown.
|
12
|
+
*/
|
13
|
+
|
14
|
+
/**
|
15
|
+
* No outline for all search fields - in the dropdown
|
16
|
+
* and inline in multi Select2s.
|
17
|
+
*/
|
18
|
+
|
19
|
+
/* Clear the selection. */
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Address disabled Select2 styles.
|
23
|
+
*
|
24
|
+
* @see https://select2.github.io/examples.html#disabled
|
25
|
+
* @see http://getbootstrap.com/css/#forms-control-disabled
|
26
|
+
*/
|
27
|
+
|
28
|
+
/* ------------------------------------*\
|
29
|
+
#DROPDOWN
|
30
|
+
\*------------------------------------ */
|
31
|
+
}
|
32
|
+
|
33
|
+
.select2-container--foundation .select2-selection {
|
34
|
+
background-color: #fefefe;
|
35
|
+
border: 1px solid #cacaca;
|
36
|
+
border-radius: 0;
|
37
|
+
color: #0a0a0a;
|
38
|
+
font-family: inherit;
|
39
|
+
font-size: 1rem;
|
40
|
+
outline: 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
.select2-container--foundation .select2-search--dropdown .select2-search__field {
|
44
|
+
background-color: #fefefe;
|
45
|
+
border: 1px solid #cacaca;
|
46
|
+
border-radius: 0;
|
47
|
+
color: #0a0a0a;
|
48
|
+
font-family: inherit;
|
49
|
+
font-size: 1rem;
|
50
|
+
}
|
51
|
+
|
52
|
+
.select2-container--foundation .select2-search__field {
|
53
|
+
outline: 0;
|
54
|
+
|
55
|
+
/* Firefox 18- */
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Firefox 19+
|
59
|
+
*
|
60
|
+
* @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox
|
61
|
+
*/
|
62
|
+
}
|
63
|
+
|
64
|
+
.select2-container--foundation .select2-search__field::-webkit-input-placeholder {
|
65
|
+
color: #8a8a8a;
|
66
|
+
}
|
67
|
+
|
68
|
+
.select2-container--foundation .select2-search__field:-moz-placeholder {
|
69
|
+
color: #8a8a8a;
|
70
|
+
}
|
71
|
+
|
72
|
+
.select2-container--foundation .select2-search__field::-moz-placeholder {
|
73
|
+
color: #8a8a8a;
|
74
|
+
opacity: 1;
|
75
|
+
}
|
76
|
+
|
77
|
+
.select2-container--foundation .select2-search__field:-ms-input-placeholder {
|
78
|
+
color: #8a8a8a;
|
79
|
+
}
|
80
|
+
|
81
|
+
.select2-container--foundation .select2-results__option {
|
82
|
+
/**
|
83
|
+
* Disabled results.
|
84
|
+
*
|
85
|
+
* @see https://select2.github.io/examples.html#disabled-results
|
86
|
+
*/
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Hover state.
|
90
|
+
*/
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Selected state.
|
94
|
+
*/
|
95
|
+
}
|
96
|
+
|
97
|
+
.select2-container--foundation .select2-results__option[role=group] {
|
98
|
+
padding: 0;
|
99
|
+
}
|
100
|
+
|
101
|
+
.select2-container--foundation .select2-results__option[role=group] strong {
|
102
|
+
padding-left: .125rem;
|
103
|
+
}
|
104
|
+
|
105
|
+
.select2-container--foundation .select2-results__option[aria-disabled=true] {
|
106
|
+
color: #8a8a8a;
|
107
|
+
cursor: default;
|
108
|
+
}
|
109
|
+
|
110
|
+
.select2-container--foundation .select2-results__option--highlighted[aria-selected] {
|
111
|
+
background-color: #2199e8;
|
112
|
+
color: foreground(#2199e8);
|
113
|
+
}
|
114
|
+
|
115
|
+
.select2-container--foundation.select2-container--focus .select2-selection {
|
116
|
+
border: 1px solid #8a8a8a;
|
117
|
+
}
|
118
|
+
|
119
|
+
.select2-container--foundation.select2-container--open .select2-selection {
|
120
|
+
border: 1px solid #8a8a8a;
|
121
|
+
border-radius: 0;
|
122
|
+
}
|
123
|
+
|
124
|
+
.select2-container--foundation.select2-container--open {
|
125
|
+
/**
|
126
|
+
* Make the dropdown arrow point up while the dropdown is visible.
|
127
|
+
*/
|
128
|
+
}
|
129
|
+
|
130
|
+
.select2-container--foundation.select2-container--open .select2-selection__arrow b {
|
131
|
+
transform: rotate(180deg);
|
132
|
+
}
|
133
|
+
|
134
|
+
.select2-container--foundation .select2-choice {
|
135
|
+
box-shadow: none;
|
136
|
+
background-image: none;
|
137
|
+
}
|
138
|
+
|
139
|
+
.select2-container--foundation .select2-choice div {
|
140
|
+
background-clip: padding-box;
|
141
|
+
}
|
142
|
+
|
143
|
+
.select2-container--foundation .select2-choice .select2-arrow {
|
144
|
+
border: 0;
|
145
|
+
border-radius: 0;
|
146
|
+
background: transparent;
|
147
|
+
background-image: none;
|
148
|
+
}
|
149
|
+
|
150
|
+
.select2-container--foundation *:focus {
|
151
|
+
outline: 0;
|
152
|
+
}
|
153
|
+
|
154
|
+
.select2-container--foundation .select2-selection__clear {
|
155
|
+
color: #8a8a8a;
|
156
|
+
cursor: pointer;
|
157
|
+
float: left;
|
158
|
+
font-weight: bold;
|
159
|
+
margin-right: 0;
|
160
|
+
}
|
161
|
+
|
162
|
+
.select2-container--foundation .select2-selection__clear:hover {
|
163
|
+
color: #333;
|
164
|
+
}
|
165
|
+
|
166
|
+
.select2-container--foundation.select2-container--disabled .select2-selection {
|
167
|
+
border: 1px solid #cacaca;
|
168
|
+
}
|
169
|
+
|
170
|
+
.select2-container--foundation.select2-container--disabled .select2-selection,
|
171
|
+
.select2-container--foundation.select2-container--disabled .select2-search__field {
|
172
|
+
cursor: default;
|
173
|
+
}
|
174
|
+
|
175
|
+
.select2-container--foundation.select2-container--disabled .select2-selection,
|
176
|
+
.select2-container--foundation.select2-container--disabled .select2-selection--multiple .select2-selection__choice {
|
177
|
+
background-color: #e6e6e6;
|
178
|
+
color: foreground(#e6e6e6);
|
179
|
+
}
|
180
|
+
|
181
|
+
.select2-container--foundation.select2-container--disabled .select2-selection__clear,
|
182
|
+
.select2-container--foundation.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove {
|
183
|
+
display: none;
|
184
|
+
}
|
185
|
+
|
186
|
+
.select2-container--foundation .select2-dropdown {
|
187
|
+
border: 1px solid #8a8a8a;
|
188
|
+
border-top: 1px solid #cacaca;
|
189
|
+
background: #fefefe;
|
190
|
+
border-radius: 0;
|
191
|
+
overflow-x: hidden;
|
192
|
+
margin-top: -.0625rem;
|
193
|
+
}
|
194
|
+
|
195
|
+
.select2-container--foundation .select2-dropdown--above {
|
196
|
+
margin-top: .0625rem;
|
197
|
+
border-radius: 0;
|
198
|
+
border-top: 1px solid #8a8a8a;
|
199
|
+
border-bottom: 1px solid #cacaca;
|
200
|
+
}
|
201
|
+
|
202
|
+
.select2-container--foundation .select2-results > .select2-results__options {
|
203
|
+
/* Limit the dropdown height. */
|
204
|
+
max-height: 200px;
|
205
|
+
overflow-y: auto;
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9
|
210
|
+
*
|
211
|
+
* Provides `!important` for certain properties of the class applied to the
|
212
|
+
* original `<select>` element to hide it.
|
213
|
+
*
|
214
|
+
* @see https://github.com/select2/select2/pull/3301
|
215
|
+
* @see https://github.com/fk/select2/commit/31830c7b32cb3d8e1b12d5b434dee40a6e753ada
|
216
|
+
*/
|
217
|
+
.form-control.select2-hidden-accessible {
|
218
|
+
position: absolute !important;
|
219
|
+
width: 1px !important;
|
220
|
+
}
|
221
|
+
|
222
|
+
/**
|
223
|
+
* Display override for inline forms
|
224
|
+
*/
|
225
|
+
.input-group span.select2-container--foundation {
|
226
|
+
margin: 0;
|
227
|
+
vertical-align: middle;
|
228
|
+
}
|
229
|
+
|
230
|
+
.input-group span.select2-container--foundation .selection .select2-selection {
|
231
|
+
vertical-align: middle;
|
232
|
+
border-radius: 0;
|
233
|
+
}
|
234
|
+
|
235
|
+
/****** Single SCSS *******/
|
236
|
+
.select2-container--foundation .select2-selection--single,
|
237
|
+
.select2-container--foundation .selection .select2-selection--single {
|
238
|
+
height: 2.4375rem;
|
239
|
+
line-height: 1.5;
|
240
|
+
padding: .5rem;
|
241
|
+
}
|
242
|
+
|
243
|
+
.select2-container--foundation .select2-selection--single .select2-selection__rendered,
|
244
|
+
.select2-container--foundation .selection .select2-selection--single .select2-selection__rendered {
|
245
|
+
color: #0a0a0a;
|
246
|
+
}
|
247
|
+
|
248
|
+
.select2-container--foundation .select2-selection--single .select2-selection__arrow,
|
249
|
+
.select2-container--foundation .selection .select2-selection--single .select2-selection__arrow {
|
250
|
+
height: 2.4375rem;
|
251
|
+
position: absolute;
|
252
|
+
top: 0;
|
253
|
+
right: 1px;
|
254
|
+
width: 20px;
|
255
|
+
}
|
256
|
+
|
257
|
+
.select2-container--foundation .select2-selection--single .select2-selection__arrow b,
|
258
|
+
.select2-container--foundation .selection .select2-selection--single .select2-selection__arrow b {
|
259
|
+
border-color: #333 transparent transparent;
|
260
|
+
top: 50%;
|
261
|
+
border-style: solid;
|
262
|
+
border-width: 6px 4px 0;
|
263
|
+
height: 0;
|
264
|
+
left: 50%;
|
265
|
+
margin-left: -4px;
|
266
|
+
margin-top: -2px;
|
267
|
+
position: absolute;
|
268
|
+
width: 0;
|
269
|
+
}
|
270
|
+
|
271
|
+
.select2-container--foundation .select2-selection--single .select2-selection__placeholder,
|
272
|
+
.select2-container--foundation .selection .select2-selection--single .select2-selection__placeholder {
|
273
|
+
color: #8a8a8a;
|
274
|
+
}
|
275
|
+
|
276
|
+
.select2-container--foundation .select2-selection--single .select2-selection__clear,
|
277
|
+
.select2-container--foundation .selection .select2-selection--single .select2-selection__clear {
|
278
|
+
cursor: pointer;
|
279
|
+
float: right;
|
280
|
+
font-weight: bold;
|
281
|
+
}
|
282
|
+
|
283
|
+
/****** Multiple SCSS *******/
|
284
|
+
.select2-container--foundation .select2-selection--multiple {
|
285
|
+
/* Clear the selection. */
|
286
|
+
}
|
287
|
+
|
288
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__choice__remove:hover {
|
289
|
+
cursor: pointer;
|
290
|
+
}
|
291
|
+
|
292
|
+
.select2-container--foundation .select2-selection--multiple ul.select2-selection__rendered,
|
293
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__rendered {
|
294
|
+
display: inherit;
|
295
|
+
box-sizing: border-box;
|
296
|
+
list-style: none;
|
297
|
+
margin: 0;
|
298
|
+
padding: 0 5px;
|
299
|
+
width: 100%;
|
300
|
+
}
|
301
|
+
|
302
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__choice {
|
303
|
+
border-radius: 0;
|
304
|
+
padding: .1875rem .3125rem;
|
305
|
+
cursor: default;
|
306
|
+
float: left;
|
307
|
+
margin-right: .3125rem;
|
308
|
+
margin-top: .125rem;
|
309
|
+
margin-bottom: .125rem;
|
310
|
+
border: 1px solid #8a8a8a;
|
311
|
+
}
|
312
|
+
|
313
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__choice__remove {
|
314
|
+
margin-right: 6px;
|
315
|
+
margin-left: 6px;
|
316
|
+
float: right;
|
317
|
+
}
|
318
|
+
|
319
|
+
.select2-container--foundation .select2-selection--multiple .select2-search--inline .select2-search__field {
|
320
|
+
background: transparent;
|
321
|
+
line-height: 1.5;
|
322
|
+
border: 0;
|
323
|
+
margin-top: 0;
|
324
|
+
min-width: 5rem;
|
325
|
+
height: 2.375rem;
|
326
|
+
box-shadow: none;
|
327
|
+
margin-right: -2rem;
|
328
|
+
}
|
329
|
+
|
330
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__choice__remove {
|
331
|
+
color: #8a8a8a;
|
332
|
+
cursor: pointer;
|
333
|
+
display: inline-block;
|
334
|
+
font-weight: bold;
|
335
|
+
margin-right: .25rem;
|
336
|
+
}
|
337
|
+
|
338
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__choice__remove:hover {
|
339
|
+
color: #333;
|
340
|
+
}
|
341
|
+
|
342
|
+
.select2-container--foundation .select2-selection--multiple .select2-selection__clear {
|
343
|
+
margin-right: .1875rem;
|
344
|
+
margin-top: .5rem;
|
345
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Centers
|
5
|
+
module Admin
|
6
|
+
class Permissions < Decidim::DefaultPermissions
|
7
|
+
def permissions
|
8
|
+
return permission_action unless user
|
9
|
+
return permission_action unless user.admin?
|
10
|
+
return permission_action unless permission_action.scope == :admin
|
11
|
+
return permission_action unless permission_action.subject == :center
|
12
|
+
|
13
|
+
allow!
|
14
|
+
permission_action
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Centers
|
5
|
+
module AdminLog
|
6
|
+
# This class holds the logic to present a `Decidim::Centers::Center`
|
7
|
+
# for the `AdminLog` log.
|
8
|
+
#
|
9
|
+
# Usage should be automatic and you shouldn't need to call this class
|
10
|
+
# directly, but here's an example:
|
11
|
+
#
|
12
|
+
# action_log = Decidim::ActionLog.last
|
13
|
+
# view_helpers # => this comes from the views
|
14
|
+
# CenterPresenter.new(action_log, view_helpers).present
|
15
|
+
class CenterPresenter < Decidim::Log::BasePresenter
|
16
|
+
private
|
17
|
+
|
18
|
+
def action_string
|
19
|
+
case action
|
20
|
+
when "create", "delete", "update"
|
21
|
+
"decidim.centers.admin_log.center.#{action}"
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card__content card__centers">
|
3
|
+
<div class="field">
|
4
|
+
<%= f.collection_select :center_id, f.object.center_options_for_select, :first, :last %>
|
5
|
+
|
6
|
+
<% if Decidim::Centers.scopes_enabled %>
|
7
|
+
<%= scopes_picker_field f, :scope_id, root: nil %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
</div>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% add_decidim_page_title(t(".title")) %>
|
2
|
+
<%= decidim_form_for(@form, html: { class: "form edit_center" }) do |f| %>
|
3
|
+
<%= render partial: "form", object: f, locals: { title: t(".title") } %>
|
4
|
+
|
5
|
+
<div class="button--double form-general-submit">
|
6
|
+
<%= f.submit t(".save") %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<% add_decidim_page_title(t(".title")) %>
|
2
|
+
<div class="card">
|
3
|
+
<div class="card-divider">
|
4
|
+
<h2 class="card-title">
|
5
|
+
<%= t(".title") %>
|
6
|
+
<%= link_to t("actions.new", scope: "decidim.centers", name: t("models.center.name", scope: "decidim.centers.admin")), new_center_path, class: "button tiny button--title" if allowed_to? :create, :center %>
|
7
|
+
</h2>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="card-section">
|
11
|
+
<div class="table-scroll">
|
12
|
+
<table class="table-list centers">
|
13
|
+
<thead>
|
14
|
+
<tr>
|
15
|
+
<th><%= t("models.center.fields.title", scope: "decidim.centers") %></th>
|
16
|
+
<th><%= t("models.center.fields.created_at", scope: "decidim.centers") %></th>
|
17
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.centers") %></th>
|
18
|
+
</tr>
|
19
|
+
</thead>
|
20
|
+
<tbody>
|
21
|
+
<% centers.each do |center| %>
|
22
|
+
<tr data-id="<%= center.id %>">
|
23
|
+
<td>
|
24
|
+
<%= translated_attribute(center.title) %><br>
|
25
|
+
</td>
|
26
|
+
<td>
|
27
|
+
<%= l center.created_at, format: "%d/%m/%Y - %H:%M" %>
|
28
|
+
</td>
|
29
|
+
<td class="table-list__actions">
|
30
|
+
<% if allowed_to? :update, :center, center: center %>
|
31
|
+
<%= icon_link_to "pencil", edit_center_path(center), t("actions.edit", scope: "decidim.centers"), class: "action-icon--edit" %>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<% if allowed_to? :destroy, :center, center: center %>
|
35
|
+
<%= icon_link_to "circle-x", center_path(center), t("actions.destroy", scope: "decidim.centers"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.centers") } %>
|
36
|
+
<% end %>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
</tbody>
|
41
|
+
</table>
|
42
|
+
<%= paginate centers, theme: "decidim" %>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% add_decidim_page_title(t(".title")) %>
|
2
|
+
<%= decidim_form_for(@form, html: { class: "form new_center" }) do |f| %>
|
3
|
+
<%= render partial: "form", object: f, locals: { title: t(".title") } %>
|
4
|
+
|
5
|
+
<div class="button--double form-general-submit">
|
6
|
+
<%= f.submit t(".create") %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
data/config/assets.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
base_path = File.expand_path("..", __dir__)
|
4
|
+
|
5
|
+
Decidim::Webpacker.register_path("#{base_path}/app/packs")
|
6
|
+
Decidim::Webpacker.register_entrypoints(
|
7
|
+
decidim_centers_admin_select2: "#{base_path}/app/packs/entrypoints/decidim_centers_admin_select2.js"
|
8
|
+
)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
decidim:
|
4
|
+
authorization_handlers:
|
5
|
+
center:
|
6
|
+
explanation: Get verified with the center of the user
|
7
|
+
fields:
|
8
|
+
centers: Centers
|
9
|
+
scopes: Scopes
|
10
|
+
name: Center
|
11
|
+
centers:
|
12
|
+
actions:
|
13
|
+
confirm_destroy: Are you sure you want to delete this center?
|
14
|
+
destroy: Delete
|
15
|
+
edit: Edit
|
16
|
+
new: New center
|
17
|
+
title: Actions
|
18
|
+
admin:
|
19
|
+
centers:
|
20
|
+
create:
|
21
|
+
invalid: There was a problem creating this center
|
22
|
+
success: Center successfully created
|
23
|
+
destroy:
|
24
|
+
success: Center successfully deleted
|
25
|
+
edit:
|
26
|
+
save: Update
|
27
|
+
title: Edit center
|
28
|
+
index:
|
29
|
+
title: Centers
|
30
|
+
new:
|
31
|
+
create: Create
|
32
|
+
title: Create center
|
33
|
+
update:
|
34
|
+
invalid: There was a problem saving the center.
|
35
|
+
success: Center successfully saved
|
36
|
+
models:
|
37
|
+
center:
|
38
|
+
name: Center
|
39
|
+
admin_log:
|
40
|
+
center:
|
41
|
+
create: "%{user_name} created the %{resource_name} center"
|
42
|
+
delete: "%{user_name} deleted the %{resource_name} center"
|
43
|
+
update: "%{user_name} updated the %{resource_name} center"
|
44
|
+
authorizations:
|
45
|
+
new:
|
46
|
+
error: The user has no center or scope configured
|
47
|
+
models:
|
48
|
+
center:
|
49
|
+
fields:
|
50
|
+
created_at: Created at
|
51
|
+
title: Title
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateDecidimCentersCenters < ActiveRecord::Migration[6.1]
|
4
|
+
def change
|
5
|
+
create_table :decidim_centers_centers do |t|
|
6
|
+
t.references :decidim_organization, foreign_key: true, index: true
|
7
|
+
t.jsonb :title, null: false
|
8
|
+
t.datetime :deleted_at
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateDecidimCentersCenterUsers < ActiveRecord::Migration[6.1]
|
4
|
+
def change
|
5
|
+
create_table :decidim_centers_center_users do |t|
|
6
|
+
t.references :decidim_centers_center, foreign_key: true, index: { name: "index_decidim_center_users_on_decidim_center_id" }
|
7
|
+
t.references :decidim_user, foreign_key: true, index: { name: "index_decidim_center_users_on_decidim_user_id" }
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateDecidimCentersScopeUsers < ActiveRecord::Migration[6.1]
|
4
|
+
def change
|
5
|
+
create_table :decidim_centers_scope_users do |t|
|
6
|
+
t.references :decidim_scope, foreign_key: true, index: { name: "index_decidim_scope_users_on_decidim_scope_id" }
|
7
|
+
t.references :decidim_user, foreign_key: true, index: { name: "index_decidim_scope_users_on_decidim_user_id" }
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Centers
|
5
|
+
# This is the engine that runs on the public interface of `Centers`.
|
6
|
+
class AdminEngine < ::Rails::Engine
|
7
|
+
isolate_namespace Decidim::Centers::Admin
|
8
|
+
|
9
|
+
paths["db/migrate"] = nil
|
10
|
+
paths["lib/tasks"] = nil
|
11
|
+
|
12
|
+
routes do
|
13
|
+
resources :centers
|
14
|
+
resources :scopes, only: :index
|
15
|
+
root to: "centers#index"
|
16
|
+
end
|
17
|
+
|
18
|
+
initializer "decidim_centers.admin_mount_routes" do
|
19
|
+
Decidim::Core::Engine.routes do
|
20
|
+
mount Decidim::Centers::AdminEngine, at: "/admin/centers", as: "decidim_admin_centers"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
initializer "decidim_centers.admin_menu" do
|
25
|
+
Decidim.menu :admin_menu do |menu|
|
26
|
+
menu.add_item :centers,
|
27
|
+
I18n.t("menu.centers", scope: "decidim.admin", default: "Centers"),
|
28
|
+
decidim_admin_centers.centers_path,
|
29
|
+
icon_name: "home",
|
30
|
+
position: 15,
|
31
|
+
active: :inclusive
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def load_seed
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|