biovision-base 0.8.171029 → 0.9.171227

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +49 -0
  3. data/app/assets/images/biovision/base/icons/breadcrumb-hover.svg +1 -0
  4. data/app/assets/images/biovision/base/icons/breadcrumb.svg +1 -0
  5. data/app/assets/images/biovision/base/placeholders/file.svg +1 -0
  6. data/app/assets/javascripts/biovision/base/biovision-sliders.js +64 -0
  7. data/app/assets/stylesheets/biovision/base/admin.scss +66 -53
  8. data/app/assets/stylesheets/biovision/base/biovision.scss +107 -55
  9. data/app/assets/stylesheets/biovision/base/layout.scss +64 -54
  10. data/app/assets/stylesheets/biovision/base/tootik.scss +70 -56
  11. data/app/assets/stylesheets/biovision/base/track.scss +2 -10
  12. data/app/controllers/admin/feedback_requests_controller.rb +23 -0
  13. data/app/controllers/admin/media_files_controller.rb +25 -0
  14. data/app/controllers/admin/media_folders_controller.rb +31 -0
  15. data/app/controllers/errors_controller.rb +43 -0
  16. data/app/controllers/feedback_requests_controller.rb +23 -0
  17. data/app/controllers/media_files_controller.rb +104 -0
  18. data/app/controllers/media_folders_controller.rb +85 -0
  19. data/app/helpers/biovision_users_helper.rb +7 -0
  20. data/app/helpers/media_helper.rb +26 -0
  21. data/app/mailers/feedback_mailer.rb +10 -0
  22. data/app/models/editable_page.rb +1 -1
  23. data/app/models/feedback_request.rb +31 -0
  24. data/app/models/media_file.rb +48 -0
  25. data/app/models/media_folder.rb +114 -0
  26. data/app/models/metric.rb +4 -1
  27. data/app/models/privilege_group.rb +1 -1
  28. data/app/uploaders/media_file_uploader.rb +30 -0
  29. data/app/uploaders/media_snapshot_uploader.rb +32 -0
  30. data/app/views/admin/feedback_requests/_nav_item.html.erb +2 -0
  31. data/app/views/admin/feedback_requests/entity/_in_list.html.erb +18 -0
  32. data/app/views/admin/feedback_requests/index.html.erb +16 -0
  33. data/app/views/admin/index/_biovision_base.html.erb +6 -0
  34. data/app/views/admin/index/_custom_dashboard.html.erb +0 -0
  35. data/app/views/admin/index/dashboard/_biovision_feedback.html.erb +9 -0
  36. data/app/views/admin/index/dashboard/_biovision_region.html.erb +8 -0
  37. data/app/views/admin/index/dashboard/_biovision_track.html.erb +8 -0
  38. data/app/views/admin/index/dashboard/_biovision_user.html.erb +13 -0
  39. data/app/views/admin/index/dashboard/_editorial.html.erb +12 -0
  40. data/app/views/admin/index/dashboard/_settings.html.erb +9 -0
  41. data/app/views/admin/index/index.html.erb +2 -22
  42. data/app/views/admin/media_files/_nav_item.html.erb +2 -0
  43. data/app/views/admin/media_files/entity/_in_list.html.erb +26 -0
  44. data/app/views/admin/media_files/index.html.erb +17 -0
  45. data/app/views/admin/media_files/show.html.erb +60 -0
  46. data/app/views/admin/media_folders/_nav_item.html.erb +2 -0
  47. data/app/views/admin/media_folders/entity/_in_list.html.erb +32 -0
  48. data/app/views/admin/media_folders/files.html.erb +28 -0
  49. data/app/views/admin/media_folders/index.html.erb +21 -0
  50. data/app/views/admin/media_folders/show.html.erb +79 -0
  51. data/app/views/application/error.html.erb +9 -0
  52. data/app/views/editable_pages/_editable_page.html.erb +1 -8
  53. data/app/views/editable_pages/entity/_metadata.html.erb +14 -0
  54. data/app/views/editable_pages/form/_ckeditor.html.erb +1 -1
  55. data/app/views/errors/error.html.erb +7 -0
  56. data/app/views/feedback_mailer/new_feedback_request.html.erb +12 -0
  57. data/app/views/feedback_mailer/new_feedback_request.text.erb +5 -0
  58. data/app/views/feedback_requests/_form.html.erb +60 -0
  59. data/app/views/feedback_requests/create.js.erb +10 -0
  60. data/app/views/media_files/_form.html.erb +75 -0
  61. data/app/views/media_files/ckeditor.html.erb +8 -0
  62. data/app/views/media_files/edit.html.erb +19 -0
  63. data/app/views/media_files/edit.js.erb +1 -0
  64. data/app/views/media_files/new.html.erb +15 -0
  65. data/app/views/media_files/new.js.erb +1 -0
  66. data/app/views/media_folders/_form.html.erb +54 -0
  67. data/app/views/media_folders/edit.html.erb +22 -0
  68. data/app/views/media_folders/edit.js.erb +1 -0
  69. data/app/views/media_folders/new.html.erb +19 -0
  70. data/app/views/media_folders/new.js.erb +1 -0
  71. data/app/views/shared/_meta_texts.html.erb +3 -0
  72. data/app/views/shared/_pagination.jbuilder +3 -3
  73. data/app/views/shared/admin/_toggleable.html.erb +7 -0
  74. data/app/views/shared/editable_pages/_body.html.erb +1 -10
  75. data/app/views/shared/forms/_default_ajax_handler.html.erb +13 -0
  76. data/app/views/shared/forms/_list_of_errors.js.erb +19 -0
  77. data/config/locales/common-en.yml +152 -0
  78. data/config/locales/common-ru.yml +41 -0
  79. data/config/locales/feedback-en.yml +30 -0
  80. data/config/locales/feedback-ru.yml +36 -0
  81. data/config/locales/media-ru.yml +92 -0
  82. data/config/routes.rb +34 -0
  83. data/db/migrate/20170301000002_create_metric_values.rb +1 -1
  84. data/db/migrate/20170301000102_create_agents.rb +1 -1
  85. data/db/migrate/20170302000001_create_users.rb +2 -2
  86. data/db/migrate/20170302000002_create_user_profiles.rb +1 -1
  87. data/db/migrate/20170302000003_create_tokens.rb +2 -2
  88. data/db/migrate/20170302000005_create_codes.rb +3 -3
  89. data/db/migrate/20170302000102_create_user_privileges.rb +3 -3
  90. data/db/migrate/20170302000104_create_privilege_group_privileges.rb +2 -2
  91. data/db/migrate/20170425000002_create_foreign_users.rb +3 -3
  92. data/db/migrate/20170629120000_create_login_attempts.rb +2 -2
  93. data/db/migrate/20171202000000_create_media_folders.rb +28 -0
  94. data/db/migrate/20171202000001_create_media_files.rb +27 -0
  95. data/db/migrate/20171211000000_create_feedback_requests.rb +26 -0
  96. data/db/migrate/20171217222222_add_fields_to_feedback_requests.rb +10 -0
  97. data/db/migrate/20171223333333_amend_foreign_keys.rb +72 -0
  98. data/lib/biovision/base/base_methods.rb +1 -1
  99. data/lib/biovision/base/engine.rb +1 -1
  100. data/lib/biovision/base/version.rb +1 -1
  101. metadata +94 -26
@@ -0,0 +1,152 @@
1
+ en:
2
+ error_count:
3
+ zero: "no errors"
4
+ one: "%{count} error"
5
+ few: "%{count} errors"
6
+ many: "%{count} errors"
7
+ other: "%{count} errors"
8
+ errors:
9
+ messages:
10
+ extension_blacklist_error: "is blacklisted"
11
+ error:
12
+ bad_request:
13
+ title: "Bad request"
14
+ heading: "Bad request"
15
+ message: "You have performed a malformed request, please check and try again."
16
+ unauthorized:
17
+ title: "Unauthorized"
18
+ heading: "Unauthorized"
19
+ message: "You are not authorized to access this page."
20
+ forbidden:
21
+ title: "Forbidden"
22
+ heading: "Forbidden"
23
+ message: "This action is forbidden."
24
+ not_found:
25
+ title: "Not found"
26
+ heading: "Not found"
27
+ message: "Page was not found."
28
+ unprocessable_entity:
29
+ title: "Unprocessable entity"
30
+ heading: "Unprocessable entity"
31
+ message: "You request could not be processed."
32
+ internal_server_error:
33
+ title: "Internal server error"
34
+ heading: "Internal server error"
35
+ message: "Something went wrong. Please try again later."
36
+ date:
37
+ nominative_months:
38
+ -
39
+ - "january"
40
+ - "february"
41
+ - "march"
42
+ - "april"
43
+ - "may"
44
+ - "june"
45
+ - "july"
46
+ - "august"
47
+ - "september"
48
+ - "october"
49
+ - "november"
50
+ - "december"
51
+ archive_year: " in year %{year}"
52
+ archive_month: " in %{month} of year %{year}"
53
+ are_you_sure: "Are you sure?"
54
+ back: "Back"
55
+ copyright: "2017"
56
+ create: "Create"
57
+ created_at: "Created at"
58
+ current_image: "Current image"
59
+ delete: "Delete"
60
+ deleted_entity: "Deleted entity"
61
+ edit: "Edit"
62
+ filter: "Filter"
63
+ find: "Find"
64
+ flags: "Flags"
65
+ hide: "Hide"
66
+ home: "Home"
67
+ list: "List"
68
+ locked: "Editing is forbidden"
69
+ "no": "No"
70
+ not_selected: "Not selected"
71
+ not_set: "Not send"
72
+ nothing_found: "Nothing was found"
73
+ page: "Page"
74
+ save: "Save"
75
+ submit: "Submit"
76
+ unlocked: "Editing is allowed"
77
+ untitled: "Untitled"
78
+ update: "Update"
79
+ updated_at: "Updated at"
80
+ view: "View"
81
+ view_as_administrator: "View as administrator"
82
+ view_as_visitor: "View as visitor"
83
+ "yes": "Yes"
84
+ views:
85
+ pagination:
86
+ first: "⇤"
87
+ last: "⇥"
88
+ previous: "←"
89
+ next: "→"
90
+ truncate: "…"
91
+ shared:
92
+ flash_messages:
93
+ notice: "Notice"
94
+ warning: "Warning"
95
+ alert: "Alert"
96
+ meta_texts:
97
+ site_name: "example.com"
98
+ twitter_site: ""
99
+ twitter_creator: ""
100
+ admin:
101
+ index:
102
+ index:
103
+ title: "Administration"
104
+ heading: "Administration"
105
+ dashboard:
106
+ biovision_region:
107
+ heading: "Regions"
108
+ biovision_user:
109
+ heading: "Users module"
110
+ biovision_track:
111
+ heading: "Metrics"
112
+ editorial:
113
+ heading: "Editorial"
114
+ settings:
115
+ heading: "Settings"
116
+ index:
117
+ navigation:
118
+ index:
119
+ index: "Main site"
120
+ index:
121
+ title: "Home page"
122
+ application:
123
+ not_found:
124
+ title: "Page not found"
125
+ heading: "Page is not found"
126
+ message: "Page does not exist or is deleted"
127
+ unauthorized:
128
+ title: "Unauthorized"
129
+ heading: "Unauthorized"
130
+ message: "You are not authorized to access this page."
131
+ service_unavailable:
132
+ title: "Service unavailable"
133
+ heading: "Service unavailable"
134
+ message: "Service is temporary unavailable. Try again later."
135
+ error:
136
+ title: "Server error"
137
+ heading: "Something went wrong"
138
+ message: "Internal server error has occurred. Try again later."
139
+ layouts:
140
+ admin:
141
+ footer:
142
+ support: "Support"
143
+ about:
144
+ index:
145
+ nav_text: "About us"
146
+ tos:
147
+ nav_text: "Terms of service"
148
+ editable:
149
+ title: "In progress"
150
+ heading: "Content is not ready"
151
+ message: "Page content is not ready, please come back later."
152
+ total: "Total"
@@ -8,6 +8,31 @@ ru:
8
8
  errors:
9
9
  messages:
10
10
  extension_blacklist_error: "имеет недопустимое расширение файла"
11
+ error:
12
+ bad_request:
13
+ title: "Плохой запрос"
14
+ heading: "Плохой запрос"
15
+ message: "Запрос был сформирован некорректно. Проверьте данные и попробуйте снова."
16
+ unauthorized:
17
+ title: "В доступе отказано"
18
+ heading: "В доступе отказано"
19
+ message: "У вас не хватает прав для доступа к этой странице."
20
+ forbidden:
21
+ title: "Запрещено"
22
+ heading: "Запрещено"
23
+ message: "Данное дайствие запрещено."
24
+ not_found:
25
+ title: "Не найдено"
26
+ heading: "Страница не найдена"
27
+ message: "Страница не найдена или была удалена."
28
+ unprocessable_entity:
29
+ title: "Невозможно обработать"
30
+ heading: "Невозможно обработать"
31
+ message: "Ваш запрос не удалось обработать. Проверьте данные и попробуйте снова."
32
+ internal_server_error:
33
+ title: "Ошибка сервера"
34
+ heading: "Ошибка сервера"
35
+ message: "Что-то пошло не так. Попробуйте снова позже."
11
36
  date:
12
37
  nominative_months:
13
38
  -
@@ -77,6 +102,17 @@ ru:
77
102
  index:
78
103
  title: "Администрирование"
79
104
  heading: "Администрирование"
105
+ dashboard:
106
+ biovision_region:
107
+ heading: "Региональность"
108
+ biovision_user:
109
+ heading: "Модуль пользователей"
110
+ biovision_track:
111
+ heading: "Метрики"
112
+ editorial:
113
+ heading: "Редакция"
114
+ settings:
115
+ heading: "Настройки"
80
116
  index:
81
117
  navigation:
82
118
  index:
@@ -96,6 +132,10 @@ ru:
96
132
  title: "Сервис недоступен"
97
133
  heading: "Сервис недоступен"
98
134
  message: "Сервис временно недоступен. Попробуйте повторить попытку позже"
135
+ error:
136
+ title: "Ошибка сервера"
137
+ heading: "Что-то пошло не так"
138
+ message: "Произошла внутренняя ошибка сервера. Попробуйте повторить попытку позже."
99
139
  layouts:
100
140
  admin:
101
141
  footer:
@@ -109,3 +149,4 @@ ru:
109
149
  title: "Раздел в разработке"
110
150
  heading: "Раздел наполняется"
111
151
  message: "Информация ещё не готова, зайдите позже"
152
+ total: "Всего"
@@ -0,0 +1,30 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ feedback_request: "Feedback request"
5
+ attributes:
6
+ feedback_request:
7
+ comment: "Comment"
8
+ email: "E-mail"
9
+ image: "Image"
10
+ name: "Name"
11
+ phone: "Phone number"
12
+ processed: "Processed"
13
+ admin:
14
+ feedback_requests:
15
+ nav_item:
16
+ description: "Feedback requests list"
17
+ text: "Feedback requests"
18
+ index:
19
+ heading: "Feedback requests"
20
+ title: "Feedback requests, page %{page}"
21
+ index:
22
+ feedback_requests:
23
+ heading: "Feedback"
24
+ feedback_requests:
25
+ form:
26
+ result: "Thank you, we will contact you"
27
+ feedback_mailer:
28
+ new_feedback_request:
29
+ subject: "New feedback request from agency.tm"
30
+ title: "New feebdack request came"
@@ -0,0 +1,36 @@
1
+ ru:
2
+ activerecord:
3
+ models:
4
+ feedback_request: "Запрос обратной связи"
5
+ attributes:
6
+ feedback_request:
7
+ comment: "Комментарий"
8
+ email: "Почта"
9
+ image: "Картинка"
10
+ name: "Имя"
11
+ phone: "Телефон"
12
+ processed: "Обработан"
13
+ admin:
14
+ feedback_requests:
15
+ nav_item:
16
+ description: "Список запросов обратной связи"
17
+ text: "Запросы обратной связи"
18
+ index:
19
+ heading: "Запросы обратной связи"
20
+ title: "Запросы обратной связи, страница %{page}"
21
+ index:
22
+ dashboard:
23
+ biovision_feedback:
24
+ heading: "Обратная связь"
25
+ index:
26
+ index:
27
+ contact:
28
+ heading: "Контакты"
29
+ or_use_form: "Или оставьте ваши контактные данные и мы очень быстро свяжемся с вами"
30
+ feedback_requests:
31
+ form:
32
+ result: "Спасибо, с Вами свяжутся"
33
+ feedback_mailer:
34
+ new_feedback_request:
35
+ subject: "Новый запрос обратной связи"
36
+ title: "Поступил новый запрос на обратную связь"
@@ -0,0 +1,92 @@
1
+ ru:
2
+ media_file_count:
3
+ zero: "файлов нет"
4
+ one: "%{count} файл"
5
+ few: "%{count} файла"
6
+ many: "%{count} файлов"
7
+ other: "%{count} файлов"
8
+ child_media_folder_count:
9
+ zero: "дочерних папок нет"
10
+ one: "%{count} дочерняя папка"
11
+ few: "%{count} дочерниe папки"
12
+ many: "%{count} дочерних папок"
13
+ other: "%{count} дочерних папок"
14
+ activerecord:
15
+ models:
16
+ media_folder: "Медиа-папка"
17
+ media_file: "Медиа-файл"
18
+ errors:
19
+ models:
20
+ media_folder:
21
+ attributes:
22
+ parent:
23
+ is_too_deep: "имеет слишком глубокую вложенность"
24
+ attributes:
25
+ media_file:
26
+ description: "Описание"
27
+ file: "Файл"
28
+ media_folder: "Папка"
29
+ media_folder_id: "Папка"
30
+ mime_type: "MIME-тип"
31
+ name: "Название"
32
+ original_name: "Оригинальное название"
33
+ snapshot: "Миниатюра"
34
+ user: "Владелец"
35
+ uuid: "UUID"
36
+ media_folder:
37
+ name: "Название"
38
+ parent: "Родительская папка"
39
+ parent_id: "Родительская папка"
40
+ snapshot: "Картинка"
41
+ user: "Владелец"
42
+ uuid: "UUID"
43
+ admin:
44
+ media_files:
45
+ nav_item:
46
+ description: "Управление загруженными файлами"
47
+ text: "Медиафайлы"
48
+ index:
49
+ title: "Медиафайлы, страница %{page}"
50
+ heading: "Медиафайлы"
51
+ media_folders:
52
+ nav_item:
53
+ description: "Управление папками для медиафайлов"
54
+ text: "Медиапапки"
55
+ index:
56
+ title: "Медиапапки"
57
+ heading: "Медиапапки"
58
+ show:
59
+ add_child: "Добавить дочернюю папку"
60
+ media_files: "Файлы"
61
+ files:
62
+ title: "Файлы в медиапапке «%{name}», страница %{page}"
63
+ media_files:
64
+ new:
65
+ heading: "Новый медиафайл"
66
+ title: "Добавление медиафайла"
67
+ edit:
68
+ heading: "Редактирование медиафайла"
69
+ forbidden: "Редактирование этого файла запрещено"
70
+ title: "Редактирование медиафайла"
71
+ destroy:
72
+ success: "Файл успешно удалён"
73
+ update:
74
+ success: "Файл успешно изменён"
75
+ form:
76
+ guidelines:
77
+ file: "Картинка размером до 3000×3000, формат — JPG или PNG."
78
+ name: "Максимум 250 символов."
79
+ description: "Максимум 250 символов."
80
+ media_folders:
81
+ new:
82
+ heading: "Новая медиапапка"
83
+ title: "Добавление медиапапки"
84
+ edit:
85
+ heading: "Редактирование медиапапки"
86
+ title: "Редактирование медиапапки"
87
+ destroy:
88
+ success: "Медиапапка успешно удалена"
89
+ form:
90
+ guidelines:
91
+ snapshot: "Картинка размером 160×160, формат — JPG или PNG."
92
+ name: "Максимум 100 символов."
data/config/routes.rb CHANGED
@@ -1,4 +1,11 @@
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
2
9
 
3
10
  controller :authentication do
4
11
  get 'login' => :new
@@ -84,6 +91,24 @@ Rails.application.routes.draw do
84
91
  end
85
92
 
86
93
  resources :login_attempts, only: [:index]
94
+
95
+ resources :media_folders, only: [:index, :show] do
96
+ member do
97
+ get 'files'
98
+ end
99
+ end
100
+ resources :media_files, only: [:index, :show] do
101
+ member do
102
+ put 'lock', defaults: { format: :json }
103
+ delete 'lock', action: :unlock, defaults: { format: :json }
104
+ end
105
+ end
106
+
107
+ resources :feedback_requests, only: [:index] do
108
+ member do
109
+ post 'toggle', defaults: { format: :json }
110
+ end
111
+ end
87
112
  end
88
113
 
89
114
  namespace :my do
@@ -113,4 +138,13 @@ Rails.application.routes.draw do
113
138
 
114
139
  resources :privileges, except: [:index, :show]
115
140
  resources :privilege_groups, except: [:index, :show]
141
+
142
+ resources :media_folders, except: [:index, :show]
143
+ resources :media_files, except: [:index, :show] do
144
+ collection do
145
+ post :ckeditor
146
+ end
147
+ end
148
+
149
+ resources :feedback_requests, only: [:create, :destroy]
116
150
  end
@@ -2,7 +2,7 @@ class CreateMetricValues < ActiveRecord::Migration[5.1]
2
2
  def up
3
3
  unless MetricValue.table_exists?
4
4
  create_table :metric_values do |t|
5
- t.references :metric, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
5
+ t.references :metric, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
6
6
  t.timestamp :time, null: false
7
7
  t.integer :quantity, null: false, default: 1
8
8
  end
@@ -3,7 +3,7 @@ class CreateAgents < ActiveRecord::Migration[5.1]
3
3
  unless Agent.table_exists?
4
4
  create_table :agents do |t|
5
5
  t.timestamps
6
- t.references :browser, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :browser, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
7
  t.boolean :bot, null: false, default: false
8
8
  t.boolean :mobile, null: false, default: false
9
9
  t.boolean :active, null: false, default: true
@@ -3,8 +3,8 @@ class CreateUsers < ActiveRecord::Migration[5.1]
3
3
  unless User.table_exists?
4
4
  create_table :users do |t|
5
5
  t.timestamps
6
- t.references :region, foreign_key: true, on_update: :cascade, on_delete: :nullify
7
- t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :region, foreign_key: { on_update: :cascade, on_delete: :nullify }
7
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
8
8
  t.inet :ip
9
9
  t.integer :inviter_id
10
10
  t.integer :native_id
@@ -3,7 +3,7 @@ class CreateUserProfiles < ActiveRecord::Migration[5.1]
3
3
  unless UserProfile.table_exists?
4
4
  create_table :user_profiles do |t|
5
5
  t.timestamps
6
- t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
6
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
7
  t.integer :gender, limit: 2
8
8
  t.date :birthday
9
9
  t.string :name
@@ -3,8 +3,8 @@ class CreateTokens < ActiveRecord::Migration[5.1]
3
3
  unless Token.table_exists?
4
4
  create_table :tokens do |t|
5
5
  t.timestamps
6
- t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
- t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
8
8
  t.inet :ip
9
9
  t.datetime :last_used, index: true
10
10
  t.boolean :active, default: true, null: false
@@ -3,9 +3,9 @@ class CreateCodes < ActiveRecord::Migration[5.1]
3
3
  unless Code.table_exists?
4
4
  create_table :codes do |t|
5
5
  t.timestamps
6
- t.references :code_type, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
- t.references :user, foreign_key: true, on_update: :cascade, on_delete: :cascade
8
- t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :code_type, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :user, foreign_key: { on_update: :cascade, on_delete: :cascade }
8
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
9
9
  t.inet :ip
10
10
  t.integer :quantity, limit: 2, default: 1, null: false
11
11
  t.string :body, null: false
@@ -3,9 +3,9 @@ class CreateUserPrivileges < ActiveRecord::Migration[5.1]
3
3
  unless UserPrivilege.table_exists?
4
4
  create_table :user_privileges do |t|
5
5
  t.timestamps
6
- t.references :region, foreign_key: true, on_update: :cascade, on_delete: :cascade
7
- t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
8
- t.references :privilege, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
6
+ t.references :region, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
8
+ t.references :privilege, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
9
9
  end
10
10
  end
11
11
  end
@@ -3,8 +3,8 @@ class CreatePrivilegeGroupPrivileges < ActiveRecord::Migration[5.1]
3
3
  unless PrivilegeGroupPrivilege.table_exists?
4
4
  create_table :privilege_group_privileges do |t|
5
5
  t.timestamps
6
- t.references :privilege_group, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
- t.references :privilege, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
6
+ t.references :privilege_group, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :privilege, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
8
8
  end
9
9
 
10
10
  group = PrivilegeGroup.find_by(slug: 'editors')
@@ -3,9 +3,9 @@ class CreateForeignUsers < ActiveRecord::Migration[5.1]
3
3
  unless ForeignUser.table_exists?
4
4
  create_table :foreign_users do |t|
5
5
  t.timestamps
6
- t.references :foreign_site, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
- t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
8
- t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :foreign_site, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
8
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
9
9
  t.inet :ip
10
10
  t.string :slug, null: false
11
11
  t.string :email
@@ -3,8 +3,8 @@ class CreateLoginAttempts < ActiveRecord::Migration[5.1]
3
3
  unless LoginAttempt.table_exists?
4
4
  create_table :login_attempts do |t|
5
5
  t.timestamps
6
- t.references :user, foreign_key: true, null: false, on_update: :casacde, on_delete: :cascade
7
- t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
6
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
8
8
  t.inet :ip
9
9
  t.string :password, default: '', null: false
10
10
  end
@@ -0,0 +1,28 @@
1
+ class CreateMediaFolders < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless MediaFolder.table_exists?
4
+ create_table :media_folders do |t|
5
+ t.timestamps
6
+ t.references :user, foreign_key: { on_update: :cascade, on_delete: :nullify }
7
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
8
+ t.inet :ip
9
+ t.integer :parent_id
10
+ t.integer :media_files_count, default: 0, null: false
11
+ t.integer :depth, limit: 2, default: 0, null: false
12
+ t.string :uuid, null: false
13
+ t.string :snapshot
14
+ t.string :parents_cache, default: '', null: false
15
+ t.string :name, null: false
16
+ t.integer :children_cache, array: true, default: [], null: false
17
+ end
18
+
19
+ add_foreign_key :media_folders, :media_folders, column: :parent_id, on_update: :cascade, on_delete: :cascade
20
+ end
21
+ end
22
+
23
+ def down
24
+ if MediaFolder.table_exists?
25
+ drop_table :media_folders
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ class CreateMediaFiles < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless MediaFile.table_exists?
4
+ create_table :media_files do |t|
5
+ t.timestamps
6
+ t.references :media_folder, foreign_key: { on_update: :cascade, on_delete: :nullify }
7
+ t.references :user, foreign_key: { on_update: :cascade, on_delete: :nullify }
8
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
9
+ t.inet :ip
10
+ t.boolean :locked, default: false, null: false
11
+ t.string :uuid, null: false
12
+ t.string :snapshot
13
+ t.string :file
14
+ t.string :mime_type
15
+ t.string :original_name
16
+ t.string :name, null: false
17
+ t.string :description
18
+ end
19
+ end
20
+ end
21
+
22
+ def down
23
+ if MediaFile.table_exists?
24
+ drop_table :media_files
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ class CreateFeedbackRequests < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless FeedbackRequest.table_exists?
4
+ create_table :feedback_requests do |t|
5
+ t.timestamps
6
+ t.references :agent, foreign_key: { on_update: :cascade, on_delete: :nullify }
7
+ t.inet :ip
8
+ t.boolean :processed
9
+ t.string :name
10
+ t.string :email
11
+ t.string :phone
12
+ t.string :image
13
+ t.text :comment
14
+ end
15
+
16
+ Privilege.create(slug: 'feedback_manager', name: 'Менеджер обратной связи')
17
+ StoredValue.create(slug: 'feedback_receiver', value: 'support@example.com', name: 'Адрес для запросов обратной связи', description: 'На этот адрес будут отправляться запросы обратной связи')
18
+ end
19
+ end
20
+
21
+ def down
22
+ if FeedbackRequest.table_exists?
23
+ drop_table :feedback_requests
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ class AddFieldsToFeedbackRequests < ActiveRecord::Migration[5.1]
2
+ def up
3
+ add_column :feedback_requests, :image, :string unless column_exists?(:feedback_requests, :image)
4
+ add_column :feedback_requests, :comment, :text unless column_exists?(:feedback_requests, :comment)
5
+ end
6
+
7
+ def down
8
+ # No need to rollback
9
+ end
10
+ end