egov_utils 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/egov_utils/current_users_controller.rb +26 -0
  3. data/app/controllers/egov_utils/groups_controller.rb +33 -7
  4. data/app/controllers/egov_utils/passwords_controller.rb +4 -1
  5. data/app/controllers/egov_utils/registration_requests_controller.rb +60 -0
  6. data/app/controllers/egov_utils/users_controller.rb +56 -33
  7. data/app/jobs/egov_utils/registration_requests/check_auto_accept_job.rb +12 -0
  8. data/app/mailers/egov_utils/registration_request_mailer.rb +31 -0
  9. data/app/models/egov_utils/group.rb +1 -3
  10. data/app/models/egov_utils/registration_request.rb +21 -0
  11. data/app/models/egov_utils/user.rb +12 -0
  12. data/app/services/egov_utils/archive_users.rb +12 -0
  13. data/app/services/egov_utils/refresh_groups.rb +28 -0
  14. data/app/services/egov_utils/refresh_user_groups.rb +3 -4
  15. data/app/services/egov_utils/registration_requests/check_auto_accept.rb +31 -0
  16. data/app/services/egov_utils/registration_requests/create.rb +25 -0
  17. data/app/services/egov_utils/registration_requests/handle_request.rb +57 -0
  18. data/app/views/egov_utils/current_users/edit.html.haml +12 -0
  19. data/app/views/egov_utils/groups/_form.html.haml +5 -0
  20. data/app/views/egov_utils/groups/_groups_tab.html.haml +0 -5
  21. data/app/views/egov_utils/groups/edit.html.haml +4 -0
  22. data/app/views/egov_utils/groups/index.html.haml +28 -19
  23. data/app/views/egov_utils/groups/new.html.haml +4 -0
  24. data/app/views/egov_utils/registration_request_mailer/accepted.html.erb +19 -0
  25. data/app/views/egov_utils/registration_request_mailer/auto_accepted.html.erb +14 -0
  26. data/app/views/egov_utils/registration_request_mailer/created.html.erb +18 -0
  27. data/app/views/egov_utils/registration_request_mailer/rejected.html.erb +12 -0
  28. data/app/views/egov_utils/registration_requests/index.html.haml +29 -0
  29. data/app/views/egov_utils/registration_requests/new.html.haml +9 -0
  30. data/app/views/egov_utils/registration_requests/show.html.haml +51 -0
  31. data/app/views/egov_utils/sessions/new.html.haml +3 -0
  32. data/app/views/egov_utils/user_mailer/account_information.html.erb +7 -0
  33. data/app/views/egov_utils/user_mailer/confirmation_email.html.erb +7 -0
  34. data/app/views/egov_utils/user_mailer/password_change_info.html.erb +8 -0
  35. data/app/views/egov_utils/user_mailer/password_reset.html.erb +7 -0
  36. data/app/views/egov_utils/users/edit.html.haml +9 -0
  37. data/app/views/egov_utils/users/index.html.haml +42 -25
  38. data/config/locales/cs.yml +103 -3
  39. data/config/routes.rb +6 -1
  40. data/db/migrate/20230407114921_add_deleted_at_to_egov_utils_users.rb +6 -0
  41. data/db/migrate/20230408123813_create_egov_utils_registration_requests.rb +16 -0
  42. data/db/migrate/20230412063325_add_days_before_archive_to_egov_utils_users.rb +5 -0
  43. data/db/migrate/20230427091407_add_fields_to_registration_requests.rb +8 -0
  44. data/lib/egov_utils/version.rb +1 -1
  45. metadata +40 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39d1cac9552de528bbd6fb76ab0f766289d3b0cbe795e2b5de0b0ac48558619a
4
- data.tar.gz: ae2f54428922bd3a8ff814e243ceacad6fc65e06dee028351dcb64baf771a64b
3
+ metadata.gz: a44148d5c328ee5dc00a79189f3c6e59887574ccafef4a3f5756db14a5e2bb65
4
+ data.tar.gz: 0710a56e7b75039606a4a3c48ef85cb8ea2e6d427a5df5f057f10eadce0301ab
5
5
  SHA512:
6
- metadata.gz: 13f02bb9e196af53330637d00e8127de164b19284f99988edcbfed14f0722449f04a70bb24dfcf7f93d08780b3eef8ad746e9923a51cc9bcc4b1e7558b4ac436
7
- data.tar.gz: 9f3036d67042d62b3ec567e01da3fdbc60dc8a904026f883c60608d923e124a673a76d63f12dd9c81d149a3347389337aeafbad68ad529cbd3eef2703eae0b13
6
+ metadata.gz: 65d3e9a13c9d4e584a5a5fa9a0b04e7c3426c293bdf9fa6d9ae8b9b64f0417ba60e739427b0f500200fb6bce0933ab93650952640cc25377f6075a8468a548d2
7
+ data.tar.gz: 9724af21431b3b53e8e575c1150f240d8492163e2569336b686298d2cb5980b04765fa4ea7c9003d41f746e620173bdc4c983aba7b526c2b24a63df7025159d9
@@ -0,0 +1,26 @@
1
+ module EgovUtils
2
+ class CurrentUsersController < ApplicationController
3
+ before_action :require_login
4
+
5
+ def edit; end
6
+
7
+ def update
8
+ current_user.update(update_params)
9
+
10
+ if current_user.valid?
11
+ redirect_to edit_current_user_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
12
+ else
13
+ render :edit
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def update_params
20
+ params
21
+ .require(:user)
22
+ .permit(:email, :password, :password_confirmation, :firstname,
23
+ :lastname)
24
+ end
25
+ end
26
+ end
@@ -2,20 +2,36 @@ require_dependency "egov_utils/application_controller"
2
2
 
3
3
  module EgovUtils
4
4
  class GroupsController < ApplicationController
5
+ def index
6
+ @groups = EgovUtils::Group.
7
+ accessible_by(current_ability).
8
+ order(:provider).
9
+ page(params[:page] || 1)
10
+ end
5
11
 
6
- load_and_authorize_resource
12
+ def new
13
+ @group = Group.new
14
+ end
7
15
 
8
- def index
9
- @groups = EgovUtils::Group.accessible_by(current_ability)
16
+ def edit
17
+ @group = Group.find(params[:id])
10
18
  end
11
19
 
12
- def show
20
+ def update
21
+ @group = Group.find(params[:id])
22
+
23
+ if @group.update(update_params)
24
+ redirect_to egov_utils.groups_path, notice: t('success_updated')
25
+ else
26
+ render :edit
27
+ end
13
28
  end
14
29
 
15
30
  def create
31
+ @group = Group.new(create_params)
16
32
  respond_to do |format|
17
33
  if @group.save
18
- format.html{ redirect_to egov_utils.users_path, notice: t('success_created') }
34
+ format.html{ redirect_to egov_utils.groups_path, notice: t('success_created') }
19
35
  format.json{ render json: @group, status: :created }
20
36
  else
21
37
  format.html{ render 'new' }
@@ -44,9 +60,19 @@ module EgovUtils
44
60
 
45
61
  private
46
62
 
47
- def create_params
48
- params.require(:group).permit(:name, :provider, :ldap_uid, :external_uid)
63
+ def create_params
64
+ params
65
+ .require(:group)
66
+ .permit(:name, :provider, :ldap_uid, :external_uid, roles: []) do |p|
67
+ p[:roles] = p[:roles].compact_blank
68
+ end
69
+ end
70
+
71
+ def update_params
72
+ params.require(:group).permit(:name, roles: []).tap do |p|
73
+ p[:roles] = p[:roles].compact_blank
49
74
  end
75
+ end
50
76
 
51
77
  end
52
78
  end
@@ -18,8 +18,11 @@ module EgovUtils
18
18
  if @user && @user.password_change_possible?
19
19
  @token = @user.generate_reset_password_token
20
20
  EgovUtils::UserMailer.with(host: mailer_host).password_reset(@user, @token).deliver_later if @user.save
21
+ flash[:notice] = t('notice_reset_email_sent')
22
+ elsif !@user.password_change_possible?
23
+ flash[:error] = t('notice_pw_reset_not_possible')
21
24
  end
22
- redirect_to egov_utils.reset_passwords_path, notice: t('notice_reset_email_sent')
25
+ redirect_to egov_utils.reset_passwords_path
23
26
  end
24
27
 
25
28
  # New password for existing user - password reset
@@ -0,0 +1,60 @@
1
+ module EgovUtils
2
+ class RegistrationRequestsController < ApplicationController
3
+ before_action :find_registration_request, only: %i[show update]
4
+ before_action :require_login, except: %i[new create]
5
+
6
+ def index
7
+ @registration_requests =
8
+ RegistrationRequest.order(created_at: :desc).page(params[:page] || 1)
9
+ end
10
+
11
+ def show; end
12
+
13
+ def new
14
+ @registration_request = RegistrationRequests::Create.new
15
+ end
16
+
17
+ def create
18
+ @registration_request = RegistrationRequests::Create.run(create_params)
19
+ if @registration_request.valid?
20
+ redirect_to egov_utils.new_session_path,
21
+ notice: I18n.t('registration_request.create.success')
22
+ else
23
+ puts @registration_request.errors.inspect
24
+ render :new
25
+ end
26
+ end
27
+
28
+ def update
29
+ RegistrationRequests::HandleRequest.run!(
30
+ update_params.merge(registration_request: @registration_request)
31
+ )
32
+
33
+ if @registration_request.valid?
34
+ redirect_to @registration_request,
35
+ notice: I18n.t('registration_request.update.success')
36
+ else
37
+ render :show
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def find_registration_request
44
+ @registration_request = EgovUtils::RegistrationRequest.find(params[:id])
45
+ end
46
+
47
+ def create_params
48
+ params
49
+ .require(:registration_requests_create)
50
+ .permit(:mail, :firstname, :lastname, :organization, :note,
51
+ :supervisor_name, :supervisor_phone, :supervisor_email)
52
+ end
53
+
54
+ def update_params
55
+ params
56
+ .require(:registration_request)
57
+ .permit(:status, :reason, :internal_reason, roles: [])
58
+ end
59
+ end
60
+ end
@@ -1,24 +1,28 @@
1
- require_dependency "egov_utils/application_controller"
2
- require_dependency "egov_utils/auth_source"
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency 'egov_utils/application_controller'
4
+ require_dependency 'egov_utils/auth_source'
3
5
 
4
6
  module EgovUtils
5
7
  class UsersController < ApplicationController
8
+ skip_before_action :require_login, only: %i[new create confirm edit update]
9
+ before_action :set_providers, only: %i[index search]
6
10
 
7
- skip_before_action :require_login, only: [:new, :create, :confirm, :edit, :update]
8
-
9
- load_and_authorize_resource only: [:index, :new, :create, :show, :destroy, :edit, :update]
11
+ load_and_authorize_resource only: %i[index new create show destroy edit update]
10
12
 
11
13
  def index
12
- providers
13
- @groups = EgovUtils::Group.accessible_by(current_ability).order(:provider)
14
- @new_user = EgovUtils::User.new(generate_password: true)
14
+ params[:default_scope] ||= :without_deleted
15
15
  azahara_schema_index do |users|
16
16
  users.add_sort('provider')
17
17
  end
18
+ @entities =
19
+ @users.entities.includes(:groups).page(params[:page] || 1).per(50)
20
+ if params[:search]
21
+ @entities = @entities.search(params[:search])
22
+ end
18
23
  end
19
24
 
20
- def new
21
- end
25
+ def new; end
22
26
 
23
27
  def create
24
28
  @user.mail ||= @user.login
@@ -34,25 +38,27 @@ module EgovUtils
34
38
  end
35
39
  flash[:notice] = t('activerecord.successful.messages.created', model: User.model_name.human)
36
40
  end
37
- format.html{ redirect_to main_app.root_path }
38
- format.json{ render json: @user, status: :created }
41
+ format.html { redirect_to main_app.root_path }
42
+ format.json { render json: @user, status: :created }
39
43
  else
40
- format.html{ render 'new' }
41
- format.json{ render json: @user.errors.full_messages, status: :unprocessable_entity }
44
+ format.html { render 'new' }
45
+ format.json { render json: @user.errors.full_messages, status: :unprocessable_entity }
42
46
  end
43
47
  end
44
48
  end
45
49
 
46
- def show
47
- end
50
+ def show; end
48
51
 
49
- def edit
50
- end
52
+ def edit; end
51
53
 
52
54
  def update
53
55
  @user.update(update_params)
54
56
 
55
- redirect_to users_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
57
+ if @user.valid?
58
+ redirect_to users_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
59
+ else
60
+ render :edit
61
+ end
56
62
  end
57
63
 
58
64
  def destroy
@@ -81,29 +87,46 @@ module EgovUtils
81
87
  authorize!(:read, User)
82
88
  authorize!(:read, Group)
83
89
  user_results = []; group_results = []
84
- providers.each do |provider|
85
- user_results.concat( provider.search_user(params[:q]) )
86
- group_results.concat( provider.search_group(params[:q]) )
90
+ @providers.each do |provider|
91
+ user_results.concat(provider.search_user(params[:q]))
92
+ group_results.concat(provider.search_group(params[:q]))
87
93
  end if params[:q].present?
88
94
  respond_to do |format|
89
- format.json{ render json: {users: user_results, groups: group_results} }
95
+ format.json do
96
+ render json: { users: user_results, groups: group_results }
97
+ end
90
98
  end
91
99
  end
92
100
 
101
+ def unarchive
102
+ user = User.with_deleted.find(params[:id])
103
+ user.restore
104
+ redirect_to users_path, notice: t('activerecord.successful.messages.unarchived', model: User.model_name.human)
105
+ end
106
+
93
107
  private
94
108
 
95
- def providers
96
- @providers = EgovUtils::AuthSource.providers.collect{|p| EgovUtils::AuthSource.new(p)}
109
+ def set_providers
110
+ @providers = EgovUtils::AuthSource.providers.map do |p|
111
+ EgovUtils::AuthSource.new(p)
97
112
  end
113
+ end
98
114
 
99
- def create_params
100
- params_to_permit = [:login, :mail, :password, :password_confirmation, :provider, :firstname, :lastname]
101
- params_to_permit << :generate_password if current_user.logged?
102
- params.require(:user).permit(*params_to_permit)
103
- end
115
+ def create_params
116
+ params_to_permit = %i[login mail password password_confirmation provider firstname lastname]
117
+ params_to_permit << :generate_password if current_user.logged?
118
+ params.require(:user).permit(*params_to_permit)
119
+ end
104
120
 
105
- def update_params
106
- params.require(:user).permit(:days_before_inactive)
107
- end
121
+ def update_params
122
+ params
123
+ .require(:user)
124
+ .permit(
125
+ :days_before_inactive, :days_before_archive, :password,
126
+ :password_confirmation, roles: []
127
+ ).tap do |p|
128
+ p[:roles] = p[:roles].compact_blank
129
+ end
130
+ end
108
131
  end
109
132
  end
@@ -0,0 +1,12 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class CheckAutoAcceptJob
4
+ include Sidekiq::Worker
5
+
6
+ def perform(request_id)
7
+ CheckAutoAccept.run!(registration_request: request_id)
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,31 @@
1
+ module EgovUtils
2
+ class RegistrationRequestMailer < ApplicationMailer
3
+ before_action { @host = params && params[:host] || Rails.application.config.action_mailer.default_url_options[:host] }
4
+
5
+ def created(request_id)
6
+ @request = EgovUtils::RegistrationRequest.find(request_id)
7
+
8
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.created.subject'))
9
+ end
10
+
11
+ def accepted(request_id, user_id, password)
12
+ @request = EgovUtils::RegistrationRequest.find(request_id)
13
+ @user = User.find(user_id)
14
+ @password = password
15
+
16
+ mail(to: @user.mail, subject: I18n.t('mailers.registration_requests.accepted.subject'))
17
+ end
18
+
19
+ def auto_accepted(request_id)
20
+ @request = EgovUtils::RegistrationRequest.find(request_id)
21
+
22
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.auto_accepted.subject'))
23
+ end
24
+
25
+ def rejected(request_id)
26
+ @request = EgovUtils::RegistrationRequest.find(request_id)
27
+
28
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.rejected.subject'))
29
+ end
30
+ end
31
+ end
@@ -25,9 +25,7 @@ module EgovUtils
25
25
 
26
26
  def ldap_members
27
27
  if provider.present?
28
- Rails.cache.fetch("#{cache_key}/ldap_members", expires_in: 2.hours) do
29
- auth_source.group_members(ldap_dn)
30
- end
28
+ auth_source.group_members(ldap_dn)
31
29
  else
32
30
  []
33
31
  end
@@ -0,0 +1,21 @@
1
+ module EgovUtils
2
+ class RegistrationRequest < ApplicationRecord
3
+ validates :mail, :firstname, :lastname, :organization, :supervisor_email,
4
+ :supervisor_name, presence: true
5
+ validate :check_user_already_exists!
6
+
7
+ attr_accessor :roles
8
+
9
+ def fullname
10
+ "#{firstname} #{lastname}"
11
+ end
12
+
13
+ private
14
+
15
+ def check_user_already_exists!
16
+ return unless User.find_by(mail: mail)
17
+
18
+ errors.add(:mail, :taken)
19
+ end
20
+ end
21
+ end
@@ -3,7 +3,13 @@ require 'request_store_rails'
3
3
 
4
4
  module EgovUtils
5
5
  class User < Principal
6
+ acts_as_paranoid without_default_scope: true
7
+
6
8
  DEFAULT_ROLE = nil
9
+ SEARCH_FIELDS = [
10
+ 'login', 'firstname', 'lastname', 'mail',
11
+ "CONCAT(firstname, ' ', lastname)", "CONCAT(lastname, ' ', firstname)"
12
+ ].freeze
7
13
 
8
14
  has_and_belongs_to_many :groups
9
15
 
@@ -36,6 +42,12 @@ module EgovUtils
36
42
  not_in_group(group).where(provider: nil)
37
43
  }
38
44
 
45
+ scope :search, lambda { |search_term|
46
+ search_term = search_term.to_s
47
+ term = SEARCH_FIELDS.map { |field| "#{field} ILIKE :search" }.join(' OR ')
48
+ where(term, search: "%#{sanitize_sql_like(search_term)}%")
49
+ }
50
+
39
51
  attribute :generate_password, :boolean, default: false
40
52
 
41
53
  def self.authenticate(login, password, active_only=true)
@@ -0,0 +1,12 @@
1
+ module EgovUtils
2
+ class ArchiveUsers
3
+ def call
4
+ EgovUtils::User
5
+ .where.not(days_before_archive: nil, active: true).each do |user|
6
+ next if user.last_login_at > Time.now - user.days_before_archive.days
7
+
8
+ user.destroy
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ module EgovUtils
2
+ class RefreshGroups
3
+
4
+ def call
5
+ hsh = groups.each_with_object({}) do |group, memo|
6
+ infos = group.ldap_members
7
+ infos.each do |info|
8
+ memo[info] ||= []
9
+ memo[info] << group
10
+ end
11
+ end
12
+
13
+ hsh.each do |info, groups|
14
+ user = EgovUtils::User.find_by(login: info[:login])
15
+ next unless user
16
+
17
+ all_groups = user.groups.where(ldap_uid: nil) + groups
18
+ user.update(info.merge(groups: all_groups))
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def groups
25
+ EgovUtils::Group.where.not(ldap_uid: nil)
26
+ end
27
+ end
28
+ end
@@ -6,7 +6,7 @@ module EgovUtils
6
6
  end
7
7
 
8
8
  def call
9
- group_ids = (current_non_ldap_group + ldap_groups).compact.map(&:id)
9
+ group_ids = (current_non_ldap_groups + ldap_groups).compact.map(&:id)
10
10
  user.group_ids = group_ids
11
11
  user
12
12
  end
@@ -18,14 +18,13 @@ module EgovUtils
18
18
  def ldap_groups
19
19
  return [] if user.provider.blank?
20
20
 
21
- @ldap_groups ||= begin
21
+ @ldap_groups ||=
22
22
  EgovUtils::Group.where(provider: user.provider).to_a.select do |g|
23
23
  user.auth_source.member?(user.ldap_dn, g.external_uid)
24
24
  end
25
- end
26
25
  end
27
26
 
28
- def current_non_ldap_group
27
+ def current_non_ldap_groups
29
28
  @current_non_ldap_groups ||= user.groups.where(ldap_uid: nil)
30
29
  end
31
30
  end
@@ -0,0 +1,31 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class CheckAutoAccept < ActiveInteraction::Base
4
+ record :registration_request, class: 'EgovUtils::RegistrationRequest'
5
+
6
+ def execute
7
+ member = nil
8
+ EgovUtils::Group.where.not(provider: nil).detect do |g|
9
+ member = g.ldap_members.detect do |m|
10
+ m[:login] == registration_request.mail
11
+ end
12
+ end
13
+
14
+ return unless member
15
+
16
+ registration_request.update(
17
+ status: 'accepted',
18
+ internal_note:
19
+ 'Automaticky schválen na základě členství v LDAP skupině'
20
+ )
21
+
22
+ EgovUtils::RegistrationRequestMailer
23
+ .auto_accepted(registration_request.id)
24
+ .deliver_now
25
+
26
+ registration_request
27
+ end
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,25 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class Create < ActiveInteraction::Base
4
+ string :mail
5
+ string :firstname
6
+ string :lastname
7
+ string :organization
8
+ string :note
9
+
10
+ def execute
11
+ request = RegistrationRequest.create(inputs.merge(status: :pending))
12
+
13
+ if request.persisted?
14
+ EgovUtils::RegistrationRequestMailer.created(request.id).deliver_now
15
+ CheckAutoAcceptJob.perform_async(request.id)
16
+ else
17
+ errors.merge!(request.errors)
18
+ end
19
+
20
+ request
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,57 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class HandleRequest < ActiveInteraction::Base
4
+ record :registration_request, class: 'EgovUtils::RegistrationRequest'
5
+ string :status
6
+ string :reason, default: nil
7
+ string :internal_reason, default: nil
8
+ array :roles, default: [] do
9
+ string
10
+ end
11
+
12
+ def execute
13
+ registration_request.update(
14
+ status: status,
15
+ reason: reason,
16
+ internal_reason: internal_reason
17
+ )
18
+
19
+ case status
20
+ when 'accepted'
21
+ user = create_user!
22
+ EgovUtils::RegistrationRequestMailer
23
+ .accepted(registration_request.id, user.id, password)
24
+ .deliver_now
25
+ when 'rejected'
26
+ EgovUtils::RegistrationRequestMailer
27
+ .rejected(registration_request.id)
28
+ .deliver_now
29
+ end
30
+
31
+ registration_request
32
+ end
33
+
34
+ private
35
+
36
+ def create_user!
37
+ user = User.create(
38
+ mail: registration_request.mail,
39
+ login: registration_request.mail,
40
+ firstname: registration_request.firstname,
41
+ lastname: registration_request.lastname,
42
+ password: password,
43
+ password_confirmation: password,
44
+ roles: roles.compact_blank,
45
+ must_change_password: true,
46
+ active: true,
47
+ last_login_at: Time.current
48
+ )
49
+ end
50
+
51
+ def password
52
+ @password ||= SecureRandom.hex(8)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
@@ -0,0 +1,12 @@
1
+ %h1= t('.title')
2
+ = bootstrap_form_for(current_user, url: current_user_path) do |form|
3
+ = form.text_field :login
4
+ = form.text_field :firstname
5
+ = form.text_field :lastname
6
+ .passwords
7
+ %h2= t('.password_change')
8
+ %em= t('.password_change_note')
9
+ = form.password_field :password
10
+ = form.password_field :password_confirmation
11
+ = form.submit
12
+
@@ -1 +1,6 @@
1
1
  = form.text_field(:name)
2
+ = bootstrap_form_for(@group) do |f|
3
+ = f.text_field :name
4
+ = f.collection_check_boxes :roles, EgovUtils::UserUtils::Role.roles, :first, ->(role) { I18n.t("roles.#{role.first}") }
5
+ .form-actions
6
+ = f.submit
@@ -18,8 +18,3 @@
18
18
  %td.roles{data: {roles: group.roles, id: group.id}}= group.roles.join(', ')
19
19
  - else
20
20
  %td
21
-
22
- :javascript
23
- $(function(){
24
- $('#groups tbody').roles({ url: '#{roles_path(entity_class: 'EgovUtils::Group')}' });
25
- });
@@ -0,0 +1,4 @@
1
+ %h1= t('.title')
2
+
3
+ = render 'form'
4
+