decidim-meetings 0.0.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/README.md +23 -0
- data/Rakefile +2 -0
- data/app/commands/decidim/meetings/admin/create_meeting.rb +40 -0
- data/app/commands/decidim/meetings/admin/update_meeting.rb +44 -0
- data/app/controllers/decidim/meetings/admin/application_controller.rb +14 -0
- data/app/controllers/decidim/meetings/admin/meetings_controller.rb +69 -0
- data/app/controllers/decidim/meetings/application_controller.rb +13 -0
- data/app/controllers/decidim/meetings/meetings_controller.rb +24 -0
- data/app/forms/decidim/meetings/admin/meeting_form.rb +30 -0
- data/app/models/decidim/meetings/application_record.rb +9 -0
- data/app/models/decidim/meetings/meeting.rb +12 -0
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +32 -0
- data/app/views/decidim/meetings/admin/meetings/edit.html.erb +9 -0
- data/app/views/decidim/meetings/admin/meetings/index.html.erb +39 -0
- data/app/views/decidim/meetings/admin/meetings/new.html.erb +9 -0
- data/app/views/decidim/meetings/meetings/_address_details.html.erb +5 -0
- data/app/views/decidim/meetings/meetings/index.html.erb +30 -0
- data/app/views/decidim/meetings/meetings/show.html.erb +39 -0
- data/config/i18n-tasks.yml +4 -0
- data/config/locales/ca.yml +44 -0
- data/config/locales/en.yml +45 -0
- data/config/locales/es.yml +44 -0
- data/db/migrate/20161130121354_create_meetings.rb +18 -0
- data/lib/decidim/meetings.rb +11 -0
- data/lib/decidim/meetings/admin.rb +9 -0
- data/lib/decidim/meetings/admin_engine.rb +22 -0
- data/lib/decidim/meetings/feature.rb +42 -0
- data/lib/decidim/meetings/list_engine.rb +16 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d1998702c63adcee35cf6ba712d2f8ea986f05bd
|
4
|
+
data.tar.gz: bd7b21aa2f323b62e7b195c42eae8238d3e28e15
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 48441620d5786ab9855fecc90165b6cd87a0b8fbf1ddf7d0b90391f4fa8de14bbbad538bc015990e6c56c05d2149748887b23012cd55cdf2ca864d5552738626
|
7
|
+
data.tar.gz: 289779e9f898af0c999b83ff61ae254b481d721cd3682c3f243f3734fb64beada153d64480bd4b116ce8d696de04ca7879f4602aceea72801a5780cc5d8c5b0c
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Decidim::Meetings
|
2
|
+
The Meeetings module adds meeting to any participatory process. It adds a CRUD engine to the admin and public view scoped inside the participatory process.
|
3
|
+
|
4
|
+
## Usage
|
5
|
+
Meetings will be available as a Feature for a Participatory Process.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'decidim-meetings'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
```bash
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
## Contributing
|
20
|
+
See [Decidim](https://github.com/AjuntamentdeBarcelona/decidim).
|
21
|
+
|
22
|
+
## License
|
23
|
+
See [Decidim](https://github.com/AjuntamentdeBarcelona/decidim).
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
module Admin
|
5
|
+
# This command is executed when the user creates a Meeting from the admin
|
6
|
+
# panel.
|
7
|
+
class CreateMeeting < Rectify::Command
|
8
|
+
def initialize(form)
|
9
|
+
@form = form
|
10
|
+
end
|
11
|
+
|
12
|
+
# Creates the meeting if valid.
|
13
|
+
#
|
14
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
15
|
+
def call
|
16
|
+
return broadcast(:invalid) if @form.invalid?
|
17
|
+
|
18
|
+
create_meeting
|
19
|
+
broadcast(:ok)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def create_meeting
|
25
|
+
Meeting.create!(
|
26
|
+
title: @form.title,
|
27
|
+
short_description: @form.short_description,
|
28
|
+
description: @form.description,
|
29
|
+
end_time: @form.end_time,
|
30
|
+
start_time: @form.start_time,
|
31
|
+
address: @form.address,
|
32
|
+
location: @form.location,
|
33
|
+
location_hints: @form.location_hints,
|
34
|
+
feature: @form.current_feature
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
module Admin
|
5
|
+
# This command is executed when the user changes a Meeting from the admin
|
6
|
+
# panel.
|
7
|
+
class UpdateMeeting < Rectify::Command
|
8
|
+
# Initializes a UpdateMeeting Command.
|
9
|
+
#
|
10
|
+
# form - The form from which to get the data.
|
11
|
+
# meeting - The current instance of the page to be updated.
|
12
|
+
def initialize(form, meeting)
|
13
|
+
@form = form
|
14
|
+
@meeting = meeting
|
15
|
+
end
|
16
|
+
|
17
|
+
# Updates the meeting if valid.
|
18
|
+
#
|
19
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
20
|
+
def call
|
21
|
+
return broadcast(:invalid) if @form.invalid?
|
22
|
+
|
23
|
+
update_meeting
|
24
|
+
broadcast(:ok)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def update_meeting
|
30
|
+
@meeting.update_attributes!(
|
31
|
+
title: @form.title,
|
32
|
+
short_description: @form.short_description,
|
33
|
+
description: @form.description,
|
34
|
+
end_time: @form.end_time,
|
35
|
+
start_time: @form.start_time,
|
36
|
+
address: @form.address,
|
37
|
+
location: @form.location,
|
38
|
+
location_hints: @form.location_hints
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
module Admin
|
5
|
+
# This controller is the abstract class from which all other controllers of
|
6
|
+
# this engine inherit.
|
7
|
+
#
|
8
|
+
# Note that it inherits from `Decidim::Features::BaseController`, which
|
9
|
+
# override its layout and provide all kinds of useful methods.
|
10
|
+
class ApplicationController < Decidim::Admin::Features::BaseController
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
module Admin
|
5
|
+
# This controller allows an admin to manage meetings from a Participatory Process
|
6
|
+
class MeetingsController < Admin::ApplicationController
|
7
|
+
helper_method :meetings
|
8
|
+
|
9
|
+
def new
|
10
|
+
@form = form(MeetingForm).instance
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@form = form(MeetingForm).from_params(params, current_feature: current_feature)
|
15
|
+
|
16
|
+
CreateMeeting.call(@form) do
|
17
|
+
on(:ok) do
|
18
|
+
flash[:notice] = I18n.t("meetings.create.success", scope: "decidim.meetings.admin")
|
19
|
+
redirect_to meetings_path
|
20
|
+
end
|
21
|
+
|
22
|
+
on(:invalid) do
|
23
|
+
flash.now[:alert] = I18n.t("meetings.create.invalid", scope: "decidim.meetings.admin")
|
24
|
+
render action: "new"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def edit
|
30
|
+
@form = form(MeetingForm).from_model(meeting)
|
31
|
+
end
|
32
|
+
|
33
|
+
def update
|
34
|
+
@form = form(MeetingForm).from_params(params, current_feature: current_feature)
|
35
|
+
|
36
|
+
UpdateMeeting.call(@form, meeting) do
|
37
|
+
on(:ok) do
|
38
|
+
flash[:notice] = I18n.t("meetings.update.success", scope: "decidim.meetings.admin")
|
39
|
+
redirect_to meetings_path
|
40
|
+
end
|
41
|
+
|
42
|
+
on(:invalid) do
|
43
|
+
flash.now[:alert] = I18n.t("meetings.update.invalid", scope: "decidim.meetings.admin")
|
44
|
+
render action: "edit"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def destroy
|
50
|
+
meeting.destroy!
|
51
|
+
|
52
|
+
flash[:notice] = I18n.t("meetings.destroy.success", scope: "decidim.meetings.admin")
|
53
|
+
|
54
|
+
redirect_to meetings_path
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def meetings
|
60
|
+
@meetings ||= Meeting.where(feature: current_feature)
|
61
|
+
end
|
62
|
+
|
63
|
+
def meeting
|
64
|
+
@meeting ||= meetings.find(params[:id])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
# This controller is the abstract class from which all other controllers of
|
6
|
+
# this engine inherit.
|
7
|
+
#
|
8
|
+
# Note that it inherits from `Decidim::Components::BaseController`, which
|
9
|
+
# override its layout and provide all kinds of useful methods.
|
10
|
+
class ApplicationController < Decidim::Features::BaseController
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
# This controller is the abstract class from which all other controllers of
|
6
|
+
# this engine inherit.
|
7
|
+
#
|
8
|
+
# Note that it inherits from `Decidim::Features::BaseController`, which
|
9
|
+
# override its layout and provide all kinds of useful methods.
|
10
|
+
class MeetingsController < Decidim::Meetings::ApplicationController
|
11
|
+
helper_method :meetings, :meeting
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def meetings
|
16
|
+
@meetings ||= Meeting.where(decidim_feature_id: current_feature.id).order(start_time: :asc)
|
17
|
+
end
|
18
|
+
|
19
|
+
def meeting
|
20
|
+
@meeting ||= meetings.find(params[:id])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
module Admin
|
5
|
+
# This class holds a Form to create/update meetings from Decidim's admin panel.
|
6
|
+
class MeetingForm < Decidim::Form
|
7
|
+
include TranslatableAttributes
|
8
|
+
|
9
|
+
translatable_attribute :title, String
|
10
|
+
translatable_attribute :short_description, String
|
11
|
+
translatable_attribute :description, String
|
12
|
+
translatable_attribute :location, String
|
13
|
+
translatable_attribute :location_hints, String
|
14
|
+
attribute :address, String
|
15
|
+
attribute :start_time, DateTime
|
16
|
+
attribute :end_time, DateTime
|
17
|
+
|
18
|
+
validates :title, translatable_presence: true
|
19
|
+
validates :short_description, translatable_presence: true
|
20
|
+
validates :description, translatable_presence: true
|
21
|
+
validates :location, translatable_presence: true
|
22
|
+
validates :address, presence: true
|
23
|
+
validates :start_time, presence: true, date: { before: :end_time }
|
24
|
+
validates :end_time, presence: true, date: { after: :start_time }
|
25
|
+
|
26
|
+
validates :current_feature, presence: true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
# The data store for a Meeting in the Decidim::Meetings component. It stores a
|
5
|
+
# title, description and any other useful information to render a custom meeting.
|
6
|
+
class Meeting < Meetings::ApplicationRecord
|
7
|
+
belongs_to :feature, foreign_key: "decidim_feature_id", class_name: Decidim::Feature
|
8
|
+
|
9
|
+
validates :title, presence: true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="field" >
|
2
|
+
<%= form.translated :text_field, :title, autofocus: true %>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<div class="field" >
|
6
|
+
<%= form.translated :editor, :short_description %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="field" >
|
10
|
+
<%= form.translated :editor, :description %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="field" >
|
14
|
+
<%= form.translated :editor, :location %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="field" >
|
18
|
+
<%= form.translated :editor, :location_hints %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="field" >
|
22
|
+
<%= form.text_field :address %>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div class="field" >
|
26
|
+
<%= form.datetime_field :start_time %>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="field" >
|
30
|
+
<%= form.datetime_field :end_time %>
|
31
|
+
</div>
|
32
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<h2><%= t(".title") %></h2>
|
2
|
+
|
3
|
+
<div class="actions title">
|
4
|
+
<%= link_to t("actions.new", scope: "decidim.meetings", name: t("models.meeting.name", scope: "decidim.meetings.admin")), new_meeting_path, class: 'new' if can? :manage, current_feature %>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<table class="stack">
|
8
|
+
<thead>
|
9
|
+
<tr>
|
10
|
+
<th><%= t("models.meeting.fields.title", scope: "decidim.meetings") %></th>
|
11
|
+
<th><%= t("models.meeting.fields.start_time", scope: "decidim.meetings") %></th>
|
12
|
+
<th><%= t("models.meeting.fields.end_time", scope: "decidim.meetings") %></th>
|
13
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.meetings") %></th>
|
14
|
+
</tr>
|
15
|
+
</thead>
|
16
|
+
<tbody>
|
17
|
+
<% meetings.each do |meeting| %>
|
18
|
+
<tr data-id="<%= meeting.id %>">
|
19
|
+
<td>
|
20
|
+
<%= link_to translated_attribute(meeting.title), decidim_meetings.meeting_path(id: meeting, feature_id: current_feature, participatory_process_id: current_participatory_process), target: :blank %><br />
|
21
|
+
</td>
|
22
|
+
<td>
|
23
|
+
<% if meeting.start_time %>
|
24
|
+
<%= l meeting.start_time, format: :long %>
|
25
|
+
<% end%>
|
26
|
+
</td>
|
27
|
+
<td>
|
28
|
+
<% if meeting.end_time %>
|
29
|
+
<%= l meeting.end_time, format: :long %>
|
30
|
+
<% end%>
|
31
|
+
</td>
|
32
|
+
<td class="actions">
|
33
|
+
<%= link_to t("actions.edit", scope: "decidim.meetings"), edit_meeting_path(meeting) if can? :update, current_feature %>
|
34
|
+
<%= 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
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<% end %>
|
38
|
+
</tbody>
|
39
|
+
</table>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<% content_for(:title, t(".title")) %>
|
2
|
+
|
3
|
+
<div class="row small-up-1 medium-up-2 large-up-3 card-grid">
|
4
|
+
<% meetings.each do |meeting| %>
|
5
|
+
<div class="column">
|
6
|
+
<article class="card card--meeting">
|
7
|
+
<div class="card__content">
|
8
|
+
<%= link_to meeting, class: "card__link" do %>
|
9
|
+
<h5 class="card__title"><%= translated_attribute meeting.title %></h5>
|
10
|
+
<% end %>
|
11
|
+
<div class="card__datetime">
|
12
|
+
<div class="card__datetime__date">
|
13
|
+
<%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
|
14
|
+
</div>
|
15
|
+
<div class="card__datetime__time">
|
16
|
+
<%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<%== translated_attribute meeting.description %>
|
20
|
+
<div class="address card__extra">
|
21
|
+
<div class="address__icon">
|
22
|
+
<%= icon "meetings", removeIconClass: true, width: 40, height: 70 %>
|
23
|
+
</div>
|
24
|
+
<%= render partial: 'address_details', locals: { meeting: meeting } %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</article>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<% content_for(:title, translated_attribute(meeting.title)) %>
|
2
|
+
|
3
|
+
<div class="row column view-header">
|
4
|
+
<h2 class="heading2"><%= translated_attribute meeting.title %></h2>
|
5
|
+
</div>
|
6
|
+
<div class="row">
|
7
|
+
<div class="columns section view-side mediumlarge-4 mediumlarge-push-8
|
8
|
+
large-3 large-push-9">
|
9
|
+
<div class="card extra">
|
10
|
+
<div class="card__content">
|
11
|
+
<div class="extra__date">
|
12
|
+
<%= l meeting.start_time, format: "%d" %> <span class="extra__month"><%= l meeting.start_time, format: "%B" %></span>
|
13
|
+
</div>
|
14
|
+
<div class="extra__time">
|
15
|
+
<%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="columns mediumlarge-8 mediumlarge-pull-4">
|
21
|
+
<div class="section">
|
22
|
+
<%== translated_attribute meeting.short_description %>
|
23
|
+
<div class="card card--secondary">
|
24
|
+
<div class="card__content address">
|
25
|
+
<div class="address__info">
|
26
|
+
<div class="address__icon">
|
27
|
+
<%= icon "meetings", width: 40, height: 70 %>
|
28
|
+
</div>
|
29
|
+
<%= render partial: 'address_details', locals: { meeting: meeting } %>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="section">
|
35
|
+
<h3 class="section-heading"><%= t(".meeting_description") %></h3>
|
36
|
+
<%== translated_attribute meeting.description %>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</div>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
ca:
|
2
|
+
decidim:
|
3
|
+
features:
|
4
|
+
meetings:
|
5
|
+
name: Llistat de trobades
|
6
|
+
meetings:
|
7
|
+
actions:
|
8
|
+
confirm_destroy: Esteu segur de que voleu suprimir aquesta trobada?
|
9
|
+
destroy: Esborra
|
10
|
+
edit: Edita
|
11
|
+
new: Nou/va %{name}
|
12
|
+
title: Accions
|
13
|
+
admin:
|
14
|
+
meetings:
|
15
|
+
create:
|
16
|
+
invalid: Hi ha hagut un problema en crear aquesta trobada
|
17
|
+
success: Reunió creada amb èxit
|
18
|
+
destroy:
|
19
|
+
success: La trobada s'ha eliminat correctament
|
20
|
+
edit:
|
21
|
+
title: Edita trobada
|
22
|
+
update: Actualitzar trobada
|
23
|
+
index:
|
24
|
+
title: Llistat de trobades
|
25
|
+
new:
|
26
|
+
create: Crear trobada
|
27
|
+
title: Nova trobada
|
28
|
+
update:
|
29
|
+
invalid: Hi ha hagut un problema en actualitzar aquesta trobada
|
30
|
+
success: Reunió actualitzada correctament
|
31
|
+
models:
|
32
|
+
meeting:
|
33
|
+
name: Trobada
|
34
|
+
meetings:
|
35
|
+
index:
|
36
|
+
title: Llistat de trobades
|
37
|
+
show:
|
38
|
+
meeting_description: Descripció de reunions
|
39
|
+
models:
|
40
|
+
meeting:
|
41
|
+
fields:
|
42
|
+
end_time: Data de finalització
|
43
|
+
start_time: Data d'inici
|
44
|
+
title: Títol
|
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
decidim:
|
4
|
+
features:
|
5
|
+
meetings:
|
6
|
+
name: Meetings
|
7
|
+
meetings:
|
8
|
+
actions:
|
9
|
+
confirm_destroy: Are you sure you want to delete this meeting?
|
10
|
+
destroy: Delete
|
11
|
+
edit: Edit
|
12
|
+
new: New %{name}
|
13
|
+
title: Actions
|
14
|
+
admin:
|
15
|
+
meetings:
|
16
|
+
create:
|
17
|
+
invalid: There's been a problem creating this meeting
|
18
|
+
success: Meeting successfully created
|
19
|
+
destroy:
|
20
|
+
success: Meeting successfully deleted
|
21
|
+
edit:
|
22
|
+
title: Edit meeting
|
23
|
+
update: Update meeting
|
24
|
+
index:
|
25
|
+
title: Meetings
|
26
|
+
new:
|
27
|
+
create: Create meeting
|
28
|
+
title: New meeting
|
29
|
+
update:
|
30
|
+
invalid: There's been a problem updating this meeting
|
31
|
+
success: Meeting successfully updated
|
32
|
+
models:
|
33
|
+
meeting:
|
34
|
+
name: Meeting
|
35
|
+
meetings:
|
36
|
+
index:
|
37
|
+
title: Meetings
|
38
|
+
show:
|
39
|
+
meeting_description: Meeting description
|
40
|
+
models:
|
41
|
+
meeting:
|
42
|
+
fields:
|
43
|
+
end_time: End date
|
44
|
+
start_time: Start date
|
45
|
+
title: Title
|
@@ -0,0 +1,44 @@
|
|
1
|
+
es:
|
2
|
+
decidim:
|
3
|
+
features:
|
4
|
+
meetings:
|
5
|
+
name: Lista de encuentros
|
6
|
+
meetings:
|
7
|
+
actions:
|
8
|
+
confirm_destroy: '¿Está seguro de que quiere eliminar este encuentro?'
|
9
|
+
destroy: Borrar
|
10
|
+
edit: Editar
|
11
|
+
new: Nuevo/a %{name}
|
12
|
+
title: Acciones
|
13
|
+
admin:
|
14
|
+
meetings:
|
15
|
+
create:
|
16
|
+
invalid: Ha habido un problema al crear este encuentro
|
17
|
+
success: Reunión creada con éxito
|
18
|
+
destroy:
|
19
|
+
success: El encuentro se ha eliminado correctamente
|
20
|
+
edit:
|
21
|
+
title: Editar encuentro
|
22
|
+
update: Actualizar encuentro
|
23
|
+
index:
|
24
|
+
title: Lista de encuentros
|
25
|
+
new:
|
26
|
+
create: Crear encuentro
|
27
|
+
title: Nuevo encuentro
|
28
|
+
update:
|
29
|
+
invalid: Ha habido un problema al actualizar este encuentro
|
30
|
+
success: Encuentro actualizado correctamente
|
31
|
+
models:
|
32
|
+
meeting:
|
33
|
+
name: Encuentro
|
34
|
+
meetings:
|
35
|
+
index:
|
36
|
+
title: Lista de encuentros
|
37
|
+
show:
|
38
|
+
meeting_description: Descripción del encuentro
|
39
|
+
models:
|
40
|
+
meeting:
|
41
|
+
fields:
|
42
|
+
end_time: Fecha de finalización
|
43
|
+
start_time: Fecha de inicio
|
44
|
+
title: Título
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateMeetings < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :decidim_meetings_meetings do |t|
|
4
|
+
t.jsonb :title
|
5
|
+
t.jsonb :description
|
6
|
+
t.jsonb :short_description
|
7
|
+
t.datetime :start_time
|
8
|
+
t.datetime :end_time
|
9
|
+
t.text :address
|
10
|
+
t.jsonb :location
|
11
|
+
t.jsonb :location_hints
|
12
|
+
t.references :decidim_feature, index: true
|
13
|
+
t.references :decidim_author, index: true
|
14
|
+
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "decidim/meetings/admin"
|
3
|
+
require "decidim/meetings/list_engine"
|
4
|
+
require "decidim/meetings/admin_engine"
|
5
|
+
require "decidim/meetings/feature"
|
6
|
+
|
7
|
+
module Decidim
|
8
|
+
# Base module for this engine.
|
9
|
+
module Meetings
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
# This is the engine that runs on the public interface of `decidim-meetings`.
|
5
|
+
# It mostly handles rendering the created meeting associated to a participatory
|
6
|
+
# process.
|
7
|
+
class AdminEngine < ::Rails::Engine
|
8
|
+
isolate_namespace Decidim::Meetings::Admin
|
9
|
+
|
10
|
+
paths["db/migrate"] = nil
|
11
|
+
|
12
|
+
routes do
|
13
|
+
resources :meetings
|
14
|
+
root to: "meetings#index"
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_seed
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "decidim/features/namer"
|
4
|
+
|
5
|
+
Decidim.register_feature(:meetings) do |feature|
|
6
|
+
feature.engine = Decidim::Meetings::ListEngine
|
7
|
+
feature.admin_engine = Decidim::Meetings::AdminEngine
|
8
|
+
|
9
|
+
feature.on(:destroy) do |instance|
|
10
|
+
raise StandardError, "Can't remove this feature" if Decidim::Meetings::Meeting.where(feature: instance).any?
|
11
|
+
end
|
12
|
+
|
13
|
+
feature.seeds do
|
14
|
+
Decidim::ParticipatoryProcess.all.each do |process|
|
15
|
+
next unless process.steps.any?
|
16
|
+
|
17
|
+
feature = Decidim::Feature.create!(
|
18
|
+
name: Decidim::Features::Namer.new(process.organization.available_locales, :meetings).i18n_name,
|
19
|
+
manifest_name: :meetings,
|
20
|
+
participatory_process: process
|
21
|
+
)
|
22
|
+
|
23
|
+
3.times do
|
24
|
+
Decidim::Meetings::Meeting.create!(
|
25
|
+
feature: feature,
|
26
|
+
title: Decidim::Faker::Localized.sentence(2),
|
27
|
+
description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
28
|
+
Decidim::Faker::Localized.paragraph(3)
|
29
|
+
end,
|
30
|
+
short_description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
31
|
+
Decidim::Faker::Localized.paragraph(3)
|
32
|
+
end,
|
33
|
+
location: Decidim::Faker::Localized.sentence,
|
34
|
+
location_hints: Decidim::Faker::Localized.sentence,
|
35
|
+
start_time: 3.weeks.from_now,
|
36
|
+
end_time: 3.weeks.from_now + 4.hours,
|
37
|
+
address: "#{Faker::Address.street_address} #{Faker::Address.zip} #{Faker::Address.city}"
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Meetings
|
4
|
+
# This is the engine that runs on the public interface of `decidim-meetings`.
|
5
|
+
# It mostly handles rendering the created meeting associated to a participatory
|
6
|
+
# process.
|
7
|
+
class ListEngine < ::Rails::Engine
|
8
|
+
isolate_namespace Decidim::Meetings
|
9
|
+
|
10
|
+
routes do
|
11
|
+
resources :meetings, only: [:index, :show]
|
12
|
+
root to: "meetings#index"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-meetings
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Josep Jaume Rey Peroy
|
8
|
+
- Marc Riera Casals
|
9
|
+
- Oriol Gual Oliva
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2016-12-21 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: decidim-core
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.0.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 0.0.1
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rectify
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0.8'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.8'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: date_validator
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.9'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.9'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: decidim-dev
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.0.1
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.0.1
|
71
|
+
description: ''
|
72
|
+
email:
|
73
|
+
- josepjaume@gmail.com
|
74
|
+
- mrc2407@gmail.com
|
75
|
+
- oriolgual@gmail.com
|
76
|
+
executables: []
|
77
|
+
extensions: []
|
78
|
+
extra_rdoc_files: []
|
79
|
+
files:
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- app/commands/decidim/meetings/admin/create_meeting.rb
|
83
|
+
- app/commands/decidim/meetings/admin/update_meeting.rb
|
84
|
+
- app/controllers/decidim/meetings/admin/application_controller.rb
|
85
|
+
- app/controllers/decidim/meetings/admin/meetings_controller.rb
|
86
|
+
- app/controllers/decidim/meetings/application_controller.rb
|
87
|
+
- app/controllers/decidim/meetings/meetings_controller.rb
|
88
|
+
- app/forms/decidim/meetings/admin/meeting_form.rb
|
89
|
+
- app/models/decidim/meetings/application_record.rb
|
90
|
+
- app/models/decidim/meetings/meeting.rb
|
91
|
+
- app/views/decidim/meetings/admin/meetings/_form.html.erb
|
92
|
+
- app/views/decidim/meetings/admin/meetings/edit.html.erb
|
93
|
+
- app/views/decidim/meetings/admin/meetings/index.html.erb
|
94
|
+
- app/views/decidim/meetings/admin/meetings/new.html.erb
|
95
|
+
- app/views/decidim/meetings/meetings/_address_details.html.erb
|
96
|
+
- app/views/decidim/meetings/meetings/index.html.erb
|
97
|
+
- app/views/decidim/meetings/meetings/show.html.erb
|
98
|
+
- config/i18n-tasks.yml
|
99
|
+
- config/locales/ca.yml
|
100
|
+
- config/locales/en.yml
|
101
|
+
- config/locales/es.yml
|
102
|
+
- db/migrate/20161130121354_create_meetings.rb
|
103
|
+
- lib/decidim/meetings.rb
|
104
|
+
- lib/decidim/meetings/admin.rb
|
105
|
+
- lib/decidim/meetings/admin_engine.rb
|
106
|
+
- lib/decidim/meetings/feature.rb
|
107
|
+
- lib/decidim/meetings/list_engine.rb
|
108
|
+
homepage: https://github.com/AjuntamentdeBarcelona/decidim
|
109
|
+
licenses:
|
110
|
+
- AGPLv3
|
111
|
+
metadata: {}
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 2.3.1
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 2.5.2
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: A meetings component for decidim's participatory processes.
|
132
|
+
test_files: []
|