decidim-system 0.0.1.alpha3
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-system might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +28 -0
- data/Rakefile +32 -0
- data/app/assets/config/decidim_system_manifest.js +2 -0
- data/app/assets/javascripts/decidim/system.js +21 -0
- data/app/assets/stylesheets/decidim/system/_actions.scss +8 -0
- data/app/assets/stylesheets/decidim/system/_foundation_and_overrides.scss +52 -0
- data/app/assets/stylesheets/decidim/system/_layout.scss +16 -0
- data/app/assets/stylesheets/decidim/system/_login.scss +36 -0
- data/app/assets/stylesheets/decidim/system/_settings.scss +566 -0
- data/app/assets/stylesheets/decidim/system/_sidebar.scss +73 -0
- data/app/assets/stylesheets/decidim/system/_tables.scss +5 -0
- data/app/assets/stylesheets/decidim/system.scss +8 -0
- data/app/commands/decidim/system/create_admin.rb +40 -0
- data/app/commands/decidim/system/register_organization.rb +59 -0
- data/app/commands/decidim/system/update_admin.rb +52 -0
- data/app/commands/decidim/system/update_organization.rb +51 -0
- data/app/controllers/decidim/system/admins_controller.rb +67 -0
- data/app/controllers/decidim/system/application_controller.rb +11 -0
- data/app/controllers/decidim/system/dashboard_controller.rb +9 -0
- data/app/controllers/decidim/system/devise/passwords_controller.rb +12 -0
- data/app/controllers/decidim/system/devise/sessions_controller.rb +12 -0
- data/app/controllers/decidim/system/organizations_controller.rb +59 -0
- data/app/forms/decidim/system/admin_form.rb +33 -0
- data/app/forms/decidim/system/register_organization_form.rb +20 -0
- data/app/forms/decidim/system/update_organization_form.rb +28 -0
- data/app/helpers/decidim/system/application_helper.rb +12 -0
- data/app/jobs/decidim/system/application_job.rb +9 -0
- data/app/mailers/decidim/system/application_mailer.rb +11 -0
- data/app/models/decidim/system/admin.rb +18 -0
- data/app/models/decidim/system/application_record.rb +10 -0
- data/app/views/decidim/system/admins/_form.html.erb +11 -0
- data/app/views/decidim/system/admins/edit.html.erb +11 -0
- data/app/views/decidim/system/admins/index.html.erb +33 -0
- data/app/views/decidim/system/admins/new.html.erb +11 -0
- data/app/views/decidim/system/admins/show.html.erb +9 -0
- data/app/views/decidim/system/dashboard/show.html.erb +3 -0
- data/app/views/decidim/system/devise/mailers/password_change.html.erb +3 -0
- data/app/views/decidim/system/devise/mailers/reset_password_instructions.html.erb +8 -0
- data/app/views/decidim/system/devise/passwords/edit.html.erb +23 -0
- data/app/views/decidim/system/devise/passwords/new.html.erb +15 -0
- data/app/views/decidim/system/devise/sessions/new.html.erb +23 -0
- data/app/views/decidim/system/devise/shared/_links.html.erb +25 -0
- data/app/views/decidim/system/organizations/edit.html.erb +17 -0
- data/app/views/decidim/system/organizations/index.html.erb +34 -0
- data/app/views/decidim/system/organizations/new.html.erb +25 -0
- data/app/views/decidim/system/organizations/show.html.erb +11 -0
- data/app/views/layouts/decidim/system/_header.html.erb +4 -0
- data/app/views/layouts/decidim/system/_login_items.html.erb +8 -0
- data/app/views/layouts/decidim/system/_sidebar.html.erb +15 -0
- data/app/views/layouts/decidim/system/application.html.erb +40 -0
- data/app/views/layouts/decidim/system/login.html.erb +19 -0
- data/config/i18n-tasks.yml +120 -0
- data/config/locales/en.yml +60 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20160919105637_devise_create_decidim_admins.rb +26 -0
- data/db/seeds.rb +9 -0
- data/lib/decidim/system/engine.rb +31 -0
- data/lib/decidim/system.rb +12 -0
- data/lib/tasks/decidim/system_tasks.rake +5 -0
- metadata +317 -0
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# A command with all the business logic when creating a new organization in
|
5
|
+
# the system. It creates the organization and invites the admin to the
|
6
|
+
# system.
|
7
|
+
class RegisterOrganization < Rectify::Command
|
8
|
+
# Public: Initializes the command.
|
9
|
+
#
|
10
|
+
# form - A form object with the params.
|
11
|
+
def initialize(form)
|
12
|
+
@form = form
|
13
|
+
end
|
14
|
+
|
15
|
+
# Executes the command. Braodcasts these events:
|
16
|
+
#
|
17
|
+
# - :ok when everything is valid.
|
18
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
def call
|
22
|
+
return broadcast(:invalid) if form.invalid?
|
23
|
+
|
24
|
+
transaction do
|
25
|
+
organization = create_organization
|
26
|
+
invite_admin(organization)
|
27
|
+
end
|
28
|
+
|
29
|
+
broadcast(:ok)
|
30
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
31
|
+
broadcast(:invalid)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :form
|
37
|
+
|
38
|
+
def create_organization
|
39
|
+
Decidim::Organization.create!(
|
40
|
+
name: form.name,
|
41
|
+
host: form.host,
|
42
|
+
description: form.description
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def invite_admin(organization)
|
47
|
+
Decidim::User.invite!(
|
48
|
+
{
|
49
|
+
email: form.organization_admin_email,
|
50
|
+
organization: organization,
|
51
|
+
roles: ["admin"]
|
52
|
+
},
|
53
|
+
nil,
|
54
|
+
invitation_instructions: "organization_admin_invitation_instructions"
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# A command with all the business logic when updating an admin in
|
5
|
+
# the system.
|
6
|
+
class UpdateAdmin < Rectify::Command
|
7
|
+
# Public: Initializes the command.
|
8
|
+
#
|
9
|
+
# form - A form object with the params.
|
10
|
+
def initialize(admin, form)
|
11
|
+
@admin = admin
|
12
|
+
@form = form
|
13
|
+
end
|
14
|
+
|
15
|
+
# Executes the command. Braodcasts these events:
|
16
|
+
#
|
17
|
+
# - :ok when everything is valid.
|
18
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
def call
|
22
|
+
return broadcast(:invalid) if form.invalid?
|
23
|
+
|
24
|
+
update_admin
|
25
|
+
broadcast(:ok)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :form
|
31
|
+
|
32
|
+
def update_admin
|
33
|
+
@admin.update_attributes!(attributes)
|
34
|
+
end
|
35
|
+
|
36
|
+
def attributes
|
37
|
+
{
|
38
|
+
email: form.email
|
39
|
+
}.merge(password_attributes)
|
40
|
+
end
|
41
|
+
|
42
|
+
def password_attributes
|
43
|
+
return {} if form.password == form.password_confirmation && form.password.blank?
|
44
|
+
|
45
|
+
{
|
46
|
+
password: form.password,
|
47
|
+
password_confirmation: form.password_confirmation
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# A command with all the business logic when creating a new organization in
|
5
|
+
# the system. It creates the organization and invites the admin to the
|
6
|
+
# system.
|
7
|
+
class UpdateOrganization < Rectify::Command
|
8
|
+
# Public: Initializes the command.
|
9
|
+
#
|
10
|
+
# form - A form object with the params.
|
11
|
+
def initialize(id, form)
|
12
|
+
@organization_id = id
|
13
|
+
@form = form
|
14
|
+
end
|
15
|
+
|
16
|
+
# Executes the command. Braodcasts these events:
|
17
|
+
#
|
18
|
+
# - :ok when everything is valid.
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
def call
|
23
|
+
return broadcast(:invalid) if form.invalid?
|
24
|
+
|
25
|
+
transaction do
|
26
|
+
save_organization
|
27
|
+
end
|
28
|
+
|
29
|
+
broadcast(:ok)
|
30
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
31
|
+
broadcast(:invalid)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :form, :organization_id
|
37
|
+
|
38
|
+
def organization
|
39
|
+
@organization ||= Organization.find(organization_id)
|
40
|
+
end
|
41
|
+
|
42
|
+
def save_organization
|
43
|
+
organization.name = form.name
|
44
|
+
organization.host = form.host
|
45
|
+
organization.description = form.description
|
46
|
+
|
47
|
+
organization.save!
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_dependency "decidim/system/application_controller"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
# Controller that allows managing all the Admins.
|
7
|
+
#
|
8
|
+
class AdminsController < ApplicationController
|
9
|
+
def index
|
10
|
+
@admins = Admin.all
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@form = AdminForm.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
@form = AdminForm.from_params(params)
|
19
|
+
|
20
|
+
CreateAdmin.call(@form) do
|
21
|
+
on(:ok) do
|
22
|
+
flash[:notice] = I18n.t("admins.create.success", scope: "decidim.system")
|
23
|
+
redirect_to admins_path
|
24
|
+
end
|
25
|
+
|
26
|
+
on(:invalid) do
|
27
|
+
flash.now[:alert] = I18n.t("admins.create.error", scope: "decidim.system")
|
28
|
+
render :new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def edit
|
34
|
+
@admin = Admin.find(params[:id])
|
35
|
+
@form = AdminForm.from_model(@admin)
|
36
|
+
end
|
37
|
+
|
38
|
+
def update
|
39
|
+
@admin = Admin.find(params[:id])
|
40
|
+
@form = AdminForm.from_params(params)
|
41
|
+
|
42
|
+
UpdateAdmin.call(@admin, @form) do
|
43
|
+
on(:ok) do
|
44
|
+
flash[:notice] = I18n.t("admins.update.success", scope: "decidim.system")
|
45
|
+
redirect_to admins_path
|
46
|
+
end
|
47
|
+
|
48
|
+
on(:invalid) do
|
49
|
+
flash.now[:alert] = I18n.t("admins.update.error", scope: "decidim.system")
|
50
|
+
render :edit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def show
|
56
|
+
@admin = Admin.find(params[:id])
|
57
|
+
end
|
58
|
+
|
59
|
+
def destroy
|
60
|
+
@admin = Admin.find(params[:id]).destroy!
|
61
|
+
flash[:notice] = I18n.t("admins.destroy.success", scope: "decidim.system")
|
62
|
+
|
63
|
+
redirect_to admins_path
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# The main application controller that inherits from Rails.
|
5
|
+
class ApplicationController < ActionController::Base
|
6
|
+
protect_from_forgery with: :exception, prepend: true
|
7
|
+
|
8
|
+
helper Decidim::TranslationsHelper
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
module Devise
|
5
|
+
# Custom Passwords controller for Devise in order to use a custom layout
|
6
|
+
# and views.
|
7
|
+
class PasswordsController < ::Devise::PasswordsController
|
8
|
+
layout "decidim/system/login"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
module Devise
|
5
|
+
# Custom Sessions controller for Devise in order to use a custom layout
|
6
|
+
# and views.
|
7
|
+
class SessionsController < ::Devise::SessionsController
|
8
|
+
layout "decidim/system/login"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_dependency "decidim/system/application_controller"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
# Controller to manage Organizations (tenants).
|
7
|
+
#
|
8
|
+
class OrganizationsController < ApplicationController
|
9
|
+
def new
|
10
|
+
@form = RegisterOrganizationForm.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@form = RegisterOrganizationForm.from_params(params)
|
15
|
+
|
16
|
+
RegisterOrganization.call(@form) do
|
17
|
+
on(:ok) do
|
18
|
+
flash[:notice] = t("organizations.create.success", scope: "decidim.system")
|
19
|
+
redirect_to organizations_path
|
20
|
+
end
|
21
|
+
|
22
|
+
on(:invalid) do
|
23
|
+
flash.now[:alert] = t("organizations.create.error", scope: "decidim.system")
|
24
|
+
render :new
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def index
|
30
|
+
@organizations = Organization.all
|
31
|
+
end
|
32
|
+
|
33
|
+
def show
|
34
|
+
@organization = Organization.find(params[:id])
|
35
|
+
end
|
36
|
+
|
37
|
+
def edit
|
38
|
+
organization = Organization.find(params[:id])
|
39
|
+
@form = UpdateOrganizationForm.from_model(organization)
|
40
|
+
end
|
41
|
+
|
42
|
+
def update
|
43
|
+
@form = UpdateOrganizationForm.from_params(params)
|
44
|
+
|
45
|
+
UpdateOrganization.call(params[:id], @form) do
|
46
|
+
on(:ok) do
|
47
|
+
flash[:notice] = t("organizations.update.success", scope: "decidim.system")
|
48
|
+
redirect_to organizations_path
|
49
|
+
end
|
50
|
+
|
51
|
+
on(:invalid) do
|
52
|
+
flash.now[:alert] = I18n.t("organizations.update.error", scope: "decidim.system")
|
53
|
+
render :edit
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# A form object used to create organizations from the system dashboard.
|
5
|
+
#
|
6
|
+
class AdminForm < Rectify::Form
|
7
|
+
mimic :admin
|
8
|
+
|
9
|
+
attribute :email, String
|
10
|
+
attribute :password, String
|
11
|
+
attribute :password_confirmation, String
|
12
|
+
|
13
|
+
validates :email, presence: true
|
14
|
+
validates :password, presence: true, unless: :admin_exists?
|
15
|
+
validates :password_confirmation, presence: true, unless: :admin_exists?
|
16
|
+
|
17
|
+
validate :email, :email_uniqueness
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def email_uniqueness
|
22
|
+
return unless Admin.where(email: email).where.not(id: id).any?
|
23
|
+
|
24
|
+
errors.add(:email, I18n.t("models.admin.validations.email_uniqueness",
|
25
|
+
scope: "decidim.system"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def admin_exists?
|
29
|
+
id.present?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "decidim/translatable_attributes"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
# A form object used to create organizations from the system dashboard.
|
7
|
+
#
|
8
|
+
class RegisterOrganizationForm < UpdateOrganizationForm
|
9
|
+
include TranslatableAttributes
|
10
|
+
|
11
|
+
mimic :organization
|
12
|
+
|
13
|
+
attribute :organization_admin_email, String
|
14
|
+
|
15
|
+
validates :organization_admin_email, presence: true
|
16
|
+
|
17
|
+
translatable_attribute :description, String
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "decidim/translatable_attributes"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
# A form object used to update organizations from the system dashboard.
|
7
|
+
#
|
8
|
+
class UpdateOrganizationForm < Rectify::Form
|
9
|
+
include TranslatableAttributes
|
10
|
+
|
11
|
+
mimic :organization
|
12
|
+
|
13
|
+
attribute :name, String
|
14
|
+
attribute :host, String
|
15
|
+
|
16
|
+
translatable_attribute :description, String
|
17
|
+
|
18
|
+
validate :validate_organization_uniqueness
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def validate_organization_uniqueness
|
23
|
+
errors.add(:name, :taken) if Decidim::Organization.where(name: name).where.not(id: id).exists?
|
24
|
+
errors.add(:host, :taken) if Decidim::Organization.where(host: host).where.not(id: id).exists?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module System
|
4
|
+
# Admins are the users in charge of managing a Decidim installation.
|
5
|
+
class Admin < ApplicationRecord
|
6
|
+
devise :database_authenticatable, :recoverable, :rememberable, :validatable
|
7
|
+
|
8
|
+
validates :email, uniqueness: true
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# Changes default Devise behaviour to use ActiveJob to send async emails.
|
13
|
+
def send_devise_notification(notification, *args)
|
14
|
+
devise_mailer.send(notification, self, *args).deliver_later
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% content_for :title do %>
|
2
|
+
<h2><%= t ".title" %></h2>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="actions title">
|
6
|
+
<%= link_to t("actions.new", scope: "decidim.system", name: t("models.admin.name", scope: "decidim.system")), ['new', 'admin'], class: 'new' %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<table class="stack">
|
10
|
+
<thead>
|
11
|
+
<tr>
|
12
|
+
<th><%= t("models.admin.fields.email", scope: "decidim.system") %></th>
|
13
|
+
<th><%= t("models.admin.fields.created_at", scope: "decidim.system") %></th>
|
14
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.system") %></th>
|
15
|
+
</tr>
|
16
|
+
</thead>
|
17
|
+
<tbody>
|
18
|
+
<% @admins.each do |admin| %>
|
19
|
+
<tr>
|
20
|
+
<td>
|
21
|
+
<%= link_to admin.email, admin %><br />
|
22
|
+
</td>
|
23
|
+
<td>
|
24
|
+
<%= l admin.created_at, format: :short %>
|
25
|
+
</td>
|
26
|
+
<td class="actions">
|
27
|
+
<%= link_to t("actions.edit", scope: "decidim.system"), ['edit', admin] %>
|
28
|
+
<%= link_to t("actions.destroy", scope: "decidim.system"), admin, method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.system") } %>
|
29
|
+
</td>
|
30
|
+
</tr>
|
31
|
+
<% end %>
|
32
|
+
</tbody>
|
33
|
+
</table>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% content_for :title do %>
|
2
|
+
<h2><%= link_to @admin.email, @admin %></h2>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="actions">
|
6
|
+
<hr />
|
7
|
+
<%= link_to "Edit", ['edit', @admin] %>
|
8
|
+
<%= link_to "Destroy", @admin, method: :delete, class: "alert button", data: { confirm: "Are you sure you want to do this?" } %>
|
9
|
+
</div>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
|
4
|
+
|
5
|
+
<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
|
6
|
+
|
7
|
+
<p>If you didn't request this, please ignore this email.</p>
|
8
|
+
<p>Your password won't change until you access the link above and create a new one.</p>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h2>Change your password</h2>
|
2
|
+
|
3
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
|
4
|
+
<%= devise_error_messages! %>
|
5
|
+
<%= f.hidden_field :reset_password_token %>
|
6
|
+
|
7
|
+
<div class="field">
|
8
|
+
<% if @minimum_password_length %>
|
9
|
+
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
|
10
|
+
<% end %>
|
11
|
+
<%= f.password_field :password, autofocus: true, autocomplete: "off" %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.password_field :password_confirmation, autocomplete: "off" %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="actions">
|
19
|
+
<%= f.submit "Change my password" %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<%= render "decidim/system/devise/shared/links" %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<h2>Forgot your password?</h2>
|
2
|
+
|
3
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
|
4
|
+
<%= devise_error_messages! %>
|
5
|
+
|
6
|
+
<div class="field">
|
7
|
+
<%= f.email_field :email, autofocus: true %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="actions">
|
11
|
+
<%= f.submit "Send me reset password instructions" %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= render "decidim/system/devise/shared/links" %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h2>Log in</h2>
|
2
|
+
|
3
|
+
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
|
4
|
+
<div class="field">
|
5
|
+
<%= f.email_field :email, autofocus: true %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="field">
|
9
|
+
<%= f.password_field :password, autocomplete: "off" %>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<% if devise_mapping.rememberable? -%>
|
13
|
+
<div class="field">
|
14
|
+
<%= f.check_box :remember_me %>
|
15
|
+
</div>
|
16
|
+
<% end -%>
|
17
|
+
|
18
|
+
<div class="actions">
|
19
|
+
<%= f.submit "Log in" %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<%= render "decidim/system/devise/shared/links" %>
|