Class: Admin::MediaAssetsController
Overview
Media library — list, upload, preview and bulk-manage assets stored in
Active Storage.
Permission gating runs through Admin::BaseController#check_permission_for_controller,
which consults CONTROLLER_PERMISSION_MAP (we register +media_assets →
:manage_media there).
Constant Summary
collapse
- DEFAULT_FOLDERS =
%w[general sports events news declarations].freeze
- SORTS =
%w[recent name size used].freeze
- VIEWS =
%w[grid list].freeze
AdminPagination::DEFAULT_MAX_PER_PAGE, AdminPagination::DEFAULT_MIN_PER_PAGE
Instance Method Summary
collapse
#turbo_frame_id, #turbo_frame_request?, #turbo_redirect_to, #turbo_render_form, #turbo_render_index, #turbo_stream_replace_table, #turbo_stream_request?, #turbo_stream_update_table
#paginate_collection, #set_pagination_vars
Instance Method Details
#bulk_delete ⇒ Object
95
96
97
98
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 95
def bulk_delete
bulk_destroy(MediaAsset, audit: :media_deleted, target_label: "MediaAsset")
turbo_redirect_to admin_media_assets_path, notice: "Geselecteerde assets verwijderd."
end
|
#bulk_move ⇒ Object
100
101
102
103
104
105
106
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 100
def bulk_move
folder = params[:folder].to_s
redirect_to admin_media_assets_path, alert: "Geen doel-folder opgegeven." and return if folder.blank?
bulk_update(MediaAsset, { folder: }, audit: :media_moved, target_label: "MediaAsset")
turbo_redirect_to admin_media_assets_path(folder:), notice: "Verplaatst naar #{folder}."
end
|
#create ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 49
def create
file = params.dig(:media_asset, :file) || params[:file]
redirect_to admin_media_assets_path, alert: "Selecteer minstens een bestand om te uploaden." and return if file.blank?
uploads = Array(file).reject(&:blank?)
created = []
MediaAsset.transaction do
uploads.each do |upload|
asset = build_asset_from_upload(upload)
asset.save!
created << asset
end
end
created.each do |asset|
audit!(:media_uploaded, target: asset, summary: "Uploaded #{asset.name} to #{asset.folder}", meta: { id: asset.id, folder: asset.folder, size_kb: asset.size_kb, kind: asset.kind })
end
redirect_to admin_media_assets_path(folder: params[:folder]),
notice: "#{created.size} bestand#{'en' if created.size != 1} geüpload."
rescue ActiveRecord::RecordInvalid => e
redirect_to admin_media_assets_path, alert: "Upload mislukt: #{e.record.errors.full_messages.to_sentence}"
end
|
#destroy ⇒ Object
88
89
90
91
92
93
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 88
def destroy
name = @media_asset.name
@media_asset.destroy
audit!(:media_deleted, target: "MediaAsset:#{name}", summary: "Deleted media #{name}", meta: { id: @media_asset.id })
turbo_redirect_to admin_media_assets_path, notice: "Asset verwijderd."
end
|
#edit ⇒ Object
74
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 74
def edit; end
|
#index ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 25
def index
scope = MediaAsset.all
scope = scope.in_folder(params[:folder]) if params[:folder].present? && params[:folder] != "all"
scope = scope.search(params[:search]) if params[:search].present?
scope = apply_sort(scope, params[:sort])
@folder = params[:folder].presence || "all"
@sort = SORTS.include?(params[:sort]) ? params[:sort] : "recent"
@view = VIEWS.include?(params[:view]) ? params[:view] : "grid"
@search = params[:search].to_s
@folder_counts = MediaAsset.folder_counts
@folders = (DEFAULT_FOLDERS + @folder_counts.keys.reject {|k| k == "all" }).uniq
@total_size_kb = MediaAsset.sum(:size_kb)
@unused_count = MediaAsset.unused.count
@media_assets = (scope)
turbo_render_index
end
|
#new ⇒ Object
45
46
47
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 45
def new
@media_asset = MediaAsset.new(folder: params[:folder].presence || "general")
end
|
#picker ⇒ Object
JSON endpoint for a future visual-editor picker.
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 109
def picker
scope = MediaAsset.recent
scope = scope.in_folder(params[:folder]) if params[:folder].present? && params[:folder] != "all"
scope = scope.search(params[:search]) if params[:search].present?
scope = scope.limit(200)
render json: scope.map {|a|
{
id: a.id,
name: a.name,
cdn_url: a.cdn_url,
width: a.width,
height: a.height,
mime_type: a.mime_type,
folder: a.folder
}
}
end
|
#show ⇒ Object
43
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 43
def show; end
|
#update ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/generators/ruby_cms/templates/controllers/admin/media_assets_controller.rb', line 76
def update
attrs = media_asset_params
attrs = attrs.to_h.merge(tags: parse_tags(attrs[:tags])) if attrs[:tags].kind_of?(String)
if @media_asset.update(attrs)
audit!(:media_updated, target: @media_asset, summary: "Updated media #{@media_asset.name}")
turbo_redirect_to admin_media_asset_path(@media_asset), notice: "Asset bijgewerkt."
else
turbo_render_form :edit
end
end
|