Skip to content
Snippets Groups Projects
Unverified Commit f2427060 authored by Sébastien Gaya's avatar Sébastien Gaya
Browse files

menu i18n

parent 6ad7c439
No related branches found
No related tags found
No related merge requests found
class Admin::Communication::Websites::MenusController < Admin::Communication::Websites::ApplicationController
load_and_authorize_resource class: Communication::Website::Menu, through: :website
include Admin::Translatable
def index
@menus = @menus.ordered.page(params[:page])
@menus = @menus.where(language_id: current_website_language.id).ordered.page(params[:page])
breadcrumb
end
......@@ -57,8 +59,6 @@ class Admin::Communication::Websites::MenusController < Admin::Communication::We
end
def menu_params
params.require(:communication_website_menu)
.permit(:website_id, :title, :identifier)
.merge(university_id: current_university.id)
translatable_params(:communication_website_menu, [:title, :identifier])
end
end
......@@ -9,15 +9,21 @@
# created_at :datetime not null
# updated_at :datetime not null
# communication_website_id :uuid not null, indexed
# language_id :uuid not null, indexed
# original_id :uuid indexed
# university_id :uuid not null, indexed
#
# Indexes
#
# idx_comm_website_menus_on_communication_website_id (communication_website_id)
# index_communication_website_menus_on_language_id (language_id)
# index_communication_website_menus_on_original_id (original_id)
# index_communication_website_menus_on_university_id (university_id)
#
# Foreign Keys
#
# fk_rails_2901ebb799 (original_id => communication_website_menus.id)
# fk_rails_4d43d36541 (language_id => languages.id)
# fk_rails_8d6227916e (university_id => universities.id)
# fk_rails_dcc7198fc5 (communication_website_id => communication_websites.id)
#
......@@ -25,12 +31,13 @@ class Communication::Website::Menu < ApplicationRecord
include WithUniversity
include Sanitizable
include WithGit
include WithTranslations
belongs_to :website, foreign_key: :communication_website_id
has_many :items, class_name: 'Communication::Website::Menu::Item', dependent: :destroy
validates :title, :identifier, presence: true
validates :identifier, uniqueness: { scope: :communication_website_id }
validates :identifier, uniqueness: { scope: [:communication_website_id, :language_id] }
scope :ordered, -> { order(created_at: :asc) }
......@@ -48,4 +55,38 @@ class Communication::Website::Menu < ApplicationRecord
def template_static
"admin/communication/websites/menus/static"
end
def translate_additional_data!(translation)
items.root.ordered.each { |item| translate_menu_item!(item, translation) }
end
def translate_menu_item!(item, menu_translation, parent_translation = nil)
item_translation = item.dup
item_translation.menu = menu_translation
item_translation.parent = parent_translation
case item_translation.kind
when 'blank', 'url'
# Nothing to do
when 'program', 'diploma', 'volume', 'paper'
# TODO: Translate Education & Research Models
when 'page', 'category', 'post'
translated_about = item.about.translation_for(menu_translation.language)
if translated_about.present?
item_translation.about = translated_about
elsif item.children.any?
# Convert to a blank menu item to translate children correctly
item_translation.kind = 'blank'
item_translation.about = nil
else
# Skip menu item if no translation and no children to translate
return
end
end
item_translation.save
item.children.ordered.each do |child|
translate_menu_item!(child, menu_translation, item_translation)
end
end
end
......@@ -18,15 +18,15 @@
<%
if item.has_about?
if item.kind_page?
about_collection = collection_tree @website.pages
about_collection = collection_tree @website.pages.where(language_id: current_website_language.id)
elsif item.kind_diploma?
about_collection = collection @website.education_diplomas
elsif item.kind_program?
about_collection = collection_tree @website.education_programs
elsif item.kind_category?
about_collection = collection_tree @website.categories
about_collection = collection_tree @website.categories.where(language_id: current_website_language.id)
elsif item.kind_post?
about_collection = collection @website.posts
about_collection = collection @website.posts.where(language_id: current_website_language.id)
elsif item.kind_volume?
about_collection = collection @website.research_volumes
elsif item.kind_paper?
......
......@@ -15,7 +15,7 @@ function hideAbout() {
<% elsif @kind == 'page' %>
<%
options = ['<option value="" label=" "></option>']
collection_tree(@website.pages).each do |page|
collection_tree(@website.pages.where(language_id: current_website_language.id)).each do |page|
options << "<option value=\"#{page[:id]}\">#{page[:label]}</option>"
end
%>
......@@ -40,7 +40,7 @@ function hideAbout() {
<% elsif @kind == 'category' %>
<%
options = ['<option value="" label=" "></option>']
collection_tree(@website.categories).each do |category|
collection_tree(@website.categories.where(language_id: current_website_language.id)).each do |category|
options << "<option value=\"#{category[:id]}\">#{category[:label]}</option>"
end
%>
......@@ -48,7 +48,7 @@ function hideAbout() {
<% elsif @kind == 'post' %>
<%
options = ['<option value="" label=" "></option>']
@website.posts.ordered.each do |post|
@website.posts.where(language_id: current_website_language.id).ordered.each do |post|
options << "<option value=\"#{post.id}\">#{post.to_s}</option>"
end
%>
......
......@@ -12,6 +12,7 @@
class: button_classes if can?(:create, Communication::Website::Menu::Item) %>
</div>
<div class="col-md-4">
<%= render 'admin/application/i18n/widget', about: @menu %>
<h2 class="h3"><%= t('metadata') %></h2>
<h3 class="h5"><%= Communication::Website::Menu.human_attribute_name('identifier') %></h3>
<p><%= @menu.identifier %></p>
......
class SetCommunicationWebsiteMenuTranslatable < ActiveRecord::Migration[7.0]
def change
add_reference :communication_website_menus, :original, foreign_key: {to_table: :communication_website_menus}, type: :uuid
add_reference :communication_website_menus, :language, foreign_key: true, type: :uuid
Communication::Website.find_each do |website|
website.menus.where(language_id: nil).update_all(language_id: website.default_language_id)
end
change_column_null :communication_website_menus, :language_id, false
end
end
......@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
ActiveRecord::Schema[7.0].define(version: 2023_01_26_163347) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
enable_extension "plpgsql"
......@@ -299,7 +299,11 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.text "github_path"
t.uuid "original_id"
t.uuid "language_id", null: false
t.index ["communication_website_id"], name: "idx_comm_website_menus_on_communication_website_id"
t.index ["language_id"], name: "index_communication_website_menus_on_language_id"
t.index ["original_id"], name: "index_communication_website_menus_on_original_id"
t.index ["university_id"], name: "index_communication_website_menus_on_university_id"
end
......@@ -573,6 +577,20 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
t.string "summernote_locale"
end
create_table "research_documents", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "university_id", null: false
t.uuid "university_person_id", null: false
t.string "docid"
t.jsonb "data"
t.string "title"
t.string "url"
t.string "ref"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["university_id"], name: "index_research_documents_on_university_id"
t.index ["university_person_id"], name: "index_research_documents_on_university_person_id"
end
create_table "research_journal_paper_kinds", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "university_id", null: false
t.uuid "journal_id", null: false
......@@ -776,6 +794,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
t.string "zipcode"
t.string "city"
t.string "country"
t.string "hal_person_identifier"
t.string "mastodon"
t.index ["university_id"], name: "index_university_people_on_university_id"
t.index ["user_id"], name: "index_university_people_on_user_id"
......@@ -902,7 +921,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
add_foreign_key "communication_website_menu_items", "communication_website_menus", column: "menu_id"
add_foreign_key "communication_website_menu_items", "communication_websites", column: "website_id"
add_foreign_key "communication_website_menu_items", "universities"
add_foreign_key "communication_website_menus", "communication_website_menus", column: "original_id"
add_foreign_key "communication_website_menus", "communication_websites"
add_foreign_key "communication_website_menus", "languages"
add_foreign_key "communication_website_menus", "universities"
add_foreign_key "communication_website_pages", "communication_website_pages", column: "original_id"
add_foreign_key "communication_website_pages", "communication_website_pages", column: "parent_id"
......@@ -927,6 +948,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_23_162224) do
add_foreign_key "education_schools", "universities"
add_foreign_key "imports", "universities"
add_foreign_key "imports", "users"
add_foreign_key "research_documents", "universities"
add_foreign_key "research_documents", "university_people"
add_foreign_key "research_journal_paper_kinds", "research_journals", column: "journal_id"
add_foreign_key "research_journal_paper_kinds", "universities"
add_foreign_key "research_journal_papers", "research_journal_paper_kinds", column: "kind_id"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment