decidim-system 0.0.5 → 0.0.6

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

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50acb919493651bd5ad9897250e52372538f872e
4
- data.tar.gz: 7e76fb5f1bf9fc6cb0fb25e1a384c8dac7711b2e
3
+ metadata.gz: 2c1e17e92f4d745c061701294e94aa16f21c2c2b
4
+ data.tar.gz: 6eee551e0453c5e95d03ae3bf0f1ab4c562e042c
5
5
  SHA512:
6
- metadata.gz: fff304f54eb28d60a34cf60bfa88330cb0d99b8dc44596539d9c4bbb54df7239ff0f83f0f11c56633069e60d95af4765adfc108fd1719502d7a9e76cccccbbcf
7
- data.tar.gz: 87d57032b097afb23dcd1be547fa773d4664309663efa3000e48f6602d9310f898e934bc9c4a58cd236fd89a53f63ea9ddc241e48b27cc3b8f29fd4a671352c6
6
+ metadata.gz: 2da66c51684f0885600c8262662de381eab489a1a0bf4a2d633b0bcf41a3be71f16190eac8a29e7184a705e97dc86cdd07ff9ec16b55ab07e35874b87b7a3ad5
7
+ data.tar.gz: bc71de0f4c691aeaecd41dce1479c4d8131ab86f01ad47e4608dd1b1de48077f5dbee2205337ce7404bea9370b2ed1200c3f1afe67c5728a8ddb1b60eb4b6672
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # Decidim::System
2
- Short description and motivation.
2
+
3
+ This engine adds an administration dashboard so admin can manage a Decidim deploy
4
+ and its organizations when working in a multi-tenant environment.
3
5
 
4
6
  ## Usage
5
- How to use my plugin.
6
7
 
7
- ## Installation
8
+ `decidim-system` is already included in the `decidim` gem, but you can also include it separately:
9
+
8
10
  Add this line to your application's Gemfile:
9
11
 
10
12
  ```ruby
@@ -16,13 +18,48 @@ And then execute:
16
18
  $ bundle
17
19
  ```
18
20
 
19
- Or install it yourself as:
20
- ```bash
21
- $ gem install decidim-system
21
+ ## Multi-tenancy in Decidim
22
+
23
+ A single Decidim deploy can be used by multiple organizations (tenants) at the same time. All resources and entities are always scoped to an organization.
24
+
25
+ When using Decidim as multi-tenant, you should keep these in mind:
26
+
27
+ * All organizations share the same database.
28
+ * Each organization must have a different hostname.
29
+ * Users aren't shared between each organization (the same email can be registered in different organizations and it will be considered as different users).
30
+ * All configuration related to Decidim (`Decidim.config`) is shared between the organizations.
31
+ * Stylesheets aren't customizable per-tenant so UI styles (colors and other variables) are shared.
32
+
33
+ ## Glossary
34
+
35
+ * **Organization**: Each of the tenants using a Decidim deploy.
36
+ * **System admin**: Users that can manage organizations in a Decidim deploy.
37
+ * **Admins**: Users that can manage a **single** organization in a Decidim deploy.
38
+ * **Participatory process admins**: Users that can manage a **single participatory process** in an organization in a Decidim deploy.
39
+
40
+ ## Managing System admins
41
+
42
+ Currently Decidim doesn't provide a way to create the first System Admin in a new deployment. To do it, you should open a Rails console in your application and
43
+ create it:
44
+
45
+ ```ruby
46
+ Decidim::System::Admin.create!(
47
+ email: "your-email@example.org",
48
+ password: "your-safe-password",
49
+ password_confirmation: "your-safe-password"
50
+ )
22
51
  ```
23
52
 
24
- ## Contributing
25
- Contribution directions go here.
53
+ Once you have created your first admin you can access the system dashboard at `https://your-decidim-deployment-host/system` and login with your newly created user.
54
+ From the system dashboard you can add new admins.
55
+
56
+ ## Managing organizations
57
+
58
+ Once you have your system admin setup you can also start managing the organizations in your deploy. To do it, login at the system dashboard and create a new organization
59
+ following the form instructions. After creating it, a new admin user will be created and invited to start managing it.
60
+
61
+ Remember that System admins and regular Admins are completely different users (they don't even share the same database table), so you can't use your
62
+ system user to login in as an organization admin.
26
63
 
27
64
  ## License
28
65
  The gem is available as open source under the terms of the [AGPLv3 License](https://opensource.org/licenses/AGPL-3.0).
@@ -42,7 +42,10 @@ module Decidim
42
42
  Decidim::Organization.create!(
43
43
  name: form.name,
44
44
  host: form.host,
45
+ secondary_hosts: form.clean_secondary_hosts,
46
+ reference_prefix: form.reference_prefix,
45
47
  available_locales: form.available_locales,
48
+ available_authorizations: form.clean_available_authorizations,
46
49
  default_locale: form.default_locale
47
50
  )
48
51
  end
@@ -42,6 +42,8 @@ module Decidim
42
42
  def save_organization
43
43
  organization.name = form.name
44
44
  organization.host = form.host
45
+ organization.secondary_hosts = form.clean_secondary_hosts
46
+ organization.available_authorizations = form.clean_available_authorizations
45
47
 
46
48
  organization.save!
47
49
  end
@@ -4,10 +4,12 @@ module Decidim
4
4
  # The main application controller that inherits from Rails.
5
5
  class ApplicationController < ActionController::Base
6
6
  include FormFactory
7
+ include PayloadInfo
7
8
  protect_from_forgery with: :exception, prepend: true
8
9
 
9
10
  helper Decidim::TranslationsHelper
10
11
  helper Decidim::DecidimFormHelper
12
+ helper Decidim::ReplaceButtonsHelper
11
13
  end
12
14
  end
13
15
  end
@@ -12,6 +12,7 @@ module Decidim
12
12
  attribute :organization_admin_name, String
13
13
  attribute :available_locales, Array
14
14
  attribute :default_locale, String
15
+ attribute :reference_prefix
15
16
 
16
17
  validates :organization_admin_email, :organization_admin_name, :name, :host, presence: true
17
18
  validates :available_locales, presence: true
@@ -12,9 +12,27 @@ module Decidim
12
12
 
13
13
  attribute :name, String
14
14
  attribute :host, String
15
+ attribute :secondary_hosts, String
16
+ attribute :available_authorizations, Array[String]
15
17
 
18
+ validates :name, presence: true
19
+ validates :host, presence: true
16
20
  validate :validate_organization_uniqueness
17
21
 
22
+ def map_model(model)
23
+ self.secondary_hosts = model.secondary_hosts.join("\n")
24
+ end
25
+
26
+ def clean_secondary_hosts
27
+ return unless secondary_hosts
28
+ secondary_hosts.split("\n").map(&:chomp).select(&:present?)
29
+ end
30
+
31
+ def clean_available_authorizations
32
+ return unless available_authorizations
33
+ available_authorizations.select(&:present?)
34
+ end
35
+
18
36
  private
19
37
 
20
38
  def validate_organization_uniqueness
@@ -7,6 +7,16 @@
7
7
  <%= f.text_field :host %>
8
8
  </div>
9
9
 
10
+ <div class="field">
11
+ <%= f.text_area :secondary_hosts %>
12
+ <p class="help-text"><%= t(".secondary_hosts_hint") %></p>
13
+ </div>
14
+
15
+ <div class="field">
16
+ <%= f.label :available_authorizations %>
17
+ <%= f.collection_check_boxes :available_authorizations, Decidim.authorization_handlers, :name, :name %>
18
+ </div>
19
+
10
20
  <div class="actions">
11
21
  <%= f.submit t("decidim.system.actions.save") %>
12
22
  </div>
@@ -7,10 +7,19 @@
7
7
  <%= f.text_field :name, autofocus: true %>
8
8
  </div>
9
9
 
10
+ <div class="field">
11
+ <%= f.text_field :reference_prefix %>
12
+ </div>
13
+
10
14
  <div class="field">
11
15
  <%= f.text_field :host %>
12
16
  </div>
13
17
 
18
+ <div class="field">
19
+ <%= f.text_area :secondary_hosts %>
20
+ <p class="help-text"><%= t(".secondary_hosts_hint") %></p>
21
+ </div>
22
+
14
23
  <div class="field">
15
24
  <%= f.text_field :organization_admin_name %>
16
25
  </div>
@@ -20,29 +29,34 @@
20
29
  </div>
21
30
 
22
31
  <%= f.fields_for :locales do |fields| %>
23
- <div class="field">
24
- <%= f.label :organization_locales, '', class: @form.respond_to?(:errors) && @form.errors[:default_locale].present? ? "is-invalid-label" : "" %>
25
- <table>
26
- <thead>
27
- <tr>
28
- <td>Locale</td>
29
- <td>Enabled <%= f.error_for(:available_locales) %></td>
30
- <td>Default? <%= f.error_for(:default_locale) %></td>
31
- </tr>
32
- </thead>
33
- <tbody>
34
- <% localized_locales.each do |locale| %>
32
+ <div class="field">
33
+ <%= f.label :organization_locales, '', class: @form.respond_to?(:errors) && @form.errors[:default_locale].present? ? "is-invalid-label" : "" %>
34
+ <table>
35
+ <thead>
35
36
  <tr>
36
- <td><%= locale.name %></td>
37
- <td><%= check_box_tag "organization[available_locales][#{locale.id}]", locale.id, @form.available_locales.include?(locale.id) %></td>
38
- <td><%= radio_button_tag "organization[default_locale]", locale.id, @form.default_locale == locale.id %></td>
37
+ <td>Locale</td>
38
+ <td>Enabled <%= f.error_for(:available_locales) %></td>
39
+ <td>Default? <%= f.error_for(:default_locale) %></td>
39
40
  </tr>
40
- <% end %>
41
- </tbody>
42
- </table>
43
- </div>
41
+ </thead>
42
+ <tbody>
43
+ <% localized_locales.each do |locale| %>
44
+ <tr>
45
+ <td><%= locale.name %></td>
46
+ <td><%= check_box_tag "organization[available_locales][#{locale.id}]", locale.id, @form.available_locales.include?(locale.id) %></td>
47
+ <td><%= radio_button_tag "organization[default_locale]", locale.id, @form.default_locale == locale.id %></td>
48
+ </tr>
49
+ <% end %>
50
+ </tbody>
51
+ </table>
52
+ </div>
44
53
  <% end %>
45
54
 
55
+ <div class="field">
56
+ <%= f.label :available_authorizations %>
57
+ <%= f.collection_check_boxes :available_authorizations, Decidim.authorization_handlers, :name, :name %>
58
+ </div>
59
+
46
60
  <div class="actions">
47
61
  <%= f.submit t("decidim.system.models.organization.actions.save_and_invite") %>
48
62
  </div>
@@ -54,9 +54,12 @@ ca:
54
54
  create:
55
55
  error: S'ha produït un error en crear una nova organització.
56
56
  success: L'organització s'ha creat correctament.
57
+ edit:
58
+ secondary_hosts_hint: Introdueix cada un d'ells en una nova línia
57
59
  index:
58
60
  title: Organitzacions
59
61
  new:
62
+ secondary_hosts_hint: Introdueix cada un d'ells en una nova línia
60
63
  title: Nova organització
61
64
  update:
62
65
  error: S'ha produït un error en actualitzar aquesta organització.
@@ -55,9 +55,12 @@ en:
55
55
  create:
56
56
  error: There was an error when creating a new organization.
57
57
  success: Organization created successfully.
58
+ edit:
59
+ secondary_hosts_hint: Enter each one of them in a new line
58
60
  index:
59
61
  title: Organizations
60
62
  new:
63
+ secondary_hosts_hint: Enter each one of them in a new line
61
64
  title: New organization
62
65
  update:
63
66
  error: There was an error when updating this organization.
@@ -54,9 +54,12 @@ es:
54
54
  create:
55
55
  error: Se ha producido un error al crear una nueva organización.
56
56
  success: Organización creada correctamente.
57
+ edit:
58
+ secondary_hosts_hint: Introduce cada uno de ellos en una nueva línea
57
59
  index:
58
60
  title: Organizaciones
59
61
  new:
62
+ secondary_hosts_hint: Introduce cada uno de ellos en una nueva línea
60
63
  title: Nueva organización
61
64
  update:
62
65
  error: Se ha producido un error al actualizar esta organización.
@@ -1,6 +1,9 @@
1
1
  eu:
2
2
  decidim:
3
3
  system:
4
+ admins:
5
+ create:
6
+ success: Admin sortu da
4
7
  models:
5
8
  admin:
6
9
  fields:
@@ -0,0 +1,68 @@
1
+ fi:
2
+ decidim:
3
+ system:
4
+ actions:
5
+ confirm_destroy: Haluatko varmasti poistaa tämän?
6
+ destroy: Poista
7
+ edit: Muokkaa
8
+ new: Uusi %{name}
9
+ save: Tallenna
10
+ title: Toiminnot
11
+ admins:
12
+ create:
13
+ error: Uuden hallinnoijan luonnissa tapahtui virhe.
14
+ success: Hallinnoija luotu onnistuneesti
15
+ destroy:
16
+ success: Hallinnoija poistettu onnistuneesti
17
+ edit:
18
+ title: Muokkaa hallinnoijaa
19
+ update: Päivitä hallinnoija
20
+ index:
21
+ title: Hallinnoijat
22
+ new:
23
+ create: Luo hallinnoija
24
+ title: Uusi hallinnoija
25
+ update:
26
+ error: Hallinnoijan päivityksessä tapahtui virhe.
27
+ success: Hallinnoija päivitetty onnistuneesti
28
+ default_pages:
29
+ placeholders:
30
+ content: Lisää sisältöä tälle sivulle hallintapaneelista.
31
+ title: Oletusotsikko sivulle %{page}
32
+ menu:
33
+ admins: Hallinnoijat
34
+ dashboard: Hallintapaneeli
35
+ organizations: Organisaatiot
36
+ models:
37
+ admin:
38
+ fields:
39
+ created_at: Luotu
40
+ email: Sähköposti
41
+ name: Hallinnoija
42
+ validations:
43
+ email_uniqueness: toinen hallinnointikäyttäjä on jo olemassa samalla sähköpostilla
44
+ organization:
45
+ actions:
46
+ save_and_invite: Luo organisaatioita ja kutsu hallinnointikäyttäjiä
47
+ fields:
48
+ created_at: Luotu
49
+ name: Nimi
50
+ name: Organisaatio
51
+ page:
52
+ name: Sivu
53
+ organizations:
54
+ create:
55
+ error: Uuden organisaation luonnissa tapahtui virhe.
56
+ success: Organisaatio luotu onnistuneesti.
57
+ edit:
58
+ secondary_hosts_hint: Syötä jokainen niistä omalle rivilleen
59
+ index:
60
+ title: Organisaatiot
61
+ new:
62
+ secondary_hosts_hint: Syötä jokainen niistä omalle rivilleen
63
+ title: Uusi organisaatio
64
+ update:
65
+ error: Organisaation päivityksessä tapahtui virhe.
66
+ success: Organisaatio päivitetty onnistuneesti.
67
+ titles:
68
+ dashboard: Hallintapaneeli
data/db/seeds.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  if !Rails.env.production? || ENV["SEED"]
3
3
  Decidim::System::Admin.create!(
4
- email: "system@decidim.org",
4
+ email: "system@example.org",
5
5
  password: "decidim123456",
6
6
  password_confirmation: "decidim123456"
7
7
  )
@@ -9,6 +9,7 @@ require "jquery-rails"
9
9
  require "sassc-rails"
10
10
  require "foundation-rails"
11
11
  require "foundation_rails_helper"
12
+ require "autoprefixer-rails"
12
13
  require "rectify"
13
14
 
14
15
  module Decidim
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-system
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-02-17 00:00:00.000000000 Z
13
+ date: 2017-03-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,34 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.5
21
+ version: 0.0.6
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.0.5
28
+ version: 0.0.6
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rails
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: 5.0.0
36
- - - ">="
37
- - !ruby/object:Gem::Version
38
- version: 5.0.0.1
35
+ version: 5.0.2
39
36
  type: :runtime
40
37
  prerelease: false
41
38
  version_requirements: !ruby/object:Gem::Requirement
42
39
  requirements:
43
40
  - - "~>"
44
41
  - !ruby/object:Gem::Version
45
- version: 5.0.0
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: 5.0.0.1
42
+ version: 5.0.2
49
43
  - !ruby/object:Gem::Dependency
50
44
  name: devise
51
45
  requirement: !ruby/object:Gem::Requirement
@@ -94,14 +88,14 @@ dependencies:
94
88
  requirements:
95
89
  - - "~>"
96
90
  - !ruby/object:Gem::Version
97
- version: 1.7.0
91
+ version: 1.7.1
98
92
  type: :runtime
99
93
  prerelease: false
100
94
  version_requirements: !ruby/object:Gem::Requirement
101
95
  requirements:
102
96
  - - "~>"
103
97
  - !ruby/object:Gem::Version
104
- version: 1.7.0
98
+ version: 1.7.1
105
99
  - !ruby/object:Gem::Dependency
106
100
  name: sassc-rails
107
101
  requirement: !ruby/object:Gem::Requirement
@@ -164,14 +158,14 @@ dependencies:
164
158
  requirements:
165
159
  - - '='
166
160
  - !ruby/object:Gem::Version
167
- version: 0.0.5
161
+ version: 0.0.6
168
162
  type: :development
169
163
  prerelease: false
170
164
  version_requirements: !ruby/object:Gem::Requirement
171
165
  requirements:
172
166
  - - '='
173
167
  - !ruby/object:Gem::Version
174
- version: 0.0.5
168
+ version: 0.0.6
175
169
  description: System administration to create new organization in an installation.
176
170
  email:
177
171
  - josepjaume@gmail.com
@@ -238,6 +232,7 @@ files:
238
232
  - config/locales/en.yml
239
233
  - config/locales/es.yml
240
234
  - config/locales/eu.yml
235
+ - config/locales/fi.yml
241
236
  - config/routes.rb
242
237
  - db/migrate/20160919105637_devise_create_decidim_admins.rb
243
238
  - db/seeds.rb