From 045f54585b2a5d00c029e9ae836410b43a8d793c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com> Date: Fri, 17 Dec 2021 14:46:21 +0100 Subject: [PATCH] program featured image --- .../admin/education/programs_controller.rb | 1 + app/models/communication/website/with_media.rb | 12 +++++++++++- app/models/education/program.rb | 2 ++ app/views/admin/education/programs/_form.html.erb | 14 ++++++++++++++ app/views/admin/education/programs/show.html.erb | 10 ++++++++++ config/locales/education/en.yml | 1 + config/locales/education/fr.yml | 1 + 7 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb index ef52df18a..d928c482a 100644 --- a/app/controllers/admin/education/programs_controller.rb +++ b/app/controllers/admin/education/programs_controller.rb @@ -80,6 +80,7 @@ class Admin::Education::ProgramsController < Admin::Education::ApplicationContro def program_params params.require(:education_program).permit( :name, :slug, :level, :capacity, :ects, :continuing, :description, :published, + :featured_image, :featured_image_delete, :featured_image_infos, :prerequisites, :objectives, :duration, :registration, :pedagogy, :evaluation, :accessibility, :pricing, :contacts, :opportunities, :other, :parent_id, school_ids: [], teacher_ids: [] diff --git a/app/models/communication/website/with_media.rb b/app/models/communication/website/with_media.rb index adc5069cb..c96a5bcc0 100644 --- a/app/models/communication/website/with_media.rb +++ b/app/models/communication/website/with_media.rb @@ -2,10 +2,20 @@ module Communication::Website::WithMedia extend ActiveSupport::Concern def active_storage_blobs - blob_ids = [best_featured_image&.blob_id, text.embeds.blobs.pluck(:id)].flatten.compact + blob_ids = [best_featured_image&.blob_id, rich_text_blob_ids].flatten.compact university.active_storage_blobs.where(id: blob_ids) end + def rich_text_reflection_names + @rich_text_reflection_names ||= _reflections.select { |name, reflection| reflection.class_name == "ActionText::RichText" }.keys + end + + def rich_text_blob_ids + rich_text_reflection_names.map { |rich_text_reflection_name| + public_send(rich_text_reflection_name).embeds.blobs.pluck(:id) + }.flatten + end + # Can be overwrite to get featured_image from associated objects (ex: parents) def best_featured_image(fallback: true) featured_image diff --git a/app/models/education/program.rb b/app/models/education/program.rb index 1a5045501..004ccd957 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -32,6 +32,7 @@ class Education::Program < ApplicationRecord include WithGithubFiles include WithMenuItemTarget include WithTree + include Communication::Website::WithMedia attr_accessor :skip_websites_categories_callback @@ -46,6 +47,7 @@ class Education::Program < ApplicationRecord has_rich_text :prerequisites has_rich_text :pricing has_rich_text :registration + has_one_attached_deletable :featured_image belongs_to :university belongs_to :parent, diff --git a/app/views/admin/education/programs/_form.html.erb b/app/views/admin/education/programs/_form.html.erb index cad98a94c..274caa93f 100644 --- a/app/views/admin/education/programs/_form.html.erb +++ b/app/views/admin/education/programs/_form.html.erb @@ -24,6 +24,20 @@ <%= f.association :parent, collection: program.persisted? ? program.list_of_other_programs : current_university.list_of_programs, label_method: ->(p) { sanitize p[:label] }, value_method: ->(p) { p[:id] } %> </div> </div> + <div class="card flex-fill w-100"> + <div class="card-header"> + <h5 class="card-title mb-0"><%= t('activerecord.attributes.education/program.featured_image') %></h5> + </div> + <div class="card-body"> + <%= f.input :featured_image, + as: :single_deletable_file, + direct_upload: true, + label: false, + input_html: { accept: '.jpg,.jpeg,.png' }, + preview: true + %> + </div> + </div> </div> <div class="col-md-8"> <div class="card flex-fill w-100"> diff --git a/app/views/admin/education/programs/show.html.erb b/app/views/admin/education/programs/show.html.erb index bf7ad5710..3d0e54f67 100644 --- a/app/views/admin/education/programs/show.html.erb +++ b/app/views/admin/education/programs/show.html.erb @@ -28,6 +28,16 @@ <% end %> </div> </div> + <% if @program.featured_image.attached? && @program.featured_image.variable? %> + <div class="card flex-fill w-100"> + <div class="card-header"> + <h5 class="card-title mb-0"><%= t('activerecord.attributes.education/program.featured_image') %></h5> + </div> + <div class="card-body"> + <%= image_tag @program.featured_image.variant(resize: '600'), class: 'img-fluid mb-3' %><br> + </div> + </div> + <% end %> </div> <div class="col-md-8"> <div class="card flex-fill w-100"> diff --git a/config/locales/education/en.yml b/config/locales/education/en.yml index eb3f1b124..7c0cd5413 100644 --- a/config/locales/education/en.yml +++ b/config/locales/education/en.yml @@ -20,6 +20,7 @@ en: duration: Durée ects: Crédits ECTS evaluation: Modalités d’évaluation + featured_image: Featured image level: Level name: Name objectives: Objectifs diff --git a/config/locales/education/fr.yml b/config/locales/education/fr.yml index cda0dc8fe..509c363e7 100644 --- a/config/locales/education/fr.yml +++ b/config/locales/education/fr.yml @@ -20,6 +20,7 @@ fr: duration: Durée ects: Crédits ECTS evaluation: Modalités d’évaluation + featured_image: Image à la une level: Niveau name: Nom objectives: Objectifs -- GitLab