decidim-admin 0.3.2 → 0.4.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/decidim/admin/extra/_label-required.scss +3 -0
  3. data/app/assets/stylesheets/decidim/admin/extra/_title_bar.scss +57 -1
  4. data/app/commands/decidim/admin/create_participatory_process_admin.rb +28 -7
  5. data/app/commands/decidim/admin/create_participatory_process_step.rb +2 -1
  6. data/app/commands/decidim/admin/destroy_participatory_process_step.rb +5 -2
  7. data/app/commands/decidim/admin/update_feature.rb +1 -0
  8. data/app/commands/decidim/admin/update_organization.rb +10 -5
  9. data/app/commands/decidim/admin/update_participatory_process.rb +4 -2
  10. data/app/controllers/decidim/admin/application_controller.rb +2 -0
  11. data/app/controllers/decidim/admin/concerns/has_attachments.rb +10 -1
  12. data/app/controllers/decidim/admin/concerns/participatory_process_admin.rb +0 -5
  13. data/app/controllers/decidim/admin/features/base_controller.rb +0 -1
  14. data/app/controllers/decidim/admin/moderations_controller.rb +7 -4
  15. data/app/controllers/decidim/admin/organization_controller.rb +9 -3
  16. data/app/controllers/decidim/admin/participatory_process_user_roles_controller.rb +17 -0
  17. data/app/controllers/decidim/admin/participatory_processes_controller.rb +11 -3
  18. data/app/forms/decidim/admin/feature_form.rb +6 -0
  19. data/app/forms/decidim/admin/organization_form.rb +5 -0
  20. data/app/forms/decidim/admin/participatory_process_copy_form.rb +2 -3
  21. data/app/forms/decidim/admin/participatory_process_form.rb +2 -0
  22. data/app/forms/decidim/admin/static_page_form.rb +6 -0
  23. data/app/helpers/decidim/admin/menu_helper.rb +1 -1
  24. data/app/jobs/decidim/admin/newsletter_job.rb +9 -5
  25. data/app/views/decidim/admin/attachments/_form.html.erb +1 -12
  26. data/app/views/decidim/admin/features/_feature.html.erb +2 -2
  27. data/app/views/decidim/admin/features/_form.html.erb +18 -0
  28. data/app/views/decidim/admin/moderations/_report.html.erb +2 -2
  29. data/app/views/decidim/admin/organization/_form.html.erb +5 -35
  30. data/app/views/decidim/admin/participatory_process_groups/_form.html.erb +1 -1
  31. data/app/views/decidim/admin/participatory_process_user_roles/index.html.erb +16 -0
  32. data/app/views/decidim/admin/participatory_processes/_form.html.erb +2 -14
  33. data/app/views/layouts/decidim/admin/_title_bar.html.erb +26 -19
  34. data/app/views/layouts/decidim/admin/participatory_process.html.erb +2 -2
  35. data/config/i18n-tasks.yml +2 -0
  36. data/config/locales/ca.yml +9 -5
  37. data/config/locales/en.yml +9 -5
  38. data/config/locales/es.yml +11 -5
  39. data/config/locales/eu.yml +0 -5
  40. data/config/locales/fr.yml +18 -23
  41. data/config/locales/it.yml +0 -5
  42. data/config/routes.rb +5 -3
  43. data/lib/decidim/admin/test/manage_attachments_examples.rb +1 -2
  44. metadata +7 -7
  45. data/app/assets/stylesheets/decidim/admin/extra/_language-chooser.scss +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5e692aab1c64cc1ef2630d3b30d8265c8dec2b6
4
- data.tar.gz: '08ec9a1c6978924342f20e9e61c7efc48c79b28d'
3
+ metadata.gz: 47c26318821b198a5abef8cc9514114d9be1a543
4
+ data.tar.gz: b78c4f9d445ee587ffc20fad6cdd935884f8ae2e
5
5
  SHA512:
6
- metadata.gz: b26e08c17cd13a07f3553e81ef567d892489c152d9ee9b15201908e8afe2e5c326af83bc5e07c1aa2e9ca91c77b5825e64f9676858d4b380275e28fc64b259a0
7
- data.tar.gz: f9fe0c60303db75a256a2665eeaf3b8cd167af1608bea107be692b4f9f9862979c27c202937ed5222c4f170ee849b7f3f82ef91537cffd06a8a8561ba8398a9d
6
+ metadata.gz: dbb45517bed3f266030d3ac5ece8adc8cd387040bf34def83bc72bebde4eb6457d989ac6d591a7d42fc08264251b40a2d626a0f03c868ab6ef3af0f7b9680c20
7
+ data.tar.gz: 0e26714cb55d3f073cf0dbeb58584d2413016b2fbb9edd49fcf861bd9e0d2737f73a252334c2b1f853fb8c4c2b1457d9f6fe49824d05958eabc6b8b5b1d98b0c
@@ -0,0 +1,3 @@
1
+ .label-required {
2
+ margin-left: 5px;
3
+ }
@@ -2,4 +2,60 @@
2
2
  a.logo {
3
3
  color: #fff;
4
4
  }
5
- }
5
+ @include breakpoint(smallmedium down){
6
+ border-top: 2.125rem solid darken($dark-gray, 15%);
7
+ }
8
+ }
9
+
10
+ .tool-bar{
11
+ text-align: right;
12
+ position: absolute;
13
+ right: 2rem;
14
+ vertical-align: middle;
15
+ @include breakpoint(smallmedium down){
16
+ position: initial;
17
+ }
18
+ .user-login{
19
+ vertical-align: middle;
20
+ position: initial;
21
+ text-align: left;
22
+ display: inline-block;
23
+ margin-top: 0px;
24
+ @include breakpoint(smallmedium down){
25
+ position: absolute;
26
+ right: 2rem;
27
+ margin-top: -1.2rem;
28
+ }
29
+ }
30
+ .language-choose{
31
+ position: initial;
32
+ vertical-align: middle;
33
+ text-align: left;
34
+ display: inline-block;
35
+ vertical-align: middle;
36
+ .is-dropdown-submenu-parent a{
37
+ color: #fff;
38
+ &:after{
39
+ border-color: #fff transparent transparent !important;
40
+ }
41
+ }
42
+ .is-dropdown-submenu li > a {
43
+ color: $dark-gray;
44
+ &:hover{
45
+ background-color: lighten($medium-gray, 30%)
46
+ }
47
+ }
48
+ @include breakpoint(smallmedium down){
49
+ font-size: .8rem;
50
+ position: absolute;
51
+ top: -2.2rem;
52
+ left: .5rem;
53
+ margin-left: 0;
54
+ .dropdown.menu > li.is-dropdown-submenu-parent > a::after{
55
+ border-width: 3px;
56
+ right: 10px;
57
+ margin-top: 0;
58
+ }
59
+ }
60
+ }
61
+ }
@@ -24,9 +24,12 @@ module Decidim
24
24
  # Returns nothing.
25
25
  def call
26
26
  return broadcast(:invalid) if form.invalid?
27
- return broadcast(:invalid) unless user
28
27
 
29
- create_role
28
+ ActiveRecord::Base.transaction do
29
+ create_or_invite_user
30
+ create_role
31
+ end
32
+
30
33
  broadcast(:ok)
31
34
  rescue ActiveRecord::RecordInvalid
32
35
  form.errors.add(:email, :taken)
@@ -35,21 +38,39 @@ module Decidim
35
38
 
36
39
  private
37
40
 
38
- attr_reader :form, :participatory_process, :current_user
41
+ attr_reader :form, :participatory_process, :current_user, :user
39
42
 
40
43
  def create_role
41
- ParticipatoryProcessUserRole.create!(
44
+ ParticipatoryProcessUserRole.find_or_create_by!(
42
45
  role: form.role.to_sym,
43
46
  user: user,
44
47
  participatory_process: @participatory_process
45
48
  )
46
49
  end
47
50
 
48
- def user
49
- @user ||= User.where(
51
+ def create_or_invite_user
52
+ @user ||= existing_user || new_user
53
+ end
54
+
55
+ def existing_user
56
+ return @existing_user if defined?(@existing_user)
57
+
58
+ @existing_user = User.where(
50
59
  email: form.email,
51
60
  organization: participatory_process.organization
52
- ).first || InviteUser.call(user_form) do
61
+ ).first
62
+
63
+ if @existing_user && !@existing_user.invitation_accepted?
64
+ InviteUserAgain.call(@existing_user, invitation_instructions)
65
+ end
66
+
67
+ @existing_user
68
+ end
69
+
70
+ def new_user
71
+ new_user_form = user_form.dup
72
+ new_user_form.roles = []
73
+ @new_user ||= InviteUser.call(new_user_form) do
53
74
  on(:ok) do |user|
54
75
  return user
55
76
  end
@@ -38,7 +38,8 @@ module Decidim
38
38
  description: form.description,
39
39
  start_date: form.start_date,
40
40
  end_date: form.end_date,
41
- participatory_process: @participatory_process
41
+ participatory_process: @participatory_process,
42
+ active: @participatory_process.steps.empty?
42
43
  )
43
44
  end
44
45
  end
@@ -19,8 +19,7 @@ module Decidim
19
19
  #
20
20
  # Returns nothing.
21
21
  def call
22
- return broadcast(:invalid, :last_step) if @participatory_process.steps.count == 1
23
- return broadcast(:invalid, :active_step) if @step.active?
22
+ return broadcast(:invalid, :active_step) if active_step?
24
23
 
25
24
  @step.destroy!
26
25
  reorder_steps
@@ -29,6 +28,10 @@ module Decidim
29
28
 
30
29
  private
31
30
 
31
+ def active_step?
32
+ @participatory_process.steps.count > 1 && @step.active?
33
+ end
34
+
32
35
  def reorder_steps
33
36
  steps = @participatory_process.steps.reload
34
37
 
@@ -36,6 +36,7 @@ module Decidim
36
36
  @feature.update_attributes(
37
37
  name: form.name,
38
38
  settings: form.settings,
39
+ default_step_settings: form.default_step_settings,
39
40
  step_settings: form.step_settings,
40
41
  weight: form.weight
41
42
  )
@@ -53,12 +53,17 @@ module Decidim
53
53
  github_handler: form.github_handler,
54
54
  description: form.description,
55
55
  welcome_text: form.welcome_text,
56
- homepage_image: form.homepage_image || organization.homepage_image,
57
- logo: form.logo || organization.logo,
58
- favicon: form.favicon || organization.favicon,
56
+ homepage_image: form.homepage_image,
57
+ remove_homepage_image: form.remove_homepage_image,
58
+ logo: form.logo,
59
+ remove_logo: form.remove_logo,
60
+ favicon: form.favicon,
61
+ remove_favicon: form.remove_favicon,
59
62
  default_locale: form.default_locale,
60
- official_img_header: form.official_img_header || organization.official_img_header,
61
- official_img_footer: form.official_img_footer || organization.official_img_footer,
63
+ official_img_header: form.official_img_header,
64
+ remove_official_img_header: form.remove_official_img_header,
65
+ official_img_footer: form.official_img_footer,
66
+ remove_official_img_footer: form.remove_official_img_footer,
62
67
  official_url: form.official_url,
63
68
  show_statistics: form.show_statistics
64
69
  }
@@ -48,8 +48,10 @@ module Decidim
48
48
  subtitle: form.subtitle,
49
49
  slug: form.slug,
50
50
  hashtag: form.hashtag,
51
- hero_image: form.hero_image || participatory_process.hero_image,
52
- banner_image: form.banner_image || participatory_process.banner_image,
51
+ hero_image: form.hero_image,
52
+ remove_hero_image: form.remove_hero_image,
53
+ banner_image: form.banner_image,
54
+ remove_banner_image: form.remove_banner_image,
53
55
  promoted: form.promoted,
54
56
  description: form.description,
55
57
  short_description: form.short_description,
@@ -9,6 +9,7 @@ module Decidim
9
9
  include FormFactory
10
10
  include LocaleSwitcher
11
11
  include PayloadInfo
12
+
12
13
  helper Decidim::Admin::ApplicationHelper
13
14
  helper Decidim::Admin::AttributesDisplayHelper
14
15
  helper Decidim::Admin::FeatureSettingsHelper
@@ -21,6 +22,7 @@ module Decidim
21
22
  helper Decidim::OrganizationScopesHelper
22
23
  helper Decidim::TranslationsHelper
23
24
  helper Decidim::LanguageChooserHelper
25
+ helper Decidim::FeaturePathHelper
24
26
 
25
27
  protect_from_forgery with: :exception, prepend: true
26
28
 
@@ -54,7 +54,7 @@ module Decidim
54
54
  def update
55
55
  @attachment = collection.find(params[:id])
56
56
  authorize! :update, authorization_object
57
- @form = form(AttachmentForm).from_params(params)
57
+ @form = form(AttachmentForm).from_params(attachment_params)
58
58
 
59
59
  UpdateAttachment.call(@attachment, @form) do
60
60
  on(:ok) do
@@ -110,6 +110,15 @@ module Decidim
110
110
  def collection
111
111
  @collection ||= attached_to.attachments
112
112
  end
113
+
114
+ private
115
+
116
+ def attachment_params
117
+ {
118
+ id: params[:id],
119
+ file: @attachment.file
120
+ }.merge(params[:attachment].to_unsafe_h)
121
+ end
113
122
  end
114
123
  end
115
124
  end
@@ -11,7 +11,6 @@ module Decidim
11
11
 
12
12
  included do
13
13
  helper_method :participatory_process
14
- before_action :ensure_participatory_process
15
14
 
16
15
  layout "decidim/admin/participatory_process"
17
16
  end
@@ -22,10 +21,6 @@ module Decidim
22
21
  @participatory_process ||=
23
22
  current_organization.participatory_processes.find(params[:participatory_process_id])
24
23
  end
25
-
26
- def ensure_participatory_process
27
- raise ActionController::RoutingError, "Not Found" unless participatory_process
28
- end
29
24
  end
30
25
  end
31
26
  end
@@ -8,7 +8,6 @@ module Decidim
8
8
  class BaseController < Admin::ApplicationController
9
9
  skip_authorize_resource
10
10
  include Concerns::ParticipatoryProcessAdmin
11
- include NeedsParticipatoryProcess
12
11
  include FeatureSettings
13
12
 
14
13
  helper Decidim::Admin::ExportsHelper
@@ -48,17 +48,20 @@ module Decidim
48
48
 
49
49
  def moderations
50
50
  @moderations ||= begin
51
- moderations = Decidim::Moderation.where(participatory_process: participatory_process)
52
51
  if params[:hidden]
53
- moderations.where.not(hidden_at: nil)
52
+ participatory_process_moderations.where.not(hidden_at: nil)
54
53
  else
55
- moderations.where(hidden_at: nil)
54
+ participatory_process_moderations.where(hidden_at: nil)
56
55
  end
57
56
  end
58
57
  end
59
58
 
60
59
  def reportable
61
- @reportable ||= Decidim::Moderation.where(participatory_process: participatory_process).find(params[:id]).reportable
60
+ @reportable ||= participatory_process_moderations.find(params[:id]).reportable
61
+ end
62
+
63
+ def participatory_process_moderations
64
+ @participatory_process_moderations ||= Decidim::Moderation.where(participatory_process: participatory_process)
62
65
  end
63
66
  end
64
67
  end
@@ -16,7 +16,7 @@ module Decidim
16
16
 
17
17
  def update
18
18
  authorize! :update, current_organization
19
- @form = form(OrganizationForm).from_params(form_params)
19
+ @form = form(OrganizationForm).from_params(organization_params)
20
20
 
21
21
  UpdateOrganization.call(current_organization, @form) do
22
22
  on(:ok) do
@@ -33,10 +33,16 @@ module Decidim
33
33
 
34
34
  private
35
35
 
36
- def form_params
36
+ def organization_params
37
37
  params[:organization] ||= {}
38
38
  params[:organization][:id] ||= current_organization.id
39
- params
39
+ {
40
+ homepage_image: current_organization.homepage_image,
41
+ logo: current_organization.logo,
42
+ favicon: current_organization.favicon,
43
+ official_img_header: current_organization.official_img_header,
44
+ official_img_footer: current_organization.official_img_footer
45
+ }.merge(params[:organization].to_unsafe_h)
40
46
  end
41
47
  end
42
48
  end
@@ -70,6 +70,23 @@ module Decidim
70
70
  redirect_to participatory_process_user_roles_path(@participatory_process_user_role.participatory_process)
71
71
  end
72
72
 
73
+ def resend_invitation
74
+ @user_role = collection.find(params[:id])
75
+ authorize! :invite, @user_role
76
+
77
+ InviteUserAgain.call(@user_role.user, "invite_admin") do
78
+ on(:ok) do
79
+ flash[:notice] = I18n.t("users.resend_invitation.success", scope: "decidim.admin")
80
+ end
81
+
82
+ on(:invalid) do
83
+ flash[:alert] = I18n.t("users.resend_invitation.error", scope: "decidim.admin")
84
+ end
85
+ end
86
+
87
+ redirect_to participatory_process_user_roles_path(participatory_process)
88
+ end
89
+
73
90
  private
74
91
 
75
92
  def collection
@@ -27,7 +27,7 @@ module Decidim
27
27
  CreateParticipatoryProcess.call(@form) do
28
28
  on(:ok) do |participatory_process|
29
29
  flash[:notice] = I18n.t("participatory_processes.create.success", scope: "decidim.admin")
30
- redirect_to edit_participatory_process_path(participatory_process)
30
+ redirect_to participatory_process_steps_path(participatory_process)
31
31
  end
32
32
 
33
33
  on(:invalid) do
@@ -47,7 +47,7 @@ module Decidim
47
47
  def update
48
48
  @participatory_process = collection.find(params[:id])
49
49
  authorize! :update, @participatory_process
50
- @form = form(ParticipatoryProcessForm).from_params(params)
50
+ @form = form(ParticipatoryProcessForm).from_params(participatory_process_params)
51
51
 
52
52
  UpdateParticipatoryProcess.call(@participatory_process, @form) do
53
53
  on(:ok) do |participatory_process|
@@ -57,7 +57,7 @@ module Decidim
57
57
 
58
58
  on(:invalid) do
59
59
  flash.now[:alert] = I18n.t("participatory_processes.update.error", scope: "decidim.admin")
60
- render :edit
60
+ render :edit, layout: "decidim/admin/participatory_process"
61
61
  end
62
62
  end
63
63
  end
@@ -88,6 +88,14 @@ module Decidim
88
88
  def collection
89
89
  @collection ||= ManageableParticipatoryProcessesForUser.for(current_user)
90
90
  end
91
+
92
+ def participatory_process_params
93
+ {
94
+ id: params[:id],
95
+ hero_image: @participatory_process.hero_image,
96
+ banner_image: @participatory_process.banner_image
97
+ }.merge(params[:participatory_process].to_unsafe_h)
98
+ end
91
99
  end
92
100
  end
93
101
  end
@@ -14,6 +14,7 @@ module Decidim
14
14
  validates :name, translatable_presence: true
15
15
 
16
16
  attribute :settings, Object
17
+ attribute :default_step_settings, Object
17
18
  attribute :manifest
18
19
  attribute :weight, Integer, default: 0
19
20
 
@@ -23,12 +24,17 @@ module Decidim
23
24
  def map_model(model)
24
25
  self.attributes = model.attributes
25
26
  self.settings = model.settings
27
+ self.default_step_settings = model.default_step_settings
26
28
  end
27
29
 
28
30
  def settings?
29
31
  settings.manifest.attributes.any?
30
32
  end
31
33
 
34
+ def default_step_settings?
35
+ default_step_settings.manifest.attributes.any?
36
+ end
37
+
32
38
  def step_settings?
33
39
  return false unless participatory_process.steps.any?
34
40
 
@@ -19,11 +19,16 @@ module Decidim
19
19
  attribute :github_handler, String
20
20
  attribute :default_locale, String
21
21
  attribute :homepage_image
22
+ attribute :remove_homepage_image
22
23
  attribute :logo
24
+ attribute :remove_logo
23
25
  attribute :favicon
26
+ attribute :remove_favicon
24
27
  attribute :official_url
25
28
  attribute :official_img_header
29
+ attribute :remove_official_img_header
26
30
  attribute :official_img_footer
31
+ attribute :remove_official_img_footer
27
32
  attribute :show_statistics
28
33
 
29
34
  translatable_attribute :description, String