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.
Files changed (30) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +23 -0
  3. data/Rakefile +2 -0
  4. data/app/commands/decidim/meetings/admin/create_meeting.rb +40 -0
  5. data/app/commands/decidim/meetings/admin/update_meeting.rb +44 -0
  6. data/app/controllers/decidim/meetings/admin/application_controller.rb +14 -0
  7. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +69 -0
  8. data/app/controllers/decidim/meetings/application_controller.rb +13 -0
  9. data/app/controllers/decidim/meetings/meetings_controller.rb +24 -0
  10. data/app/forms/decidim/meetings/admin/meeting_form.rb +30 -0
  11. data/app/models/decidim/meetings/application_record.rb +9 -0
  12. data/app/models/decidim/meetings/meeting.rb +12 -0
  13. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +32 -0
  14. data/app/views/decidim/meetings/admin/meetings/edit.html.erb +9 -0
  15. data/app/views/decidim/meetings/admin/meetings/index.html.erb +39 -0
  16. data/app/views/decidim/meetings/admin/meetings/new.html.erb +9 -0
  17. data/app/views/decidim/meetings/meetings/_address_details.html.erb +5 -0
  18. data/app/views/decidim/meetings/meetings/index.html.erb +30 -0
  19. data/app/views/decidim/meetings/meetings/show.html.erb +39 -0
  20. data/config/i18n-tasks.yml +4 -0
  21. data/config/locales/ca.yml +44 -0
  22. data/config/locales/en.yml +45 -0
  23. data/config/locales/es.yml +44 -0
  24. data/db/migrate/20161130121354_create_meetings.rb +18 -0
  25. data/lib/decidim/meetings.rb +11 -0
  26. data/lib/decidim/meetings/admin.rb +9 -0
  27. data/lib/decidim/meetings/admin_engine.rb +22 -0
  28. data/lib/decidim/meetings/feature.rb +42 -0
  29. data/lib/decidim/meetings/list_engine.rb +16 -0
  30. 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,2 @@
1
+ # frozen_string_literal: true
2
+ require "decidim/common_rake"
@@ -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,9 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Meetings
4
+ # Abstract class from which all models in this engine inherit.
5
+ class ApplicationRecord < ActiveRecord::Base
6
+ self.abstract_class = true
7
+ end
8
+ end
9
+ 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,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".update") %>
8
+ </div>
9
+ <% end %>
@@ -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,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".create") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <div class="address__details">
2
+ <strong><%== translated_attribute meeting.location %></strong><br />
3
+ <span><%= meeting.address %></span><br />
4
+ <span><%== translated_attribute meeting.location_hints %></span>
5
+ </div>
@@ -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,4 @@
1
+ base_locale: en
2
+ locales: [en]
3
+ ignore_unused:
4
+ - "decidim.features.meetings.name"
@@ -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,9 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Meetings
4
+ # This module contains all the domain logic associated to Decidim's Meetings
5
+ # component admin panel.
6
+ module Admin
7
+ end
8
+ end
9
+ 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: []