From f71f7f206fe9397ade149df282f16229c367d1b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Tue, 11 Jan 2022 12:02:25 +0100
Subject: [PATCH] published volume

---
 .../admin/research/journal/volumes_controller.rb       |  2 +-
 app/models/research/journal/article.rb                 |  2 +-
 app/models/research/journal/volume.rb                  | 10 ++++++++++
 .../admin/research/journal/articles/show.html.erb      |  2 +-
 .../admin/research/journal/volumes/_form.html.erb      |  1 +
 .../admin/research/journal/volumes/index.html.erb      |  6 +++++-
 app/views/admin/research/journals/show.html.erb        |  4 +++-
 config/locales/research/en.yml                         |  1 +
 config/locales/research/fr.yml                         |  1 +
 ...101410_add_published_to_research_journal_volumes.rb |  5 +++++
 db/schema.rb                                           |  3 ++-
 lib/tasks/app.rake                                     |  3 +++
 12 files changed, 34 insertions(+), 6 deletions(-)
 create mode 100644 db/migrate/20220111101410_add_published_to_research_journal_volumes.rb

diff --git a/app/controllers/admin/research/journal/volumes_controller.rb b/app/controllers/admin/research/journal/volumes_controller.rb
index a07b2849b..b0c1d63da 100644
--- a/app/controllers/admin/research/journal/volumes_controller.rb
+++ b/app/controllers/admin/research/journal/volumes_controller.rb
@@ -56,7 +56,7 @@ class Admin::Research::Journal::VolumesController < Admin::Research::Journal::Ap
   def volume_params
     params.require(:research_journal_volume)
           .permit(
-            :title, :slug, :number, :keywords, :published_at, :description,
+            :title, :slug, :number, :keywords, :published, :published_at, :description,
             :featured_image, :featured_image_infos, :featured_image_delete, :featured_image_alt
           )
           .merge(university_id: current_university.id)
diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb
index 1ab24435d..ca553be57 100644
--- a/app/models/research/journal/article.rb
+++ b/app/models/research/journal/article.rb
@@ -57,7 +57,7 @@ class Research::Journal::Article < ApplicationRecord
   scope :published, -> { where(published: true) }
 
   def git_path(website)
-    "content/articles/#{published_at.year}/#{published_at.strftime "%Y-%m-%d"}-#{slug}.html" if published_at
+    "content/articles/#{published_at.year}/#{published_at.strftime "%Y-%m-%d"}-#{slug}.html" if (volume.nil? || volume.published_at) && published_at
   end
 
   def git_dependencies(website)
diff --git a/app/models/research/journal/volume.rb b/app/models/research/journal/volume.rb
index 6724c4399..328ded75e 100644
--- a/app/models/research/journal/volume.rb
+++ b/app/models/research/journal/volume.rb
@@ -7,6 +7,7 @@
 #  featured_image_alt  :string
 #  keywords            :text
 #  number              :integer
+#  published           :boolean          default(FALSE)
 #  published_at        :date
 #  slug                :string
 #  title               :string
@@ -37,6 +38,9 @@ class Research::Journal::Volume < ApplicationRecord
   has_many :websites, -> { distinct }, through: :journal
   has_many :researchers, through: :articles
 
+  before_validation :set_published_at, if: :published_changed?
+
+  scope :published, -> { where(published: true) }
   scope :ordered, -> { order(number: :desc, published_at: :desc) }
 
   def website
@@ -62,4 +66,10 @@ class Research::Journal::Volume < ApplicationRecord
   def to_s
     "##{ number } #{ title }"
   end
+
+  protected
+
+  def set_published_at
+    self.published_at = published? ? Time.zone.now : nil
+  end
 end
diff --git a/app/views/admin/research/journal/articles/show.html.erb b/app/views/admin/research/journal/articles/show.html.erb
index ab0dfb960..dc84c32a4 100644
--- a/app/views/admin/research/journal/articles/show.html.erb
+++ b/app/views/admin/research/journal/articles/show.html.erb
@@ -28,7 +28,7 @@
       <div class="card-body">
         <% if @article.volume %>
           <h3 class="h5"><%= Research::Journal::Article.human_attribute_name('volume') %></h3>
-          <p><%= link_to @article.volume, [:admin, @article.volume] %></p>
+          <p><%= link_to @article.volume, [:admin, @article.volume], class: "#{'opacity-50' unless @article.volume.published?}" %></p>
         <% end %>
         <h3 class="h5"><%= Research::Journal::Article.human_attribute_name('published') %></h3>
         <p><%= t @article.published %></p>
diff --git a/app/views/admin/research/journal/volumes/_form.html.erb b/app/views/admin/research/journal/volumes/_form.html.erb
index 0b53bf292..77e82605d 100644
--- a/app/views/admin/research/journal/volumes/_form.html.erb
+++ b/app/views/admin/research/journal/volumes/_form.html.erb
@@ -30,6 +30,7 @@
         </div>
         <div class="card-body">
           <%= f.input :number %>
+          <%= f.input :published %>
           <%= f.input :published_at, html5: true %>
           <%= f.input :keywords %>
         </div>
diff --git a/app/views/admin/research/journal/volumes/index.html.erb b/app/views/admin/research/journal/volumes/index.html.erb
index cd16b28fe..0b72e856a 100644
--- a/app/views/admin/research/journal/volumes/index.html.erb
+++ b/app/views/admin/research/journal/volumes/index.html.erb
@@ -12,7 +12,11 @@
   <tbody>
     <% @volumes.each do |volume| %>
       <tr>
-        <td><%= link_to volume, admin_research_journal_volume_path(journal_id: @journal, id: volume) %></td>
+        <td>
+          <%= link_to volume,
+                      admin_research_journal_volume_path(journal_id: @journal, id: volume),
+                      class: "#{'opacity-50' unless volume.published?}" %>
+        </td>
         <td><%= image_tag volume.featured_image.variant(resize: 'x200'),
                           height: 100 if volume.featured_image.attached? %></td>
         <td><%= volume.published_at %></td>
diff --git a/app/views/admin/research/journals/show.html.erb b/app/views/admin/research/journals/show.html.erb
index ffee7a259..6866b76a8 100644
--- a/app/views/admin/research/journals/show.html.erb
+++ b/app/views/admin/research/journals/show.html.erb
@@ -30,7 +30,9 @@
           <div class="card">
             <%= image_tag volume.featured_image, class: 'img-fluid' if volume.featured_image.attached? %>
             <div class="card-body">
-              <%= link_to volume, admin_research_journal_volume_path(journal_id: @journal, id: volume), class: 'stretched-link' %>
+              <%= link_to volume,
+                          admin_research_journal_volume_path(journal_id: @journal, id: volume),
+                          class: "stretched-link #{'opacity-50' unless volume.published?}" %>
             </div>
           </div>
         </div>
diff --git a/config/locales/research/en.yml b/config/locales/research/en.yml
index e733e35ad..f77d0d0e4 100644
--- a/config/locales/research/en.yml
+++ b/config/locales/research/en.yml
@@ -33,6 +33,7 @@ en:
         description: Description
         keywords: Keywords
         number: Number
+        published: Published?
         published_at: Published at
         title: Title
   research:
diff --git a/config/locales/research/fr.yml b/config/locales/research/fr.yml
index f8ca8b6a2..3e0afa176 100644
--- a/config/locales/research/fr.yml
+++ b/config/locales/research/fr.yml
@@ -33,6 +33,7 @@ fr:
         description: Description
         keywords: Mots clés
         number: Numéro
+        published: Publié ?
         published_at: Publié le
         title: Titre
   research:
diff --git a/db/migrate/20220111101410_add_published_to_research_journal_volumes.rb b/db/migrate/20220111101410_add_published_to_research_journal_volumes.rb
new file mode 100644
index 000000000..0ef13b711
--- /dev/null
+++ b/db/migrate/20220111101410_add_published_to_research_journal_volumes.rb
@@ -0,0 +1,5 @@
+class AddPublishedToResearchJournalVolumes < ActiveRecord::Migration[6.1]
+  def change
+    add_column :research_journal_volumes, :published, :boolean, default: false
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index ce33a4428..50acbfe29 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.define(version: 2022_01_11_092324) do
+ActiveRecord::Schema.define(version: 2022_01_11_101410) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
@@ -477,6 +477,7 @@ ActiveRecord::Schema.define(version: 2022_01_11_092324) do
     t.text "keywords"
     t.string "slug"
     t.string "featured_image_alt"
+    t.boolean "published", default: false
     t.index ["research_journal_id"], name: "index_research_journal_volumes_on_research_journal_id"
     t.index ["university_id"], name: "index_research_journal_volumes_on_university_id"
   end
diff --git a/lib/tasks/app.rake b/lib/tasks/app.rake
index 4ba4f91fd..95f457320 100644
--- a/lib/tasks/app.rake
+++ b/lib/tasks/app.rake
@@ -38,6 +38,9 @@ namespace :app do
         })
       end
     end
+    Research::Journal::Volume.find_each do |volume|
+      volume.update_column :published, volume.published_at.present?
+    end
   end
 
   namespace :db do
-- 
GitLab