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.
- checksums.yaml +4 -4
- data/app/assets/config/decidim_meetings_manifest.js +2 -0
- data/app/assets/javascripts/decidim/meetings/map.js.es6.erb +92 -0
- data/app/assets/stylesheets/decidim/meetings/map.css +1 -0
- data/app/commands/decidim/meetings/admin/close_meeting.rb +53 -0
- data/app/commands/decidim/meetings/admin/create_meeting.rb +15 -3
- data/app/commands/decidim/meetings/admin/update_meeting.rb +15 -3
- data/app/controllers/decidim/meetings/admin/application_controller.rb +9 -0
- data/app/controllers/decidim/meetings/admin/attachments_controller.rb +29 -0
- data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +38 -0
- data/app/controllers/decidim/meetings/admin/meetings_controller.rb +0 -12
- data/app/controllers/decidim/meetings/meetings_controller.rb +11 -9
- data/app/forms/decidim/meetings/admin/close_meeting_form.rb +31 -0
- data/app/forms/decidim/meetings/admin/meeting_form.rb +0 -2
- data/app/helpers/decidim/meetings/admin/application_helper.rb +12 -0
- data/app/helpers/decidim/meetings/application_helper.rb +1 -0
- data/app/helpers/decidim/meetings/map_helper.rb +46 -0
- data/app/models/decidim/meetings/meeting.rb +11 -15
- data/app/services/decidim/meetings/meeting_search.rb +0 -1
- data/app/services/decidim/meetings/static_map_generator.rb +50 -0
- data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +23 -0
- data/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +9 -0
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +2 -6
- data/app/views/decidim/meetings/admin/meetings/index.html.erb +14 -0
- data/app/views/decidim/meetings/meetings/_datetime.html.erb +8 -0
- data/app/views/decidim/meetings/meetings/_filters.html.erb +2 -2
- data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +18 -0
- data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +22 -0
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +3 -10
- data/app/views/decidim/meetings/meetings/index.html.erb +42 -0
- data/app/views/decidim/meetings/meetings/index.js.erb +6 -0
- data/app/views/decidim/meetings/meetings/show.html.erb +33 -7
- data/config/i18n-tasks.yml +2 -0
- data/config/locales/ca.yml +37 -4
- data/config/locales/en.yml +34 -1
- data/config/locales/es.yml +36 -3
- data/db/migrate/20170110142105_close_a_meeting.rb +9 -0
- data/db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb +6 -0
- data/db/migrate/20170129153716_remove_short_description_from_meetings.rb +5 -0
- data/lib/decidim/meetings/admin_engine.rb +31 -1
- data/lib/decidim/meetings/feature.rb +20 -6
- data/lib/decidim/meetings/list_engine.rb +10 -1
- data/lib/decidim/meetings/seeds/Exampledocument.pdf +0 -0
- data/lib/decidim/meetings/seeds/city.jpeg +0 -0
- data/lib/decidim/meetings/test/factories.rb +23 -0
- 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">×</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
|
-
|
10
|
-
|
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:
|
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
|
-
|
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
|
-
|
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:
|
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
|
-
|
36
|
-
<
|
37
|
-
|
38
|
-
|
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 %>
|
data/config/i18n-tasks.yml
CHANGED
data/config/locales/ca.yml
CHANGED
@@ -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:
|
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:
|
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
|
-
|
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
|
data/config/locales/en.yml
CHANGED
@@ -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
|
-
|
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
|
data/config/locales/es.yml
CHANGED
@@ -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:
|
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
|
-
|
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
|
@@ -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
|
Binary file
|
Binary file
|
@@ -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
|