decidim-admin 0.3.2 → 0.4.0

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.

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