biovision-base 0.22.180920.0 → 0.34.190331.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -21
  3. data/app/assets/images/biovision/base/icons/apply.svg +4 -0
  4. data/app/assets/images/biovision/base/icons/components/contact.svg +26 -0
  5. data/app/assets/images/biovision/base/icons/components/registration.svg +17 -0
  6. data/app/assets/images/biovision/base/icons/destroy.svg +11 -8
  7. data/app/assets/images/biovision/base/icons/settings.svg +41 -0
  8. data/app/assets/images/biovision/base/icons/slider/arrow-left.svg +4 -0
  9. data/app/assets/images/biovision/base/icons/slider/arrow-right.svg +4 -0
  10. data/app/assets/images/biovision/base/placeholders/16x9.svg +10 -3
  11. data/app/assets/images/biovision/base/placeholders/1x1.svg +12 -0
  12. data/app/assets/images/biovision/base/placeholders/3x2.svg +10 -3
  13. data/app/assets/javascripts/biovision/base/biovision.js +780 -461
  14. data/app/assets/javascripts/biovision/base/components/carousel.js +123 -0
  15. data/app/assets/javascripts/biovision/base/polyfills.js +149 -0
  16. data/app/assets/stylesheets/biovision/base/admin.scss +85 -46
  17. data/app/assets/stylesheets/biovision/base/admin/components.scss +141 -0
  18. data/app/assets/stylesheets/biovision/base/biovision.scss +149 -33
  19. data/app/assets/stylesheets/biovision/base/buttons/buttons-common.scss +22 -0
  20. data/app/assets/stylesheets/biovision/base/default.scss +6 -6
  21. data/app/assets/stylesheets/biovision/base/default_admin.scss +25 -8
  22. data/app/assets/stylesheets/biovision/base/themes/simple-layout.scss +0 -3
  23. data/app/controllers/admin/editable_pages_controller.rb +6 -4
  24. data/app/controllers/admin/privileges_controller.rb +2 -3
  25. data/app/controllers/admin/settings_controller.rb +52 -0
  26. data/app/controllers/admin/simple_blocks_controller.rb +28 -0
  27. data/app/controllers/admin/users_controller.rb +1 -1
  28. data/app/controllers/agents_controller.rb +4 -4
  29. data/app/controllers/authentication_controller.rb +28 -6
  30. data/app/controllers/browsers_controller.rb +4 -4
  31. data/app/controllers/concerns/authentication.rb +8 -5
  32. data/app/controllers/concerns/entity_priority.rb +3 -0
  33. data/app/controllers/concerns/lockable_entity.rb +6 -3
  34. data/app/controllers/concerns/removable_image.rb +4 -5
  35. data/app/controllers/concerns/toggleable_entity.rb +4 -5
  36. data/app/controllers/editable_pages_controller.rb +14 -8
  37. data/app/controllers/fallback_controller.rb +7 -2
  38. data/app/controllers/feedback_requests_controller.rb +23 -8
  39. data/app/controllers/metrics_controller.rb +3 -3
  40. data/app/controllers/my/profiles_controller.rb +32 -15
  41. data/app/controllers/privilege_groups_controller.rb +4 -4
  42. data/app/controllers/privileges_controller.rb +7 -26
  43. data/app/controllers/simple_blocks_controller.rb +63 -0
  44. data/app/controllers/stored_values_controller.rb +4 -4
  45. data/app/controllers/tokens_controller.rb +4 -4
  46. data/app/controllers/users_controller.rb +8 -3
  47. data/app/helpers/biovision_users_helper.rb +60 -21
  48. data/app/helpers/editable_pages_helper.rb +22 -0
  49. data/app/helpers/languages_helper.rb +3 -0
  50. data/app/helpers/simple_image_helper.rb +66 -0
  51. data/app/mailers/application_mailer.rb +0 -2
  52. data/app/mailers/code_sender.rb +13 -2
  53. data/app/mailers/feedback_mailer.rb +5 -2
  54. data/app/mailers/user_mailer.rb +6 -1
  55. data/app/models/biovision_component.rb +43 -0
  56. data/app/models/biovision_parameter.rb +34 -0
  57. data/app/models/code.rb +22 -7
  58. data/app/models/code_type.rb +9 -1
  59. data/app/models/concerns/flat_priority.rb +50 -0
  60. data/app/models/concerns/nested_priority.rb +58 -0
  61. data/app/models/concerns/required_unique_slug.rb +5 -2
  62. data/app/models/editable_page.rb +49 -37
  63. data/app/models/foreign_site.rb +5 -3
  64. data/app/models/language.rb +15 -37
  65. data/app/models/metric.rb +2 -4
  66. data/app/models/privilege.rb +23 -45
  67. data/app/models/privilege_group.rb +6 -1
  68. data/app/models/simple_block.rb +66 -0
  69. data/app/models/user.rb +29 -26
  70. data/app/models/user_privilege.rb +1 -1
  71. data/app/services/biovision/components/base_component.rb +115 -0
  72. data/app/services/biovision/components/registration_component.rb +98 -0
  73. data/app/services/code_manager.rb +4 -1
  74. data/app/services/code_manager/confirmation.rb +8 -4
  75. data/app/services/code_manager/invitation.rb +9 -5
  76. data/app/services/code_manager/recovery.rb +9 -6
  77. data/app/services/user_manager.rb +5 -4
  78. data/app/services/user_profile_handler.rb +38 -11
  79. data/app/uploaders/avatar_uploader.rb +5 -1
  80. data/app/uploaders/editable_page_image_uploader.rb +4 -6
  81. data/app/uploaders/media_file_uploader.rb +6 -4
  82. data/app/uploaders/media_snapshot_uploader.rb +6 -2
  83. data/app/uploaders/simple_file_uploader.rb +12 -0
  84. data/app/uploaders/simple_image_uploader.rb +75 -0
  85. data/app/views/about/editable.html.erb +1 -1
  86. data/app/views/admin/agents/_filter.html.erb +1 -1
  87. data/app/views/admin/editable_pages/entity/_in_list.html.erb +16 -0
  88. data/app/views/admin/editable_pages/index.html.erb +8 -1
  89. data/app/views/admin/editable_pages/show.html.erb +21 -17
  90. data/app/views/admin/feedback_requests/entity/_in_list.html.erb +9 -1
  91. data/app/views/admin/index/_biovision_base.html.erb +5 -7
  92. data/app/views/admin/index/_components.html.erb +9 -0
  93. data/app/views/admin/index/dashboard/_editorial.html.erb +2 -2
  94. data/app/views/admin/index/dashboard/_settings.html.erb +2 -2
  95. data/app/views/admin/index/index.html.erb +2 -0
  96. data/app/views/admin/privileges/entity/_groups.html.erb +25 -25
  97. data/app/views/admin/privileges/entity/_in_list.html.erb +30 -9
  98. data/app/views/admin/privileges/index.html.erb +6 -1
  99. data/app/views/admin/privileges/show.html.erb +31 -18
  100. data/app/views/admin/settings/component/_new_parameter.html.erb +62 -0
  101. data/app/views/admin/settings/component/_parameters.html.erb +37 -0
  102. data/app/views/admin/settings/component/_setting.html.erb +18 -0
  103. data/app/views/admin/settings/component/_settings.html.erb +31 -0
  104. data/app/views/admin/settings/index.html.erb +27 -0
  105. data/app/views/admin/settings/show.html.erb +42 -0
  106. data/app/views/admin/simple_blocks/_nav_item.html.erb +6 -0
  107. data/app/views/admin/simple_blocks/entity/_in_list.html.erb +23 -0
  108. data/app/views/admin/simple_blocks/index.html.erb +21 -0
  109. data/app/views/admin/simple_blocks/show.html.erb +51 -0
  110. data/app/views/admin/tokens/_filter.html.erb +1 -1
  111. data/app/views/admin/users/_filter.html.erb +1 -1
  112. data/app/views/admin/users/entity/_privilege.html.erb +12 -21
  113. data/app/views/admin/users/entity/_privilege_tree.html.erb +17 -15
  114. data/app/views/admin/users/privileges.html.erb +9 -1
  115. data/app/views/admin/users/search.jbuilder +3 -3
  116. data/app/views/admin/users/show.html.erb +11 -6
  117. data/app/views/agents/_filter.html.erb +22 -22
  118. data/app/views/agents/_form.html.erb +25 -29
  119. data/app/views/application/forbidden.html.erb +9 -0
  120. data/app/views/application/forbidden.jbuilder +3 -0
  121. data/app/views/authentication/_form.html.erb +13 -13
  122. data/app/views/browsers/_form.html.erb +21 -25
  123. data/app/views/editable_blocks/_entity.html.erb +4 -1
  124. data/app/views/editable_pages/_form.html.erb +63 -62
  125. data/app/views/editable_pages/edit.html.erb +1 -1
  126. data/app/views/editable_pages/entity/_metadata.html.erb +4 -4
  127. data/app/views/editable_pages/new.html.erb +3 -3
  128. data/app/views/fallback/show.html.erb +8 -1
  129. data/app/views/feedback_requests/_form.html.erb +76 -52
  130. data/app/views/feedback_requests/create.js.erb +1 -10
  131. data/app/views/index/index/_editable.html.erb +0 -4
  132. data/app/views/metrics/_form.html.erb +38 -36
  133. data/app/views/my/confirmations/show.html.erb +5 -3
  134. data/app/views/my/profiles/closed.html.erb +7 -0
  135. data/app/views/my/profiles/edit/_form.html.erb +9 -9
  136. data/app/views/my/profiles/new.html.erb +9 -1
  137. data/app/views/my/profiles/new/_form.html.erb +22 -1
  138. data/app/views/my/recoveries/show.html.erb +2 -2
  139. data/app/views/privilege_groups/_form.html.erb +48 -21
  140. data/app/views/privileges/_form.html.erb +68 -36
  141. data/app/views/profiles/_profile.html.erb +3 -3
  142. data/app/views/shared/_pagination.jbuilder +7 -5
  143. data/app/views/shared/admin/_breadcrumbs.html.erb +1 -1
  144. data/app/views/shared/forms/_meta_texts.html.erb +3 -3
  145. data/app/views/shared/forms/_priority.html.erb +12 -0
  146. data/app/views/shared/forms/_state_container.html.erb +1 -0
  147. data/app/views/simple_blocks/_empty.html.erb +0 -0
  148. data/app/views/simple_blocks/_form.html.erb +120 -0
  149. data/app/views/simple_blocks/_simple_block.html.erb +26 -0
  150. data/app/views/simple_blocks/edit.html.erb +17 -0
  151. data/app/views/simple_blocks/new.html.erb +15 -0
  152. data/app/views/stored_values/_form.html.erb +57 -28
  153. data/app/views/tokens/_form.html.erb +31 -26
  154. data/app/views/users/_form.html.erb +1 -1
  155. data/config/initializers/carrierwave.rb +7 -2
  156. data/config/locales/common-ru.yml +5 -0
  157. data/config/locales/components-ru.yml +50 -0
  158. data/config/locales/editable-pages-en.yml +2 -0
  159. data/config/locales/editable-pages-ru.yml +50 -7
  160. data/config/locales/editable-pages-sv.yml +2 -0
  161. data/config/locales/feedback-ru.yml +1 -0
  162. data/config/locales/users-en.yml +0 -1
  163. data/config/locales/users-ru.yml +6 -1
  164. data/config/locales/users-sv.yml +0 -1
  165. data/config/routes.rb +32 -6
  166. data/db/migrate/20181217000000_create_biovision_components.rb +80 -0
  167. data/db/migrate/20181217000010_create_metrics.rb +40 -0
  168. data/db/migrate/20181217000015_create_browsers.rb +38 -0
  169. data/db/migrate/20181217000020_create_languages.rb +30 -0
  170. data/db/migrate/20181217000030_create_users.rb +118 -0
  171. data/db/migrate/20181217000035_create_codes.rb +51 -0
  172. data/db/migrate/20181217000040_create_privileges.rb +142 -0
  173. data/db/migrate/20181217000100_create_media_folders.rb +53 -0
  174. data/db/migrate/20181217000110_create_editable_pages.rb +90 -0
  175. data/db/migrate/20181217000200_create_feedback_requests.rb +27 -0
  176. data/db/migrate/20181217121211_add_uuid_to_users.rb +12 -0
  177. data/db/migrate/20181217121212_update_fields181217.rb +29 -0
  178. data/db/migrate/20190311121212_convert_json_columns.rb +47 -0
  179. data/db/migrate/20190324181818_add_data_to_feedback_requests.rb +14 -0
  180. data/db/migrate/20190326120000_create_simple_blocks.rb +31 -0
  181. data/db/{migrate → obsolete_migrations}/20171223333333_amend_foreign_keys.rb +0 -0
  182. data/db/{migrate → obsolete_migrations}/20180117151515_add_language_to_models.rb +0 -0
  183. data/db/{migrate → obsolete_migrations}/20180321000000_add_profile_data_to_users.rb +4 -4
  184. data/db/{migrate → obsolete_migrations}/20180405000000_add_consent_to_users.rb +0 -0
  185. data/db/{migrate → obsolete_migrations}/20180610222222_add_consent_to_feedback_requests.rb +0 -0
  186. data/db/{migrate → obsolete_migrations}/20180612111111_add_administrative_to_privilege.rb +0 -0
  187. data/db/{migrate → obsolete_migrations}/20180619121212_add_image_alt_text_to_editable_page.rb +0 -0
  188. data/db/{migrate → obsolete_migrations}/20180703111111_add_fields_to_editable_blocks.rb +0 -0
  189. data/db/{migrate → obsolete_migrations}/20180722222222_add_active_to_languages.rb +0 -0
  190. data/db/{migrate → obsolete_migrations}/20180725111111_add_referral_link_to_users.rb +0 -0
  191. data/db/obsolete_migrations/20181012222222_add_deletable_to_privileges.rb +19 -0
  192. data/db/obsolete_migrations/20181012222223_convert_stored_values.rb +13 -0
  193. data/db/obsolete_migrations/20181030080808_update_editable_pages_meta.rb +20 -0
  194. data/lib/biovision/base/base_methods.rb +19 -2
  195. data/lib/biovision/base/version.rb +3 -1
  196. data/lib/tasks/users.rake +19 -1
  197. metadata +75 -40
  198. data/app/views/admin/privileges/_list.html.erb +0 -15
  199. data/db/migrate/20170228000000_create_languages.rb +0 -23
  200. data/db/migrate/20170301000001_create_metrics.rb +0 -23
  201. data/db/migrate/20170301000002_create_metric_values.rb +0 -19
  202. data/db/migrate/20170301000101_create_browsers.rb +0 -22
  203. data/db/migrate/20170301000102_create_agents.rb +0 -22
  204. data/db/migrate/20170302000001_create_users.rb +0 -55
  205. data/db/migrate/20170302000003_create_tokens.rb +0 -23
  206. data/db/migrate/20170302000004_create_code_types.rb +0 -20
  207. data/db/migrate/20170302000005_create_codes.rb +0 -24
  208. data/db/migrate/20170302000101_create_privileges.rb +0 -41
  209. data/db/migrate/20170302000102_create_user_privileges.rb +0 -18
  210. data/db/migrate/20170302000103_create_privilege_groups.rb +0 -23
  211. data/db/migrate/20170302000104_create_privilege_group_privileges.rb +0 -24
  212. data/db/migrate/20170320000000_create_editable_pages.rb +0 -52
  213. data/db/migrate/20170425000001_create_foreign_sites.rb +0 -18
  214. data/db/migrate/20170425000002_create_foreign_users.rb +0 -23
  215. data/db/migrate/20170629120000_create_login_attempts.rb +0 -19
  216. data/db/migrate/20170823000001_create_stored_values.rb +0 -19
  217. data/db/migrate/20171202000000_create_media_folders.rb +0 -28
  218. data/db/migrate/20171202000001_create_media_files.rb +0 -27
  219. data/db/migrate/20171211000000_create_feedback_requests.rb +0 -33
  220. data/db/migrate/20180117160000_create_user_languages.rb +0 -17
  221. data/db/migrate/20180622140000_create_link_blocks.rb +0 -29
  222. data/db/migrate/20180622140001_create_link_block_items.rb +0 -23
  223. data/db/migrate/20180627190000_create_editable_blocks.rb +0 -39
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if Rails.env.test? || Rails.env.cucumber?
2
- Dir["#{Rails.root}/app/uploaders/*.rb"].each { |file| require file }
4
+ Dir["#{Rails.root}/app/uploaders/*.rb"].each(&method(:require))
3
5
 
4
6
  CarrierWave.configure do |config|
5
7
  config.storage = :file
@@ -9,13 +11,16 @@ if Rails.env.test? || Rails.env.cucumber?
9
11
  # use different dirs when testing
10
12
  CarrierWave::Uploader::Base.descendants.each do |klass|
11
13
  next if klass.anonymous?
14
+
12
15
  klass.class_eval do
13
16
  def cache_dir
14
17
  "#{Rails.root}/spec/support/uploads/tmp"
15
18
  end
16
19
 
17
20
  def store_dir
18
- "#{Rails.root}/spec/support/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
21
+ slug = "#{model.class.to_s.underscore}/#{mounted_as}"
22
+
23
+ "#{Rails.root}/spec/support/uploads/#{slug}/#{model.id}"
19
24
  end
20
25
  end
21
26
  end
@@ -16,6 +16,7 @@ ru:
16
16
  messages:
17
17
  extension_blacklist_error: "имеет недопустимое расширение файла"
18
18
  extension_whitelist_error: "имеет недопустимое расширение файла"
19
+ mini_magick_processing_error: "не может быть обработан"
19
20
  error:
20
21
  bad_request:
21
22
  title: "Плохой запрос"
@@ -162,6 +163,10 @@ ru:
162
163
  title: "Ошибка сервера"
163
164
  heading: "Что-то пошло не так"
164
165
  message: "Произошла внутренняя ошибка сервера. Попробуйте повторить попытку позже."
166
+ forbidden:
167
+ title: "Доступ запрещён"
168
+ heading: "Доступ запрещён"
169
+ message: "Доступ к этой странице запрещён"
165
170
  layouts:
166
171
  admin:
167
172
  footer:
@@ -0,0 +1,50 @@
1
+ ru:
2
+ activerecord:
3
+ models:
4
+ biovision_component: "Компонент"
5
+ biovision_parameter: "Параметр"
6
+ attributes:
7
+ biovision_component:
8
+ slug: "Идентификатор"
9
+ biovision_parameter:
10
+ slug: "Идентификатор"
11
+ value: "Значение"
12
+ admin:
13
+ settings:
14
+ index:
15
+ heading: "Настройки компонентов"
16
+ nav_text: "Настройки"
17
+ title: "Настройки компонентов"
18
+ show:
19
+ title: "Настройки компонента «%{name}»"
20
+ component:
21
+ settings:
22
+ heading: "Настройки"
23
+ parameters:
24
+ heading: "Параметры"
25
+ new_parameter:
26
+ heading: "Новый параметр"
27
+ guidelines:
28
+ slug: "Только латинские буквы, цифры, дефис и подчёркивание (кроме начала и конца)."
29
+ value: "Произвольная строка"
30
+ update:
31
+ success: "Настройки компонента обновлены"
32
+ biovision:
33
+ components:
34
+ contact:
35
+ name: "Контакты"
36
+ parameters:
37
+ feedback_receiver: "На этот адрес приходят сообщения из формы обратной связи"
38
+ email: "Этот адрес отображается в контактной информации"
39
+ phone: "Этот телефон отображается в контактной информации"
40
+ address: "Этот адрес отображается в контактной информации"
41
+ registration:
42
+ name: "Регистрация"
43
+ settings:
44
+ open: "Открыта"
45
+ invite_only: "Только по приглашениям"
46
+ confirm_email: "Отправлять письмо для подтверждения почты сразу"
47
+ use_invites: "Использовать приглашения"
48
+ require_email: "Электронная почта обязательна при регистрации"
49
+ invite_count: "Количество кодов приглашения после регистрации"
50
+ invalid_code: "указан неверно"
@@ -88,9 +88,11 @@ en:
88
88
  new:
89
89
  title: "New editable page"
90
90
  heading: "New editable page"
91
+ nav_text: "Create"
91
92
  edit:
92
93
  title: "Editing editable page"
93
94
  heading: "Editing editable page"
95
+ nav_text: "Edit"
94
96
  update:
95
97
  success: "Editable page has been updated"
96
98
  destroy:
@@ -3,6 +3,7 @@ ru:
3
3
  models:
4
4
  editable_block: "Редактируемый блок"
5
5
  editable_page: "Редактируемая страница"
6
+ simple_block: "Простой редактируемый блок"
6
7
  stored_value: "Хранимое значение"
7
8
  attributes:
8
9
  editable_block:
@@ -20,18 +21,27 @@ ru:
20
21
  visible: "Показывать"
21
22
  editable_page:
22
23
  body: "Содержимое"
23
- description: "Метаописание"
24
24
  image: "Картинка"
25
25
  image_alt_text: "Текст для атрибута alt для картинки"
26
- keywords: "Ключевые слова"
27
26
  language: "Язык"
28
27
  language_id: "Язык"
28
+ meta_description: "Метаописание"
29
+ meta_keywords: "Ключевые слова"
30
+ meta_title: "Заголовок окна"
29
31
  name: "Название"
30
32
  nav_group: "Название группы навигации"
31
33
  priority: "Порядок сортировки"
32
34
  slug: "Идентификатор"
33
- title: "Заголовок"
34
35
  url: "URL для страницы"
36
+ visible: "Показывать"
37
+ simple_block:
38
+ background_image: "Использовать картинку как фон"
39
+ body: "Содержимое"
40
+ image: "Картинка"
41
+ image_alt_text: "Альтернативный текст для картинки"
42
+ name: "Название"
43
+ slug: "Идентификатор"
44
+ visible: "Показывать"
35
45
  stored_value:
36
46
  description: "Описание"
37
47
  name: "Название"
@@ -56,6 +66,15 @@ ru:
56
66
  title: "Редактируемые страницы"
57
67
  show:
58
68
  title: "Редактируемая страница «%{name}»"
69
+ simple_blocks:
70
+ show:
71
+ title: "Простой редактируемый блок «%{slug}»"
72
+ nav_item:
73
+ text: "Простые редактируемые блоки"
74
+ description: "Управление простыми редактируемыми блоками"
75
+ index:
76
+ title: "Простые редактируемые блоки"
77
+ heading: "Простые редактируемые блоки"
59
78
  stored_values:
60
79
  nav_item:
61
80
  description: "Управление хранимыми значениями"
@@ -92,9 +111,11 @@ ru:
92
111
  new:
93
112
  title: "Новая редактируемая страница"
94
113
  heading: "Новая редактируемая страница"
114
+ nav_text: "Создать"
95
115
  edit:
96
116
  title: "Редактирование редактируемой страницы"
97
117
  heading: "Редактирование редактируемой страницы"
118
+ nav_text: "Редактировать"
98
119
  update:
99
120
  success: "Редактируемая страница успешно изменена"
100
121
  destroy:
@@ -102,16 +123,38 @@ ru:
102
123
  form:
103
124
  guidelines:
104
125
  body: "HTML для вставки внутри сайта. Максимум 64кБ текста."
105
- description: "Метаописание для поисковых роботов, результатов поиска и расшаривания. Максимум 250 символов."
106
126
  image: "Картинка в формате JPG или PNG размером около 640×640 для иллюстрации при расшаривании."
107
127
  image_alt_text: "Максимум 250 символов."
108
- keywords: "Значение для meta keywords (для поисковых роботов). Максимум 250 символов."
109
- name: "Внутреннее название для удобства. Максимум 100 символов."
110
- title: "Будет отображаться в заголовке окна. Максимум 250 символов."
128
+ meta_description: "Метаописание для поисковых роботов, результатов поиска и расшаривания. Максимум 250 символов."
129
+ meta_keywords: "Значение для meta keywords (для поисковых роботов). Максимум 250 символов."
130
+ meta_title: "Будет отображаться в заголовке окна. Максимум 250 символов."
131
+ name: "Максимум 100 символов."
132
+ nav_group: "Максимум 100 символов."
111
133
  slug: "Используется для вставки внутри сайта. Максимум 100 символов."
112
134
  url: "Абсолютный путь"
113
135
  placeholders:
114
136
  url: "/about/editable-pages"
137
+ nav_group: "footer"
138
+ simple_blocks:
139
+ new:
140
+ heading: "Добавить простой редактируемый блок"
141
+ nav_text: "Создать"
142
+ title: "Добавление простого редактируемого блока"
143
+ edit:
144
+ heading: "Редактирование простого редактируемого блока"
145
+ nav_text: "Редактировать"
146
+ title: "Редактирование простого редактируемого блока"
147
+ destroy:
148
+ success: "Простой редактируемый блок удалён"
149
+ form:
150
+ guidelines:
151
+ body: "Максимум 64кб символов."
152
+ image: "Картинка в формате SVG, JPG или PNG размером в пределах 1280×1280."
153
+ image_alt_text: "Максимум 255 символов."
154
+ name: "Используется в админке для удобства поиска. Максимум 100 символов."
155
+ slug: "Только латинские буквы, цифры, дефис или подчёркивание (кроме начала и конца). 2–50 символов."
156
+ update:
157
+ success: "Редактируемый блок успешно отредактирован"
115
158
  stored_values:
116
159
  new:
117
160
  heading: "Новое хранимое значение"
@@ -91,9 +91,11 @@ sv:
91
91
  new:
92
92
  title: "New editable page"
93
93
  heading: "New editable page"
94
+ nav_text: "Skapa"
94
95
  edit:
95
96
  title: "Editing editable page"
96
97
  heading: "Editing editable page"
98
+ nav_text: "Redigera"
97
99
  update:
98
100
  success: "Editable page has been updated"
99
101
  destroy:
@@ -6,6 +6,7 @@ ru:
6
6
  feedback_request:
7
7
  comment: "Комментарий"
8
8
  consent: "Согласие на обработку персональных данных"
9
+ data: "Дополнительные данные"
9
10
  email: "Почта"
10
11
  image: "Картинка"
11
12
  language: "Язык"
@@ -110,7 +110,6 @@ en:
110
110
  administrative: "Administrative"
111
111
  parent_id: "Parent category"
112
112
  priority: "Sorting order"
113
- regional: "Regional"
114
113
  name: "Name"
115
114
  slug: "Slug"
116
115
  description: "Description"
@@ -52,6 +52,7 @@ ru:
52
52
  balance: "Баланс"
53
53
  birthday: "Дата рождения"
54
54
  bot: "Это бот"
55
+ code: "Код"
55
56
  consent: "Согласие на обработку персональных данных и принятие пользовательского соглашения"
56
57
  email: "Email"
57
58
  email_confirmed: "Email подтверждён"
@@ -110,7 +111,6 @@ ru:
110
111
  administrative: "Административная"
111
112
  parent_id: "Родительская категория"
112
113
  priority: "Порядок сортировки"
113
- regional: "Региональная"
114
114
  name: "Название"
115
115
  slug: "Идентификатор"
116
116
  description: "Описание"
@@ -365,6 +365,7 @@ ru:
365
365
  password_confirmation: "Повторите пароль, чтобы убедиться, что вы не ошиблись в наборе."
366
366
  email: "Введите почту для обратной связи и на случай сброса пароля."
367
367
  join: "Зарегистрироваться"
368
+ invitation_code: "Пригласительный код"
368
369
  create:
369
370
  success: "Вы зарегистрировались и вошли"
370
371
  are_you_bot: "Не нужно было отмечать галочку."
@@ -385,6 +386,10 @@ ru:
385
386
  new_password: "Новый пароль"
386
387
  update: "Обновить данные"
387
388
  flags: "Дополнительно"
389
+ closed:
390
+ title: "Регистрация закрыта"
391
+ heading: "Регистрация"
392
+ registration_is_closed: "Регистрация новых пользователей закрыта"
388
393
  tokens:
389
394
  nav_item:
390
395
  text: "Жетоны доступа (сессии)"
@@ -110,7 +110,6 @@ sv:
110
110
  administrative: "Administrativ"
111
111
  parent_id: "Föräldrakategori"
112
112
  priority: "Sorteringsordning"
113
- regional: "Regional"
114
113
  name: "Namn"
115
114
  slug: "Pollett"
116
115
  description: "Beskrivning"
data/config/routes.rb CHANGED
@@ -1,8 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
2
4
  resources :agents, :browsers, only: %i[update destroy]
3
5
 
4
6
  resources :editable_blocks, only: %i[update destroy]
5
7
  resources :editable_pages, only: %i[update destroy]
8
+ resources :simple_blocks, only: %i[update destroy]
6
9
  resources :stored_values, only: %i[update destroy]
7
10
 
8
11
  resources :users, only: %i[update destroy]
@@ -21,7 +24,7 @@ Rails.application.routes.draw do
21
24
 
22
25
  resources :link_blocks, :link_block_items, only: %i[update destroy]
23
26
 
24
- scope '(:locale)', constraints: { locale: /ru|en|sv/ } do
27
+ scope '(:locale)', constraints: { locale: /ru|en|sv|cn/ } do
25
28
  # Handling errors
26
29
  match '/400' => 'errors#bad_request', via: :all
27
30
  match '/401' => 'errors#unauthorized', via: :all
@@ -44,13 +47,21 @@ Rails.application.routes.draw do
44
47
  get 'contact' => :contact
45
48
  end
46
49
 
47
- scope 'u/:slug', controller: :profiles, constraints: { slug: /[^\/]+/ } do
50
+ scope 'u/:slug', controller: :profiles, constraints: { slug: %r{[^/]+} } do
48
51
  get '/' => :show, as: :user_profile
49
52
  end
50
53
 
51
54
  namespace :admin do
52
55
  get '/' => 'index#index'
53
56
 
57
+ scope :settings, controller: :settings do
58
+ get '/' => :index, as: :settings
59
+ get ':slug' => :show, as: :component
60
+ patch ':slug' => :update
61
+ put ':slug/parameter' => :set_parameter, as: :set_parameter
62
+ delete ':slug/:parameter_slug' => :delete_parameter, as: :parameter
63
+ end
64
+
54
65
  resources :agents, :browsers, only: %i[index show] do
55
66
  member do
56
67
  post 'toggle', defaults: { format: :json }
@@ -69,8 +80,12 @@ Rails.application.routes.draw do
69
80
  resources :editable_pages, only: %i[index show] do
70
81
  member do
71
82
  post 'priority', defaults: { format: :json }
83
+ post 'toggle', defaults: { format: :json }
72
84
  end
73
85
  end
86
+ resources :simple_blocks, only: %i[index show] do
87
+ post 'toggle', on: :member, defaults: { format: :json }
88
+ end
74
89
  resources :editable_blocks, only: %i[index show] do
75
90
  member do
76
91
  post 'toggle', defaults: { format: :json }
@@ -85,9 +100,10 @@ Rails.application.routes.draw do
85
100
  end
86
101
 
87
102
  resources :privileges, only: %i[index show] do
103
+ collection do
104
+ post 'check'
105
+ end
88
106
  member do
89
- put 'lock', defaults: { format: :json }
90
- delete 'lock', action: :unlock, defaults: { format: :json }
91
107
  post 'priority', defaults: { format: :json }
92
108
  post 'toggle', defaults: { format: :json }
93
109
  get 'users'
@@ -95,6 +111,9 @@ Rails.application.routes.draw do
95
111
  end
96
112
  end
97
113
  resources :privilege_groups, only: %i[index show] do
114
+ collection do
115
+ post 'check'
116
+ end
98
117
  member do
99
118
  put 'privileges/:privilege_id' => :add_privilege, as: :privilege, defaults: { format: :json }
100
119
  delete 'privileges/:privilege_id' => :remove_privilege, defaults: { format: :json }
@@ -168,12 +187,19 @@ Rails.application.routes.draw do
168
187
 
169
188
  resources :agents, :browsers, except: %i[index show update destroy]
170
189
 
171
- resources :editable_pages, except: %i[index show update destroy]
190
+ resources :editable_pages, except: %i[index show update destroy] do
191
+ collection do
192
+ post 'check', defaults: { format: :json }
193
+ end
194
+ end
172
195
  resources :editable_blocks, except: %i[index show update destroy] do
173
196
  collection do
174
197
  post 'check', defaults: { format: :json }
175
198
  end
176
199
  end
200
+ resources :simple_blocks, only: %i[new create edit] do
201
+ post 'check', on: :collection, defaults: { format: :json }
202
+ end
177
203
  resources :stored_values, except: %i[index show update destroy]
178
204
 
179
205
  resources :link_blocks, :link_block_items, except: %i[index show update destroy] do
@@ -205,6 +231,6 @@ Rails.application.routes.draw do
205
231
 
206
232
  resources :feedback_requests, only: :create
207
233
 
208
- get ':editable_page_url' => 'fallback#show', constraints: { editable_page_url: /.+/ }
234
+ get ':slug' => 'fallback#show', constraints: { slug: /.+/ }
209
235
  end
210
236
  end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Tables for Biovision components
4
+ class CreateBiovisionComponents < ActiveRecord::Migration[5.2]
5
+ def up
6
+ create_components_table unless BiovisionComponent.table_exists?
7
+ create_parameters_table unless BiovisionParameter.table_exists?
8
+
9
+ seed_items
10
+ end
11
+
12
+ def down
13
+ drop_table :biovision_parameters if BiovisionParameter.table_exists?
14
+ drop_table :biovision_components if BiovisionComponent.table_exists?
15
+ end
16
+
17
+ private
18
+
19
+ def create_components_table
20
+ create_table :biovision_components, comment: 'Biovision component' do |t|
21
+ t.timestamps
22
+ t.string :slug, null: false
23
+ t.jsonb :settings, null: false, default: {}
24
+ end
25
+
26
+ add_index :biovision_components, :slug, unique: true
27
+ end
28
+
29
+ def create_parameters_table
30
+ create_table :biovision_parameters, comment: 'Biovision component parameter' do |t|
31
+ t.timestamps
32
+ t.references :biovision_component, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
33
+ t.boolean :deletable, default: true, null: false
34
+ t.string :slug, null: false
35
+ t.text :value
36
+ end
37
+ end
38
+
39
+ def seed_items
40
+ create_registration_component
41
+
42
+ component = BiovisionComponent.create!(slug: 'contact')
43
+ collection = {
44
+ feedback_receiver: 'info@example.com',
45
+ email: 'info@example.com',
46
+ phone: '',
47
+ address: ''
48
+ }
49
+ create_parameters(component, collection)
50
+ end
51
+
52
+ def create_registration_component
53
+ slug = 'registration'
54
+ settings = {
55
+ open: true,
56
+ invite_only: false,
57
+ confirm_email: false,
58
+ use_invites: false,
59
+ require_email: false,
60
+ invite_count: 5
61
+ }
62
+
63
+ BiovisionComponent.create!(slug: slug, settings: settings)
64
+ end
65
+
66
+ # @param [BiovisionComponent] component
67
+ # @param [Hash] collection
68
+ def create_parameters(component, collection)
69
+ collection.each do |slug, value|
70
+ attributes = {
71
+ biovision_component: component,
72
+ slug: slug,
73
+ deletable: false,
74
+ value: value,
75
+ }
76
+
77
+ BiovisionParameter.create!(attributes)
78
+ end
79
+ end
80
+ end