decidim-members 0.1.13
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 +27 -0
- data/Rakefile +3 -0
- data/app/assets/config/decidim_members_manifest.js +2 -0
- data/app/assets/javascripts/decidim/members/application.js +1 -0
- data/app/assets/stylesheets/decidim/members/application.css +15 -0
- data/app/commands/decidim/members/system/update_organization_module.rb +47 -0
- data/app/controllers/decidim/members/application_controller.rb +9 -0
- data/app/controllers/decidim/members/members_controller.rb +37 -0
- data/app/controllers/decidim/members/system/members_controller.rb +42 -0
- data/app/forms/decidim/members/system/organization_module_form.rb +17 -0
- data/app/helpers/decidim/members/application_helper.rb +8 -0
- data/app/models/decidim/members/application_record.rb +9 -0
- data/app/models/decidim/members/user.rb +16 -0
- data/app/permissions/decidim/members/admin/permissions.rb +20 -0
- data/app/permissions/decidim/members/permissions.rb +19 -0
- data/app/presenters/decidim/members/member_collection_presenter.rb +56 -0
- data/app/queries/decidim/members/filtered_members.rb +20 -0
- data/app/queries/decidim/members/organization_members.rb +16 -0
- data/app/views/decidim/members/members/_user.html.erb +12 -0
- data/app/views/decidim/members/members/index.html.erb +31 -0
- data/app/views/decidim/members/system/members/_form.html.erb +13 -0
- data/app/views/decidim/members/system/members/edit.html.erb +7 -0
- data/app/views/decidim/members/system/members/index.html.erb +38 -0
- data/app/views/layouts/decidim/_head_extra.html.erb +12 -0
- data/app/views/layouts/decidim/system/_login_items.html.erb +8 -0
- data/app/views/layouts/decidim/system/_sidebar.html.erb +11 -0
- data/config/locales/en.yml +42 -0
- data/config/locales/es.yml +42 -0
- data/config/locales/fr.yml +42 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20171003112400_create_search_config.rb +8 -0
- data/db/migrate/20180406122449_add_checkboxes_to_enable_module_members_and_placeholder.rb +8 -0
- data/lib/decidim/members.rb +12 -0
- data/lib/decidim/members/admin.rb +8 -0
- data/lib/decidim/members/admin_engine.rb +14 -0
- data/lib/decidim/members/engine.rb +48 -0
- data/lib/decidim/members/system/engine.rb +37 -0
- data/lib/decidim/members/version.rb +7 -0
- metadata +173 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6cfe0e036f0abaa17fb244daa43edea6f5b02ec765784ab656ccbeaed95cee11
|
4
|
+
data.tar.gz: dd578fd54f49a7274ccfdff373dccf12b005acd824f289fb67389de076bd3dc1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 27245bc10fe3e4a23ceb045b2489454d990702e1e1ef3df591cdb864ee4e92ef7feec2e99a9504f7bf6647b31d7e0a60c3cf19f4f0856ea4dcd7fa644e8ddec8
|
7
|
+
data.tar.gz: 273c88cd99351d0c55510b56c11b5c2a9cc7ce7a8706257cd940935d37836326fb6803d9b39909e89bcee67effd8189e5b7532914a24f028047ebd1177b1cb45
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Decidim::Members
|
2
|
+
|
3
|
+
The Members list and search plugin for Decidim adds an index page to search
|
4
|
+
the members registered on the platform.
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
Adding this plugin to your Decidim based Rails app will add a new main menu
|
9
|
+
entry _Members_ which shows a searchable list of all members.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'decidim-members'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
```bash
|
20
|
+
$ bundle
|
21
|
+
```
|
22
|
+
## Contributing
|
23
|
+
|
24
|
+
Fork it and create a pull request.
|
25
|
+
|
26
|
+
## License
|
27
|
+
Same as Decidim, AGPL v3.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
module System
|
6
|
+
class UpdateOrganizationModule < Rectify::Command
|
7
|
+
def initialize(id, form)
|
8
|
+
@organization_id = id
|
9
|
+
@form = form
|
10
|
+
end
|
11
|
+
|
12
|
+
# Executes the command. Broadcasts these events:
|
13
|
+
#
|
14
|
+
# - :ok when everything is valid.
|
15
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
16
|
+
#
|
17
|
+
# Returns nothing.
|
18
|
+
def call
|
19
|
+
return broadcast(:invalid) if form.invalid?
|
20
|
+
|
21
|
+
transaction do
|
22
|
+
save_organization
|
23
|
+
end
|
24
|
+
|
25
|
+
broadcast(:ok)
|
26
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
27
|
+
broadcast(:invalid)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :form, :organization_id
|
33
|
+
|
34
|
+
def organization
|
35
|
+
@organization ||= Organization.find(organization_id)
|
36
|
+
end
|
37
|
+
|
38
|
+
def save_organization
|
39
|
+
organization.enable_module_members = form.enable_module_members
|
40
|
+
organization.enable_placeholder_members = form.enable_placeholder_members
|
41
|
+
|
42
|
+
organization.save!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class MembersController < Decidim::ApplicationController
|
6
|
+
# protect_from_forgery with: :exception
|
7
|
+
include NeedsPermission
|
8
|
+
|
9
|
+
def index
|
10
|
+
if current_user.present? && current_organization.enable_module_members?
|
11
|
+
enforce_permission_to :read, Decidim::Members::User
|
12
|
+
|
13
|
+
@members = MemberCollectionPresenter.new(
|
14
|
+
organization: current_organization,
|
15
|
+
page: params[:page].to_i,
|
16
|
+
query: params[:q]
|
17
|
+
).attach_controller self
|
18
|
+
else
|
19
|
+
raise ActionController::RoutingError, 'Not Found'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def permission_class_chain
|
26
|
+
[
|
27
|
+
Decidim::Members::Permissions,
|
28
|
+
Decidim::Permissions
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def permission_scope
|
33
|
+
:public
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
module System
|
6
|
+
# Controller that allows managing the appearance of the organization.
|
7
|
+
class MembersController < Decidim::System::ApplicationController
|
8
|
+
helper_method :organization
|
9
|
+
|
10
|
+
def index
|
11
|
+
@organizations = Decidim::Organization.all
|
12
|
+
end
|
13
|
+
|
14
|
+
def edit
|
15
|
+
@form = form(OrganizationModuleForm).from_model(organization)
|
16
|
+
end
|
17
|
+
|
18
|
+
def update
|
19
|
+
@form = form(OrganizationModuleForm).from_params(params)
|
20
|
+
|
21
|
+
UpdateOrganizationModule.call(organization.id, @form) do
|
22
|
+
on(:ok) do
|
23
|
+
flash[:notice] = I18n.t('members.update.success', scope: 'decidim.members.system')
|
24
|
+
redirect_to organization_members_path
|
25
|
+
end
|
26
|
+
|
27
|
+
on(:invalid) do
|
28
|
+
flash.now[:alert] = I18n.t('members.update.error', scope: 'decidim.members.system')
|
29
|
+
render :edit
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def organization
|
37
|
+
@organization ||= Decidim::Organization.find(params[:id])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
module System
|
6
|
+
# A form object used to update the current organization appearance
|
7
|
+
# from the admin dashboard.
|
8
|
+
#
|
9
|
+
class OrganizationModuleForm < Form
|
10
|
+
mimic :organization
|
11
|
+
|
12
|
+
attribute :enable_module_members, Boolean
|
13
|
+
attribute :enable_placeholder_members, Boolean
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class User < Decidim::User
|
6
|
+
include PgSearch
|
7
|
+
|
8
|
+
pg_search_scope :search_by_name_like, against: %i[name nickname],
|
9
|
+
using: { trigram: { threshold: 0.1 } }
|
10
|
+
|
11
|
+
def self.public_spaces
|
12
|
+
not_deleted.no_active_invitation
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
module Admin
|
6
|
+
class Permissions < Decidim::DefaultPermissions
|
7
|
+
def permissions
|
8
|
+
return permission_action unless user
|
9
|
+
|
10
|
+
if permission_action.scope == :admin
|
11
|
+
disallow!
|
12
|
+
return permission_action
|
13
|
+
end
|
14
|
+
|
15
|
+
return permission_action unless user
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class Permissions < Decidim::DefaultPermissions
|
6
|
+
def permissions
|
7
|
+
return permission_action unless user
|
8
|
+
return Decidim::Members::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
|
9
|
+
|
10
|
+
if permission_action.scope == :public
|
11
|
+
allow!
|
12
|
+
return permission_action
|
13
|
+
end
|
14
|
+
|
15
|
+
return permission_action unless user
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class MemberCollectionPresenter < Rectify::Presenter
|
6
|
+
attribute :organization, Decidim::Organization
|
7
|
+
attribute :page, Integer
|
8
|
+
attribute :query, String
|
9
|
+
|
10
|
+
def count
|
11
|
+
unsorted_org_members.count
|
12
|
+
end
|
13
|
+
|
14
|
+
def render_pagination
|
15
|
+
paginate collection, theme: 'decidim'
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_current_page
|
19
|
+
render collection: decorated_members, partial: 'user'
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def collection
|
25
|
+
@collection ||= org_members.page(page).per(12)
|
26
|
+
end
|
27
|
+
|
28
|
+
def decorated_members
|
29
|
+
collection.map do |m|
|
30
|
+
::Decidim::UserPresenter.new(m.becomes(Decidim::User))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def unsorted_org_members
|
35
|
+
@org_members ||= begin
|
36
|
+
scope = OrganizationMembers.new(organization).query
|
37
|
+
scope = FilteredMembers.for(query, scope) if query.present?
|
38
|
+
scope
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def org_members
|
43
|
+
if query.present?
|
44
|
+
session[:members_ordering] = nil
|
45
|
+
unsorted_org_members.order(name: :asc)
|
46
|
+
else
|
47
|
+
unsorted_org_members.reorder Hash[[session_ordering]]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def session_ordering
|
52
|
+
session[:members_ordering] ||= [%i[id name email], %i[asc desc]].map(&:sample)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class FilteredMembers < Rectify::Query
|
6
|
+
def self.for(query_string, scope)
|
7
|
+
new(query_string, scope).query
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(query_string, scope)
|
11
|
+
@query_string = query_string
|
12
|
+
@scope = scope
|
13
|
+
end
|
14
|
+
|
15
|
+
def query
|
16
|
+
@scope.where("name LIKE ?", "%#{@query_string}%")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Members
|
5
|
+
class OrganizationMembers < Rectify::Query
|
6
|
+
def initialize(organization)
|
7
|
+
@organization = organization
|
8
|
+
end
|
9
|
+
|
10
|
+
def query
|
11
|
+
user_ids = Decidim::Verifications::Authorizations.new(organization: @organization, granted: true).pluck(:decidim_user_id).uniq
|
12
|
+
Decidim::User.where(id: user_ids).not_deleted.no_active_invitation.order(name: :asc)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="column">
|
2
|
+
<article class="card card--process">
|
3
|
+
<%= link_to user.profile_path, class: "card__link" do %>
|
4
|
+
<div class="card__image-top" style="background-image:url(<%= user.avatar.url %>)"></div>
|
5
|
+
<% end %>
|
6
|
+
<div class="card__content">
|
7
|
+
<%= link_to user.profile_path, class: "card__link" do %>
|
8
|
+
<h4 class="card__title"><%= user.name %></h4>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
</article>
|
12
|
+
</div>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<% provide :meta_title, t("members.index.title", scope: "decidim") %>
|
2
|
+
|
3
|
+
<main class="wrapper">
|
4
|
+
<section id="members-grid" class="section row collapse">
|
5
|
+
<div class="row collapse order-by">
|
6
|
+
<% if @members.query.present? %>
|
7
|
+
<h2 class="order-by__text section-heading"><%= t "members.index.members_found", scope: "decidim", count: @members.count %></h2>
|
8
|
+
<span style="margin-left: 1em;">(<%= link_to t("members.index.show_all", scope: "decidim"), decidim_members.members_path %>)</span>
|
9
|
+
<% else %>
|
10
|
+
<h2 class="order-by__text section-heading"><%= t "members.index.members", scope: "decidim", count: @members.count %></h2>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div class="row" style="margin-bottom: 3em;">
|
15
|
+
<%= form_tag({}, id: 'member-search', method: :get) do %>
|
16
|
+
<div class="input-group" style='width: 50%; margin: auto;'>
|
17
|
+
<%= text_field_tag :q, @members.query, placeholder: t('members.index.search', scope: 'decidim'), class: 'input-group-field' %>
|
18
|
+
<div class="input-group-button">
|
19
|
+
<button type="submit" class="button button--muted">
|
20
|
+
<%= icon "magnifying-glass", aria_label: t('members.index.search', scope: 'decidim') %>
|
21
|
+
</button>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
26
|
+
<div class="row small-up-1 medium-up-4 large-up-4 card-grid">
|
27
|
+
<%= @members.render_current_page %>
|
28
|
+
</div>
|
29
|
+
</section>
|
30
|
+
<%= @members.render_pagination %>
|
31
|
+
</main>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title"><%= t ".module_members_organization" %></h2>
|
4
|
+
</div>
|
5
|
+
<div class="card-section">
|
6
|
+
<div class="row column">
|
7
|
+
<%= form.check_box :enable_module_members %>
|
8
|
+
</div>
|
9
|
+
<div class="row column">
|
10
|
+
<%= form.check_box :enable_placeholder_members %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%#raise%>
|
2
|
+
<%= decidim_form_for(@form, html: { class: "form edit_organization_module" }, url: organization_member_path(@organization), method: :put) do |f| %>
|
3
|
+
<%= render partial: "form", object: f %>
|
4
|
+
<div class="button--double form-general-submit">
|
5
|
+
<%= f.submit t(".update") %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<% provide :title do %>
|
2
|
+
<h2><%= t ".title" %></h2>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<table class="stack">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th><%= t("models.organization.fields.name", scope: "decidim.system") %></th>
|
9
|
+
<th><%= t("models.organization.fields.created_at", scope: "decidim.system") %></th>
|
10
|
+
<th><%= t("models.organization.fields.enable_module_members", scope: "decidim.system") %></th>
|
11
|
+
<th><%= t("models.organization.fields.enable_placeholder_members", scope: "decidim.system") %></th>
|
12
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.system") %></th>
|
13
|
+
</tr>
|
14
|
+
</thead>
|
15
|
+
<tbody>
|
16
|
+
<% @organizations.each do |organization| %>
|
17
|
+
<tr>
|
18
|
+
<td>
|
19
|
+
<%= link_to organization.name, decidim_system.organization_path(organization) %><br />
|
20
|
+
<%= organization.host %>
|
21
|
+
</td>
|
22
|
+
<td>
|
23
|
+
<%= l organization.created_at, format: :short %>
|
24
|
+
</td>
|
25
|
+
<td>
|
26
|
+
<%= organization.enable_module_members %>
|
27
|
+
</td>
|
28
|
+
<td>
|
29
|
+
<%= organization.enable_placeholder_members %>
|
30
|
+
</td>
|
31
|
+
|
32
|
+
<td class="actions">
|
33
|
+
<%= link_to t("actions.edit", scope: "decidim.system"), decidim_members_system.edit_organization_member_path(organization) %>
|
34
|
+
</td>
|
35
|
+
</tr>
|
36
|
+
<% end %>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% if current_organization.enable_placeholder_members? %>
|
2
|
+
<%= javascript_tag do %>
|
3
|
+
$(document).ready(function(){
|
4
|
+
$('.register-form').find("#user_name").each(function(ev){
|
5
|
+
if(!$(this).val()) {
|
6
|
+
$(this).attr("placeholder", "<%= t('decidim.members.user_form.name').html_safe %>");
|
7
|
+
}
|
8
|
+
$(this).siblings(".help-text").html("<%= t('decidim.members.user_form.username_help').html_safe %>");
|
9
|
+
});
|
10
|
+
});
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
decidim:
|
4
|
+
members:
|
5
|
+
user_form:
|
6
|
+
name: Your name & Organization
|
7
|
+
username_help: Public name and Organization that appears on your posts.
|
8
|
+
index:
|
9
|
+
title: Members
|
10
|
+
members:
|
11
|
+
one: One member
|
12
|
+
other: "%{count} members"
|
13
|
+
members_found:
|
14
|
+
one: One member found
|
15
|
+
other: "%{count} members found"
|
16
|
+
search: Search
|
17
|
+
show_all: Show all
|
18
|
+
system:
|
19
|
+
members:
|
20
|
+
edit:
|
21
|
+
update: Update
|
22
|
+
form:
|
23
|
+
module_members_organization: Module Members Organization
|
24
|
+
index:
|
25
|
+
title: Members
|
26
|
+
update:
|
27
|
+
error: There was an error when updating this organization module.
|
28
|
+
success: Organization module members updated successfully.
|
29
|
+
menu:
|
30
|
+
members: Members
|
31
|
+
pages:
|
32
|
+
home:
|
33
|
+
statistics:
|
34
|
+
members_count: Members
|
35
|
+
system:
|
36
|
+
menu:
|
37
|
+
members: Members
|
38
|
+
models:
|
39
|
+
organization:
|
40
|
+
fields:
|
41
|
+
enable_module_members: Enable module members
|
42
|
+
enable_placeholder_members: Enable placeholder members
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
es:
|
3
|
+
decidim:
|
4
|
+
members:
|
5
|
+
user_form:
|
6
|
+
name: Tu nombre y Organización
|
7
|
+
username_help: Nombre público y Organización que aparece en sus publicaciones.
|
8
|
+
index:
|
9
|
+
title: Miembros
|
10
|
+
members:
|
11
|
+
one: Un miembro
|
12
|
+
other: "%{count} miembros"
|
13
|
+
members_found:
|
14
|
+
one: Un miembro encontrado
|
15
|
+
other: "%{count} miembros encontrados"
|
16
|
+
search: Buscar
|
17
|
+
show_all: Mostrar todos
|
18
|
+
system:
|
19
|
+
members:
|
20
|
+
edit:
|
21
|
+
update: Actualizar
|
22
|
+
form:
|
23
|
+
module_members_organization: Módulo miembros organización
|
24
|
+
index:
|
25
|
+
title: Miembros
|
26
|
+
update:
|
27
|
+
error: Ha habido un error al actualizar este módulo.
|
28
|
+
success: Módulo miembros de la organización acutalizado correctamente.
|
29
|
+
menu:
|
30
|
+
members: Miembros
|
31
|
+
pages:
|
32
|
+
home:
|
33
|
+
statistics:
|
34
|
+
members_count: Miembros
|
35
|
+
system:
|
36
|
+
menu:
|
37
|
+
members: Miembros
|
38
|
+
models:
|
39
|
+
organization:
|
40
|
+
fields:
|
41
|
+
enable_module_members: Habilitar módulo miembros
|
42
|
+
enable_placeholder_members: Habilitat placeholder módulo miembros
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
fr:
|
3
|
+
decidim:
|
4
|
+
members:
|
5
|
+
user_form:
|
6
|
+
name: Votre nom et Organisation
|
7
|
+
username_help: Nom public et Organisation qui apparaît sur vos publications.
|
8
|
+
index:
|
9
|
+
title: Membres
|
10
|
+
members:
|
11
|
+
one: Un membre
|
12
|
+
other: "%{count} membres"
|
13
|
+
members_found:
|
14
|
+
one: Un membre trouvé
|
15
|
+
other: "%{count} membres trouvés"
|
16
|
+
search: Rechercher
|
17
|
+
show_all: Montre tout
|
18
|
+
system:
|
19
|
+
members:
|
20
|
+
edit:
|
21
|
+
update: Mettre à jour
|
22
|
+
form:
|
23
|
+
module_members_organization: Module Membres Organisation
|
24
|
+
index:
|
25
|
+
title: Membres
|
26
|
+
update:
|
27
|
+
error: Une erreur s'est produite lors de la mise à jour de ce module d'organisation.
|
28
|
+
success: Membres du module d'organisation mis à jour avec succès.
|
29
|
+
menu:
|
30
|
+
members: Membres
|
31
|
+
pages:
|
32
|
+
home:
|
33
|
+
statistics:
|
34
|
+
members_count: Membres
|
35
|
+
system:
|
36
|
+
menu:
|
37
|
+
members: Membres
|
38
|
+
models:
|
39
|
+
organization:
|
40
|
+
fields:
|
41
|
+
enable_module_members: Activer les membres du module
|
42
|
+
enable_placeholder_members: Activer les membres réservés
|
data/config/routes.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddCheckboxesToEnableModuleMembersAndPlaceholder < ActiveRecord::Migration[5.1]
|
4
|
+
def change
|
5
|
+
add_column :decidim_organizations, :enable_module_members, :boolean, default: false
|
6
|
+
add_column :decidim_organizations, :enable_placeholder_members, :boolean, default: false
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'decidim/members/admin'
|
4
|
+
require 'decidim/members/engine'
|
5
|
+
require 'decidim/members/system/engine'
|
6
|
+
require 'decidim/members/admin_engine'
|
7
|
+
|
8
|
+
module Decidim
|
9
|
+
module Members
|
10
|
+
# Your code goes here...
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'decidim/core'
|
5
|
+
|
6
|
+
module Decidim
|
7
|
+
module Members
|
8
|
+
# Decidim's Members Rails Admin Engine.
|
9
|
+
# There is nothing to administer, it's 'only provided since Decidim
|
10
|
+
# requires it.
|
11
|
+
class AdminEngine < ::Rails::Engine
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
|
5
|
+
require 'decidim/core'
|
6
|
+
require 'sanitize'
|
7
|
+
require 'pg_search'
|
8
|
+
|
9
|
+
module Decidim
|
10
|
+
module Members
|
11
|
+
# Decidim's Members Rails Engine.
|
12
|
+
class Engine < ::Rails::Engine
|
13
|
+
isolate_namespace Decidim::Members
|
14
|
+
engine_name 'decidim_members'
|
15
|
+
|
16
|
+
initializer 'decidim_members.mount_routes' do |_app|
|
17
|
+
Decidim::Core::Engine.routes do
|
18
|
+
mount Decidim::Members::Engine => '/members'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
routes do
|
23
|
+
root to: 'members#index', as: :members
|
24
|
+
end
|
25
|
+
|
26
|
+
initializer 'decidim.stats' do
|
27
|
+
Decidim.stats.register :members_count, priority: StatsRegistry::HIGH_PRIORITY do |organization, _start_at, _end_at|
|
28
|
+
if organization.enable_module_members?
|
29
|
+
user_ids = Decidim::Verifications::Authorizations.new(organization: organization, granted: true).pluck(:decidim_user_id).uniq
|
30
|
+
Decidim::Members::User.where(id: user_ids).public_spaces.count
|
31
|
+
else
|
32
|
+
0
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
initializer 'decidim_members.menu' do
|
38
|
+
Decidim.menu :menu do |menu|
|
39
|
+
menu.item I18n.t('menu.members', scope: 'decidim'),
|
40
|
+
decidim_members.members_path,
|
41
|
+
position: 2.5,
|
42
|
+
active: :inclusive,
|
43
|
+
if: current_user.present? && current_organization.enable_module_members?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'active_support/all'
|
5
|
+
require 'decidim/core'
|
6
|
+
require 'decidim/system'
|
7
|
+
|
8
|
+
module Decidim
|
9
|
+
module Members
|
10
|
+
module System
|
11
|
+
# Decidim's core Rails Engine.
|
12
|
+
class Engine < ::Rails::Engine
|
13
|
+
isolate_namespace Decidim::Members::System
|
14
|
+
engine_name 'decidim_members_system'
|
15
|
+
|
16
|
+
initializer 'decidim_members_system.mount_routes' do |_app|
|
17
|
+
Decidim::Core::Engine.routes do
|
18
|
+
mount Decidim::Members::System::Engine => '/system'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
routes do
|
23
|
+
resources :organization_members, only: %i[index edit update], controller: 'members'
|
24
|
+
end
|
25
|
+
|
26
|
+
initializer 'decidim_members_system.menu' do
|
27
|
+
Decidim.menu :system_menu do |menu|
|
28
|
+
menu.item I18n.t('menu.members', scope: 'decidim.system'),
|
29
|
+
decidim_members_system.organization_members_path,
|
30
|
+
position: 4,
|
31
|
+
active: :inclusive
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-members
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.13
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Isaac Massot
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: decidim-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.15'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.15.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.15'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.15.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: pg_search
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.1.4
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.1.4
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rails
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '5.2'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '5.2'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: sanitize
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.5'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '4.5'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: decidim-admin
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.15.0
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.15.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: decidim-dev
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.15.0
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.15.0
|
103
|
+
description: This gem is a member list and search plugin for decidim, you can active
|
104
|
+
the gem via system dashboard
|
105
|
+
email:
|
106
|
+
- isaac.mg@coditramuntana.com
|
107
|
+
executables: []
|
108
|
+
extensions: []
|
109
|
+
extra_rdoc_files: []
|
110
|
+
files:
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- app/assets/config/decidim_members_manifest.js
|
114
|
+
- app/assets/javascripts/decidim/members/application.js
|
115
|
+
- app/assets/stylesheets/decidim/members/application.css
|
116
|
+
- app/commands/decidim/members/system/update_organization_module.rb
|
117
|
+
- app/controllers/decidim/members/application_controller.rb
|
118
|
+
- app/controllers/decidim/members/members_controller.rb
|
119
|
+
- app/controllers/decidim/members/system/members_controller.rb
|
120
|
+
- app/forms/decidim/members/system/organization_module_form.rb
|
121
|
+
- app/helpers/decidim/members/application_helper.rb
|
122
|
+
- app/models/decidim/members/application_record.rb
|
123
|
+
- app/models/decidim/members/user.rb
|
124
|
+
- app/permissions/decidim/members/admin/permissions.rb
|
125
|
+
- app/permissions/decidim/members/permissions.rb
|
126
|
+
- app/presenters/decidim/members/member_collection_presenter.rb
|
127
|
+
- app/queries/decidim/members/filtered_members.rb
|
128
|
+
- app/queries/decidim/members/organization_members.rb
|
129
|
+
- app/views/decidim/members/members/_user.html.erb
|
130
|
+
- app/views/decidim/members/members/index.html.erb
|
131
|
+
- app/views/decidim/members/system/members/_form.html.erb
|
132
|
+
- app/views/decidim/members/system/members/edit.html.erb
|
133
|
+
- app/views/decidim/members/system/members/index.html.erb
|
134
|
+
- app/views/layouts/decidim/_head_extra.html.erb
|
135
|
+
- app/views/layouts/decidim/system/_login_items.html.erb
|
136
|
+
- app/views/layouts/decidim/system/_sidebar.html.erb
|
137
|
+
- config/locales/en.yml
|
138
|
+
- config/locales/es.yml
|
139
|
+
- config/locales/fr.yml
|
140
|
+
- config/routes.rb
|
141
|
+
- db/migrate/20171003112400_create_search_config.rb
|
142
|
+
- db/migrate/20180406122449_add_checkboxes_to_enable_module_members_and_placeholder.rb
|
143
|
+
- lib/decidim/members.rb
|
144
|
+
- lib/decidim/members/admin.rb
|
145
|
+
- lib/decidim/members/admin_engine.rb
|
146
|
+
- lib/decidim/members/engine.rb
|
147
|
+
- lib/decidim/members/system/engine.rb
|
148
|
+
- lib/decidim/members/version.rb
|
149
|
+
homepage: https://www.coditramuntana.com/
|
150
|
+
licenses:
|
151
|
+
- AGPL-3.0
|
152
|
+
metadata: {}
|
153
|
+
post_install_message:
|
154
|
+
rdoc_options: []
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
requirements: []
|
168
|
+
rubyforge_project:
|
169
|
+
rubygems_version: 2.7.6
|
170
|
+
signing_key:
|
171
|
+
specification_version: 4
|
172
|
+
summary: Member list and search plugin for decidim
|
173
|
+
test_files: []
|