Class: LatoCms::MediaController
- Inherits:
-
ApplicationController
- Object
- Lato::ApplicationController
- ApplicationController
- LatoCms::MediaController
- Defined in:
- app/controllers/lato_cms/media_controller.rb
Constant Summary collapse
- ADMIN_ONLY_ACTIONS =
%i[destroy_action].freeze
Instance Method Summary collapse
- #create ⇒ Object
- #create_action ⇒ Object
- #destroy_action ⇒ Object
- #index ⇒ Object
-
#picker_action ⇒ Object
Searchable/filterable grid used inside the field media picker modal (distinct from
index, which is the full standalone library page). -
#regenerate_alt_text_action ⇒ Object
Runs as a Lato::Operation (see GenerateAltTextJob) rather than inline: an LLM call can take a while, and blocking the request risks timing it out.
- #update ⇒ Object
- #update_action ⇒ Object
Instance Method Details
#create ⇒ Object
29 30 31 |
# File 'app/controllers/lato_cms/media_controller.rb', line 29 def create @media = LatoCms::Media.new end |
#create_action ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/controllers/lato_cms/media_controller.rb', line 33 def create_action @media = LatoCms::Media.new(create_params.merge(lato_spaces_group_id: @session.get(:spaces_group_id))) respond_to do |format| if @media.save format.html { redirect_to lato_cms.media_path, notice: t('lato_cms.media_created') } format.json { render json: @media } else format.html { render :create, status: :unprocessable_entity } format.json { render json: @media.errors, status: :unprocessable_entity } end end end |
#destroy_action ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'app/controllers/lato_cms/media_controller.rb', line 89 def destroy_action @media = query_media.find(params[:id]) in_use = @media.usage_count.positive? force = ActiveModel::Type::Boolean.new.cast(params[:force]) respond_to do |format| if (!in_use || force) && @media.destroy format.html { redirect_to lato_cms.media_path, notice: t('lato_cms.media_deleted') } format.json { render json: { message: t('lato_cms.media_deleted') } } else = in_use ? t('lato_cms.media_delete_in_use', count: @media.usage_count) : t('lato_cms.media_delete_failed') format.html { redirect_to lato_cms.media_path, alert: } format.json { render json: { error: , usage_count: @media.usage_count }, status: :unprocessable_entity } end end end |
#index ⇒ Object
8 9 10 11 12 13 14 15 16 17 |
# File 'app/controllers/lato_cms/media_controller.rb', line 8 def index @media = lato_index_collection( query_media.order(created_at: :desc), columns: %i[name media_type actions], sortable_columns: %i[name media_type created_at], searchable_columns: %i[name alt_text], default_sort_by: 'created_at|DESC', pagination: 24 ) end |
#picker_action ⇒ Object
Searchable/filterable grid used inside the field media picker modal
(distinct from index, which is the full standalone library page).
21 22 23 24 25 26 27 |
# File 'app/controllers/lato_cms/media_controller.rb', line 21 def picker_action media = query_media media = media.of_type(params[:type]) if params[:type].present? media = media.where('LOWER(lato_cms_media.name) LIKE :q', q: "%#{params[:q].to_s.downcase}%") if params[:q].present? @media = media.order(created_at: :desc).page(params[:page]).per(24) end |
#regenerate_alt_text_action ⇒ Object
Runs as a Lato::Operation (see GenerateAltTextJob) rather than inline: an LLM call can take a while, and blocking the request risks timing it out. The admin instead lands on a live progress page.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/controllers/lato_cms/media_controller.rb', line 68 def regenerate_alt_text_action @media = query_media.find(params[:id]) unless @media.image? && LatoCms.config.llm_configured? respond_to do |format| = t('lato_cms.media_alt_text_regenerate_unavailable') format.html { redirect_to lato_cms.media_update_path(@media), alert: } format.json { render json: { error: }, status: :unprocessable_entity } end return end operation = Lato::Operation.generate('LatoCms::GenerateAltTextJob', { media_id: @media.id }, @session.user_id) if operation.start redirect_to lato.operation_path(operation) else redirect_to lato_cms.media_update_path(@media), alert: t('lato_cms.media_alt_text_regenerate_failed') end end |
#update ⇒ Object
47 48 49 |
# File 'app/controllers/lato_cms/media_controller.rb', line 47 def update @media = query_media.find(params[:id]) end |
#update_action ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/controllers/lato_cms/media_controller.rb', line 51 def update_action @media = query_media.find(params[:id]) respond_to do |format| if @media.update(update_params) format.html { redirect_to lato_cms.media_path, notice: t('lato_cms.media_updated') } format.json { render json: @media } else format.html { render :update, status: :unprocessable_entity } format.json { render json: @media.errors, status: :unprocessable_entity } end end end |