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.
- checksums.yaml +5 -5
- data/README.md +49 -0
- data/app/assets/images/biovision/base/icons/breadcrumb-hover.svg +1 -0
- data/app/assets/images/biovision/base/icons/breadcrumb.svg +1 -0
- data/app/assets/images/biovision/base/placeholders/file.svg +1 -0
- data/app/assets/javascripts/biovision/base/biovision-sliders.js +64 -0
- data/app/assets/stylesheets/biovision/base/admin.scss +66 -53
- data/app/assets/stylesheets/biovision/base/biovision.scss +107 -55
- data/app/assets/stylesheets/biovision/base/layout.scss +64 -54
- data/app/assets/stylesheets/biovision/base/tootik.scss +70 -56
- data/app/assets/stylesheets/biovision/base/track.scss +2 -10
- data/app/controllers/admin/feedback_requests_controller.rb +23 -0
- data/app/controllers/admin/media_files_controller.rb +25 -0
- data/app/controllers/admin/media_folders_controller.rb +31 -0
- data/app/controllers/errors_controller.rb +43 -0
- data/app/controllers/feedback_requests_controller.rb +23 -0
- data/app/controllers/media_files_controller.rb +104 -0
- data/app/controllers/media_folders_controller.rb +85 -0
- data/app/helpers/biovision_users_helper.rb +7 -0
- data/app/helpers/media_helper.rb +26 -0
- data/app/mailers/feedback_mailer.rb +10 -0
- data/app/models/editable_page.rb +1 -1
- data/app/models/feedback_request.rb +31 -0
- data/app/models/media_file.rb +48 -0
- data/app/models/media_folder.rb +114 -0
- data/app/models/metric.rb +4 -1
- data/app/models/privilege_group.rb +1 -1
- data/app/uploaders/media_file_uploader.rb +30 -0
- data/app/uploaders/media_snapshot_uploader.rb +32 -0
- data/app/views/admin/feedback_requests/_nav_item.html.erb +2 -0
- data/app/views/admin/feedback_requests/entity/_in_list.html.erb +18 -0
- data/app/views/admin/feedback_requests/index.html.erb +16 -0
- data/app/views/admin/index/_biovision_base.html.erb +6 -0
- data/app/views/admin/index/_custom_dashboard.html.erb +0 -0
- data/app/views/admin/index/dashboard/_biovision_feedback.html.erb +9 -0
- data/app/views/admin/index/dashboard/_biovision_region.html.erb +8 -0
- data/app/views/admin/index/dashboard/_biovision_track.html.erb +8 -0
- data/app/views/admin/index/dashboard/_biovision_user.html.erb +13 -0
- data/app/views/admin/index/dashboard/_editorial.html.erb +12 -0
- data/app/views/admin/index/dashboard/_settings.html.erb +9 -0
- data/app/views/admin/index/index.html.erb +2 -22
- data/app/views/admin/media_files/_nav_item.html.erb +2 -0
- data/app/views/admin/media_files/entity/_in_list.html.erb +26 -0
- data/app/views/admin/media_files/index.html.erb +17 -0
- data/app/views/admin/media_files/show.html.erb +60 -0
- data/app/views/admin/media_folders/_nav_item.html.erb +2 -0
- data/app/views/admin/media_folders/entity/_in_list.html.erb +32 -0
- data/app/views/admin/media_folders/files.html.erb +28 -0
- data/app/views/admin/media_folders/index.html.erb +21 -0
- data/app/views/admin/media_folders/show.html.erb +79 -0
- data/app/views/application/error.html.erb +9 -0
- data/app/views/editable_pages/_editable_page.html.erb +1 -8
- data/app/views/editable_pages/entity/_metadata.html.erb +14 -0
- data/app/views/editable_pages/form/_ckeditor.html.erb +1 -1
- data/app/views/errors/error.html.erb +7 -0
- data/app/views/feedback_mailer/new_feedback_request.html.erb +12 -0
- data/app/views/feedback_mailer/new_feedback_request.text.erb +5 -0
- data/app/views/feedback_requests/_form.html.erb +60 -0
- data/app/views/feedback_requests/create.js.erb +10 -0
- data/app/views/media_files/_form.html.erb +75 -0
- data/app/views/media_files/ckeditor.html.erb +8 -0
- data/app/views/media_files/edit.html.erb +19 -0
- data/app/views/media_files/edit.js.erb +1 -0
- data/app/views/media_files/new.html.erb +15 -0
- data/app/views/media_files/new.js.erb +1 -0
- data/app/views/media_folders/_form.html.erb +54 -0
- data/app/views/media_folders/edit.html.erb +22 -0
- data/app/views/media_folders/edit.js.erb +1 -0
- data/app/views/media_folders/new.html.erb +19 -0
- data/app/views/media_folders/new.js.erb +1 -0
- data/app/views/shared/_meta_texts.html.erb +3 -0
- data/app/views/shared/_pagination.jbuilder +3 -3
- data/app/views/shared/admin/_toggleable.html.erb +7 -0
- data/app/views/shared/editable_pages/_body.html.erb +1 -10
- data/app/views/shared/forms/_default_ajax_handler.html.erb +13 -0
- data/app/views/shared/forms/_list_of_errors.js.erb +19 -0
- data/config/locales/common-en.yml +152 -0
- data/config/locales/common-ru.yml +41 -0
- data/config/locales/feedback-en.yml +30 -0
- data/config/locales/feedback-ru.yml +36 -0
- data/config/locales/media-ru.yml +92 -0
- data/config/routes.rb +34 -0
- data/db/migrate/20170301000002_create_metric_values.rb +1 -1
- data/db/migrate/20170301000102_create_agents.rb +1 -1
- data/db/migrate/20170302000001_create_users.rb +2 -2
- data/db/migrate/20170302000002_create_user_profiles.rb +1 -1
- data/db/migrate/20170302000003_create_tokens.rb +2 -2
- data/db/migrate/20170302000005_create_codes.rb +3 -3
- data/db/migrate/20170302000102_create_user_privileges.rb +3 -3
- data/db/migrate/20170302000104_create_privilege_group_privileges.rb +2 -2
- data/db/migrate/20170425000002_create_foreign_users.rb +3 -3
- data/db/migrate/20170629120000_create_login_attempts.rb +2 -2
- data/db/migrate/20171202000000_create_media_folders.rb +28 -0
- data/db/migrate/20171202000001_create_media_files.rb +27 -0
- data/db/migrate/20171211000000_create_feedback_requests.rb +26 -0
- data/db/migrate/20171217222222_add_fields_to_feedback_requests.rb +10 -0
- data/db/migrate/20171223333333_amend_foreign_keys.rb +72 -0
- data/lib/biovision/base/base_methods.rb +1 -1
- data/lib/biovision/base/engine.rb +1 -1
- data/lib/biovision/base/version.rb +1 -1
- metadata +94 -26
@@ -0,0 +1,48 @@
|
|
1
|
+
class MediaFile < ApplicationRecord
|
2
|
+
include HasOwner
|
3
|
+
|
4
|
+
PER_PAGE = 20
|
5
|
+
|
6
|
+
NAME_LIMIT = 250
|
7
|
+
DESCRIPTION_LIMIT = 250
|
8
|
+
|
9
|
+
mount_uploader :file, MediaFileUploader
|
10
|
+
mount_uploader :snapshot, MediaSnapshotUploader
|
11
|
+
|
12
|
+
belongs_to :media_folder, optional: true, counter_cache: true
|
13
|
+
belongs_to :user, optional: true
|
14
|
+
belongs_to :agent, optional: true
|
15
|
+
|
16
|
+
after_initialize { self.uuid = SecureRandom.uuid if uuid.nil? }
|
17
|
+
|
18
|
+
before_validation { self.mime_type = mime_type.to_s[0..254] }
|
19
|
+
before_validation { self.original_name = original_name.to_s[0..254] }
|
20
|
+
|
21
|
+
validates_presence_of :name
|
22
|
+
validates_presence_of :file
|
23
|
+
validates_length_of :name, maximum: NAME_LIMIT
|
24
|
+
validates_length_of :description, maximum: DESCRIPTION_LIMIT
|
25
|
+
validates_uniqueness_of :name, scope: [:media_folder_id]
|
26
|
+
validates_uniqueness_of :uuid
|
27
|
+
|
28
|
+
scope :ordered_by_name, -> { order('name asc') }
|
29
|
+
scope :recent, -> { order('id desc') }
|
30
|
+
|
31
|
+
# @param [Integer] page
|
32
|
+
def self.page_for_administration(page = 1)
|
33
|
+
ordered_by_name.page(page).per(PER_PAGE)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.entity_parameters
|
37
|
+
%i(name description media_folder_id)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.creation_parameters
|
41
|
+
entity_parameters + %i(file snapshot mime_type original_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param [User] user
|
45
|
+
def editable_by?(user)
|
46
|
+
!locked && owned_by?(user) || UserPrivilege.user_has_privilege?(user, :chief_editor)
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
class MediaFolder < ApplicationRecord
|
2
|
+
include HasOwner
|
3
|
+
|
4
|
+
NAME_LIMIT = 100
|
5
|
+
MAX_DEPTH = 3
|
6
|
+
|
7
|
+
mount_uploader :snapshot, MediaSnapshotUploader
|
8
|
+
|
9
|
+
belongs_to :user, optional: true
|
10
|
+
belongs_to :agent, optional: true
|
11
|
+
belongs_to :parent, class_name: MediaFolder.to_s, optional: true, touch: true
|
12
|
+
has_many :child_folders, class_name: MediaFolder.to_s, foreign_key: :parent_id, dependent: :destroy
|
13
|
+
has_many :media_files, dependent: :destroy
|
14
|
+
|
15
|
+
after_initialize { self.uuid = SecureRandom.uuid if uuid.nil? }
|
16
|
+
before_validation :calculate_depth
|
17
|
+
before_save { self.children_cache.uniq! }
|
18
|
+
after_save { parent.cache_children! unless parent.nil? }
|
19
|
+
after_create :cache_parents!
|
20
|
+
|
21
|
+
validates_presence_of :name
|
22
|
+
validates_uniqueness_of :name, scope: [:parent_id]
|
23
|
+
validates_length_of :name, maximum: NAME_LIMIT
|
24
|
+
validate :parent_is_not_too_deep
|
25
|
+
|
26
|
+
scope :ordered_by_name, -> { order('name asc') }
|
27
|
+
scope :for_tree, ->(parent_id = nil) { where(parent_id: parent_id).ordered_by_name }
|
28
|
+
|
29
|
+
# Allowed parameters for editing entity in controllers
|
30
|
+
#
|
31
|
+
# @return [Array<Symbol>]
|
32
|
+
def self.entity_parameters
|
33
|
+
%i(name snapshot)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Allowed parameters for creating in controllers
|
37
|
+
#
|
38
|
+
# @return [Array<Symbol>]
|
39
|
+
def self.creation_parameters
|
40
|
+
entity_parameters + %i(parent_id)
|
41
|
+
end
|
42
|
+
|
43
|
+
def full_title
|
44
|
+
(parents.map { |parent| parent.name } + [name]).join ' / '
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [Array<Integer>]
|
48
|
+
def parent_ids
|
49
|
+
parents_cache.split(',').compact.map(&:to_i)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Parent branch ids including current id
|
53
|
+
#
|
54
|
+
# @return [Array<Integer>]
|
55
|
+
def branch_ids
|
56
|
+
parents_cache.split(',').map(&:to_i).reject { |i| i < 1 }.uniq + [id]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Child branch (with subbranches) ids starting with current id
|
60
|
+
#
|
61
|
+
# @return [Array<Integer>]
|
62
|
+
def subbranch_ids
|
63
|
+
[id] + children_cache
|
64
|
+
end
|
65
|
+
|
66
|
+
def parents
|
67
|
+
return [] if parents_cache.blank?
|
68
|
+
MediaFolder.where(id: parent_ids).order('id asc')
|
69
|
+
end
|
70
|
+
|
71
|
+
# Total media file count for all children and current entity
|
72
|
+
#
|
73
|
+
# @return [Integer]
|
74
|
+
def file_count
|
75
|
+
MediaFolder.where(id: subbranch_ids).sum(:media_files_count)
|
76
|
+
end
|
77
|
+
|
78
|
+
def can_be_deleted?
|
79
|
+
file_count < 1
|
80
|
+
end
|
81
|
+
|
82
|
+
# @param [User] user
|
83
|
+
def editable_by?(user)
|
84
|
+
owned_by?(user) || UserPrivilege.user_has_privilege?(user, :chief_editor)
|
85
|
+
end
|
86
|
+
|
87
|
+
def cache_parents!
|
88
|
+
return if parent.nil?
|
89
|
+
self.parents_cache = "#{parent.parents_cache},#{parent_id}".gsub(/\A,/, '')
|
90
|
+
save!
|
91
|
+
end
|
92
|
+
|
93
|
+
def cache_children!
|
94
|
+
child_folders.order('id asc').each do |child|
|
95
|
+
self.children_cache += [child.id] + child.children_cache
|
96
|
+
end
|
97
|
+
save!
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def calculate_depth
|
103
|
+
return if parent.nil?
|
104
|
+
self.depth = parent.depth + 1
|
105
|
+
end
|
106
|
+
|
107
|
+
def parent_is_not_too_deep
|
108
|
+
return if parent.nil?
|
109
|
+
if parent.depth >= MAX_DEPTH
|
110
|
+
error = I18n.t('activerecord.errors.models.media_folder.attributes.parent.is_too_deep')
|
111
|
+
errors.add(:parent, error)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
data/app/models/metric.rb
CHANGED
@@ -4,10 +4,13 @@ class Metric < ApplicationRecord
|
|
4
4
|
DESCRIPTION_LIMIT = 250
|
5
5
|
PERIOD_RANGE = (1..365)
|
6
6
|
|
7
|
+
METRIC_HTTP_400 = 'errors.http.bad_request.hit'
|
7
8
|
METRIC_HTTP_401 = 'errors.http.unauthorized.hit'
|
9
|
+
METRIC_HTTP_403 = 'errors.http.forbidden.hit'
|
8
10
|
METRIC_HTTP_404 = 'errors.http.not_found.hit'
|
11
|
+
METRIC_HTTP_422 = 'errors.http.unprocessable_entity.hit'
|
12
|
+
METRIC_HTTP_500 = 'errors.http.internal_server_error.hit'
|
9
13
|
METRIC_HTTP_503 = 'errors.http.service_unavailable.hit'
|
10
|
-
METRIC_HTTP_505 = 'errors.http.internal_server_error.hit'
|
11
14
|
|
12
15
|
has_many :metric_values, dependent: :destroy
|
13
16
|
|
@@ -23,7 +23,7 @@ class PrivilegeGroup < ApplicationRecord
|
|
23
23
|
def self.ids(slug)
|
24
24
|
instance = find_by(slug: slug.to_s)
|
25
25
|
return [] if instance.nil?
|
26
|
-
instance.privileges.map(&:
|
26
|
+
instance.privileges.map(&:branch_ids).flatten.uniq
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.entity_parameters
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class MediaFileUploader < CarrierWave::Uploader::Base
|
2
|
+
include CarrierWave::MiniMagick
|
3
|
+
include CarrierWave::BombShelter
|
4
|
+
|
5
|
+
# Choose what kind of storage to use for this uploader:
|
6
|
+
storage :file
|
7
|
+
# storage :fog
|
8
|
+
|
9
|
+
# Override the directory where uploaded files will be stored.
|
10
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
11
|
+
def store_dir
|
12
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id/10000.floor}/#{model.id/100.floor}/#{model.id}"
|
13
|
+
end
|
14
|
+
|
15
|
+
version :medium_2x do
|
16
|
+
resize_to_fit 1280, 1280
|
17
|
+
end
|
18
|
+
|
19
|
+
version :medium, from_version: :medium_2x do
|
20
|
+
resize_to_fit 640, 640
|
21
|
+
end
|
22
|
+
|
23
|
+
def extension_whitelist
|
24
|
+
%w(jpg jpeg gif png)
|
25
|
+
end
|
26
|
+
|
27
|
+
def filename
|
28
|
+
"#{model.uuid}.#{file.extension}" if original_filename
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class MediaSnapshotUploader < CarrierWave::Uploader::Base
|
2
|
+
include CarrierWave::MiniMagick
|
3
|
+
include CarrierWave::BombShelter
|
4
|
+
|
5
|
+
# Choose what kind of storage to use for this uploader:
|
6
|
+
storage :file
|
7
|
+
# storage :fog
|
8
|
+
|
9
|
+
def store_dir
|
10
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id/10000.floor}/#{model.id/100.floor}/#{model.id}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def default_url(*args)
|
14
|
+
ActionController::Base.helpers.asset_path('biovision/base/placeholders/file.svg')
|
15
|
+
end
|
16
|
+
|
17
|
+
version :preview_2x do
|
18
|
+
resize_to_fit(160, 160)
|
19
|
+
end
|
20
|
+
|
21
|
+
version :preview, from_version: :preview_2x do
|
22
|
+
resize_to_fit(80, 80)
|
23
|
+
end
|
24
|
+
|
25
|
+
def extension_whitelist
|
26
|
+
%w(jpg jpeg png)
|
27
|
+
end
|
28
|
+
|
29
|
+
def filename
|
30
|
+
"#{model.uuid}.#{file.extension}" if original_filename
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<div class="data">
|
2
|
+
<div><%= entity.name %></div>
|
3
|
+
<div class="info">
|
4
|
+
<%= entity.phone %>
|
5
|
+
<%= entity.email %>
|
6
|
+
</div>
|
7
|
+
<div class="secondary info">
|
8
|
+
<%= time_tag entity.created_at %><br/>
|
9
|
+
<%= entity.ip %>
|
10
|
+
</div>
|
11
|
+
<% unless entity.comment.blank? %>
|
12
|
+
<div class="secondary info">
|
13
|
+
<%= simple_format entity.comment %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= render partial: 'shared/admin/toggleable', locals: { entity: entity, url: toggle_admin_feedback_request_path(entity.id) } %>
|
18
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% content_for :meta_title, t('.title', page: current_page) %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<span><%= t('admin.feedback_requests.nav_item.text') %></span>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<article>
|
7
|
+
<h1><%= t('.heading') %></h1>
|
8
|
+
|
9
|
+
<ul class="actions">
|
10
|
+
<li><%= back_icon(admin_path) %></li>
|
11
|
+
</ul>
|
12
|
+
|
13
|
+
<%= paginate @collection %>
|
14
|
+
<%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
|
15
|
+
<%= paginate @collection %>
|
16
|
+
</article>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= render 'admin/index/dashboard/settings' %>
|
2
|
+
<%= render 'admin/index/dashboard/biovision_track' %>
|
3
|
+
<%= render 'admin/index/dashboard/biovision_region' %>
|
4
|
+
<%= render 'admin/index/dashboard/biovision_user' %>
|
5
|
+
<%= render 'admin/index/dashboard/editorial' %>
|
6
|
+
<%= render 'admin/index/dashboard/biovision_feedback' %>
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if current_user_has_privilege?(:administrator) %>
|
2
|
+
<nav>
|
3
|
+
<div class="heading"><%= t('.heading') %></div>
|
4
|
+
<ul>
|
5
|
+
<li><%= render 'admin/users/nav_item' %></li>
|
6
|
+
<li><%= render 'admin/privileges/nav_item' %></li>
|
7
|
+
<li><%= render 'admin/privilege_groups/nav_item' %></li>
|
8
|
+
<li><%= render 'admin/login_attempts/nav_item' %></li>
|
9
|
+
<li><%= render 'admin/tokens/nav_item' %></li>
|
10
|
+
<li><%= render 'admin/codes/nav_item' %></li>
|
11
|
+
</ul>
|
12
|
+
</nav>
|
13
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% if current_user_in_group?(:editors) %>
|
2
|
+
<nav>
|
3
|
+
<div class="heading"><%= t('.heading') %></div>
|
4
|
+
<ul>
|
5
|
+
<% if current_user_has_privilege?(:chief_editor) %>
|
6
|
+
<li><%= render 'admin/editable_pages/nav_item' %></li>
|
7
|
+
<% end %>
|
8
|
+
<li><%= render 'admin/media_folders/nav_item' %></li>
|
9
|
+
<li><%= render 'admin/media_files/nav_item' %></li>
|
10
|
+
</ul>
|
11
|
+
</nav>
|
12
|
+
<% end %>
|
@@ -4,27 +4,7 @@
|
|
4
4
|
<h1><%= t('.heading') %></h1>
|
5
5
|
|
6
6
|
<div class="dashboard">
|
7
|
-
|
8
|
-
|
9
|
-
<% if current_user_has_privilege?(:administrator) %>
|
10
|
-
<li><%= render 'admin/users/nav_item' %></li>
|
11
|
-
<li><%= render 'admin/login_attempts/nav_item' %></li>
|
12
|
-
<li><%= render 'admin/tokens/nav_item' %></li>
|
13
|
-
<li><%= render 'admin/codes/nav_item' %></li>
|
14
|
-
<li><%= render 'admin/privileges/nav_item' %></li>
|
15
|
-
<li><%= render 'admin/privilege_groups/nav_item' %></li>
|
16
|
-
<li><%= render 'admin/stored_values/nav_item' %></li>
|
17
|
-
<% end %>
|
18
|
-
<% if current_user_in_group?(:region_managers) %>
|
19
|
-
<li><%= render 'admin/regions/nav_item' %></li>
|
20
|
-
<% end %>
|
21
|
-
<% if current_user_has_privilege?(:metrics_manager) %>
|
22
|
-
<li><%= render 'admin/metrics/nav_item' %></li>
|
23
|
-
<% end %>
|
24
|
-
<% if current_user_has_privilege?(:chief_editor) %>
|
25
|
-
<li><%= render 'admin/editable_pages/nav_item' %></li>
|
26
|
-
<% end %>
|
27
|
-
</ul>
|
28
|
-
</nav>
|
7
|
+
<%= render 'admin/index/biovision_base' %>
|
8
|
+
<%= render 'admin/index/custom_dashboard' %>
|
29
9
|
</div>
|
30
10
|
</article>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<div class="image">
|
2
|
+
<%= media_snapshot_preview(entity) %>
|
3
|
+
</div>
|
4
|
+
<div class="data">
|
5
|
+
<div><%= admin_media_file_link(entity) %></div>
|
6
|
+
<div class="info">
|
7
|
+
<%= editor_user_link(entity.user) %>,
|
8
|
+
<%= time_tag(entity.created_at) %>
|
9
|
+
</div>
|
10
|
+
<% unless entity.description.blank? %>
|
11
|
+
<div class="secondary info">
|
12
|
+
<%= entity.description %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<% unless entity.media_folder.nil? %>
|
16
|
+
<div class="secondary info">
|
17
|
+
<%= admin_media_folder_link(entity.media_folder, entity.media_folder.full_title) %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<ul class="actions">
|
22
|
+
<% if entity.editable_by?(current_user) %>
|
23
|
+
<li><%= edit_icon(edit_media_file_path(entity.id)) %></li>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
26
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<% content_for :meta_title, t('.title', page: current_page) %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<span><%= t('admin.media_files.nav_item.text') %></span>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<article>
|
7
|
+
<h1><%= t('.heading') %></h1>
|
8
|
+
|
9
|
+
<ul class="actions">
|
10
|
+
<li><%= back_icon(admin_path) %></li>
|
11
|
+
<li><%= create_icon(new_media_file_path) %></li>
|
12
|
+
</ul>
|
13
|
+
|
14
|
+
<%= paginate @collection %>
|
15
|
+
<%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
|
16
|
+
<%= paginate @collection %>
|
17
|
+
</article>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<% content_for :meta_title, @entity.name %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_files.nav_item.text'), admin_media_files_path) %>
|
4
|
+
<span><%= @entity.name %></span>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<article>
|
8
|
+
<h1><%= @entity.name %></h1>
|
9
|
+
|
10
|
+
<ul class="actions">
|
11
|
+
<li>
|
12
|
+
<% if @entity.media_folder.nil? %>
|
13
|
+
<%= return_icon(admin_media_files_path) %>
|
14
|
+
<% else %>
|
15
|
+
<%= return_icon(admin_media_folder_path(@entity.media_folder_id)) %>
|
16
|
+
<% end %>
|
17
|
+
</li>
|
18
|
+
<li><%= edit_icon(edit_media_file_path(@entity.id)) %></li>
|
19
|
+
</ul>
|
20
|
+
|
21
|
+
|
22
|
+
<dl>
|
23
|
+
<dt><%= t('activerecord.attributes.media_file.file') %></dt>
|
24
|
+
<dd>
|
25
|
+
<figure role="group">
|
26
|
+
<%= media_file_medium(@entity) %>
|
27
|
+
<figcaption>
|
28
|
+
<%= t('activerecord.attributes.media_file.file') %>
|
29
|
+
</figcaption>
|
30
|
+
</figure>
|
31
|
+
|
32
|
+
</dd>
|
33
|
+
<% unless @entity.media_folder.nil? %>
|
34
|
+
<dt><%= t('activerecord.attributes.media_file.media_folder') %></dt>
|
35
|
+
<dd><%= admin_media_folder_link(@entity.media_folder, @entity.media_folder.full_title) %></dd>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
<dt><%= t('activerecord.attributes.media_file.name') %></dt>
|
39
|
+
<dd><%= @entity.name %></dd>
|
40
|
+
|
41
|
+
<% unless @entity.description.blank? %>
|
42
|
+
<dt><%= t('activerecord.attributes.media_file.description') %></dt>
|
43
|
+
<dd><%= @entity.description %></dd>
|
44
|
+
<% end %>
|
45
|
+
|
46
|
+
<dt><%= t('activerecord.attributes.media_file.user') %></dt>
|
47
|
+
<dd><%= editor_user_link(@entity.user) %></dd>
|
48
|
+
|
49
|
+
<dt><%= t(:created_at) %></dt>
|
50
|
+
<dd><%= time_tag(@entity.created_at) %></dd>
|
51
|
+
|
52
|
+
<dt><%= t(:updated_at) %></dt>
|
53
|
+
<dd><%= time_tag(@entity.updated_at) %></dd>
|
54
|
+
|
55
|
+
<dt><%= t('activerecord.attributes.media_file.uuid') %></dt>
|
56
|
+
<dd><%= @entity.uuid %></dd>
|
57
|
+
</dl>
|
58
|
+
|
59
|
+
<%= render partial: 'shared/track', locals: { item: @entity } %>
|
60
|
+
</article>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="image">
|
2
|
+
<%= media_snapshot_preview(entity) %>
|
3
|
+
</div>
|
4
|
+
<div class="data">
|
5
|
+
<div><%= admin_media_folder_link(entity) %></div>
|
6
|
+
<div class="info">
|
7
|
+
<%= t(:created_at) %>:
|
8
|
+
<%= time_tag(entity.created_at) %><br/>
|
9
|
+
<%= t('activerecord.attributes.media_folder.user') %>:
|
10
|
+
<%= editor_user_link(entity.user) %>
|
11
|
+
</div>
|
12
|
+
<div class="secondary info">
|
13
|
+
<%= link_to(t(:media_file_count, count: entity.media_files_count), files_admin_media_folder_path(entity.id)) %>
|
14
|
+
(<%= t(:total) %> <%= entity.file_count %>)
|
15
|
+
</div>
|
16
|
+
<% if entity.children_cache.any? %>
|
17
|
+
<div class="children">
|
18
|
+
<%=
|
19
|
+
button_tag(t(:child_media_folder_count, count: entity.child_folders.count),
|
20
|
+
type: :button,
|
21
|
+
class: 'button-expand children-loader',
|
22
|
+
data: { url: admin_media_folders_path(parent_id: entity.id) })
|
23
|
+
%>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<% if entity.editable_by?(current_user) %>
|
28
|
+
<ul class="actions">
|
29
|
+
<li><%= edit_icon(edit_media_folder_path(entity.id)) %></li>
|
30
|
+
</ul>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% content_for :meta_title, t('.title', name: @entity.name, page: current_page) %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_folders.nav_item.text'), admin_media_folders_path) %>
|
4
|
+
<% @entity.parents.each do |parent| %>
|
5
|
+
<%= admin_media_folder_link(parent) %>
|
6
|
+
<% end %>
|
7
|
+
<%= admin_media_folder_link(@entity) %>
|
8
|
+
<span><%= t('admin.media_folders.show.media_files') %></span>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<article>
|
12
|
+
<h1><%= @entity.full_title %></h1>
|
13
|
+
<h2><%= t(:media_file_count, count: @entity.media_files_count) %></h2>
|
14
|
+
|
15
|
+
<ul class="actions">
|
16
|
+
<li><%= return_icon(admin_media_folder_path(@entity.id)) %></li>
|
17
|
+
</ul>
|
18
|
+
|
19
|
+
<%= paginate @collection %>
|
20
|
+
<%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
|
21
|
+
<%= paginate @collection %>
|
22
|
+
|
23
|
+
<section>
|
24
|
+
<h2><%= t('media_files.new.heading') %></h2>
|
25
|
+
|
26
|
+
<%= render partial: 'media_files/form', locals: { entity: @entity.media_files.new } %>
|
27
|
+
</section>
|
28
|
+
</article>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% content_for :meta_title, t('.title') %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<span><%= t('admin.media_folders.nav_item.text') %></span>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<article>
|
7
|
+
<h1><%= t('.heading') %></h1>
|
8
|
+
|
9
|
+
<ul class="actions">
|
10
|
+
<li><%= back_icon(admin_path) %></li>
|
11
|
+
<li><%= create_icon(new_media_folder_path) %></li>
|
12
|
+
</ul>
|
13
|
+
|
14
|
+
<%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
|
15
|
+
|
16
|
+
<section>
|
17
|
+
<h2><%= t('media_folders.new.heading') %></h2>
|
18
|
+
|
19
|
+
<%= render partial: 'media_folders/form', locals: { entity: MediaFolder.new } %>
|
20
|
+
</section>
|
21
|
+
</article>
|