decidim-admin 0.20.1 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-admin might be problematic. Click here for more details.

Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -0
  3. data/app/assets/javascripts/decidim/admin/application.js.es6 +1 -0
  4. data/app/assets/javascripts/decidim/admin/bundle.js +5 -5
  5. data/app/assets/javascripts/decidim/admin/bundle.js.map +1 -1
  6. data/app/assets/javascripts/decidim/admin/newsletters.js.es6 +8 -0
  7. data/app/assets/stylesheets/decidim/admin/_variables.scss +1 -1
  8. data/app/assets/stylesheets/decidim/admin/extra/_action-icon.scss +6 -0
  9. data/app/assets/stylesheets/decidim/admin/extra/_cards.scss +11 -0
  10. data/app/assets/stylesheets/decidim/admin/modules/_buttons.scss +5 -0
  11. data/app/assets/stylesheets/decidim/admin/modules/_cards.scss +11 -0
  12. data/app/assets/stylesheets/decidim/admin/modules/_filters.scss +78 -1
  13. data/app/assets/stylesheets/decidim/admin/modules/_layout.scss +1 -1
  14. data/app/assets/stylesheets/decidim/admin/modules/_secondary-nav.scss +5 -1
  15. data/app/assets/stylesheets/decidim/admin/modules/_table-list.scss +24 -3
  16. data/app/cells/decidim/admin/results_per_page/show.erb +16 -0
  17. data/app/cells/decidim/admin/results_per_page_cell.rb +14 -0
  18. data/app/commands/decidim/admin/deliver_newsletter.rb +1 -1
  19. data/app/commands/decidim/admin/update_organization.rb +4 -1
  20. data/app/controllers/concerns/decidim/admin/filterable.rb +152 -0
  21. data/app/controllers/concerns/decidim/admin/officializations/filterable.rb +31 -0
  22. data/app/controllers/concerns/decidim/admin/paginable.rb +20 -0
  23. data/app/controllers/decidim/admin/admin_terms_controller.rb +20 -0
  24. data/app/controllers/decidim/admin/application_controller.rb +2 -0
  25. data/app/controllers/decidim/admin/components/base_controller.rb +5 -1
  26. data/app/controllers/decidim/admin/components_controller.rb +16 -20
  27. data/app/controllers/decidim/admin/concerns/has_private_users.rb +4 -0
  28. data/app/controllers/decidim/admin/newsletters_controller.rb +12 -1
  29. data/app/controllers/decidim/admin/officializations_controller.rb +7 -6
  30. data/app/forms/decidim/admin/organization_form.rb +7 -0
  31. data/app/helpers/decidim/admin/admin_terms_helper.rb +47 -0
  32. data/app/helpers/decidim/admin/application_helper.rb +1 -0
  33. data/app/helpers/decidim/admin/dashboard_helper.rb +25 -0
  34. data/app/helpers/decidim/admin/filterable_helper.rb +121 -0
  35. data/app/helpers/decidim/admin/newsletters_helper.rb +18 -0
  36. data/app/helpers/decidim/admin/paginable/per_page_helper.rb +22 -0
  37. data/app/helpers/decidim/admin/scopes_helper.rb +6 -0
  38. data/app/helpers/decidim/admin/settings_helper.rb +18 -2
  39. data/app/helpers/decidim/admin/user_roles_helper.rb +19 -0
  40. data/app/permissions/decidim/admin/permissions.rb +23 -6
  41. data/app/queries/decidim/admin/newsletter_recipients.rb +11 -4
  42. data/app/views/decidim/admin/admin_terms/show.html.erb +26 -0
  43. data/app/views/decidim/admin/components/_component.html.erb +35 -33
  44. data/app/views/decidim/admin/components/index.html.erb +10 -8
  45. data/app/views/decidim/admin/dashboard/show.html.erb +15 -0
  46. data/app/views/decidim/admin/newsletters/index.html.erb +9 -3
  47. data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +4 -4
  48. data/app/views/decidim/admin/officializations/index.html.erb +2 -38
  49. data/app/views/decidim/admin/organization/_form.html.erb +16 -0
  50. data/app/views/decidim/admin/shared/_filters.html.erb +40 -0
  51. data/app/views/layouts/decidim/admin/_application.html.erb +1 -1
  52. data/config/locales/ar.yml +40 -6
  53. data/config/locales/ca.yml +45 -6
  54. data/config/locales/cs.yml +45 -6
  55. data/config/locales/de.yml +9 -6
  56. data/config/locales/el.yml +1 -0
  57. data/config/locales/en.yml +45 -6
  58. data/config/locales/es-MX.yml +45 -6
  59. data/config/locales/es-PY.yml +45 -6
  60. data/config/locales/es.yml +45 -6
  61. data/config/locales/eu.yml +9 -6
  62. data/config/locales/fi-plain.yml +45 -6
  63. data/config/locales/fi.yml +45 -6
  64. data/config/locales/fr.yml +9 -6
  65. data/config/locales/gl.yml +9 -6
  66. data/config/locales/hu.yml +45 -6
  67. data/config/locales/id-ID.yml +9 -6
  68. data/config/locales/is-IS.yml +9 -6
  69. data/config/locales/it.yml +45 -6
  70. data/config/locales/nl.yml +28 -6
  71. data/config/locales/no.yml +45 -6
  72. data/config/locales/pl.yml +9 -6
  73. data/config/locales/pt-BR.yml +9 -6
  74. data/config/locales/pt.yml +9 -6
  75. data/config/locales/ru.yml +9 -6
  76. data/config/locales/sv.yml +9 -6
  77. data/config/locales/tr-TR.yml +9 -6
  78. data/config/locales/uk.yml +9 -6
  79. data/config/routes.rb +6 -0
  80. data/db/migrate/20191118112040_add_accepted_admin_terms_at_field_to_users.rb +7 -0
  81. data/lib/decidim/admin.rb +17 -0
  82. data/lib/decidim/admin/form_builder.rb +5 -0
  83. data/lib/decidim/admin/test.rb +2 -0
  84. data/lib/decidim/admin/test/filterable_examples.rb +129 -0
  85. data/lib/decidim/admin/test/manage_paginated_collection_examples.rb +22 -0
  86. data/lib/decidim/admin/version.rb +1 -1
  87. data/vendor/assets/javascripts/jquery.serializejson.js +344 -0
  88. metadata +26 -8
@@ -130,6 +130,24 @@ module Decidim
130
130
  { class: space.try(:closed?) ? "red" : "green", title: translated_attribute(space.title).to_s }
131
131
  ]
132
132
  end
133
+
134
+ def newsletter_attention_callout_args
135
+ {
136
+ announcement: {
137
+ body: t("warning", scope: "decidim.admin.newsletters.select_recipients_to_deliver").html_safe
138
+ },
139
+ callout_class: "warning"
140
+ }
141
+ end
142
+
143
+ def newsletter_recipients_count_callout_args
144
+ {
145
+ announcement: {
146
+ body: t("recipients_count", scope: "decidim.admin.newsletters.select_recipients_to_deliver", count: recipients_count_query)
147
+ },
148
+ callout_class: "warning"
149
+ }
150
+ end
133
151
  end
134
152
  end
135
153
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Admin
5
+ module Paginable
6
+ # This module includes helpers the :per_page cell's option
7
+ module PerPageHelper
8
+ def per_page_options
9
+ OpenStruct.new(
10
+ per_page: per_page,
11
+ per_page_range: Decidim::Admin.per_page_range
12
+ )
13
+ end
14
+
15
+ # Renders the pagination dropdown menu in the admin panel.
16
+ def admin_filters_pagination
17
+ cell("decidim/admin/results_per_page", per_page_options)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -32,6 +32,12 @@ module Decidim
32
32
  Option.new(scope_type.id, translated_attribute(scope_type.name))
33
33
  end
34
34
  end
35
+
36
+ def organization_scope_depths(organization = current_organization)
37
+ organization.scope_types.map do |scope_type|
38
+ Option.new(scope_type.id, translated_attribute(scope_type.name))
39
+ end.reverse
40
+ end
35
41
  end
36
42
  end
37
43
  end
@@ -26,9 +26,14 @@ module Decidim
26
26
  if name == :amendments_visibility
27
27
  amendments_visibility_form_field(form, options)
28
28
  elsif attribute.translated?
29
- form.send(:translated, form_method_for_attribute(attribute), name, options.merge(tabs_id: "#{options[:tabs_prefix]}-#{name}-tabs"))
29
+ form_method = form_method_for_attribute(attribute)
30
+ tab_options = { tabs_id: "#{options[:tabs_prefix]}-#{name}-tabs" }
31
+ extra_options = tab_options.merge(extra_options_for_type(form_method))
32
+ form.send(:translated, form_method, name, options.merge(extra_options))
30
33
  else
31
- form.send(form_method_for_attribute(attribute), name, options.merge(extra_options_for(name)))
34
+ form_method = form_method_for_attribute(attribute)
35
+ extra_options = extra_options_for(name).merge(extra_options_for_type(form_method))
36
+ form.send(form_method, name, options.merge(extra_options))
32
37
  end
33
38
  end
34
39
 
@@ -78,6 +83,17 @@ module Decidim
78
83
  end
79
84
  end
80
85
 
86
+ # Handles special cases.
87
+ # Returns an empty Hash or a Hash with extra HTML options.
88
+ def extra_options_for_type(input_type)
89
+ case input_type
90
+ when :text_area
91
+ { rows: 6 }
92
+ else
93
+ {}
94
+ end
95
+ end
96
+
81
97
  # Marks :participatory_texts_enabled setting with a CSS class if the
82
98
  # Proposals component has existing proposals, so it can be identified
83
99
  # in "decidim/admin/form.js". Also, adds a help_text.
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Admin
5
+ module UserRolesHelper
6
+ def user_role_config
7
+ return @user_role_config if @user_role_config
8
+
9
+ space = current_participatory_space
10
+ @user_role_config = if current_user.admin?
11
+ space.user_role_config_for(current_user, :organization_admin)
12
+ else
13
+ role = space.user_roles.find_by(user: current_user)
14
+ space.user_role_config_for(current_user, role&.role)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -16,14 +16,20 @@ module Decidim
16
16
  return permission_action
17
17
  end
18
18
 
19
- return user_manager_permissions if user_manager?
19
+ if user_manager?
20
+ begin
21
+ allow! if user_manager_permissions.allowed?
22
+ rescue Decidim::PermissionAction::PermissionNotSetError
23
+ nil
24
+ end
25
+ end
20
26
 
21
- allow! if user_can_enter_space_area?
27
+ allow! if user_can_enter_space_area?(require_admin_terms_accepted: true)
22
28
 
23
29
  read_admin_dashboard_action?
24
30
  apply_newsletter_permissions_for_admin!
25
31
 
26
- if user.admin?
32
+ if user.admin? && admin_terms_accepted?
27
33
  allow! if read_admin_log_action?
28
34
  allow! if static_page_action?
29
35
  allow! if organization_action?
@@ -66,6 +72,7 @@ module Decidim
66
72
  end
67
73
 
68
74
  def apply_newsletter_permissions_for_admin!
75
+ return unless admin_terms_accepted?
69
76
  return unless permission_action.subject == :newsletter
70
77
  return allow! if user.admin?
71
78
  return unless space_allows_admin_access?
@@ -157,15 +164,19 @@ module Decidim
157
164
  @organization ||= context.fetch(:organization, nil) || context.fetch(:current_organization, nil)
158
165
  end
159
166
 
160
- def user_can_enter_space_area?
167
+ def user_can_enter_space_area?(**args)
161
168
  return unless permission_action.action == :enter &&
162
169
  permission_action.subject == :space_area
163
170
 
164
- space_allows_admin_access_to_current_action?
171
+ space_allows_admin_access_to_current_action?(args)
165
172
  end
166
173
 
167
- def space_allows_admin_access_to_current_action?
174
+ def space_allows_admin_access_to_current_action?(require_admin_terms_accepted: false)
168
175
  Decidim.participatory_space_manifests.any? do |manifest|
176
+ if manifest.name != :initiatives && require_admin_terms_accepted
177
+ next unless admin_terms_accepted?
178
+ end
179
+
169
180
  new_permission_action = Decidim::PermissionAction.new(
170
181
  action: permission_action.action,
171
182
  scope: permission_action.scope,
@@ -181,6 +192,12 @@ module Decidim
181
192
  Decidim::Admin::UserManagerPermissions.new(user, permission_action, context).permissions
182
193
  end
183
194
 
195
+ def admin_terms_accepted?
196
+ return unless permission_action.scope == :admin
197
+
198
+ user&.admin_terms_accepted?
199
+ end
200
+
184
201
  def available_authorization_handlers?
185
202
  user.organization.available_authorization_handlers.any?
186
203
  end
@@ -5,15 +5,22 @@ module Decidim
5
5
  # A class used to find the recipients of the
6
6
  # Newsletter depending on the params of the form
7
7
  class NewsletterRecipients < Rectify::Query
8
- # newsletter - the Newsletter that will be send and needs to be selected the recipients.
8
+ # Syntactic sugar to initialize the class and return the queried objects.
9
+ #
9
10
  # form - params to filter the query
10
- def initialize(newsletter, form)
11
- @newsletter = newsletter
11
+ def self.for(form)
12
+ new(form).query
13
+ end
14
+
15
+ # Initializes the class.
16
+ #
17
+ # form - params to filter the query
18
+ def initialize(form)
12
19
  @form = form
13
20
  end
14
21
 
15
22
  def query
16
- recipients = Decidim::User.where(organization: @newsletter.organization)
23
+ recipients = Decidim::User.where(organization: @form.current_organization)
17
24
  .where.not(newsletter_notifications_at: nil, email: nil, confirmed_at: nil)
18
25
  .not_deleted
19
26
 
@@ -0,0 +1,26 @@
1
+ <%= cell("decidim/announcement", admin_terms_announcement_args ) %>
2
+
3
+ <article class="card">
4
+ <div class="card-section grid-x grid-margin-x">
5
+ <div class="cell medium-12">
6
+
7
+ <div class="content">
8
+ <%= admin_terms_of_use_body %>
9
+ </div>
10
+ </div>
11
+
12
+ <% unless current_user.admin_terms_accepted? %>
13
+ <h4 class="cell medium-12 text-center">
14
+ <%= t("decidim.admin.admin_terms_of_use.actions.title") %>
15
+ </h4>
16
+
17
+ <div class="cell medium-6 small-order-2 medium-order-1 text-center">
18
+ <%= button_to_refuse_admin_terms %>
19
+ </div>
20
+
21
+ <div class="cell medium-6 small-order-1 medium-order-2 text-center">
22
+ <%= button_to_accept_admin_terms %>
23
+ </div>
24
+ <% end %>
25
+ </div>
26
+ </article>
@@ -1,39 +1,41 @@
1
- <tr class="component-<%= component.id %>">
2
- <td>
3
- <%= link_to main_component_path(component), target: "_blank" do %>
4
- <%= translated_attribute component.name %>
5
- <% end %>
6
- </td>
7
- <td>
8
- <%= t "decidim.components.#{component.manifest.name}.name" %>
9
- </td>
10
- <td class="table-list__actions">
11
- <% if component.manifest.admin_engine %>
12
- <%= icon_link_to "pencil", manage_component_path(component), t("actions.manage", scope: "decidim.admin"), class: "action-icon--manage" %>
13
- <% end %>
1
+ <% if user_role_config.component_is_accessible?(component.manifest_name) %>
2
+ <tr class="component-<%= component.id %>">
3
+ <td>
4
+ <%= link_to main_component_path(component), target: "_blank" do %>
5
+ <%= translated_attribute component.name %>
6
+ <% end %>
7
+ </td>
8
+ <td>
9
+ <%= t "decidim.components.#{component.manifest.name}.name" %>
10
+ </td>
11
+ <td class="table-list__actions">
12
+ <% if component.manifest.admin_engine %>
13
+ <%= icon_link_to "pencil", manage_component_path(component), t("actions.manage", scope: "decidim.admin"), class: "action-icon--manage" %>
14
+ <% end %>
14
15
 
15
- <% if allowed_to?(:update, :component, component: component) %>
16
- <% if component.published? %>
17
- <%= icon_link_to "x", url_for(action: :unpublish, id: component, controller: "components"), t("actions.unpublish", scope: "decidim.admin"), class: "action-icon--unpublish", method: :put %>
18
- <% else %>
19
- <%= icon_link_to "check", url_for(action: :publish, id: component, controller: "components"), t("actions.publish", scope: "decidim.admin"), class: "action-icon--publish", method: :put %>
16
+ <% if allowed_to?(:update, :component, component: component) %>
17
+ <% if component.published? %>
18
+ <%= icon_link_to "x", url_for(action: :unpublish, id: component, controller: "components"), t("actions.unpublish", scope: "decidim.admin"), class: "action-icon--unpublish", method: :put %>
19
+ <% else %>
20
+ <%= icon_link_to "check", url_for(action: :publish, id: component, controller: "components"), t("actions.publish", scope: "decidim.admin"), class: "action-icon--publish", method: :put %>
21
+ <% end %>
20
22
  <% end %>
21
- <% end %>
22
23
 
23
- <% if allowed_to? :update, :component, component: component %>
24
- <%= icon_link_to "cog", url_for(action: :edit, id: component, controller: "components"), t("actions.configure", scope: "decidim.admin"), class: "action-icon--configure" %>
25
- <% end %>
24
+ <% if allowed_to? :update, :component, component: component %>
25
+ <%= icon_link_to "cog", url_for(action: :edit, id: component, controller: "components"), t("actions.configure", scope: "decidim.admin"), class: "action-icon--configure" %>
26
+ <% end %>
26
27
 
27
- <% if allowed_to? :update, :component, component: component %>
28
- <% if component.manifest.actions.empty? %>
29
- <%= icon "key", class: "action-icon action-icon--disabled" %>
30
- <% else %>
31
- <%= icon_link_to "key", url_for(action: :edit, component_id: component, controller: "component_permissions"), t("actions.permissions", scope: "decidim.admin"), class: "action-icon--permissions" %>
28
+ <% if allowed_to? :update, :component, component: component %>
29
+ <% if component.manifest.actions.empty? %>
30
+ <%= icon "key", class: "action-icon action-icon--disabled" %>
31
+ <% else %>
32
+ <%= icon_link_to "key", url_for(action: :edit, component_id: component, controller: "component_permissions"), t("actions.permissions", scope: "decidim.admin"), class: "action-icon--permissions" %>
33
+ <% end %>
32
34
  <% end %>
33
- <% end %>
34
35
 
35
- <% if allowed_to? :destroy, :component, component: component %>
36
- <%= icon_link_to "circle-x", url_for(action: :destroy, id: component, controller: "components"), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete %>
37
- <% end %>
38
- </td>
39
- </tr>
36
+ <% if allowed_to? :destroy, :component, component: component %>
37
+ <%= icon_link_to "circle-x", url_for(action: :destroy, id: component, controller: "components"), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete %>
38
+ <% end %>
39
+ </td>
40
+ </tr>
41
+ <% end %>
@@ -2,14 +2,16 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= t("components.title", scope: "decidim.admin") %>
5
- <button class="dropdown tiny button button--title" data-toggle="add-component-dropdown"><%= t "components.index.add", scope: "decidim.admin" %></button>
6
- <div class="dropdown-pane" id="add-component-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
7
- <ul class="vertical menu add-components">
8
- <% @manifests.each do |manifest| %>
9
- <li><%= link_to t("#{manifest.name}.name", scope: "decidim.components"), new_component_path(type: manifest.name), class: manifest.name %></li>
10
- <% end %>
11
- </ul>
12
- </div>
5
+ <% if allowed_to?(:create, :component) %>
6
+ <button class="dropdown tiny button button--title" data-toggle="add-component-dropdown"><%= t "components.index.add", scope: "decidim.admin" %></button>
7
+ <div class="dropdown-pane" id="add-component-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
8
+ <ul class="vertical menu add-components">
9
+ <% @manifests.each do |manifest| %>
10
+ <li><%= link_to t("#{manifest.name}.name", scope: "decidim.components"), new_component_path(type: manifest.name), class: manifest.name %></li>
11
+ <% end %>
12
+ </ul>
13
+ </div>
14
+ <% end %>
13
15
  </h2>
14
16
  </div>
15
17
 
@@ -1,8 +1,15 @@
1
+
1
2
  <h2 class="card-title">
2
3
  <%= t "decidim.admin.titles.dashboard" %>
3
4
  </h2>
5
+
4
6
  <div class="content">
5
7
  <p><%= t ".welcome" %></p>
8
+
9
+ <% unless current_user.admin_terms_accepted? %>
10
+ <%= cell("decidim/announcement", admin_terms_announcement_args ) %>
11
+ <% end %>
12
+
6
13
  <% if allowed_to? :read, :admin_log %>
7
14
  <div class="row">
8
15
  <h3 class="card-title">
@@ -13,4 +20,12 @@
13
20
  <% end %>
14
21
  </div>
15
22
  <% end %>
23
+
24
+ <% if current_user.admin_terms_accepted? %>
25
+ <p class="text-right">
26
+ <small>
27
+ <%= link_to( t("title", scope: "decidim.admin.admin_terms_of_use"), admin_terms_show_path) %>
28
+ </small>
29
+ </p>
30
+ <% end %>
16
31
  </div>
@@ -2,10 +2,16 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= t ".title" %>
5
- <% if allowed_to? :create, :newsletter %>
6
- <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.newsletter.name", scope: "decidim.admin").downcase), ["new", "newsletter"], class: "button tiny button--title new" %>
7
- <% end %>
8
5
  </h2>
6
+ <div class="card-title">
7
+ <div class="text-right">
8
+ <strong class="subscribed_title"><%= t("newsletters.index.subscribed_count", scope: "decidim.admin") %></strong>
9
+ <span class="subscribed_count"><%= recipients_count_query %></span>
10
+ <% if allowed_to? :create, :newsletter %>
11
+ <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.newsletter.name", scope: "decidim.admin").downcase), ["new", "newsletter"], class: "button tiny button--title new" %>
12
+ <% end %>
13
+ </div>
14
+ </div>
9
15
  </div>
10
16
  <div class="card-section">
11
17
  <div class="table-scroll">
@@ -1,13 +1,11 @@
1
- <%= decidim_form_for(@form, url: deliver_newsletter_path(@newsletter), method: :post, html: { class: "form newsletter_deliver" }) do |f| %>
1
+ <%= decidim_form_for(@form, url: deliver_newsletter_path(@newsletter), method: :post, html: { class: "form newsletter_deliver" }, data: { "recipients-count-newsletter-path": recipients_count_newsletter_path(@newsletter) }) do |f| %>
2
2
  <div class="card">
3
3
 
4
4
  <div class="card-divider">
5
5
  <h2 class="card-title"><%= t ".title" %></h2>
6
6
  </div>
7
7
  <div class="card-section">
8
- <div class="callout warning">
9
- <%= t(".warning").html_safe %>
10
- </div>
8
+ <%= cell("decidim/announcement", newsletter_attention_callout_args) %>
11
9
 
12
10
  <div class="card">
13
11
  <div class="card-divider">
@@ -63,6 +61,8 @@
63
61
  </div>
64
62
  <% end %>
65
63
 
64
+ <%= cell("decidim/announcement", newsletter_recipients_count_callout_args) %>
65
+
66
66
  <div class="button--double form-general-submit">
67
67
  <% if allowed_to?(:update, :newsletter, newsletter: @newsletter) && !@newsletter.sent? %>
68
68
  <%= link_to t("actions.edit", scope: "decidim.admin"), ["edit", @newsletter], class: "button" %>
@@ -1,44 +1,8 @@
1
- <div class="filters row">
2
- <div class="column medium-3">
3
- <span class="dropdown-menu-inverted_label"><%= t(".filter_by") %> :</span>
4
- <ul class="dropdown menu dropdown-inverted" data-dropdown-menu data-close-on-click-inside="false">
5
- <li class="is-dropdown-submenu-parent">
6
- <a href="#">
7
- <% if @state.present? %>
8
- <%= t(".filter.#{@state}") %>
9
- <% else %>
10
- <%= t(".filter.all") %>
11
- <% end %>
12
- </a>
13
- <ul class="menu is-dropdown-submenu">
14
- <li><%= link_to t(".filter.officialized"), url_for(state: "officialized", q: @query) %></li>
15
- <li><%= link_to t(".filter.not_officialized"), url_for(state: "not_officialized", q: @query) %></li>
16
- <li><%= link_to t(".filter.all"), url_for(q: @query) %></li>
17
- </ul>
18
- </li>
19
- </ul>
20
- </div>
21
- <div class="column medium-4">
22
- <%= form_tag "", method: :get do %>
23
- <div class="filters__search">
24
- <div class="input-group">
25
- <%= search_field_tag :q, @query,label: false, class: "input-group-field", placeholder: t(".search") %>
26
- <%= hidden_field_tag :state, @state %>
27
- <div class="input-group-button">
28
- <button type="submit" class="button button--muted">
29
- <%= icon "magnifying-glass", aria_label: t(".search") %>
30
- </button>
31
- </div>
32
- </div>
33
- </div>
34
- <% end %>
35
- </div>
36
- </div>
37
-
38
- <div class="card" id='user-groups'>
1
+ <div class="card with-overflow" id='user-groups'>
39
2
  <div class="card-divider">
40
3
  <h2 class="card-title"><%= t "decidim.admin.titles.participants" %></h2>
41
4
  </div>
5
+ <%= admin_filter_selector %>
42
6
  <div class="card-section">
43
7
  <div class="table-scroll">
44
8
  <table class="table-list">