biovision-base 0.11.180127 → 0.14.180326

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -0
  3. data/app/assets/javascripts/biovision/base/biovision-sliders.js +12 -9
  4. data/app/assets/javascripts/biovision/base/biovision.js +187 -2
  5. data/app/assets/stylesheets/biovision/base/admin.scss +84 -40
  6. data/app/assets/stylesheets/biovision/base/biovision.scss +104 -44
  7. data/app/assets/stylesheets/biovision/base/buttons/buttons-common.scss +95 -0
  8. data/app/assets/stylesheets/biovision/base/buttons/buttons-rounded.scss +26 -0
  9. data/app/assets/stylesheets/biovision/base/default.scss +2 -2
  10. data/app/assets/stylesheets/biovision/base/default_admin.scss +1 -1
  11. data/app/assets/stylesheets/biovision/base/default_application.scss +1 -1
  12. data/app/assets/stylesheets/biovision/base/themes/simple-layout.scss +115 -0
  13. data/app/assets/stylesheets/biovision/base/users.scss +15 -0
  14. data/app/controllers/agents_controller.rb +3 -3
  15. data/app/controllers/authentication_controller.rb +4 -4
  16. data/app/controllers/browsers_controller.rb +3 -3
  17. data/app/controllers/codes_controller.rb +2 -2
  18. data/app/controllers/editable_pages_controller.rb +6 -5
  19. data/app/controllers/index_controller.rb +1 -1
  20. data/app/controllers/media_files_controller.rb +3 -3
  21. data/app/controllers/media_folders_controller.rb +3 -3
  22. data/app/controllers/metrics_controller.rb +1 -1
  23. data/app/controllers/my/index_controller.rb +2 -0
  24. data/app/controllers/my/profiles_controller.rb +15 -9
  25. data/app/controllers/privilege_groups_controller.rb +2 -2
  26. data/app/controllers/privileges_controller.rb +3 -3
  27. data/app/controllers/stored_values_controller.rb +2 -2
  28. data/app/controllers/tokens_controller.rb +2 -2
  29. data/app/controllers/users_controller.rb +26 -10
  30. data/app/helpers/biovision_helper.rb +13 -2
  31. data/app/helpers/biovision_users_helper.rb +20 -5
  32. data/app/helpers/codes_helper.rb +1 -1
  33. data/app/helpers/editable_pages_helper.rb +1 -1
  34. data/app/helpers/languages_helper.rb +18 -0
  35. data/app/helpers/media_helper.rb +2 -2
  36. data/app/helpers/privileges_helper.rb +2 -2
  37. data/app/helpers/stored_values_helper.rb +1 -1
  38. data/app/helpers/tracking_helper.rb +2 -2
  39. data/app/models/editable_page.rb +10 -1
  40. data/app/models/user.rb +17 -23
  41. data/app/services/user_manager.rb +15 -18
  42. data/app/services/user_profile_handler.rb +28 -0
  43. data/app/uploaders/avatar_uploader.rb +1 -5
  44. data/app/uploaders/editable_page_image_uploader.rb +1 -1
  45. data/app/views/admin/agents/entity/_in_list.html.erb +3 -3
  46. data/app/views/admin/agents/show.html.erb +10 -2
  47. data/app/views/admin/browsers/entity/_in_list.html.erb +3 -3
  48. data/app/views/admin/browsers/show.html.erb +2 -2
  49. data/app/views/admin/codes/entity/_in_list.html.erb +1 -1
  50. data/app/views/admin/codes/show.html.erb +1 -1
  51. data/app/views/admin/editable_pages/entity/_in_list.html.erb +7 -1
  52. data/app/views/admin/editable_pages/show.html.erb +26 -19
  53. data/app/views/admin/feedback_requests/entity/_in_list.html.erb +1 -1
  54. data/app/views/admin/index/_biovision_base.html.erb +1 -0
  55. data/app/views/admin/media_files/entity/_in_list.html.erb +1 -1
  56. data/app/views/admin/media_files/show.html.erb +2 -2
  57. data/app/views/admin/media_folders/entity/_in_list.html.erb +2 -2
  58. data/app/views/admin/media_folders/files.html.erb +1 -1
  59. data/app/views/admin/media_folders/show.html.erb +6 -4
  60. data/app/views/admin/metrics/_list.html.erb +2 -2
  61. data/app/views/admin/metrics/show.html.erb +2 -2
  62. data/app/views/admin/privilege_groups/entity/_in_list.html.erb +1 -1
  63. data/app/views/admin/privilege_groups/show.html.erb +1 -1
  64. data/app/views/admin/privileges/entity/_in_list.html.erb +4 -4
  65. data/app/views/admin/privileges/show.html.erb +4 -4
  66. data/app/views/admin/privileges/users.html.erb +1 -1
  67. data/app/views/admin/stored_values/entity/_in_list.html.erb +1 -1
  68. data/app/views/admin/stored_values/show.html.erb +1 -1
  69. data/app/views/admin/tokens/entity/_in_list.html.erb +2 -2
  70. data/app/views/admin/tokens/show.html.erb +2 -2
  71. data/app/views/admin/users/codes.html.erb +1 -1
  72. data/app/views/admin/users/entity/_in_list.html.erb +3 -2
  73. data/app/views/admin/users/entity/_privilege.html.erb +1 -1
  74. data/app/views/admin/users/entity/_profile.html.erb +17 -0
  75. data/app/views/admin/users/privileges.html.erb +1 -1
  76. data/app/views/admin/users/search.jbuilder +2 -2
  77. data/app/views/admin/users/show.html.erb +34 -49
  78. data/app/views/admin/users/tokens.html.erb +1 -1
  79. data/app/views/agents/_agent.jbuilder +1 -1
  80. data/app/views/agents/edit.html.erb +1 -1
  81. data/app/views/authentication/_form.html.erb +1 -1
  82. data/app/views/authentication/create.jbuilder +10 -0
  83. data/app/views/browsers/edit.html.erb +1 -1
  84. data/app/views/codes/edit.html.erb +1 -1
  85. data/app/views/editable_pages/_form.html.erb +116 -61
  86. data/app/views/editable_pages/edit.html.erb +1 -1
  87. data/app/views/index/index.html.erb +8 -6
  88. data/app/views/index/index/_custom_dashboard.html.erb +0 -0
  89. data/app/views/index/index/_default_dashboard.html.erb +2 -0
  90. data/app/views/index/index/_editable.html.erb +9 -0
  91. data/app/views/layouts/admin/_header.html.erb +1 -1
  92. data/app/views/layouts/application/_header.html.erb +1 -1
  93. data/app/views/layouts/application/header/authentication/_links.html.erb +3 -3
  94. data/app/views/layouts/application/header/authentication/_plate.html.erb +1 -1
  95. data/app/views/layouts/profile.html.erb +23 -0
  96. data/app/views/layouts/profile/_footer.html.erb +11 -0
  97. data/app/views/layouts/profile/_header.html.erb +9 -0
  98. data/app/views/layouts/profile/header/_navigation.html.erb +0 -0
  99. data/app/views/media_files/edit.html.erb +1 -1
  100. data/app/views/media_folders/_form.html.erb +0 -2
  101. data/app/views/media_folders/edit.html.erb +1 -1
  102. data/app/views/media_folders/new.html.erb +1 -1
  103. data/app/views/metrics/edit.html.erb +2 -2
  104. data/app/views/my/index/index.html.erb +9 -14
  105. data/app/views/my/index/index/_dashboard.html.erb +12 -0
  106. data/app/views/my/index/index/_sidebar.html.erb +11 -0
  107. data/app/views/my/login_attempts/index.html.erb +1 -1
  108. data/app/views/my/profiles/_nav_item.html.erb +1 -1
  109. data/app/views/my/profiles/edit.js.erb +1 -0
  110. data/app/views/my/profiles/edit/_form.html.erb +130 -116
  111. data/app/views/my/profiles/edit/form/_profile_data.html.erb +53 -0
  112. data/app/views/my/profiles/new.js.erb +1 -0
  113. data/app/views/my/profiles/new/_form.html.erb +100 -53
  114. data/app/views/my/tokens/_toggleable.html.erb +1 -1
  115. data/app/views/my/tokens/index.html.erb +1 -1
  116. data/app/views/privilege_groups/edit.html.erb +1 -1
  117. data/app/views/privileges/edit.html.erb +1 -1
  118. data/app/views/profiles/_profile.html.erb +5 -6
  119. data/app/views/shared/_pagination.jbuilder +4 -0
  120. data/app/views/shared/admin/_list_with_priority.html.erb +6 -1
  121. data/app/views/shared/forms/_list_of_errors.js.erb +2 -0
  122. data/app/views/shared/forms/_wysiwyg.html.erb +11 -0
  123. data/app/views/shared/forms/errors.js.erb +5 -0
  124. data/app/views/stored_values/edit.html.erb +1 -1
  125. data/app/views/tokens/edit.html.erb +1 -1
  126. data/app/views/users/_form.html.erb +141 -83
  127. data/app/views/users/check.jbuilder +4 -0
  128. data/app/views/users/edit.html.erb +1 -1
  129. data/app/views/users/form/_profile_data.html.erb +53 -0
  130. data/app/views/users/new.html.erb +1 -1
  131. data/config/locales/common-en.yml +2 -0
  132. data/config/locales/common-ru.yml +2 -0
  133. data/config/locales/editable-pages-en.yml +5 -4
  134. data/config/locales/editable-pages-ru.yml +5 -4
  135. data/config/locales/users-en.yml +388 -0
  136. data/config/locales/users-ru.yml +8 -3
  137. data/config/routes.rb +127 -103
  138. data/db/migrate/20170302000001_create_users.rb +2 -0
  139. data/db/migrate/20170320000000_create_editable_pages.rb +1 -1
  140. data/db/migrate/20180321000000_add_profile_data_to_users.rb +31 -0
  141. data/lib/biovision/base/base_methods.rb +37 -7
  142. data/lib/biovision/base/engine.rb +1 -1
  143. data/lib/biovision/base/privilege_methods.rb +1 -1
  144. data/lib/biovision/base/version.rb +1 -1
  145. metadata +27 -6
  146. data/app/assets/stylesheets/biovision/base/buttons.scss +0 -195
  147. data/app/assets/stylesheets/biovision/base/layout.scss +0 -193
  148. data/app/views/editable_pages/form/_ckeditor.html.erb +0 -11
  149. data/db/migrate/20170302000002_create_user_profiles.rb +0 -21
@@ -41,7 +41,7 @@ ru:
41
41
  user:
42
42
  attributes:
43
43
  email:
44
- unreasonable: "не выглядит как email"
44
+ invalid: "не выглядит как email"
45
45
  slug:
46
46
  invalid: "должен содержать от 1 до 30 латинских букв, цифр или знаков подчёркивания"
47
47
  attributes:
@@ -49,6 +49,7 @@ ru:
49
49
  agent: "Агент пользователя при регистрации"
50
50
  allow_login: "Позволить вход"
51
51
  allow_mail: "Разрешить email-уведомления"
52
+ birthday: "Дата рождения"
52
53
  bot: "Это бот"
53
54
  email: "Email"
54
55
  email_confirmed: "Email подтверждён"
@@ -66,7 +67,6 @@ ru:
66
67
  search_string: "Строка для поиска"
67
68
  slug: "Идентификатор"
68
69
  user_profile:
69
- birthday: "Дата рождения"
70
70
  gender: "Пол"
71
71
  name: "Имя"
72
72
  patronymic: "Отчество"
@@ -229,6 +229,10 @@ ru:
229
229
  index:
230
230
  title: "Пользователи сайта, страница %{page}"
231
231
  heading: "Пользователи сайта"
232
+ form:
233
+ guidelines:
234
+ notice: "Заметка для себя и других администраторов"
235
+ screen_name: "Только латинские буквы, цифры и знаки подчёркивания, от 1 до 30 символов."
232
236
  profiles:
233
237
  profile:
234
238
  user_info: "Информация о пользователе"
@@ -299,6 +303,7 @@ ru:
299
303
  index:
300
304
  index:
301
305
  title: "Личный кабинет"
306
+ heading: "Личный кабинет"
302
307
  recoveries:
303
308
  create:
304
309
  impossible: "Сброс пароля для этого пользователя недоступен"
@@ -327,7 +332,7 @@ ru:
327
332
  send_code: "Отправить код подтверждения"
328
333
  profiles:
329
334
  nav_item:
330
- text: "Мой профиль"
335
+ text: "Личный кабинет"
331
336
  description: "Просмотр и редактирование вашего профиля"
332
337
  new:
333
338
  title: "Регистрация"
data/config/routes.rb CHANGED
@@ -1,140 +1,164 @@
1
1
  Rails.application.routes.draw do
2
- # Handling errors
3
- match '/400' => 'errors#bad_request', via: :all
4
- match '/401' => 'errors#unauthorized', via: :all
5
- match '/403' => 'errors#forbidden', via: :all
6
- match '/404' => 'errors#not_found', via: :all
7
- match '/422' => 'errors#unprocessable_entity', via: :all
8
- match '/500' => 'errors#internal_server_error', via: :all
9
-
10
- controller :authentication do
11
- get 'login' => :new
12
- post 'login' => :create
13
- delete 'logout' => :destroy
14
- get 'auth/:provider/callback' => :auth_callback, as: :auth_callback
15
- end
2
+ resources :agents, :browsers, only: [:update, :destroy]
16
3
 
17
- controller :about do
18
- get 'about' => :index
19
- get 'tos' => :tos
20
- end
4
+ resources :editable_pages, only: [:update, :destroy]
5
+ resources :stored_values, only: [:update, :destroy]
21
6
 
22
- scope 'u/:slug', controller: :profiles, constraints: { slug: /[^\/]+/ } do
23
- get '/' => :show, as: :user_profile
24
- end
7
+ resources :users, only: [:update, :destroy]
8
+ resources :tokens, :codes, only: [:update, :destroy]
25
9
 
26
- namespace :admin do
27
- get '/' => 'index#index'
10
+ resources :metrics, only: [:update]
28
11
 
29
- resources :agents, :browsers, only: [:index, :show] do
30
- member do
31
- post 'toggle', defaults: { format: :json }
32
- put 'lock', defaults: { format: :json }
33
- delete 'lock', action: :unlock, defaults: { format: :json }
34
- end
12
+ resources :privileges, only: [:update, :destroy]
13
+ resources :privilege_groups, only: [:update, :destroy]
14
+
15
+ resources :media_folders, only: [:update, :destroy]
16
+ resources :media_files, only: [:update, :destroy]
17
+
18
+ resources :feedback_requests, only: [:destroy]
19
+
20
+ scope '(:locale)', constraints: { locale: /ru|en/ } do
21
+ # Handling errors
22
+ match '/400' => 'errors#bad_request', via: :all
23
+ match '/401' => 'errors#unauthorized', via: :all
24
+ match '/403' => 'errors#forbidden', via: :all
25
+ match '/404' => 'errors#not_found', via: :all
26
+ match '/422' => 'errors#unprocessable_entity', via: :all
27
+ match '/500' => 'errors#internal_server_error', via: :all
28
+
29
+ controller :authentication do
30
+ get 'login' => :new
31
+ post 'login' => :create
32
+ delete 'logout' => :destroy
33
+ get 'auth/:provider/callback' => :auth_callback, as: :auth_callback
35
34
  end
36
35
 
37
- resources :codes, only: [:index, :show]
38
- resources :tokens, only: [:index, :show] do
39
- member do
40
- post 'toggle', defaults: { format: :json }
41
- end
36
+ controller :about do
37
+ get 'about' => :index
38
+ get 'tos' => :tos
39
+ end
40
+
41
+ scope 'u/:slug', controller: :profiles, constraints: { slug: /[^\/]+/ } do
42
+ get '/' => :show, as: :user_profile
42
43
  end
43
44
 
44
- resources :editable_pages, only: [:index, :show]
45
- resources :stored_values, only: [:index, :show]
45
+ namespace :admin do
46
+ get '/' => 'index#index'
46
47
 
47
- resources :metrics, only: [:index, :show] do
48
- member do
49
- get 'data', defaults: { format: :json }
48
+ resources :agents, :browsers, only: [:index, :show] do
49
+ member do
50
+ post 'toggle', defaults: { format: :json }
51
+ put 'lock', defaults: { format: :json }
52
+ delete 'lock', action: :unlock, defaults: { format: :json }
53
+ end
50
54
  end
51
- end
52
55
 
53
- resources :privileges, only: [:index, :show] do
54
- member do
55
- put 'lock', defaults: { format: :json }
56
- delete 'lock', action: :unlock, defaults: { format: :json }
57
- post 'priority', defaults: { format: :json }
58
- post 'toggle', defaults: { format: :json }
59
- get 'users'
60
- get 'regions', defaults: { format: :json }
56
+ resources :codes, only: [:index, :show]
57
+ resources :tokens, only: [:index, :show] do
58
+ member do
59
+ post 'toggle', defaults: { format: :json }
60
+ end
61
61
  end
62
- end
63
- resources :privilege_groups, only: [:index, :show] do
64
- member do
65
- put 'privileges/:privilege_id' => :add_privilege, as: :privilege, defaults: { format: :json }
66
- delete 'privileges/:privilege_id' => :remove_privilege, defaults: { format: :json }
62
+
63
+ resources :editable_pages, only: [:index, :show]
64
+ resources :stored_values, only: [:index, :show]
65
+
66
+ resources :metrics, only: [:index, :show] do
67
+ member do
68
+ get 'data', defaults: { format: :json }
69
+ end
67
70
  end
68
- end
69
71
 
70
- resources :users, only: [:index, :show] do
71
- collection do
72
- get 'search', defaults: { format: :json }
72
+ resources :privileges, only: [:index, :show] do
73
+ member do
74
+ put 'lock', defaults: { format: :json }
75
+ delete 'lock', action: :unlock, defaults: { format: :json }
76
+ post 'priority', defaults: { format: :json }
77
+ post 'toggle', defaults: { format: :json }
78
+ get 'users'
79
+ get 'regions', defaults: { format: :json }
80
+ end
73
81
  end
74
- member do
75
- get 'tokens'
76
- get 'codes'
77
- get 'privileges'
78
- put 'privileges/:privilege_id' => :grant_privilege, as: :privilege
79
- delete 'privileges/:privilege_id' => :revoke_privilege
80
- post 'toggle', defaults: { format: :json }
81
- post 'authenticate'
82
+ resources :privilege_groups, only: [:index, :show] do
83
+ member do
84
+ put 'privileges/:privilege_id' => :add_privilege, as: :privilege, defaults: { format: :json }
85
+ delete 'privileges/:privilege_id' => :remove_privilege, defaults: { format: :json }
86
+ end
87
+ end
88
+
89
+ resources :users, only: [:index, :show] do
90
+ collection do
91
+ get 'search', defaults: { format: :json }
92
+ end
93
+ member do
94
+ get 'tokens'
95
+ get 'codes'
96
+ get 'privileges'
97
+ put 'privileges/:privilege_id' => :grant_privilege, as: :privilege
98
+ delete 'privileges/:privilege_id' => :revoke_privilege
99
+ post 'toggle', defaults: { format: :json }
100
+ post 'authenticate'
101
+ end
82
102
  end
83
- end
84
103
 
85
- resources :login_attempts, only: [:index]
104
+ resources :login_attempts, only: [:index]
86
105
 
87
- resources :media_folders, only: [:index, :show] do
88
- member do
89
- get 'files'
106
+ resources :media_folders, only: [:index, :show] do
107
+ member do
108
+ get 'files'
109
+ end
90
110
  end
91
- end
92
- resources :media_files, only: [:index, :show] do
93
- member do
94
- put 'lock', defaults: { format: :json }
95
- delete 'lock', action: :unlock, defaults: { format: :json }
111
+ resources :media_files, only: [:index, :show] do
112
+ member do
113
+ put 'lock', defaults: { format: :json }
114
+ delete 'lock', action: :unlock, defaults: { format: :json }
115
+ end
96
116
  end
97
- end
98
117
 
99
- resources :feedback_requests, only: [:index] do
100
- member do
101
- post 'toggle', defaults: { format: :json }
118
+ resources :feedback_requests, only: [:index] do
119
+ member do
120
+ post 'toggle', defaults: { format: :json }
121
+ end
102
122
  end
103
123
  end
104
- end
105
124
 
106
- namespace :my do
107
- get '/' => 'index#index'
125
+ namespace :my do
126
+ get '/' => 'index#index'
108
127
 
109
- resource :profile, except: [:destroy]
110
- resource :confirmation, :recovery, only: [:show, :create, :update]
111
- resources :tokens, only: [:index] do
112
- member do
113
- post 'toggle', defaults: { format: :json }
128
+ resource :profile, except: [:destroy]
129
+ resource :confirmation, :recovery, only: [:show, :create, :update]
130
+ resources :tokens, only: [:index] do
131
+ member do
132
+ post 'toggle', defaults: { format: :json }
133
+ end
114
134
  end
135
+ resources :login_attempts, only: [:index]
115
136
  end
116
- resources :login_attempts, only: [:index]
117
- end
118
137
 
119
- resources :agents, :browsers, except: [:index, :show]
138
+ resources :agents, :browsers, except: [:index, :show, :update, :destroy]
120
139
 
121
- resources :editable_pages, except: [:index, :show]
122
- resources :stored_values, except: [:index, :show]
140
+ resources :editable_pages, except: [:index, :show, :update, :destroy]
141
+ resources :stored_values, except: [:index, :show, :update, :destroy]
123
142
 
124
- resources :users, except: [:index, :show]
125
- resources :tokens, :codes, except: [:index, :show]
143
+ resources :users, except: [:index, :show, :update, :destroy] do
144
+ collection do
145
+ post 'check', defaults: { format: :json }
146
+ end
147
+ end
148
+ resources :tokens, :codes, except: [:index, :show, :update, :destroy]
126
149
 
127
- resources :metrics, only: [:edit, :update]
150
+ resources :metrics, only: [:edit]
128
151
 
129
- resources :privileges, except: [:index, :show]
130
- resources :privilege_groups, except: [:index, :show]
152
+ resources :privileges, except: [:index, :show, :update, :destroy]
153
+ resources :privilege_groups, except: [:index, :show, :update, :destroy]
131
154
 
132
- resources :media_folders, except: [:index, :show]
133
- resources :media_files, except: [:index, :show] do
134
- collection do
135
- post :ckeditor
155
+ resources :media_folders, except: [:index, :show, :update, :destroy]
156
+ resources :media_files, except: [:index, :show, :update, :destroy] do
157
+ collection do
158
+ post :ckeditor
159
+ end
136
160
  end
137
- end
138
161
 
139
- resources :feedback_requests, only: [:create, :destroy]
162
+ resources :feedback_requests, only: [:create]
163
+ end
140
164
  end
@@ -26,6 +26,7 @@ class CreateUsers < ActiveRecord::Migration[5.1]
26
26
  t.boolean :allow_mail, default: true, null: false
27
27
  t.boolean :foreign_slug, default: false, null: false
28
28
  t.datetime :last_seen
29
+ t.date :birthday
29
30
  t.string :slug, null: false
30
31
  t.string :screen_name, index: true, null: false
31
32
  t.string :password_digest
@@ -34,6 +35,7 @@ class CreateUsers < ActiveRecord::Migration[5.1]
34
35
  t.string :image
35
36
  t.string :notice
36
37
  t.string :search_string
38
+ t.json :profile_data, default: {}, null: false
37
39
  end
38
40
 
39
41
  add_foreign_key :users, :users, column: :inviter_id, on_update: :cascade, on_delete: :nullify
@@ -23,7 +23,7 @@ class CreateEditablePages < ActiveRecord::Migration[5.1]
23
23
  }
24
24
 
25
25
  pages.each do |slug, names|
26
- Language.each do |language|
26
+ Language.all.each do |language|
27
27
  EditablePage.create(slug: slug, name: names[language.code.to_sym], language: language)
28
28
  end
29
29
  end
@@ -0,0 +1,31 @@
1
+ class AddProfileDataToUsers < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless column_exists? :users, :birthday
4
+ add_column :users, :birthday, :date
5
+ end
6
+ unless column_exists? :users, :profile_data
7
+ add_column :users, :profile_data, :json, null: false, default: {}
8
+ end
9
+
10
+ copy_data if UserProfile.table_exists?
11
+ end
12
+
13
+ def down
14
+ # no rollback
15
+ end
16
+
17
+ private
18
+
19
+ def copy_data
20
+ ignore = %w(id created_at updated_at user_id birthday)
21
+ UserProfile.order('user_id asc').each do |profile|
22
+ data = {
23
+ profile_data: profile.attributes.reject { |a| ignore.include?(a) }
24
+ }
25
+ if profile.attributes.key?('birthday')
26
+ data[:birthday] = profile.birthday
27
+ end
28
+ profile.user.update!(data)
29
+ end
30
+ end
31
+ end
@@ -4,8 +4,11 @@ module Biovision
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ before_action :set_locale
8
+
7
9
  helper_method :current_page, :param_from_request
8
- helper_method :current_user
10
+ helper_method :current_user, :current_language
11
+ helper_method :agent
9
12
  end
10
13
 
11
14
  # Get current page number from request
@@ -32,6 +35,22 @@ module Biovision
32
35
  @current_user ||= Token.user_by_token cookies['token'], true
33
36
  end
34
37
 
38
+ # Get current language from locale
39
+ #
40
+ # @return [Language]
41
+ def current_language
42
+ @current_language ||= Language.find_by(code: locale)
43
+ end
44
+
45
+ # @return [Agent]
46
+ def agent
47
+ @agent ||= Agent.named(request.user_agent || 'n/a')
48
+ end
49
+
50
+ def set_locale
51
+ I18n.locale = params[:locale] || I18n.default_locale
52
+ end
53
+
35
54
  protected
36
55
 
37
56
  # Handle HTTP error with status 404 without raising exception
@@ -82,15 +101,26 @@ module Biovision
82
101
  result
83
102
  end
84
103
 
85
- # @return [Agent]
86
- def agent
87
- @agent ||= Agent.named(request.user_agent || 'n/a')
88
- end
89
-
90
104
  # @return [Hash]
91
105
  def tracking_for_entity
92
106
  { agent: agent, ip: request.env['HTTP_X_REAL_IP'] || request.remote_ip }
93
107
  end
108
+
109
+ # @param [String] next_page
110
+ def form_processed_ok(next_page)
111
+ respond_to do |format|
112
+ format.js { render(js: "document.location.href = '#{next_page}'") }
113
+ format.html { redirect_to(next_page) }
114
+ end
115
+ end
116
+
117
+ # @param [Symbol|String] view_to_render
118
+ def form_processed_with_error(view_to_render)
119
+ respond_to do |format|
120
+ format.js { render('shared/forms/errors', status: :bad_request) }
121
+ format.html { render(view_to_render, status: :bad_request) }
122
+ end
123
+ end
94
124
  end
95
125
  end
96
- end
126
+ end
@@ -1,7 +1,7 @@
1
1
  module Biovision
2
2
  module Base
3
3
  class Engine < ::Rails::Engine
4
- initializer "biovision_base.load_base_methods" do
4
+ initializer "biovision_base.load_base_methods" do
5
5
  ActiveSupport.on_load(:action_controller) do
6
6
  include Biovision::Base::BaseMethods
7
7
  end