From 86485961bfd0988192ea00ae12900ae78c9b45e9 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Mon, 6 Sep 2021 15:43:06 +0200
Subject: [PATCH] refactor

---
 app/models/communication/website.rb           |  3 +-
 app/models/research/journal.rb                |  1 +
 app/models/research/journal/article.rb        | 14 ++++++-
 app/models/research/journal/volume.rb         | 14 ++++++-
 app/services/github.rb                        | 38 -------------------
 .../communication/websites/_form.html.erb     | 10 +++++
 .../communication/websites/show.html.erb      |  5 +++
 .../admin/research/journals/_form.html.erb    |  5 ---
 .../admin/research/journals/index.html.erb    |  4 +-
 .../admin/research/journals/show.html.erb     |  7 +++-
 config/locales/communication/fr.yml           |  4 +-
 11 files changed, 52 insertions(+), 53 deletions(-)

diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index 1964228e7..da1e498d5 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -28,9 +28,10 @@ class Communication::Website < ApplicationRecord
   has_many :pages, foreign_key: :communication_website_id
 
   def self.about_types
-    [nil, :research_journal, :school]
+    [nil, Research::Journal.name]
   end
 
+
   def domain_url
     "https://#{ domain }"
   end
diff --git a/app/models/research/journal.rb b/app/models/research/journal.rb
index 40fc64ecf..5cdc09b64 100644
--- a/app/models/research/journal.rb
+++ b/app/models/research/journal.rb
@@ -21,6 +21,7 @@
 #
 class Research::Journal < ApplicationRecord
   belongs_to :university
+  has_one :website, class_name: 'Communication::Website', foreign_key: :about
   has_many :volumes, foreign_key: :research_journal_id
   has_many :articles, foreign_key: :research_journal_id
 
diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb
index 9adf754d3..4f7c4bd8c 100644
--- a/app/models/research/journal/article.rb
+++ b/app/models/research/journal/article.rb
@@ -38,7 +38,17 @@ class Research::Journal::Article < ApplicationRecord
   protected
 
   def publish_to_github
-    return if journal.repository.blank?
-    Github.publish_article self
+    return if journal.website&.repository.blank?
+    github = Github.new journal.website.access_token, journal.website.repository
+    data = ApplicationController.render(
+      template: 'admin/research/journal/articles/jekyll',
+      layout: false,
+      assigns: { article: self }
+    )
+    github.publish  local_directory: "tmp/articles",
+                    local_file: "#{id}.md",
+                    data: data,
+                    remote_file: "_articles/#{id}.md",
+                    commit_message: "Save volume #{ title }"
   end
 end
diff --git a/app/models/research/journal/volume.rb b/app/models/research/journal/volume.rb
index ed0e9f297..d01c14079 100644
--- a/app/models/research/journal/volume.rb
+++ b/app/models/research/journal/volume.rb
@@ -38,7 +38,17 @@ class Research::Journal::Volume < ApplicationRecord
   protected
 
   def publish_to_github
-    return if journal.repository.blank?
-    Github.publish_volume self
+    return if journal.website&.repository.blank?
+    github = Github.new journal.website.access_token, journal.website.repository
+    data = ApplicationController.render(
+      template: 'admin/research/journal/volumes/jekyll',
+      layout: false,
+      assigns: { volume: self }
+    )
+    github.publish  local_directory: "tmp/volumes",
+                    local_file: "#{id}.md",
+                    data: data,
+                    remote_file: "_volumes/#{id}.md",
+                    commit_message: "Save volume #{ title }"
   end
 end
diff --git a/app/services/github.rb b/app/services/github.rb
index c5f183ba3..b52429617 100644
--- a/app/services/github.rb
+++ b/app/services/github.rb
@@ -1,49 +1,11 @@
 class Github
   attr_reader :access_token, :repository
 
-  def self.publish_article(article)
-    with_journal(article.journal).publish_article(article)
-  end
-
-  def self.publish_volume(volume)
-    with_journal(volume.journal).publish_volume(volume)
-  end
-
-  def self.with_journal(journal)
-    new(journal.access_token, journal.repository)
-  end
-
   def initialize(access_token, repository)
     @access_token = access_token
     @repository = repository
   end
 
-  def publish_article(article)
-    data = ApplicationController.render(
-      template: 'admin/research/journal/articles/jekyll',
-      layout: false,
-      assigns: { article: article }
-    )
-    publish local_directory: "tmp/articles",
-            local_file: "#{article.id}.md",
-            data: data,
-            remote_file: "_articles/#{article.id}.md",
-            commit_message: "Save article #{ article.title }"
-  end
-
-  def publish_volume(volume)
-    data = ApplicationController.render(
-      template: 'admin/research/journal/volumes/jekyll',
-      layout: false,
-      assigns: { volume: volume }
-    )
-    publish local_directory: "tmp/volumes",
-            local_file: "#{volume.id}.md",
-            data: data,
-            remote_file: "_volumes/#{volume.id}.md",
-            commit_message: "Save volume #{ volume.title }"
-  end
-
   def publish(local_directory:, local_file:, data:, remote_file:, commit_message:)
     FileUtils.mkdir_p local_directory
     local_path = "#{local_directory}/#{ local_file }"
diff --git a/app/views/admin/communication/websites/_form.html.erb b/app/views/admin/communication/websites/_form.html.erb
index 09160d49c..6e92bb9db 100644
--- a/app/views/admin/communication/websites/_form.html.erb
+++ b/app/views/admin/communication/websites/_form.html.erb
@@ -8,6 +8,16 @@
                     I18n.t("activerecord.attributes.communication/website.about_#{object}")
                   },
                   include_blank: false %>
+      <%
+      unless website.about_type.blank?
+        case website.about_type
+        when Research::Journal.name
+          collection = current_university.research_journals
+        end
+      %>
+        <%= f.input :about_id,
+                    collection: collection %>
+      <% end %>
     </div>
     <div class="col-md-4">
       <%= f.input :domain %>
diff --git a/app/views/admin/communication/websites/show.html.erb b/app/views/admin/communication/websites/show.html.erb
index 7b965af6f..18780fd65 100644
--- a/app/views/admin/communication/websites/show.html.erb
+++ b/app/views/admin/communication/websites/show.html.erb
@@ -4,6 +4,11 @@
   <%= link_to @website.domain_url, @website.domain_url, target: :_blank %>
 </p>
 
+<p>
+  <%= I18n.t("activerecord.attributes.communication/website.about_#{@website.about_type}") %>
+  <%= link_to @website.about, [:admin, @website.about] unless @website.about.nil? %>
+</p>
+
 <% content_for :buttons do %>
   <%= edit_link @website %>
 <% end %>
diff --git a/app/views/admin/research/journals/_form.html.erb b/app/views/admin/research/journals/_form.html.erb
index 3b3c86b71..b212e3573 100644
--- a/app/views/admin/research/journals/_form.html.erb
+++ b/app/views/admin/research/journals/_form.html.erb
@@ -2,11 +2,6 @@
   <div class="row">
     <div class="col-md-6">
       <%= f.input :title %>
-      <%= f.input :repository %>
-      <%= f.input :access_token %>
-    </div>
-    <div class="col-md-6">
-      <%= f.input :description %>
     </div>
   </div>
   <% content_for :buttons do %>
diff --git a/app/views/admin/research/journals/index.html.erb b/app/views/admin/research/journals/index.html.erb
index f6664f2d4..32384f564 100644
--- a/app/views/admin/research/journals/index.html.erb
+++ b/app/views/admin/research/journals/index.html.erb
@@ -5,7 +5,7 @@
     <tr>
       <th><%= Research::Journal.human_attribute_name('title') %></th>
       <th><%= Research::Journal::Volume.model_name.human(count: 2) %></th>
-      <th>Articles</th>
+      <th><%= Research::Journal::Article.model_name.human(count: 2) %></th>
       <th></th>
     </tr>
   </thead>
@@ -15,7 +15,7 @@
       <tr>
         <td><%= link_to journal, [:admin, journal] %></td>
         <td><%= link_to "#{journal.volumes.count}", admin_research_journal_volumes_path(journal_id: journal) %></td>
-        <td></td>
+        <td><%= link_to "#{journal.articles.count}", admin_research_journal_articles_path(journal_id: journal) %></td>
         <td class="text-end">
           <%= edit_link journal %>
           <%= destroy_link journal %>
diff --git a/app/views/admin/research/journals/show.html.erb b/app/views/admin/research/journals/show.html.erb
index ab48f259c..7fe401575 100644
--- a/app/views/admin/research/journals/show.html.erb
+++ b/app/views/admin/research/journals/show.html.erb
@@ -1,6 +1,11 @@
 <% content_for :title, @journal %>
 
-<p><%= @journal.description %></p>
+<% if @journal.website %>
+  <p>
+    Site : 
+    <%= link_to @journal.website, [:admin, @journal.website] %>
+  </p>
+<% end %>
 
 <h2 class="mt-5"><%= Research::Journal::Volume.model_name.human(count: 2) %></h2>
 
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index cb8b96135..b87fa7777 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -16,5 +16,5 @@ fr:
         domain: Domaine
         about_type: Sujet du site
         about_: Aucun sujet (site indépendant)
-        about_research_journal: Site de revue scientifique
-        about_school: Site d'école
+        about_Research::Journal: Site de revue scientifique
+        about_School: Site d'école
-- 
GitLab