decidim-meetings 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/admin/decidim_meetings_manifest.js +1 -0
  3. data/app/assets/images/decidim/meetings/icon.svg +5 -1
  4. data/app/assets/javascripts/decidim/meetings/admin/registrations_form.js.es6 +21 -0
  5. data/app/commands/decidim/meetings/admin/close_meeting.rb +17 -9
  6. data/app/commands/decidim/meetings/admin/create_meeting.rb +13 -1
  7. data/app/commands/decidim/meetings/admin/update_meeting.rb +47 -21
  8. data/app/commands/decidim/meetings/admin/update_registrations.rb +60 -0
  9. data/app/commands/decidim/meetings/join_meeting.rb +73 -0
  10. data/app/commands/decidim/meetings/leave_meeting.rb +39 -0
  11. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +43 -0
  12. data/app/controllers/decidim/meetings/registrations_controller.rb +46 -0
  13. data/app/events/decidim/meetings/close_meeting_event.rb +30 -0
  14. data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +39 -0
  15. data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +43 -0
  16. data/app/events/decidim/meetings/upcoming_meeting_event.rb +30 -0
  17. data/app/events/decidim/meetings/update_meeting_event.rb +30 -0
  18. data/app/forms/decidim/meetings/admin/meeting_form.rb +1 -1
  19. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +32 -0
  20. data/app/helpers/decidim/meetings/application_helper.rb +1 -0
  21. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +33 -0
  22. data/app/mailers/decidim/meetings/registration_mailer.rb +46 -0
  23. data/app/models/decidim/meetings/abilities/current_user_ability.rb +43 -0
  24. data/app/models/decidim/meetings/meeting.rb +42 -0
  25. data/app/models/decidim/meetings/registration.rb +13 -0
  26. data/app/serializers/decidim/meetings/registration_serializer.rb +18 -0
  27. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +3 -3
  28. data/app/views/decidim/meetings/admin/meetings/index.html.erb +1 -0
  29. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +33 -0
  30. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +8 -0
  31. data/app/views/decidim/meetings/meetings/_filters.html.erb +2 -2
  32. data/app/views/decidim/meetings/meetings/_registration_confirm.html.erb +15 -0
  33. data/app/views/decidim/meetings/meetings/show.html.erb +15 -1
  34. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +3 -0
  35. data/config/locales/ca.yml +74 -0
  36. data/config/locales/en.yml +72 -4
  37. data/config/locales/es.yml +75 -1
  38. data/config/locales/eu.yml +78 -3
  39. data/config/locales/fi.yml +84 -0
  40. data/config/locales/fr.yml +83 -8
  41. data/config/locales/it.yml +87 -0
  42. data/config/locales/nl.yml +169 -0
  43. data/config/locales/pl.yml +113 -0
  44. data/config/locales/uk.yml +178 -0
  45. data/db/migrate/20170810120836_add_registration_attributes_to_meetings.rb +9 -0
  46. data/db/migrate/20170810131100_create_registrations.rb +14 -0
  47. data/lib/decidim/meetings/admin_engine.rb +9 -0
  48. data/lib/decidim/meetings/engine.rb +8 -0
  49. data/lib/decidim/meetings/feature.rb +39 -9
  50. data/lib/decidim/meetings/test/factories.rb +11 -0
  51. metadata +65 -13
  52. data/config/i18n-tasks.yml +0 -10
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddRegistrationAttributesToMeetings < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_meetings_meetings, :registrations_enabled, :boolean, null: false, default: false
6
+ add_column :decidim_meetings_meetings, :available_slots, :integer, null: false, default: 0
7
+ add_column :decidim_meetings_meetings, :registration_terms, :jsonb
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateRegistrations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ create_table :decidim_meetings_registrations do |t|
6
+ t.references :decidim_user, null: false, index: true
7
+ t.references :decidim_meeting, null: false, index: true
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :decidim_meetings_registrations, [:decidim_user_id, :decidim_meeting_id], unique: true, name: "decidim_meetings_registrations_user_meeting_unique"
13
+ end
14
+ end
@@ -13,6 +13,11 @@ module Decidim
13
13
  routes do
14
14
  resources :meetings do
15
15
  resources :meeting_closes, only: [:edit, :update]
16
+ resource :registrations, only: [:edit, :update] do
17
+ collection do
18
+ get :export
19
+ end
20
+ end
16
21
  resources :attachments
17
22
  end
18
23
  root to: "meetings#index"
@@ -21,6 +26,10 @@ module Decidim
21
26
  def load_seed
22
27
  nil
23
28
  end
29
+
30
+ initializer "decidim_meetings.assets" do |app|
31
+ app.config.assets.precompile += %w(admin/decidim_meetings_manifest.js)
32
+ end
24
33
  end
25
34
  end
26
35
  end
@@ -3,6 +3,7 @@
3
3
  require "searchlight"
4
4
  require "kaminari"
5
5
  require "jquery-tmpl-rails"
6
+ require "icalendar"
6
7
 
7
8
  module Decidim
8
9
  module Meetings
@@ -14,10 +15,17 @@ module Decidim
14
15
 
15
16
  routes do
16
17
  resources :meetings, only: [:index, :show] do
18
+ resource :registration, only: [:create, :destroy]
17
19
  resource :meeting_widget, only: :show, path: "embed"
18
20
  end
19
21
  root to: "meetings#index"
20
22
  end
23
+
24
+ initializer "decidim_meetings.inject_abilities_to_user" do |_app|
25
+ Decidim.configure do |config|
26
+ config.abilities += ["Decidim::Meetings::Abilities::CurrentUserAbility"]
27
+ end
28
+ end
21
29
  end
22
30
  end
23
31
  end
@@ -23,27 +23,31 @@ Decidim.register_feature(:meetings) do |feature|
23
23
  meetings.count
24
24
  end
25
25
 
26
+ feature.actions = %w(join)
27
+
26
28
  feature.settings(:global) do |settings|
27
29
  settings.attribute :announcement, type: :text, translated: true, editor: true
30
+ settings.attribute :comments_enabled, type: :boolean, default: true
28
31
  end
29
32
 
30
33
  feature.settings(:step) do |settings|
31
34
  settings.attribute :announcement, type: :text, translated: true, editor: true
35
+ settings.attribute :comments_blocked, type: :boolean, default: false
32
36
  end
33
37
 
34
- feature.seeds do |process|
38
+ feature.seeds do |participatory_space|
35
39
  feature = Decidim::Feature.create!(
36
- name: Decidim::Features::Namer.new(process.organization.available_locales, :meetings).i18n_name,
40
+ name: Decidim::Features::Namer.new(participatory_space.organization.available_locales, :meetings).i18n_name,
37
41
  published_at: Time.current,
38
42
  manifest_name: :meetings,
39
- participatory_process: process
43
+ participatory_space: participatory_space
40
44
  )
41
45
 
42
- if process.scope
43
- scopes = process.scope.descendants
44
- global = process.scope
46
+ if participatory_space.scope
47
+ scopes = participatory_space.scope.descendants
48
+ global = participatory_space.scope
45
49
  else
46
- scopes = process.organization.scopes
50
+ scopes = participatory_space.organization.scopes
47
51
  global = nil
48
52
  end
49
53
 
@@ -51,7 +55,7 @@ Decidim.register_feature(:meetings) do |feature|
51
55
  meeting = Decidim::Meetings::Meeting.create!(
52
56
  feature: feature,
53
57
  scope: Faker::Boolean.boolean(0.5) ? global : scopes.sample,
54
- category: process.categories.sample,
58
+ category: participatory_space.categories.sample,
55
59
  title: Decidim::Faker::Localized.sentence(2),
56
60
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
57
61
  Decidim::Faker::Localized.paragraph(3)
@@ -62,8 +66,34 @@ Decidim.register_feature(:meetings) do |feature|
62
66
  end_time: 3.weeks.from_now + 4.hours,
63
67
  address: "#{Faker::Address.street_address} #{Faker::Address.zip} #{Faker::Address.city}",
64
68
  latitude: Faker::Address.latitude,
65
- longitude: Faker::Address.longitude
69
+ longitude: Faker::Address.longitude,
70
+ registrations_enabled: [true, false].sample,
71
+ available_slots: (10..50).step(10).to_a.sample,
72
+ registration_terms: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
73
+ Decidim::Faker::Localized.paragraph(3)
74
+ end
66
75
  )
76
+
77
+ 10.times do |n|
78
+ email = "meeting-registered-user-#{meeting.id}-#{n}@example.org"
79
+ name = "#{Faker::Name.name} #{meeting.id} #{n}"
80
+ user = Decidim::User.find_or_initialize_by(email: email)
81
+
82
+ user.update!(
83
+ password: "password1234",
84
+ password_confirmation: "password1234",
85
+ name: name,
86
+ organization: feature.organization,
87
+ tos_agreement: "1",
88
+ confirmed_at: Time.current
89
+ )
90
+
91
+ Decidim::Meetings::Registration.create!(
92
+ meeting: meeting,
93
+ user: user
94
+ )
95
+ end
96
+
67
97
  Decidim::Attachment.create!(
68
98
  title: Decidim::Faker::Localized.sentence(2),
69
99
  description: Decidim::Faker::Localized.sentence(5),
@@ -20,5 +20,16 @@ FactoryGirl.define do
20
20
  attending_organizations { Array.new(3) { Faker::GameOfThrones.house }.join(", ") }
21
21
  closed_at { Time.current }
22
22
  end
23
+
24
+ trait :with_registrations_enabled do
25
+ registrations_enabled { true }
26
+ available_slots { 10 }
27
+ registration_terms { Decidim::Faker::Localized.sentence(3) }
28
+ end
29
+ end
30
+
31
+ factory :registration, class: Decidim::Meetings::Registration do
32
+ meeting
33
+ user
23
34
  end
24
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-meetings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-08-21 00:00:00.000000000 Z
13
+ date: 2017-09-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.5.1
21
+ version: 0.6.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.5.1
28
+ version: 0.6.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rectify
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -110,62 +110,90 @@ dependencies:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
112
  version: 1.1.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: icalendar
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 2.4.1
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: 2.4.1
113
127
  - !ruby/object:Gem::Dependency
114
128
  name: decidim-dev
115
129
  requirement: !ruby/object:Gem::Requirement
116
130
  requirements:
117
131
  - - '='
118
132
  - !ruby/object:Gem::Version
119
- version: 0.5.1
133
+ version: 0.6.0
120
134
  type: :development
121
135
  prerelease: false
122
136
  version_requirements: !ruby/object:Gem::Requirement
123
137
  requirements:
124
138
  - - '='
125
139
  - !ruby/object:Gem::Version
126
- version: 0.5.1
140
+ version: 0.6.0
127
141
  - !ruby/object:Gem::Dependency
128
142
  name: decidim-admin
129
143
  requirement: !ruby/object:Gem::Requirement
130
144
  requirements:
131
145
  - - '='
132
146
  - !ruby/object:Gem::Version
133
- version: 0.5.1
147
+ version: 0.6.0
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - '='
153
+ - !ruby/object:Gem::Version
154
+ version: 0.6.0
155
+ - !ruby/object:Gem::Dependency
156
+ name: decidim-participatory_processes
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - '='
160
+ - !ruby/object:Gem::Version
161
+ version: 0.6.0
134
162
  type: :development
135
163
  prerelease: false
136
164
  version_requirements: !ruby/object:Gem::Requirement
137
165
  requirements:
138
166
  - - '='
139
167
  - !ruby/object:Gem::Version
140
- version: 0.5.1
168
+ version: 0.6.0
141
169
  - !ruby/object:Gem::Dependency
142
170
  name: decidim-proposals
143
171
  requirement: !ruby/object:Gem::Requirement
144
172
  requirements:
145
173
  - - '='
146
174
  - !ruby/object:Gem::Version
147
- version: 0.5.1
175
+ version: 0.6.0
148
176
  type: :development
149
177
  prerelease: false
150
178
  version_requirements: !ruby/object:Gem::Requirement
151
179
  requirements:
152
180
  - - '='
153
181
  - !ruby/object:Gem::Version
154
- version: 0.5.1
182
+ version: 0.6.0
155
183
  - !ruby/object:Gem::Dependency
156
184
  name: decidim-results
157
185
  requirement: !ruby/object:Gem::Requirement
158
186
  requirements:
159
187
  - - '='
160
188
  - !ruby/object:Gem::Version
161
- version: 0.5.1
189
+ version: 0.6.0
162
190
  type: :development
163
191
  prerelease: false
164
192
  version_requirements: !ruby/object:Gem::Requirement
165
193
  requirements:
166
194
  - - '='
167
195
  - !ruby/object:Gem::Version
168
- version: 0.5.1
196
+ version: 0.6.0
169
197
  description: A meetings component for decidim's participatory processes.
170
198
  email:
171
199
  - josepjaume@gmail.com
@@ -177,25 +205,43 @@ extra_rdoc_files: []
177
205
  files:
178
206
  - README.md
179
207
  - Rakefile
208
+ - app/assets/config/admin/decidim_meetings_manifest.js
180
209
  - app/assets/images/decidim/meetings/icon.svg
210
+ - app/assets/javascripts/decidim/meetings/admin/registrations_form.js.es6
181
211
  - app/commands/decidim/meetings/admin/close_meeting.rb
182
212
  - app/commands/decidim/meetings/admin/create_meeting.rb
183
213
  - app/commands/decidim/meetings/admin/update_meeting.rb
214
+ - app/commands/decidim/meetings/admin/update_registrations.rb
215
+ - app/commands/decidim/meetings/join_meeting.rb
216
+ - app/commands/decidim/meetings/leave_meeting.rb
184
217
  - app/controllers/decidim/meetings/admin/application_controller.rb
185
218
  - app/controllers/decidim/meetings/admin/attachments_controller.rb
186
219
  - app/controllers/decidim/meetings/admin/meeting_closes_controller.rb
187
220
  - app/controllers/decidim/meetings/admin/meetings_controller.rb
221
+ - app/controllers/decidim/meetings/admin/registrations_controller.rb
188
222
  - app/controllers/decidim/meetings/application_controller.rb
189
223
  - app/controllers/decidim/meetings/meeting_widgets_controller.rb
190
224
  - app/controllers/decidim/meetings/meetings_controller.rb
225
+ - app/controllers/decidim/meetings/registrations_controller.rb
226
+ - app/events/decidim/meetings/close_meeting_event.rb
227
+ - app/events/decidim/meetings/meeting_registrations_enabled_event.rb
228
+ - app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb
229
+ - app/events/decidim/meetings/upcoming_meeting_event.rb
230
+ - app/events/decidim/meetings/update_meeting_event.rb
191
231
  - app/forms/decidim/meetings/admin/close_meeting_form.rb
192
232
  - app/forms/decidim/meetings/admin/meeting_form.rb
233
+ - app/forms/decidim/meetings/admin/meeting_registrations_form.rb
193
234
  - app/helpers/decidim/meetings/admin/application_helper.rb
194
235
  - app/helpers/decidim/meetings/application_helper.rb
195
236
  - app/helpers/decidim/meetings/map_helper.rb
196
237
  - app/helpers/decidim/meetings/meetings_helper.rb
238
+ - app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb
239
+ - app/mailers/decidim/meetings/registration_mailer.rb
240
+ - app/models/decidim/meetings/abilities/current_user_ability.rb
197
241
  - app/models/decidim/meetings/application_record.rb
198
242
  - app/models/decidim/meetings/meeting.rb
243
+ - app/models/decidim/meetings/registration.rb
244
+ - app/serializers/decidim/meetings/registration_serializer.rb
199
245
  - app/services/decidim/meetings/meeting_search.rb
200
246
  - app/views/decidim/meetings/admin/meeting_closes/_form.html.erb
201
247
  - app/views/decidim/meetings/admin/meeting_closes/edit.html.erb
@@ -203,16 +249,19 @@ files:
203
249
  - app/views/decidim/meetings/admin/meetings/edit.html.erb
204
250
  - app/views/decidim/meetings/admin/meetings/index.html.erb
205
251
  - app/views/decidim/meetings/admin/meetings/new.html.erb
252
+ - app/views/decidim/meetings/admin/registrations/_form.html.erb
253
+ - app/views/decidim/meetings/admin/registrations/edit.html.erb
206
254
  - app/views/decidim/meetings/meeting_widgets/show.html.erb
207
255
  - app/views/decidim/meetings/meetings/_datetime.html.erb
208
256
  - app/views/decidim/meetings/meetings/_filters.html.erb
209
257
  - app/views/decidim/meetings/meetings/_filters_small_view.html.erb
210
258
  - app/views/decidim/meetings/meetings/_linked_meetings.html.erb
211
259
  - app/views/decidim/meetings/meetings/_meetings.html.erb
260
+ - app/views/decidim/meetings/meetings/_registration_confirm.html.erb
212
261
  - app/views/decidim/meetings/meetings/index.html.erb
213
262
  - app/views/decidim/meetings/meetings/index.js.erb
214
263
  - app/views/decidim/meetings/meetings/show.html.erb
215
- - config/i18n-tasks.yml
264
+ - app/views/decidim/meetings/registration_mailer/confirmation.html.erb
216
265
  - config/locales/ca.yml
217
266
  - config/locales/en.yml
218
267
  - config/locales/es.yml
@@ -222,6 +271,7 @@ files:
222
271
  - config/locales/it.yml
223
272
  - config/locales/nl.yml
224
273
  - config/locales/pl.yml
274
+ - config/locales/uk.yml
225
275
  - db/migrate/20161130121354_create_meetings.rb
226
276
  - db/migrate/20170110142105_close_a_meeting.rb
227
277
  - db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb
@@ -229,6 +279,8 @@ files:
229
279
  - db/migrate/20170215132546_add_reference_to_meetings.rb
230
280
  - db/migrate/20170410074252_remove_not_null_reference_meetings.rb
231
281
  - db/migrate/20170612101925_migrate_meetings_category.rb
282
+ - db/migrate/20170810120836_add_registration_attributes_to_meetings.rb
283
+ - db/migrate/20170810131100_create_registrations.rb
232
284
  - lib/decidim/meetings.rb
233
285
  - lib/decidim/meetings/admin.rb
234
286
  - lib/decidim/meetings/admin_engine.rb
@@ -1,10 +0,0 @@
1
- base_locale: en
2
- ignore_unused:
3
- - "decidim.features.meetings.name"
4
- - "decidim.features.meetings.settings.*"
5
- - "activemodel.attributes.*"
6
- - "decidim.resource_links.*"
7
- ignore_missing:
8
- - decidim.scopes.global
9
- search:
10
- strict: false