From f1a344b64f421d6eaadad6af4ee507ce2779f070 Mon Sep 17 00:00:00 2001
From: pabois <pierreandre.boissinot@noesya.coop>
Date: Tue, 14 Dec 2021 18:02:06 +0100
Subject: [PATCH] wip members

---
 .../website/authors_controller.rb             | 55 ++-----------------
 .../admin/research/researchers_controller.rb  | 48 ++--------------
 app/models/administration/member.rb           | 14 +++++
 app/models/communication/website/post.rb      |  4 +-
 app/models/research/journal/article.rb        |  5 +-
 .../members/_main_infos.html.erb              | 28 ++++++++++
 .../website/authors/_form.html.erb            | 37 -------------
 .../website/authors/_list.html.erb            | 19 ++-----
 .../website/authors/edit.html.erb             |  5 --
 .../website/authors/index.html.erb            | 10 ++--
 .../website/authors/new.html.erb              |  5 --
 .../website/authors/show.html.erb             | 46 +++-------------
 .../website/menus/index.html.erb              |  8 ++-
 .../website/posts/_form.html.erb              |  2 +-
 .../website/posts/index.html.erb              |  8 ++-
 .../research/journal/articles/_form.html.erb  |  2 +-
 .../research/journal/articles/_list.html.erb  |  6 +-
 .../research/journal/articles/show.html.erb   |  2 +-
 .../admin/research/researchers/_form.html.erb | 29 ----------
 .../admin/research/researchers/edit.html.erb  |  3 -
 .../admin/research/researchers/index.html.erb | 23 +++-----
 .../admin/research/researchers/new.html.erb   |  3 -
 .../admin/research/researchers/show.html.erb  | 44 ++++-----------
 config/locales/communication/en.yml           |  2 +
 config/locales/communication/fr.yml           |  2 +
 config/locales/research/en.yml                |  3 +
 config/locales/research/fr.yml                |  3 +
 config/routes/admin/communication.rb          |  6 +-
 config/routes/admin/research.rb               |  2 +-
 ...ex_on_communication_website_post_author.rb |  6 ++
 ..._on_research_journal_article_researcher.rb |  6 ++
 db/schema.rb                                  |  6 +-
 32 files changed, 138 insertions(+), 304 deletions(-)
 create mode 100644 app/views/admin/administration/members/_main_infos.html.erb
 delete mode 100644 app/views/admin/communication/website/authors/_form.html.erb
 delete mode 100644 app/views/admin/communication/website/authors/edit.html.erb
 delete mode 100644 app/views/admin/communication/website/authors/new.html.erb
 delete mode 100644 app/views/admin/research/researchers/_form.html.erb
 delete mode 100644 app/views/admin/research/researchers/edit.html.erb
 delete mode 100644 app/views/admin/research/researchers/new.html.erb
 create mode 100644 db/migrate/20211214150454_change_index_on_communication_website_post_author.rb
 create mode 100644 db/migrate/20211214163501_change_index_on_research_journal_article_researcher.rb

diff --git a/app/controllers/admin/communication/website/authors_controller.rb b/app/controllers/admin/communication/website/authors_controller.rb
index 432d5e02d..d53ac3ba9 100644
--- a/app/controllers/admin/communication/website/authors_controller.rb
+++ b/app/controllers/admin/communication/website/authors_controller.rb
@@ -1,68 +1,23 @@
 class Admin::Communication::Website::AuthorsController < Admin::Communication::Website::ApplicationController
-  load_and_authorize_resource class: Communication::Website::Author, through: :website
 
   def index
-    @authors = @website.authors.ordered.page(params[:page])
+    @authors = current_university.members.authors.accessible_by(current_ability).ordered.page(params[:page])
     breadcrumb
   end
 
   def show
-    @posts = @author.posts.ordered.page(params[:page])
+    @author = current_university.members.authors.accessible_by(current_ability).find(params[:id])
+    @posts = @author.communication_website_posts.ordered.page(params[:page])
     breadcrumb
   end
 
-  def publish
-    @author.force_publish!
-    redirect_to admin_communication_website_author_path(@author), notice: t('admin.will_be_published_html', model: @author.to_s)
-  end
-
-  def new
-    @author.website = @website
-    breadcrumb
-  end
-
-  def edit
-    breadcrumb
-    add_breadcrumb t('edit')
-  end
-
-  def create
-    @author.website = @website
-    if @author.save
-      redirect_to admin_communication_website_author_path(@author), notice: t('admin.successfully_created_html', model: @author.to_s)
-    else
-      breadcrumb
-      render :new, status: :unprocessable_entity
-    end
-  end
-
-  def update
-    if @author.update(author_params)
-      redirect_to admin_communication_website_author_path(@author), notice: t('admin.successfully_updated_html', model: @author.to_s)
-    else
-      breadcrumb
-      add_breadcrumb t('edit')
-      render :edit, status: :unprocessable_entity
-    end
-  end
-
-  def destroy
-    @author.destroy
-    redirect_to admin_communication_website_authors_url, notice: t('admin.successfully_destroyed_html', model: @author.to_s)
-  end
-
   protected
 
   def breadcrumb
     super
-    add_breadcrumb  Communication::Website::Author.model_name.human(count: 2),
-                    admin_communication_website_authors_path
+    add_breadcrumb Communication::Website::Author.model_name.human(count: 2),
+                   admin_communication_website_authors_path
     breadcrumb_for @author
   end
 
-  def author_params
-    params.require(:communication_website_author)
-          .permit(:website_id, :first_name, :last_name, :biography, :slug, :user_id)
-          .merge(university_id: current_university.id)
-  end
 end
diff --git a/app/controllers/admin/research/researchers_controller.rb b/app/controllers/admin/research/researchers_controller.rb
index 47253a651..e8eeec4de 100644
--- a/app/controllers/admin/research/researchers_controller.rb
+++ b/app/controllers/admin/research/researchers_controller.rb
@@ -1,61 +1,23 @@
 class Admin::Research::ResearchersController < Admin::Research::ApplicationController
-  load_and_authorize_resource class: Research::Researcher,
-                              through: :current_university,
-                              through_association: :research_researchers
 
   def index
-    @researchers = @researchers.ordered.page(params[:page])
+    @researchers = current_university.members.researchers.accessible_by(current_ability).ordered.page(params[:page])
     breadcrumb
   end
 
   def show
+    @researcher = current_university.members.authors.accessible_by(current_ability).find(params[:id])
+    @articles = @researcher.research_journal_articles.ordered.page(params[:page])
     breadcrumb
   end
 
-  def new
-    breadcrumb
-  end
-
-  def edit
-    breadcrumb
-    add_breadcrumb t('edit')
-  end
-
-  def create
-    if @researcher.save
-      redirect_to [:admin, @researcher], notice: t('admin.successfully_created_html', model: @researcher.to_s)
-    else
-      breadcrumb
-      render :new, status: :unprocessable_entity
-    end
-  end
-
-  def update
-    if @researcher.update(researcher_params)
-      redirect_to [:admin, @researcher], notice: t('admin.successfully_updated_html', model: @researcher.to_s)
-    else
-      breadcrumb
-      add_breadcrumb t('edit')
-      render :edit, status: :unprocessable_entity
-    end
-  end
-
-  def destroy
-    @researcher.destroy
-    redirect_to admin_research_researchers_url, notice: t('admin.successfully_destroyed_html', model: @researcher.to_s)
-  end
-
   protected
 
   def breadcrumb
     super
-    add_breadcrumb Research::Researcher.model_name.human(count: 2), admin_research_researchers_path
+    add_breadcrumb Research::Researcher.model_name.human(count: 2),
+                   admin_research_researchers_path
     breadcrumb_for @researcher
   end
 
-  def researcher_params
-    params.require(:research_researcher)
-          .permit(:first_name, :last_name, :slug, :biography, :user_id)
-          .merge(university_id: current_university.id)
-  end
 end
diff --git a/app/models/administration/member.rb b/app/models/administration/member.rb
index 4d428784d..c8b5a5364 100644
--- a/app/models/administration/member.rb
+++ b/app/models/administration/member.rb
@@ -34,7 +34,21 @@ class Administration::Member < ApplicationRecord
   belongs_to :university
   belongs_to :user, optional: true
 
+  has_many :communication_website_posts,
+           class_name: 'Communication::Website::Post',
+           foreign_key: :author_id,
+           dependent: :nullify
+
+  has_and_belongs_to_many :research_journal_articles,
+                          class_name: 'Research::Journal::Article',
+                          join_table: :research_journal_articles_researchers,
+                          foreign_key: :researcher_id
+
   scope :ordered, -> { order(:last_name, :first_name) }
+  scope :administratives, -> { where(is_administrative: true) }
+  scope :authors, -> { where(is_author: true) }
+  scope :teachers, -> { where(is_teacher: true) }
+  scope :researchers, -> { where(is_researcher: true) }
 
   def to_s
     "#{last_name} #{first_name}"
diff --git a/app/models/communication/website/post.rb b/app/models/communication/website/post.rb
index 791b8b15a..2f31471eb 100644
--- a/app/models/communication/website/post.rb
+++ b/app/models/communication/website/post.rb
@@ -24,7 +24,7 @@
 #
 # Foreign Keys
 #
-#  fk_rails_...  (author_id => communication_website_authors.id)
+#  fk_rails_...  (author_id => administration_members.id)
 #  fk_rails_...  (communication_website_id => communication_websites.id)
 #  fk_rails_...  (university_id => universities.id)
 #
@@ -43,7 +43,7 @@ class Communication::Website::Post < ApplicationRecord
   belongs_to :website,
              foreign_key: :communication_website_id
   belongs_to :author,
-             class_name: 'Communication::Website::Author',
+             class_name: 'Administration::Member',
              optional: true
   has_and_belongs_to_many :categories,
                           class_name: 'Communication::Website::Category',
diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb
index 5d28a34f0..981887685 100644
--- a/app/models/research/journal/article.rb
+++ b/app/models/research/journal/article.rb
@@ -41,7 +41,10 @@ class Research::Journal::Article < ApplicationRecord
   belongs_to :journal, foreign_key: :research_journal_id
   belongs_to :volume, foreign_key: :research_journal_volume_id, optional: true
   belongs_to :updated_by, class_name: 'User'
-  has_and_belongs_to_many :researchers, class_name: 'Research::Researcher'
+  has_and_belongs_to_many :researchers,
+                          class_name: 'Administration::Member',
+                          join_table: :research_journal_articles_researchers,
+                          association_foreign_key: :researcher_id
   has_many :websites, -> { distinct }, through: :journal
 
   validates :title, :published_at, presence: true
diff --git a/app/views/admin/administration/members/_main_infos.html.erb b/app/views/admin/administration/members/_main_infos.html.erb
new file mode 100644
index 000000000..0bc1dc6e9
--- /dev/null
+++ b/app/views/admin/administration/members/_main_infos.html.erb
@@ -0,0 +1,28 @@
+<div class="row">
+  <div class="col-md-8">
+    <div class="card flex-fill w-100">
+      <div class="card-header">
+        <h2 class="card-title mb-0 h5"><%= t('content') %></h2>
+      </div>
+      <div class="card-body">
+        <h3 class="h5"><%= Administration::Member.human_attribute_name('biography') %></h3>
+        <%= member.biography %>
+      </div>
+    </div>
+  </div>
+  <div class="col-md-4">
+    <div class="card flex-fill w-100">
+      <div class="card-header">
+        <h2 class="card-title mb-0 h5"><%= t('metadata') %></h2>
+      </div>
+      <div class="card-body">
+        <h3 class="h5"><%= Administration::Member.human_attribute_name('slug') %></h3>
+        <p><%= member.slug %></p>
+        <% if member.user.present? %>
+          <h3 class="h5"><%= Administration::Member.human_attribute_name('user') %></h3>
+          <p><%= link_to_if can?(:read, member.user), member.user, admin_user_path(member.user) %></p>
+        <% end %>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/app/views/admin/communication/website/authors/_form.html.erb b/app/views/admin/communication/website/authors/_form.html.erb
deleted file mode 100644
index 0058427ac..000000000
--- a/app/views/admin/communication/website/authors/_form.html.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-<%= simple_form_for [:admin, author] do |f| %>
-  <div class="row">
-    <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('content') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :first_name %>
-          <%= f.input :last_name %>
-          <%= f.input :biography, as: :rich_text_area %>
-        </div>
-      </div>
-    </div>
-    <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :slug,
-                      as: :string,
-                      input_html: author.persisted? ? {} : {
-                        class: 'js-slug-input',
-                        data: { source: '#communication_website_author_first_name, #communication_website_author_last_name' }
-                      } %>
-          <%= f.association :user, collection: current_university.users.ordered %>
-          <ul>
-          </ul>
-        </div>
-      </div>
-    </div>
-  </div>
-  <% content_for :action_bar_right do %>
-    <%= submit f %>
-  <% end %>
-<% end %>
diff --git a/app/views/admin/communication/website/authors/_list.html.erb b/app/views/admin/communication/website/authors/_list.html.erb
index 96380bb00..fede64fd3 100644
--- a/app/views/admin/communication/website/authors/_list.html.erb
+++ b/app/views/admin/communication/website/authors/_list.html.erb
@@ -1,26 +1,15 @@
 <table class="<%= table_classes %>">
   <thead>
     <tr>
-      <th><%= Communication::Website::Author.human_attribute_name('name') %></th>
-      <th></th>
+      <th><%= Administration::Member.human_attribute_name('name') %></th>
+      <th><%= t('communication.number_of_posts') %></th>
     </tr>
   </thead>
   <tbody>
     <% authors.each do |author| %>
       <tr>
-        <td><%= link_to author, admin_communication_website_author_path(website_id: author.website.id, id: author.id) %></td>
-        <td class="text-end">
-          <div class="btn-group" role="group">
-            <%= link_to t('edit'),
-                      edit_admin_communication_website_author_path(website_id: author.website.id, id: author.id),
-                      class: button_classes %>
-            <%= link_to t('delete'),
-                      admin_communication_website_author_path(website_id: author.website.id, id: author.id),
-                      method: :delete,
-                      data: { confirm: t('please-confirm') },
-                      class: button_classes_danger %>
-          </div>
-        </td>
+        <td><%= link_to author, admin_communication_website_author_path(website_id: @website.id, id: author.id) %></td>
+        <td><%= author.communication_website_posts.count %></td>
       </tr>
     <% end %>
   </tbody>
diff --git a/app/views/admin/communication/website/authors/edit.html.erb b/app/views/admin/communication/website/authors/edit.html.erb
deleted file mode 100644
index c5bbc5356..000000000
--- a/app/views/admin/communication/website/authors/edit.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<% content_for :title, @author %>
-
-<%= render 'admin/communication/websites/sidebar' do %>
-  <%= render 'form', author: @author %>
-<% end %>
diff --git a/app/views/admin/communication/website/authors/index.html.erb b/app/views/admin/communication/website/authors/index.html.erb
index e5d344d3d..71439e8ef 100644
--- a/app/views/admin/communication/website/authors/index.html.erb
+++ b/app/views/admin/communication/website/authors/index.html.erb
@@ -3,12 +3,14 @@
 <%= render 'admin/communication/websites/sidebar' do %>
   <div class="card">
     <%= render 'admin/communication/website/authors/list', authors: @authors %>
-    <div class="card-body">
-      <%= paginate @authors, theme: 'bootstrap-5' %>
-    </div>
+    <% if @authors.total_pages > 1 %>
+      <div class="card-footer">
+        <%= paginate @authors, theme: 'bootstrap-5' %>
+      </div>
+    <% end %>
   </div>
 <% end %>
 
 <% content_for :action_bar_right do %>
-  <%= create_link Communication::Website::Author %>
+  <%= link_to t('communication.manage_authors'), admin_administration_members_path, class: button_classes if can?(:read, Administration::Member) %>
 <% end %>
diff --git a/app/views/admin/communication/website/authors/new.html.erb b/app/views/admin/communication/website/authors/new.html.erb
deleted file mode 100644
index 1d9894c1e..000000000
--- a/app/views/admin/communication/website/authors/new.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<% content_for :title, Communication::Website::Author.model_name.human %>
-
-<%= render 'admin/communication/websites/sidebar' do %>
-  <%= render 'form', author: @author %>
-<% end %>
diff --git a/app/views/admin/communication/website/authors/show.html.erb b/app/views/admin/communication/website/authors/show.html.erb
index 78bdd5f6a..212a629cc 100644
--- a/app/views/admin/communication/website/authors/show.html.erb
+++ b/app/views/admin/communication/website/authors/show.html.erb
@@ -1,56 +1,24 @@
 <% content_for :title, @author %>
 
 <%= render 'admin/communication/websites/sidebar' do %>
-  <div class="row">
-    <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h2 class="card-title mb-0 h5"><%= t('content') %></h2>
-        </div>
-        <div class="card-body">
-          <h3 class="h5"><%= Communication::Website::Author.human_attribute_name('biography') %></h3>
-          <%= @author.biography %>
-        </div>
-      </div>
-    </div>
-    <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h2 class="card-title mb-0 h5"><%= t('metadata') %></h2>
-        </div>
-        <div class="card-body">
-          <h3 class="h5"><%= Communication::Website::Author.human_attribute_name('slug') %></h3>
-          <p><%= @author.slug %></p>
-          <% if @author.user.present? %>
-            <h3 class="h5"><%= Communication::Website::Author.human_attribute_name('user') %></h3>
-            <p><%= link_to_if can?(:read, @author.user), @author.user, admin_user_path(@author.user) %></p>
-          <% end %>
-        </div>
-      </div>
-    </div>
-  </div>
+  <%= render 'admin/administration/members/main_infos', member: @author %>
+
   <% if @posts.total_count > 0 %>
     <div class="card">
       <div class="card-header">
         <h5><%= "#{Communication::Website::Post.model_name.human(count: 2)} (#{@posts.total_count})" %></h5>
       </div>
       <%= render 'admin/communication/website/posts/list', posts: @posts, hide_author: true %>
-      <div class="card-footer">
-        <%= paginate @posts, theme: 'bootstrap-5' %>
-      </div>
+      <% if @posts.total_pages > 1 %>
+        <div class="card-footer">
+          <%= paginate @posts, theme: 'bootstrap-5' %>
+        </div>
+      <% end %>
     </div>
 
   <% end %>
 <% end %>
 
-
-<% content_for :action_bar_left do %>
-  <%= link_to t('communication.website.force_publication'),
-              publish_admin_communication_website_author_path(@author),
-              method: :post,
-              class: button_classes %>
-<% end %>
-
 <% content_for :action_bar_right do %>
   <%= edit_link @author %>
 <% end %>
diff --git a/app/views/admin/communication/website/menus/index.html.erb b/app/views/admin/communication/website/menus/index.html.erb
index 03a573ee7..188904d98 100644
--- a/app/views/admin/communication/website/menus/index.html.erb
+++ b/app/views/admin/communication/website/menus/index.html.erb
@@ -3,9 +3,11 @@
 <%= render 'admin/communication/websites/sidebar' do %>
   <div class="card">
     <%= render 'admin/communication/website/menus/list', menus: @menus %>
-    <div class="card-footer">
-      <%= paginate @menus, theme: 'bootstrap-5' %>
-    </div>
+    <% if @menus.total_pages > 1 %>
+      <div class="card-footer">
+        <%= paginate @menus, theme: 'bootstrap-5' %>
+      </div>
+    <% end %>
   </div>
 <% end %>
 
diff --git a/app/views/admin/communication/website/posts/_form.html.erb b/app/views/admin/communication/website/posts/_form.html.erb
index fb2f47dfe..7e9244dcf 100644
--- a/app/views/admin/communication/website/posts/_form.html.erb
+++ b/app/views/admin/communication/website/posts/_form.html.erb
@@ -26,7 +26,7 @@
                       } %>
           <%= f.input :published %>
           <%= f.input :published_at, html5: true %>
-          <%= f.association :author, collection: @website.authors.ordered if @website.authors.any? %>
+          <%= f.association :author, collection: current_university.members.authors.ordered %>
           <%= f.association :categories,
                             as: :check_boxes,
                             collection: @website.list_of_categories.map { |category| [
diff --git a/app/views/admin/communication/website/posts/index.html.erb b/app/views/admin/communication/website/posts/index.html.erb
index ed951db10..5cf39eb63 100644
--- a/app/views/admin/communication/website/posts/index.html.erb
+++ b/app/views/admin/communication/website/posts/index.html.erb
@@ -3,9 +3,11 @@
 <%= render 'admin/communication/websites/sidebar' do %>
   <div class="card">
     <%= render 'admin/communication/website/posts/list', posts: @posts, hide_author: true, hide_category: true %>
-    <div class="card-footer">
-      <%= paginate @posts, theme: 'bootstrap-5' %>
-    </div>
+    <% if @posts.total_pages > 1 %>
+      <div class="card-footer">
+        <%= paginate @posts, theme: 'bootstrap-5' %>
+      </div>
+    <% end %>
   </div>
 <% end %>
 
diff --git a/app/views/admin/research/journal/articles/_form.html.erb b/app/views/admin/research/journal/articles/_form.html.erb
index a37138e11..1ca5b93cb 100644
--- a/app/views/admin/research/journal/articles/_form.html.erb
+++ b/app/views/admin/research/journal/articles/_form.html.erb
@@ -29,7 +29,7 @@
           <%= f.association :volume, collection: @journal.volumes, label: Research::Journal::Volume.model_name.human %>
           <%= f.input :published_at, html5: true %>
           <%= f.input :keywords, as: :text, input_html: { rows: 2 } %>
-          <%= f.association :researchers, collection: current_university.research_researchers.ordered, as: :check_boxes %>
+          <%= f.association :researchers, collection: current_university.members.researchers.ordered, as: :check_boxes %>
         </div>
       </div>
     </div>
diff --git a/app/views/admin/research/journal/articles/_list.html.erb b/app/views/admin/research/journal/articles/_list.html.erb
index 3d8425c40..d5e338ea9 100644
--- a/app/views/admin/research/journal/articles/_list.html.erb
+++ b/app/views/admin/research/journal/articles/_list.html.erb
@@ -9,15 +9,15 @@
   <tbody>
     <% articles.each do |article| %>
       <tr>
-        <td><%= link_to article, admin_research_journal_article_path(journal_id: @journal, id: article) %></td>
+        <td><%= link_to article, admin_research_journal_article_path(journal_id: article.journal, id: article) %></td>
         <td><%= article.published_at %></td>
         <td class="text-end">
           <div class="btn-group" role="group">
             <%= link_to t('edit'),
-                        edit_admin_research_journal_article_path(journal_id: @journal, id: article),
+                        edit_admin_research_journal_article_path(journal_id: article.journal, id: article),
                         class: button_classes %>
             <%= link_to t('delete'),
-                        admin_research_journal_article_path(journal_id: @journal, id: article),
+                        admin_research_journal_article_path(journal_id: article.journal, id: article),
                         method: :delete,
                         data: { confirm: t('please-confirm') },
                         class: button_classes_danger %>
diff --git a/app/views/admin/research/journal/articles/show.html.erb b/app/views/admin/research/journal/articles/show.html.erb
index 948d91e06..3d1b9e68b 100644
--- a/app/views/admin/research/journal/articles/show.html.erb
+++ b/app/views/admin/research/journal/articles/show.html.erb
@@ -40,7 +40,7 @@
           <h3 class="h5"><%= Research::Journal::Article.human_attribute_name('researchers') %></h3>
           <ul class="list-unstyled mb-0">
             <% @article.researchers.each do |researcher| %>
-              <li><%= link_to researcher, [:admin, researcher] %></li>
+              <li><%= link_to researcher, admin_research_researcher_path(researcher) %></li>
             <% end %>
           </ul>
         <% end %>
diff --git a/app/views/admin/research/researchers/_form.html.erb b/app/views/admin/research/researchers/_form.html.erb
deleted file mode 100644
index aecb1a416..000000000
--- a/app/views/admin/research/researchers/_form.html.erb
+++ /dev/null
@@ -1,29 +0,0 @@
-<%= simple_form_for [:admin, researcher] do |f| %>
-<div class="row">
-  <div class="col-md-4">
-    <div class="card flex-fill w-100">
-      <div class="card-body">
-        <%= f.input :first_name %>
-        <%= f.input :last_name %>
-        <%= f.input :slug,
-                    as: :string,
-                    input_html: researcher.persisted? ? {} : {
-                      class: 'js-slug-input',
-                      data: { source: '#research_researcher_first_name, #research_researcher_last_name' }
-                    } %>
-        <%= f.association :user, collection: current_university.users.ordered %>
-      </div>
-    </div>
-  </div>
-  <div class="col-md-8">
-    <div class="card flex-fill w-100">
-      <div class="card-body">
-        <%= f.input :biography, as: :rich_text_area %>
-      </div>
-    </div>
-  </div>
-</div>
-  <% content_for :action_bar_right do %>
-    <%= submit f %>
-  <% end %>
-<% end %>
diff --git a/app/views/admin/research/researchers/edit.html.erb b/app/views/admin/research/researchers/edit.html.erb
deleted file mode 100644
index fbfc680d7..000000000
--- a/app/views/admin/research/researchers/edit.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<% content_for :title, @researcher%>
-
-<%= render 'form', researcher: @researcher %>
diff --git a/app/views/admin/research/researchers/index.html.erb b/app/views/admin/research/researchers/index.html.erb
index 3f4104f02..a5a705318 100644
--- a/app/views/admin/research/researchers/index.html.erb
+++ b/app/views/admin/research/researchers/index.html.erb
@@ -3,32 +3,25 @@
 <table class="table">
   <thead>
     <tr>
-      <th><%= Research::Researcher.human_attribute_name('last_name') %></th>
-      <th><%= Research::Researcher.human_attribute_name('first_name') %></th>
-      <th><%= Research::Researcher.human_attribute_name('user') %></th>
-      <th></th>
+      <th><%= Administration::Member.human_attribute_name('name') %></th>
+      <th><%= t('research.number_of_articles') %></th>
     </tr>
   </thead>
 
   <tbody>
     <% @researchers.each do |researcher| %>
       <tr>
-        <td><%= link_to researcher.last_name, [:admin, researcher] %></td>
-        <td><%= link_to researcher.first_name, [:admin, researcher] %></td>
-        <td><%= link_to researcher.user, [:admin, researcher.user] if researcher.user %></td>
-        <td class="text-end">
-          <div class="btn-group" role="group">
-            <%= edit_link researcher %>
-            <%= destroy_link researcher %>
-          </div>
-        </td>
+        <td><%= link_to researcher, admin_research_researcher_path(researcher) %></td>
+        <td><%= researcher.research_journal_articles.count %></td>
       </tr>
     <% end %>
   </tbody>
 </table>
-<%= paginate @researchers, theme: 'bootstrap-5' %>
+<% if @researchers.total_pages > 1 %>
+    <%= paginate @researchers, theme: 'bootstrap-5' %>
+<% end %>
 
 
 <% content_for :action_bar_right do %>
-  <%= create_link Research::Researcher %>
+  <%= link_to t('research.manage_researchers'), admin_administration_members_path, class: button_classes if can?(:read, Administration::Member) %>
 <% end %>
diff --git a/app/views/admin/research/researchers/new.html.erb b/app/views/admin/research/researchers/new.html.erb
deleted file mode 100644
index 862c45f3c..000000000
--- a/app/views/admin/research/researchers/new.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<% content_for :title, Research::Researcher.model_name.human %>
-
-<%= render 'form', researcher: @researcher %>
diff --git a/app/views/admin/research/researchers/show.html.erb b/app/views/admin/research/researchers/show.html.erb
index e50282dea..1a6d84fac 100644
--- a/app/views/admin/research/researchers/show.html.erb
+++ b/app/views/admin/research/researchers/show.html.erb
@@ -1,40 +1,20 @@
 <% content_for :title, @researcher %>
 
-<div class="row">
-  <div class="col-md-8">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('content') %></h2>
-      </div>
-      <div class="card-body">
-        <h3 class="h5"><%= Research::Researcher.human_attribute_name('biography') %></h3>
-        <%= @researcher.biography %>
-        <% if @researcher.articles.any? %>
-          <h3 class="h5 mt-4"><%= Research::Researcher.human_attribute_name('articles') %></h3>
-          <ul>
-            <% @researcher.articles.each do |article| %>
-              <li><%= link_to article, admin_research_journal_article_path(journal_id: article.journal.id, id: article) %></li>
-            <% end %>
-          </ul>
-        <% end %>
-      </div>
+<%= render 'admin/administration/members/main_infos', member: @researcher %>
+
+<% if @articles.total_count > 0 %>
+  <div class="card">
+    <div class="card-header">
+      <h5><%= "#{Research::Journal::Article.model_name.human(count: 2)} (#{@articles.total_count})" %></h5>
     </div>
-  </div>
-  <div class="col-md-4">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('metadata') %></h2>
+    <%= render 'admin/research/journal/articles/list', articles: @articles %>
+    <% if @articles.total_pages > 1 %>
+      <div class="card-footer">
+        <%= paginate @articles, theme: 'bootstrap-5' %>
       </div>
-      <div class="card-body">
-        <% if @researcher.user %>
-          <h3 class="h5"><%= Research::Researcher.human_attribute_name('user') %></h3>
-          <p><%= link_to @researcher.user, [:admin, @researcher.user] %></p>
-        <% end %>
-      </div>
-    </div>
+    <% end %>
   </div>
-</div>
-
+<% end %>
 
 <% content_for :action_bar_right do %>
   <%= edit_link @researcher %>
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 232963c1b..028fe052c 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -1,5 +1,7 @@
 en:
   communication:
+    manage_authors: Manage authors
+    number_of_posts: Nunber of posts
     website:
       force_publication: 'Force publication'
       imported:
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 8c70d4361..36196b318 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -1,5 +1,7 @@
 fr:
   communication:
+    manage_authors: Gérer les auteurs
+    number_of_posts: Nombre d'actualités
     website:
       force_publication: 'Forcer la publication'
       imported:
diff --git a/config/locales/research/en.yml b/config/locales/research/en.yml
index 0f66cd6e1..c6770e1d7 100644
--- a/config/locales/research/en.yml
+++ b/config/locales/research/en.yml
@@ -1,4 +1,7 @@
 en:
+  research:
+    manage_researchers: Managege researchers
+    number_of_articles: Number of articles
   activemodel:
     models:
       research: Research
diff --git a/config/locales/research/fr.yml b/config/locales/research/fr.yml
index 454e569f8..6a2a44920 100644
--- a/config/locales/research/fr.yml
+++ b/config/locales/research/fr.yml
@@ -1,4 +1,7 @@
 fr:
+  research:
+    manage_researchers: Gérer les Chercheu·rs·ses
+    number_of_articles: Nombre d'articles
   activemodel:
     models:
       research: Recherche
diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb
index 0b94e89b9..ec6dc3e69 100644
--- a/config/routes/admin/communication.rb
+++ b/config/routes/admin/communication.rb
@@ -25,11 +25,7 @@ namespace :communication do
         post :publish
       end
     end
-    resources :authors, controller: 'website/authors' do
-      member do
-        post :publish
-      end
-    end
+    resources :authors, controller: 'website/authors', only: [:index, :show]
     resources :posts, controller: 'website/posts' do
       member do
         post :publish
diff --git a/config/routes/admin/research.rb b/config/routes/admin/research.rb
index 45d9c173d..678f7e597 100644
--- a/config/routes/admin/research.rb
+++ b/config/routes/admin/research.rb
@@ -1,5 +1,5 @@
 namespace :research do
-  resources :researchers
+  resources :researchers, only: [:index, :show]
   resources :journals do
     resources :volumes, controller: 'journal/volumes'
     resources :articles, controller: 'journal/articles'
diff --git a/db/migrate/20211214150454_change_index_on_communication_website_post_author.rb b/db/migrate/20211214150454_change_index_on_communication_website_post_author.rb
new file mode 100644
index 000000000..708b31c7c
--- /dev/null
+++ b/db/migrate/20211214150454_change_index_on_communication_website_post_author.rb
@@ -0,0 +1,6 @@
+class ChangeIndexOnCommunicationWebsitePostAuthor < ActiveRecord::Migration[6.1]
+  def change
+    remove_foreign_key :communication_website_posts, column: :author_id
+    add_foreign_key :communication_website_posts, :administration_members, column: :author_id
+  end
+end
diff --git a/db/migrate/20211214163501_change_index_on_research_journal_article_researcher.rb b/db/migrate/20211214163501_change_index_on_research_journal_article_researcher.rb
new file mode 100644
index 000000000..a086077cf
--- /dev/null
+++ b/db/migrate/20211214163501_change_index_on_research_journal_article_researcher.rb
@@ -0,0 +1,6 @@
+class ChangeIndexOnResearchJournalArticleResearcher < ActiveRecord::Migration[6.1]
+  def change
+    remove_foreign_key :research_journal_articles_researchers, column: :researcher_id
+    add_foreign_key :research_journal_articles_researchers, :administration_members, column: :researcher_id
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 73cdaade8..bf36c61b9 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: 2021_12_14_101323) do
+ActiveRecord::Schema.define(version: 2021_12_14_163501) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
@@ -604,7 +604,7 @@ ActiveRecord::Schema.define(version: 2021_12_14_101323) do
   add_foreign_key "communication_website_pages", "communication_website_pages", column: "parent_id"
   add_foreign_key "communication_website_pages", "communication_websites"
   add_foreign_key "communication_website_pages", "universities"
-  add_foreign_key "communication_website_posts", "communication_website_authors", column: "author_id"
+  add_foreign_key "communication_website_posts", "administration_members", column: "author_id"
   add_foreign_key "communication_website_posts", "communication_websites"
   add_foreign_key "communication_website_posts", "universities"
   add_foreign_key "communication_websites", "universities"
@@ -617,8 +617,8 @@ ActiveRecord::Schema.define(version: 2021_12_14_101323) do
   add_foreign_key "research_journal_articles", "research_journals"
   add_foreign_key "research_journal_articles", "universities"
   add_foreign_key "research_journal_articles", "users", column: "updated_by_id"
+  add_foreign_key "research_journal_articles_researchers", "administration_members", column: "researcher_id"
   add_foreign_key "research_journal_articles_researchers", "research_journal_articles", column: "article_id"
-  add_foreign_key "research_journal_articles_researchers", "research_researchers", column: "researcher_id"
   add_foreign_key "research_journal_volumes", "research_journals"
   add_foreign_key "research_journal_volumes", "universities"
   add_foreign_key "research_journals", "universities"
-- 
GitLab