decidim-meetings 0.0.2 → 0.0.3

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_meetings_manifest.js +2 -0
  3. data/app/assets/javascripts/decidim/meetings/map.js.es6.erb +92 -0
  4. data/app/assets/stylesheets/decidim/meetings/map.css +1 -0
  5. data/app/commands/decidim/meetings/admin/close_meeting.rb +53 -0
  6. data/app/commands/decidim/meetings/admin/create_meeting.rb +15 -3
  7. data/app/commands/decidim/meetings/admin/update_meeting.rb +15 -3
  8. data/app/controllers/decidim/meetings/admin/application_controller.rb +9 -0
  9. data/app/controllers/decidim/meetings/admin/attachments_controller.rb +29 -0
  10. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +38 -0
  11. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +0 -12
  12. data/app/controllers/decidim/meetings/meetings_controller.rb +11 -9
  13. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +31 -0
  14. data/app/forms/decidim/meetings/admin/meeting_form.rb +0 -2
  15. data/app/helpers/decidim/meetings/admin/application_helper.rb +12 -0
  16. data/app/helpers/decidim/meetings/application_helper.rb +1 -0
  17. data/app/helpers/decidim/meetings/map_helper.rb +46 -0
  18. data/app/models/decidim/meetings/meeting.rb +11 -15
  19. data/app/services/decidim/meetings/meeting_search.rb +0 -1
  20. data/app/services/decidim/meetings/static_map_generator.rb +50 -0
  21. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +23 -0
  22. data/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +9 -0
  23. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +2 -6
  24. data/app/views/decidim/meetings/admin/meetings/index.html.erb +14 -0
  25. data/app/views/decidim/meetings/meetings/_datetime.html.erb +8 -0
  26. data/app/views/decidim/meetings/meetings/_filters.html.erb +2 -2
  27. data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +18 -0
  28. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +22 -0
  29. data/app/views/decidim/meetings/meetings/_meetings.html.erb +3 -10
  30. data/app/views/decidim/meetings/meetings/index.html.erb +42 -0
  31. data/app/views/decidim/meetings/meetings/index.js.erb +6 -0
  32. data/app/views/decidim/meetings/meetings/show.html.erb +33 -7
  33. data/config/i18n-tasks.yml +2 -0
  34. data/config/locales/ca.yml +37 -4
  35. data/config/locales/en.yml +34 -1
  36. data/config/locales/es.yml +36 -3
  37. data/db/migrate/20170110142105_close_a_meeting.rb +9 -0
  38. data/db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb +6 -0
  39. data/db/migrate/20170129153716_remove_short_description_from_meetings.rb +5 -0
  40. data/lib/decidim/meetings/admin_engine.rb +31 -1
  41. data/lib/decidim/meetings/feature.rb +20 -6
  42. data/lib/decidim/meetings/list_engine.rb +10 -1
  43. data/lib/decidim/meetings/seeds/Exampledocument.pdf +0 -0
  44. data/lib/decidim/meetings/seeds/city.jpeg +0 -0
  45. data/lib/decidim/meetings/test/factories.rb +23 -0
  46. metadata +125 -6
@@ -10,6 +10,10 @@
10
10
  <th><%= t("models.meeting.fields.title", scope: "decidim.meetings") %></th>
11
11
  <th><%= t("models.meeting.fields.start_time", scope: "decidim.meetings") %></th>
12
12
  <th><%= t("models.meeting.fields.end_time", scope: "decidim.meetings") %></th>
13
+ <th><%= t("models.meeting.fields.closed", scope: "decidim.meetings") %></th>
14
+ <% if Decidim.geocoder.present? %>
15
+ <th><%= t("models.meeting.fields.map", scope: "decidim.meetings") %></th>
16
+ <% end %>
13
17
  <th class="actions"><%= t("actions.title", scope: "decidim.meetings") %></th>
14
18
  </tr>
15
19
  </thead>
@@ -29,8 +33,18 @@
29
33
  <%= l meeting.end_time, format: :long %>
30
34
  <% end%>
31
35
  </td>
36
+ <td>
37
+ <%= humanize_boolean meeting.closed? %>
38
+ </td>
39
+ <% if Decidim.geocoder.present? %>
40
+ <td>
41
+ <%= static_map_link(meeting) %>
42
+ </td>
43
+ <% end %>
32
44
  <td class="actions">
33
45
  <%= link_to t("actions.edit", scope: "decidim.meetings"), edit_meeting_path(meeting) if can? :update, current_feature %>
46
+ <%= link_to t("actions.close", scope: "decidim.meetings"), edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id) if can? :update, current_feature %>
47
+ <%= link_to t("actions.attachments", scope: "decidim.meetings"), meeting_attachments_path(meeting) if can? :update, current_feature %>
34
48
  <%= link_to t("actions.destroy", scope: "decidim.meetings"), meeting_path(meeting), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.meetings") } if can? :destroy, current_feature %>
35
49
  </td>
36
50
  </tr>
@@ -0,0 +1,8 @@
1
+ <div class="card__datetime">
2
+ <div class="card__datetime__date">
3
+ <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
4
+ </div>
5
+ <div class="card__datetime__time">
6
+ <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
7
+ </div>
8
+ </div>
@@ -11,7 +11,7 @@
11
11
  </div>
12
12
  </div>
13
13
  </div>
14
-
14
+
15
15
  <%= form.collection_radio_buttons :order_start_time, [["asc", t('.ascendent')], ["desc", t('.descendent')]], :first, :last, legend_title: t('.date') %>
16
16
 
17
17
  <% if current_organization.scopes.any? %>
@@ -19,6 +19,6 @@
19
19
  <% end %>
20
20
 
21
21
  <% if current_feature.categories.any? %>
22
- <%= form.categories_select :category_id, current_feature.categories, legend_title: t('.category'), disable_parents: false, label: false, include_blank: true %>
22
+ <%= form.categories_select :category_id, current_feature.categories, legend_title: t('.category'), disable_parents: false, label: false, include_blank: true %>
23
23
  <% end %>
24
24
  <% end %>
@@ -0,0 +1,18 @@
1
+ <div class="filters-controls hide-for-mediumlarge">
2
+ <button data-open="filter-box" class="filters-controls__trigger">
3
+ <%= t ".filter" %>
4
+ <%= icon "caret-bottom", class: "icon--small float-right", aria_label: t('.unfold'), role: "img" %>
5
+ </button>
6
+ </div>
7
+
8
+ <div class="reveal" id="filter-box" data-reveal>
9
+ <div class="reveal__header">
10
+ <h3 class="reveal__title"><%= t ".filter_for" %>:</h3>
11
+ <button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
12
+ <span aria-hidden="true">&times;</span>
13
+ </button>
14
+ </div>
15
+ <div class="filters">
16
+ <%= render partial: "filters" %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,22 @@
1
+ <div class="row small-up-1 medium-up-2 card-grid">
2
+ <% resources.each do |meeting| %>
3
+ <div class="column">
4
+ <article class="card card--meeting">
5
+ <div class="card__content">
6
+ <%= link_to decidim_resource_path(meeting), class: "card__link" do %>
7
+ <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
8
+ <% end %>
9
+ <div class="card__datetime">
10
+ <div class="card__datetime__date">
11
+ <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
12
+ </div>
13
+ <div class="card__datetime__time">
14
+ <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
15
+ </div>
16
+ </div>
17
+ <%== translated_attribute meeting.description %>
18
+ </div>
19
+ </article>
20
+ </div>
21
+ <% end %>
22
+ </div>
@@ -6,21 +6,14 @@
6
6
  <%= link_to meeting, class: "card__link" do %>
7
7
  <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
8
8
  <% end %>
9
- <div class="card__datetime">
10
- <div class="card__datetime__date">
11
- <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
12
- </div>
13
- <div class="card__datetime__time">
14
- <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
15
- </div>
16
- </div>
17
- <%== translated_attribute meeting.short_description %>
9
+ <%= render partial: "datetime", locals: { meeting: meeting } %>
10
+ <%== translated_attribute meeting.description %>
18
11
  <%= render partial: "tags", locals: { meeting: meeting } %>
19
12
  <div class="address card__extra">
20
13
  <div class="address__icon">
21
14
  <%= icon "meetings", remove_icon_class: true, width: 40, height: 70 %>
22
15
  </div>
23
- <%= render partial: 'address_details', locals: { meeting: meeting } %>
16
+ <%= render partial: "address_details", locals: { meeting: meeting } %>
24
17
  </div>
25
18
  </div>
26
19
  </article>
@@ -1,7 +1,47 @@
1
1
  <% content_for(:title, t(".title")) %>
2
2
 
3
+ <% if Decidim.geocoder.present? %>
4
+ <div class="row column">
5
+ <div class="google-map" id="meetings-map" data-meetings="<%= meetings_data_for_map(geocoded_meetings).to_json %>" data-here-app-id="<%= Decidim.geocoder[:here_app_id] %>" data-here-app-code="<%= Decidim.geocoder[:here_app_code] %>">
6
+ </div>
7
+
8
+ <template id="meeting-popup">
9
+ <div class="map-info__content">
10
+ <h3>${title}</h3>
11
+ <div id="bodyContent">
12
+ <p>{{html description}}</p>
13
+ <div class="map__date-adress">
14
+ <div class="card__datetime">
15
+ <div class="card__datetime__date">
16
+ ${startTimeDay} <span class="card__datetime__month">${startTimeMonth}</span>
17
+ </div>
18
+ <div class="card__datetime__time">${starTime}</div>
19
+ </div>
20
+ <div class="address card__extra">
21
+ <div class="address__icon">{{html icon}}</div>
22
+ <div class="address__details">
23
+ <strong>{{html location}}</strong><br />
24
+ <span>${address}</span><br />
25
+ <span>{{html locationHints}}</span>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <div class="map-info__button">
30
+ <a href="${link}" class="button button--sc">
31
+ <%= t('.view_meeting') %>
32
+ </a>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </template>
37
+ <%= stylesheet_link_tag "decidim/meetings/map" %>
38
+ <%= javascript_include_tag "decidim/meetings/map" %>
39
+ </div>
40
+ <% end %>
41
+
3
42
  <div class="row">
4
43
  <div class="columns mediumlarge-4 large-3">
44
+ <%= render partial: "filters_small_view" %>
5
45
  <div class="card card--secondary show-for-mediumlarge" >
6
46
  <%= render partial: "filters" %>
7
47
  </div>
@@ -10,3 +50,5 @@
10
50
  <%= render partial: "meetings" %>
11
51
  </div>
12
52
  </div>
53
+
54
+ <%= javascript_include_tag("decidim/filters") %>
@@ -1,2 +1,8 @@
1
1
  var $meetings = $('#meetings');
2
+
2
3
  $meetings.html('<%= j(render partial: "meetings") %>');
4
+
5
+ window.DecidimMeetings.currentMap = window.DecidimMeetings.loadMap(
6
+ 'meetings-map',
7
+ JSON.parse('<%= escape_javascript meetings_data_for_map(geocoded_meetings).to_json.html_safe %>')
8
+ );
@@ -15,26 +15,52 @@
15
15
  <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
16
16
  </div>
17
17
  </div>
18
- </div>
18
+ </div>
19
+ <% if meeting.closed? %>
20
+ <div class="card card--secondary extra definition-data">
21
+ <div class="definition-data__item definition-data__item--double">
22
+ <span class="definition-data__title"><%= t(".attendees") %></span>
23
+ <span class="definition-data__number"><%= meeting.attendees_count %></span>
24
+ </div>
25
+ <div class="definition-data__item definition-data__item--double">
26
+ <span class="definition-data__title"><%= t(".contributions") %></span>
27
+ <span class="definition-data__number"><%= meeting.contributions_count %></span>
28
+ </div>
29
+ <div class="definition-data__item">
30
+ <span class="definition-data__title"><%= t(".organizations") %></span>
31
+ <span class="definition-data__text"><%= meeting.attending_organizations %></span>
32
+ </div>
33
+ </div>
34
+ <% end %>
19
35
  </div>
20
36
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
21
37
  <div class="section">
22
- <%== translated_attribute meeting.short_description %>
38
+ <p><%== translated_attribute meeting.description %></p>
23
39
  <div class="card card--secondary">
24
40
  <div class="card__content address">
25
41
  <div class="address__info">
26
42
  <div class="address__icon">
27
43
  <%= icon "meetings", width: 40, height: 70 %>
28
44
  </div>
29
- <%= render partial: 'address_details', locals: { meeting: meeting } %>
45
+ <%= render partial: "address_details", locals: { meeting: meeting } %>
30
46
  </div>
47
+ <% if Decidim.geocoder.present? %>
48
+ <div class="address__map">
49
+ <%= static_map_link(meeting) %>
50
+ </div>
51
+ <% end %>
31
52
  </div>
32
53
  </div>
33
54
  <%= render partial: "tags", locals: { meeting: meeting } %>
34
55
  </div>
35
- <div class="section">
36
- <h3 class="section-heading"><%= t(".meeting_description") %></h3>
37
- <%== translated_attribute meeting.description %>
38
- </div>
56
+ <% if meeting.closed? %>
57
+ <div class="section">
58
+ <h3 class="section-heading"><%= t(".meeting_report") %></h3>
59
+ <%== translated_attribute meeting.closing_report %>
60
+ </div>
61
+ <% end %>
62
+ <%= linked_resources_for meeting, :proposals, "proposals_from_meeting" %>
63
+ <%= linked_resources_for meeting, :results, "meetings_through_proposals" %>
39
64
  </div>
40
65
  </div>
66
+ <%= attachments_for meeting %>
@@ -2,3 +2,5 @@ base_locale: en
2
2
  locales: [en]
3
3
  ignore_unused:
4
4
  - "decidim.features.meetings.name"
5
+ - "activemodel.attributes.close_meeting.*"
6
+ - "decidim.resource_links.*"
@@ -1,20 +1,37 @@
1
1
  ca:
2
+ activemodel:
3
+ attributes:
4
+ close_meeting:
5
+ attendees_count: Nombre d'assistents
6
+ attending_organizations: Llista d'organitzacions que han participat
7
+ closing_report: Informe
8
+ contributions_count: Nombre de contribucions
9
+ proposal_ids: Propostes creades en una trobada
2
10
  decidim:
3
11
  features:
4
12
  meetings:
5
13
  name: Llistat de trobades
6
14
  meetings:
7
15
  actions:
16
+ attachments: Adjunts
17
+ close: Tancar
8
18
  confirm_destroy: Esteu segur de que voleu suprimir aquesta trobada?
9
19
  destroy: Esborra
10
20
  edit: Edita
11
21
  new: Nou/va %{name}
12
22
  title: Accions
13
23
  admin:
24
+ meeting_closes:
25
+ edit:
26
+ close: Tancar
27
+ title: Tancar trobada
14
28
  meetings:
29
+ close:
30
+ invalid: Hi ha hagut un problema en tancar aquesta trobada
31
+ success: Trobada tancada amb èxit
15
32
  create:
16
33
  invalid: Hi ha hagut un problema en crear aquesta trobada
17
- success: Reunió creada amb èxit
34
+ success: Trobada creada amb èxit
18
35
  destroy:
19
36
  success: La trobada s'ha eliminat correctament
20
37
  edit:
@@ -27,7 +44,7 @@ ca:
27
44
  title: Nova trobada
28
45
  update:
29
46
  invalid: Hi ha hagut un problema en actualitzar aquesta trobada
30
- success: Reunió actualitzada correctament
47
+ success: Trobada actualitzada correctament
31
48
  models:
32
49
  meeting:
33
50
  name: Trobada
@@ -39,13 +56,29 @@ ca:
39
56
  descendent: Descendent
40
57
  scopes: Àmbits
41
58
  search: Cerca
59
+ filters_small_view:
60
+ close_modal: Tancar finestra
61
+ filter: Filtra
62
+ filter_for: Filtra per
63
+ unfold: Desplegar
42
64
  index:
43
65
  title: Llistat de trobades
66
+ view_meeting: Veure trobada
44
67
  show:
45
- meeting_description: Descripció de reunions
68
+ attendees: Nombre d'assistents
69
+ contributions: Nombre d'aportacions
70
+ meeting_report: Informe de la trobada
71
+ organizations: Llista d'organitzacions que han atès
46
72
  models:
47
73
  meeting:
48
74
  fields:
75
+ closed: Tancada
49
76
  end_time: Data de finalització
77
+ map: Mapa
50
78
  start_time: Data d'inici
51
- title: Títol
79
+ title: Títol
80
+ resource_links:
81
+ meetings_through_proposals:
82
+ results: 'Resultats relacionats:'
83
+ proposals_from_meeting:
84
+ proposals: Propostes relacionades
@@ -1,18 +1,35 @@
1
1
  ---
2
2
  en:
3
+ activemodel:
4
+ attributes:
5
+ close_meeting:
6
+ attendees_count: Number of attendees
7
+ attending_organizations: List of organizations that attended
8
+ closing_report: Report
9
+ contributions_count: Number of contributions
10
+ proposal_ids: Proposals created in the meeting
3
11
  decidim:
4
12
  features:
5
13
  meetings:
6
14
  name: Meetings
7
15
  meetings:
8
16
  actions:
17
+ attachments: Attachments
18
+ close: Close
9
19
  confirm_destroy: Are you sure you want to delete this meeting?
10
20
  destroy: Delete
11
21
  edit: Edit
12
22
  new: New %{name}
13
23
  title: Actions
14
24
  admin:
25
+ meeting_closes:
26
+ edit:
27
+ close: Close
28
+ title: Close meeting
15
29
  meetings:
30
+ close:
31
+ invalid: There's been a problem closing this meeting
32
+ success: Meeting successfully closed
16
33
  create:
17
34
  invalid: There's been a problem creating this meeting
18
35
  success: Meeting successfully created
@@ -40,13 +57,29 @@ en:
40
57
  descendent: Descendent
41
58
  scopes: Scopes
42
59
  search: Search
60
+ filters_small_view:
61
+ close_modal: Close modal
62
+ filter: Filter
63
+ filter_for: Filter by
64
+ unfold: Unfold
43
65
  index:
44
66
  title: Meetings
67
+ view_meeting: View meeting
45
68
  show:
46
- meeting_description: Meeting description
69
+ attendees: Attendees count
70
+ contributions: Contributions count
71
+ meeting_report: Meeting report
72
+ organizations: Attending organizations
47
73
  models:
48
74
  meeting:
49
75
  fields:
76
+ closed: Closed
50
77
  end_time: End date
78
+ map: Map
51
79
  start_time: Start date
52
80
  title: Title
81
+ resource_links:
82
+ meetings_through_proposals:
83
+ results: 'Related results:'
84
+ proposals_from_meeting:
85
+ proposals: Related proposals
@@ -1,20 +1,37 @@
1
1
  es:
2
+ activemodel:
3
+ attributes:
4
+ close_meeting:
5
+ attendees_count: Número de asistentes
6
+ attending_organizations: Lista de organizaciones que han participado
7
+ closing_report: Informe
8
+ contributions_count: Número de contribuciones
9
+ proposal_ids: Propuestas creadas en el encuentro
2
10
  decidim:
3
11
  features:
4
12
  meetings:
5
13
  name: Lista de encuentros
6
14
  meetings:
7
15
  actions:
16
+ attachments: Archivos adjuntos
17
+ close: Cerrar
8
18
  confirm_destroy: '¿Está seguro de que quiere eliminar este encuentro?'
9
19
  destroy: Borrar
10
20
  edit: Editar
11
21
  new: Nuevo/a %{name}
12
22
  title: Acciones
13
23
  admin:
24
+ meeting_closes:
25
+ edit:
26
+ close: Cerrar
27
+ title: Cerrar encuentro
14
28
  meetings:
29
+ close:
30
+ invalid: Ha habido un problema al cerrar este encuentro
31
+ success: Encuentro cerrado con éxito
15
32
  create:
16
33
  invalid: Ha habido un problema al crear este encuentro
17
- success: Reunión creada con éxito
34
+ success: Encuentro creado con éxito
18
35
  destroy:
19
36
  success: El encuentro se ha eliminado correctamente
20
37
  edit:
@@ -39,13 +56,29 @@ es:
39
56
  descendent: Descendiente
40
57
  scopes: Ámbitos
41
58
  search: Buscar
59
+ filters_small_view:
60
+ close_modal: Cerrar ventana
61
+ filter: Filtrar
62
+ filter_for: Filtrar por
63
+ unfold: Desplegar
42
64
  index:
43
65
  title: Lista de encuentros
66
+ view_meeting: Ver encuentro
44
67
  show:
45
- meeting_description: Descripción del encuentro
68
+ attendees: Número de asistentes
69
+ contributions: Número de contribuciones
70
+ meeting_report: Informe del encuentro
71
+ organizations: Organizaciones que han asistido
46
72
  models:
47
73
  meeting:
48
74
  fields:
75
+ closed: Cerrado
49
76
  end_time: Fecha de finalización
77
+ map: Mapa
50
78
  start_time: Fecha de inicio
51
- title: Título
79
+ title: Título
80
+ resource_links:
81
+ meetings_through_proposals:
82
+ results: 'Resultados relacionados:'
83
+ proposals_from_meeting:
84
+ proposals: Propuestas relacionadas
@@ -0,0 +1,9 @@
1
+ class CloseAMeeting < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_column :decidim_meetings_meetings, :closing_report, :jsonb
4
+ add_column :decidim_meetings_meetings, :attendees_count, :integer
5
+ add_column :decidim_meetings_meetings, :contributions_count, :integer
6
+ add_column :decidim_meetings_meetings, :attending_organizations, :text
7
+ add_column :decidim_meetings_meetings, :closed_at, :time, index: true
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddLatitudeAndLongitudeToMeetings < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_column :decidim_meetings_meetings, :latitude, :float
4
+ add_column :decidim_meetings_meetings, :longitude, :float
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveShortDescriptionFromMeetings < ActiveRecord::Migration[5.0]
2
+ def change
3
+ remove_column :decidim_meetings_meetings, :short_description
4
+ end
5
+ end
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require "geocoder"
3
+
2
4
  module Decidim
3
5
  module Meetings
4
6
  # This is the engine that runs on the public interface of `decidim-meetings`.
@@ -10,13 +12,41 @@ module Decidim
10
12
  paths["db/migrate"] = nil
11
13
 
12
14
  routes do
13
- resources :meetings
15
+ resources :meetings do
16
+ resources :meeting_closes, only: [:edit, :update]
17
+ resources :attachments
18
+ end
14
19
  root to: "meetings#index"
15
20
  end
16
21
 
17
22
  def load_seed
18
23
  nil
19
24
  end
25
+
26
+ initializer "decidim_meetings.geocoder" do |_app|
27
+ if Decidim.geocoder.present?
28
+ Geocoder.configure(
29
+ # geocoding service (see below for supported options):
30
+ lookup: :here,
31
+
32
+ # IP address geocoding service (see below for supported options):
33
+ # :ip_lookup => :maxmind,
34
+
35
+ # to use an API key:
36
+ api_key: [Decidim.geocoder&.fetch(:here_app_id), Decidim.geocoder&.fetch(:here_app_code)]
37
+
38
+ # geocoding service request timeout, in seconds (default 3):
39
+ # :timeout => 5,
40
+
41
+ # set default units to kilometers:
42
+ # :units => :km,
43
+
44
+ # caching (see below for details):
45
+ # :cache => Redis.new,
46
+ # :cache_prefix => "..."
47
+ )
48
+ end
49
+ end
20
50
  end
21
51
  end
22
52
  end
@@ -11,6 +11,11 @@ Decidim.register_feature(:meetings) do |feature|
11
11
  raise StandardError, "Can't remove this feature" if Decidim::Meetings::Meeting.where(feature: instance).any?
12
12
  end
13
13
 
14
+ feature.register_resource do |resource|
15
+ resource.model_class_name = "Decidim::Meetings::Meeting"
16
+ resource.template = "decidim/meetings/meetings/linked_meetings"
17
+ end
18
+
14
19
  feature.seeds do
15
20
  Decidim::ParticipatoryProcess.all.each do |process|
16
21
  next unless process.steps.any?
@@ -30,17 +35,26 @@ Decidim.register_feature(:meetings) do |feature|
30
35
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
31
36
  Decidim::Faker::Localized.paragraph(3)
32
37
  end,
33
- short_description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
34
- Decidim::Faker::Localized.paragraph(3)
35
- end,
36
38
  location: Decidim::Faker::Localized.sentence,
37
39
  location_hints: Decidim::Faker::Localized.sentence,
38
40
  start_time: 3.weeks.from_now,
39
41
  end_time: 3.weeks.from_now + 4.hours,
40
- address: "#{Faker::Address.street_address} #{Faker::Address.zip} #{Faker::Address.city}"
42
+ address: "#{Faker::Address.street_address} #{Faker::Address.zip} #{Faker::Address.city}",
43
+ latitude: Faker::Address.latitude,
44
+ longitude: Faker::Address.longitude
45
+ )
46
+ Decidim::Attachment.create!(
47
+ title: Decidim::Faker::Localized.sentence(2),
48
+ description: Decidim::Faker::Localized.sentence(5),
49
+ file: File.new(File.join(File.dirname(__FILE__), "seeds", "city.jpeg")),
50
+ attached_to: meeting
51
+ )
52
+ Decidim::Attachment.create!(
53
+ title: Decidim::Faker::Localized.sentence(2),
54
+ description: Decidim::Faker::Localized.sentence(5),
55
+ file: File.new(File.join(File.dirname(__FILE__), "seeds", "Exampledocument.pdf")),
56
+ attached_to: meeting
41
57
  )
42
-
43
- Decidim::Comments::Seed.comments_for(meeting)
44
58
  end
45
59
  end
46
60
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "searchlight"
3
3
  require "kaminari"
4
+ require "jquery-tmpl-rails"
4
5
 
5
6
  module Decidim
6
7
  module Meetings
@@ -11,9 +12,17 @@ module Decidim
11
12
  isolate_namespace Decidim::Meetings
12
13
 
13
14
  routes do
14
- resources :meetings, only: [:index, :show]
15
+ resources :meetings, only: [:index, :show] do
16
+ member do
17
+ get :static_map
18
+ end
19
+ end
15
20
  root to: "meetings#index"
16
21
  end
22
+
23
+ initializer "decidim_meetings.assets" do |app|
24
+ app.config.assets.precompile += %w(decidim_meetings_manifest.js)
25
+ end
17
26
  end
18
27
  end
19
28
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ FactoryGirl.define do
3
+ factory :meeting, class: Decidim::Meetings::Meeting do
4
+ title { Decidim::Faker::Localized.sentence(3) }
5
+ description { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
6
+ location { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
7
+ location_hints { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
8
+ address { Faker::Lorem.sentence(3) }
9
+ latitude { Faker::Address.latitude }
10
+ longitude { Faker::Address.longitude }
11
+ start_time { 1.day.from_now }
12
+ end_time { start_time.advance(hours: 2) }
13
+ feature { build(:feature, manifest_name: "meetings") }
14
+
15
+ trait :closed do
16
+ closing_report { Decidim::Faker::Localized.sentence(3) }
17
+ attendees_count { rand(50) }
18
+ contributions_count { rand(50) }
19
+ attending_organizations { Array.new(3) { Faker::GameOfThrones.house }.join(", ") }
20
+ closed_at { Time.current }
21
+ end
22
+ end
23
+ end