From 3cdfcc707a393ed7b006a97c945ce944708e8ed2 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <arnaud.levy@noesya.coop>
Date: Thu, 19 Dec 2024 10:20:40 +0100
Subject: [PATCH] Featured image (#2513)

---
 .../admin/education/programs_controller.rb    |  2 +-
 .../university/organizations_controller.rb    |  4 ++
 .../university/organization/localization.rb   | 42 ++++++++++---------
 .../university/organizations/_form.html.erb   | 12 +++++-
 .../university/organizations/show.html.erb    | 10 +++--
 .../university/organizations/static.html.erb  |  1 +
 ...atured_image_to_university_organization.rb |  6 +++
 db/schema.rb                                  |  4 +-
 8 files changed, 54 insertions(+), 27 deletions(-)
 create mode 100644 db/migrate/20241218180521_add_featured_image_to_university_organization.rb

diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb
index a313f4426..59d7eab80 100644
--- a/app/controllers/admin/education/programs_controller.rb
+++ b/app/controllers/admin/education/programs_controller.rb
@@ -65,7 +65,7 @@ class Admin::Education::ProgramsController < Admin::Education::Programs::Applica
     load_part
     if @program.update(program_params)
       load_localization
-      @l10n.add_photo_import params[:photo_import] if params.has_key?(:photo_import)
+      @l10n.add_photo_import params[:photo_import]
       @program.touch # to ensure it send the photo_import picture
       redirect_to after_update_path,
                   notice: t('admin.successfully_updated_html', model: @program.to_s_in(current_language))
diff --git a/app/controllers/admin/university/organizations_controller.rb b/app/controllers/admin/university/organizations_controller.rb
index 6a36176cf..354b4f058 100644
--- a/app/controllers/admin/university/organizations_controller.rb
+++ b/app/controllers/admin/university/organizations_controller.rb
@@ -46,6 +46,7 @@ class Admin::University::OrganizationsController < Admin::University::Applicatio
   end
 
   def create
+    @l10n.add_photo_import params[:photo_import]
     if @organization.save
       redirect_to admin_university_organization_path(@organization),
                   notice: t('admin.successfully_created_html', model: @organization.to_s_in(current_language))
@@ -58,6 +59,8 @@ class Admin::University::OrganizationsController < Admin::University::Applicatio
 
   def update
     if @organization.update(organization_params)
+      load_localization
+      @l10n.add_photo_import params[:photo_import]
       redirect_to admin_university_organization_path(@organization),
                   notice: t('admin.successfully_updated_html', model: @organization.to_s_in(current_language))
     else
@@ -93,6 +96,7 @@ class Admin::University::OrganizationsController < Admin::University::Applicatio
               :url, :linkedin, :twitter, :mastodon,
               :logo, :logo_delete, :logo_infos,
               :logo_on_dark_background, :logo_on_dark_background_delete, :logo_on_dark_background_infos,
+              :featured_image, :featured_image_delete, :featured_image_infos, :featured_image_alt, :featured_image_credit,
               :shared_image, :shared_image_delete,
               :language_id
             ]
diff --git a/app/models/university/organization/localization.rb b/app/models/university/organization/localization.rb
index 9a471a2cd..a775297aa 100644
--- a/app/models/university/organization/localization.rb
+++ b/app/models/university/organization/localization.rb
@@ -2,24 +2,26 @@
 #
 # Table name: university_organization_localizations
 #
-#  id                 :uuid             not null, primary key
-#  address_additional :string
-#  address_name       :string
-#  linkedin           :string
-#  long_name          :string
-#  mastodon           :string
-#  meta_description   :text
-#  name               :string
-#  slug               :string
-#  summary            :text
-#  text               :text
-#  twitter            :string
-#  url                :string
-#  created_at         :datetime         not null
-#  updated_at         :datetime         not null
-#  about_id           :uuid             indexed
-#  language_id        :uuid             indexed
-#  university_id      :uuid             indexed
+#  id                    :uuid             not null, primary key
+#  address_additional    :string
+#  address_name          :string
+#  featured_image_alt    :string
+#  featured_image_credit :text
+#  linkedin              :string
+#  long_name             :string
+#  mastodon              :string
+#  meta_description      :text
+#  name                  :string
+#  slug                  :string
+#  summary               :text
+#  text                  :text
+#  twitter               :string
+#  url                   :string
+#  created_at            :datetime         not null
+#  updated_at            :datetime         not null
+#  about_id              :uuid             indexed
+#  language_id           :uuid             indexed
+#  university_id         :uuid             indexed
 #
 # Indexes
 #
@@ -42,6 +44,7 @@ class University::Organization::Localization < ApplicationRecord
   include Sanitizable
   include Shareable
   include WithBlobs
+  include WithFeaturedImage
   include WithGitFiles
   include WithUniversity
 
@@ -50,8 +53,6 @@ class University::Organization::Localization < ApplicationRecord
   has_one_attached_deletable :logo
   has_one_attached_deletable :logo_on_dark_background
 
-  alias :featured_image :logo
-
   validates :name, presence: true
   validates :name, uniqueness: { scope: [:university_id, :language_id] }
   validates :logo, size: { less_than: 1.megabytes }
@@ -84,6 +85,7 @@ class University::Organization::Localization < ApplicationRecord
     [
       logo&.blob_id,
       logo_on_dark_background&.blob_id,
+      featured_image&.blob_id,
       shared_image&.blob_id
     ]
   end
diff --git a/app/views/admin/university/organizations/_form.html.erb b/app/views/admin/university/organizations/_form.html.erb
index 7a3c2d90e..621543501 100644
--- a/app/views/admin/university/organizations/_form.html.erb
+++ b/app/views/admin/university/organizations/_form.html.erb
@@ -22,8 +22,8 @@
                     input_html: { accept: default_images_formats_accepted },
                     preview: 200,
                     resize: false %>
-        <%= render 'admin/application/images/shared/form', f: lf, about: l10n %>
-        <%= render 'admin/application/meta_description/form', f: lf, about: l10n %>
+        <%= osuny_separator %>
+        <%= render 'admin/application/images/featured/form', f: lf, about: l10n %>
       </div>
       <div class="offset-lg-1 col-lg-8">
         <%= render 'admin/application/summary/form', f: lf, about: l10n %>
@@ -47,6 +47,14 @@
             </div>
           </div>
         <% end %>
+        <div class="row">
+          <div class="col-lg-6">
+            <%= render 'admin/application/images/shared/form', f: lf, about: l10n %>
+          </div>
+          <div class="col-lg-6">
+            <%= render 'admin/application/meta_description/form', f: lf, about: l10n %>
+          </div>
+        </div>
       </div>
     </div>
     <% content_for :action_bar_right do %>
diff --git a/app/views/admin/university/organizations/show.html.erb b/app/views/admin/university/organizations/show.html.erb
index 919524c60..e4fdcd25f 100644
--- a/app/views/admin/university/organizations/show.html.erb
+++ b/app/views/admin/university/organizations/show.html.erb
@@ -6,17 +6,21 @@
       <% if @l10n.logo.attached? %>
         <div>
           <%= osuny_label University::Organization::Localization.human_attribute_name('logo') %><br>
-          <%= kamifusen_tag @l10n.logo, class: 'img-fluid img-fill bg-light img-thumbnail p-5 mb-3' %>
+          <%= kamifusen_tag @l10n.logo,
+                            width: 200,
+                            class: 'img-fluid img-fill bg-light img-thumbnail p-5 mb-3' %>
         </div>
       <% end %>
       <% if @l10n.logo_on_dark_background.attached? %>
         <div>
           <%= osuny_label University::Organization::Localization.human_attribute_name('logo_on_dark_background') %><br>
-          <%= kamifusen_tag @l10n.logo_on_dark_background, class: 'img-fluid img-fill bg-dark img-thumbnail p-5' %>
+          <%= kamifusen_tag @l10n.logo_on_dark_background,
+                            width: 200,
+                            class: 'img-fluid img-fill bg-dark img-thumbnail p-5' %>
         </div>
       <% end %>
     <% end if @l10n.logo.attached? || @l10n.logo_on_dark_background.attached? %>
-
+    <%= render 'admin/application/images/featured/show', about: @l10n, small: true %>
     <%= osuny_property_show_text @l10n, :slug, hide_blank: true %>
     <%= osuny_property_show_boolean @organization, :active %>
     <%= render 'admin/application/categories/widget/show', about: @organization %>
diff --git a/app/views/admin/university/organizations/static.html.erb b/app/views/admin/university/organizations/static.html.erb
index 87d102f89..a6c6de56d 100644
--- a/app/views/admin/university/organizations/static.html.erb
+++ b/app/views/admin/university/organizations/static.html.erb
@@ -17,6 +17,7 @@ cache cache_key do
             toc_offcanvas: true %>
 <%= render 'admin/application/l10n/static', about: @l10n %>
 <%= render 'admin/application/meta_description/static', about: @l10n %>
+<%= render 'admin/application/images/featured/static', about: @l10n %>
 <%= render 'admin/application/images/shared/static', about: @l10n %>
 <%= render 'admin/application/summary/static', about: @l10n %>
 <%= render 'admin/application/connections/backlinks', about: @l10n %>
diff --git a/db/migrate/20241218180521_add_featured_image_to_university_organization.rb b/db/migrate/20241218180521_add_featured_image_to_university_organization.rb
new file mode 100644
index 000000000..007e8f5b1
--- /dev/null
+++ b/db/migrate/20241218180521_add_featured_image_to_university_organization.rb
@@ -0,0 +1,6 @@
+class AddFeaturedImageToUniversityOrganization < ActiveRecord::Migration[7.2]
+  def change
+    add_column :university_organization_localizations, :featured_image_alt, :string
+    add_column :university_organization_localizations, :featured_image_credit, :text
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 743212ecf..7a2c1620d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema[7.2].define(version: 2024_12_17_141959) do
+ActiveRecord::Schema[7.2].define(version: 2024_12_18_180521) do
   # These are extensions that must be enabled in order to support this database
   enable_extension "pg_trgm"
   enable_extension "pgcrypto"
@@ -1552,6 +1552,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_17_141959) do
     t.uuid "university_id"
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
+    t.string "featured_image_alt"
+    t.text "featured_image_credit"
     t.index ["about_id"], name: "index_university_organization_localizations_on_about_id"
     t.index ["language_id"], name: "index_university_organization_localizations_on_language_id"
     t.index ["university_id"], name: "index_university_organization_localizations_on_university_id"
-- 
GitLab