diff --git a/app/controllers/admin/communication/blocks/application_controller.rb b/app/controllers/admin/communication/blocks/application_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..1399c37ac184db805cae2845149d8badf1961879 --- /dev/null +++ b/app/controllers/admin/communication/blocks/application_controller.rb @@ -0,0 +1,8 @@ +class Admin::Communication::Blocks::ApplicationController < Admin::Communication::ApplicationController + + protected + + def breadcrumb + short_breadcrumb + end +end diff --git a/app/controllers/admin/communication/blocks/headings_controller.rb b/app/controllers/admin/communication/blocks/headings_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..ee17fb8b353975272b200a3a8459e890ae73d9b5 --- /dev/null +++ b/app/controllers/admin/communication/blocks/headings_controller.rb @@ -0,0 +1,111 @@ +class Admin::Communication::Blocks::HeadingsController < Admin::Communication::Blocks::ApplicationController + load_and_authorize_resource class: Communication::Block::Heading, + through: :current_university, + through_association: :communication_block_headings + + def reorder + ids = params[:ids] || [] + ids.each.with_index do |id, index| + @heading = current_university.communication_block_headings.find(id) + @heading.update position: index + 1 + end + @heading.about.sync_with_git + end + + def new + @heading.about = Polymorphic.find params, :about + breadcrumb + end + + def show + breadcrumb + end + + def edit + breadcrumb + end + + def create + @heading.university = current_university + if @heading.save + sync_with_git_if_necessary + redirect_to about_path, + notice: t('admin.successfully_created_html', model: @heading.to_s) + else + breadcrumb + render :new, status: :unprocessable_entity + end + end + + def update + if @heading.update(heading_params) + sync_with_git_if_necessary + redirect_to about_path, + notice: t('admin.successfully_updated_html', model: @heading.to_s) + else + breadcrumb + add_breadcrumb t('edit') + render :edit, status: :unprocessable_entity + end + end + + def destroy + path = about_path + @heading.destroy + sync_with_git_if_necessary + redirect_to path, + notice: t('admin.successfully_destroyed_html', model: @heading.to_s) + end + + protected + + def sync_with_git_if_necessary + return unless @heading.about.respond_to?(:sync_with_git) + @heading.about.sync_with_git + end + + # TODO factorize + def website_id + params[:website_id] || @heading.about&.website.id + rescue + end + + def extranet_id + params[:extranet_id] || @heading.about&.extranet.id + rescue + end + + def journal_id + params[:journal_id] || @heading.about&.journal.id + rescue + end + + def about_path + # La formation ou la page concernée + path_method = "admin_#{@heading.about.class.base_class.to_s.parameterize.underscore}_path" + path_method_options = { + id: @heading.about_id, + website_id: website_id, + extranet_id: extranet_id, + journal_id: journal_id + } + path_method_options[:lang] = @heading.about.language.iso_code if @heading.about.respond_to?(:language) + public_send path_method, **path_method_options + end + # TODO /factorize + + def breadcrumb + super + add_breadcrumb @heading.about, about_path + if @heading.new_record? + add_breadcrumb t('admin.communication.blocks.headings.add') + else + add_breadcrumb @heading + end + end + + def heading_params + params.require(:communication_block_heading) + .permit(:about_id, :about_type, :title) + end +end diff --git a/app/controllers/admin/communication/blocks_controller.rb b/app/controllers/admin/communication/blocks_controller.rb index 66acee7054e20ff270ec5a38d571c712a088fb16..cc346f1ff2de7ed4527a3e36e9c56d7677d41bd0 100644 --- a/app/controllers/admin/communication/blocks_controller.rb +++ b/app/controllers/admin/communication/blocks_controller.rb @@ -13,11 +13,7 @@ class Admin::Communication::BlocksController < Admin::Communication::Application end def new - about_class = params[:about_type].constantize - about = about_class.find params[:about_id] - # Rails uses ActiveRecord::Inheritance#polymorphic_name to hydrate the about_type. - # Example: A Block for a Communication::Website::Page::Home will have about_type = "Communication::Website::Page" - @block.about = about + @block.about = Polymorphic.find params, :about breadcrumb end diff --git a/app/models/ability.rb b/app/models/ability.rb index e21baef7eea93efa0694c98252d55ee8f7d30d97..0fe2a5e9bcf18ff55b9abbd5ef4d21813129c949 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -43,6 +43,7 @@ class Ability can :manage, University::Person::Involvement, person_id: @user.person&.id can :read, University::Person::Involvement, university_id: @user.university_id can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program', about_id: Education::Program.where(university_id: @user.university_id).pluck(:id) + can :manage, Communication::Block::Heading, university_id: @user.university_id, about_type: 'Education::Program', about_id: Education::Program.where(university_id: @user.university_id).pluck(:id) can :manage, Research::Journal end @@ -57,7 +58,9 @@ class Ability can :read, Communication::Website, university_id: @user.university_id can :manage, Communication::Website::Post, university_id: @user.university_id can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program', about_id: managed_programs_ids + can :manage, Communication::Block::Heading, university_id: @user.university_id, about_type: 'Education::Program', about_id: managed_programs_ids can :create, Communication::Block + can :create, Communication::Block::Heading can :manage, Research::Journal end @@ -75,8 +78,11 @@ class Ability can :create, Communication::Website::Menu::Item, university_id: @user.university_id can :manage, University::Organization, university_id: @user.university_id can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Page', about_id: managed_pages_ids + can :manage, Communication::Block::Heading, university_id: @user.university_id, about_type: 'Communication::Website::Page', about_id: managed_pages_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post', about_id: managed_posts_ids + can :manage, Communication::Block::Heading, university_id: @user.university_id, about_type: 'Communication::Website::Post', about_id: managed_posts_ids can :create, Communication::Block + can :create, Communication::Block::Heading can :manage, Research::Journal end @@ -90,7 +96,9 @@ class Ability can :manage, University::Organization, university_id: @user.university_id can :manage, University::Organization::Category, university_id: @user.university_id can :manage, Communication::Block, university_id: @user.university_id + can :manage, Communication::Block::Heading, university_id: @user.university_id can :create, Communication::Block + can :create, Communication::Block::Heading can :read, Communication::Website, university_id: @user.university_id can :analytics, Communication::Website, university_id: @user.university_id can :manage, Communication::Website::Page, university_id: @user.university_id diff --git a/app/models/communication/block.rb b/app/models/communication/block.rb index 7f4d9e282393d27b53756891308ad2c7518ba541..ed1cd6658bd8b56ea6754cdea1997025a078c4fe 100644 --- a/app/models/communication/block.rb +++ b/app/models/communication/block.rb @@ -12,16 +12,19 @@ # created_at :datetime not null # updated_at :datetime not null # about_id :uuid indexed => [about_type] +# heading_id :uuid indexed # university_id :uuid not null, indexed # # Indexes # +# index_communication_blocks_on_heading_id (heading_id) # index_communication_blocks_on_university_id (university_id) # index_communication_website_blocks_on_about (about_type,about_id) # # Foreign Keys # # fk_rails_18291ef65f (university_id => universities.id) +# fk_rails_90ac986fab (heading_id => communication_block_headings.id) # class Communication::Block < ApplicationRecord include Accessible diff --git a/app/models/communication/block/heading.rb b/app/models/communication/block/heading.rb new file mode 100644 index 0000000000000000000000000000000000000000..b3ce66c1a7a7f61d3afab2d784afda6f0bc1879d --- /dev/null +++ b/app/models/communication/block/heading.rb @@ -0,0 +1,45 @@ +# == Schema Information +# +# Table name: communication_block_headings +# +# id :uuid not null, primary key +# about_type :string not null, indexed => [about_id] +# level :integer default(1) +# position :integer +# slug :string +# title :string +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid not null, indexed => [about_type] +# parent_id :uuid indexed +# university_id :uuid not null, indexed +# +# Indexes +# +# index_communication_block_headings_on_about (about_type,about_id) +# index_communication_block_headings_on_parent_id (parent_id) +# index_communication_block_headings_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_6d3de8388e (parent_id => communication_block_headings.id) +# fk_rails_ae82723550 (university_id => universities.id) +# +class Communication::Block::Heading < ApplicationRecord + belongs_to :university + belongs_to :about, + polymorphic: true + belongs_to :parent, + class_name: 'Communication::Block::Heading', + optional: true + has_many :children, + class_name: 'Communication::Block::Heading', + foreign_key: :parent_id + + scope :root, -> { where(level: 1) } + default_scope { order(:position) } + + def to_s + "#{title}" + end +end diff --git a/app/models/concerns/with_blocks.rb b/app/models/concerns/with_blocks.rb index ccf1e024f8c47811b2990cf26529470406f5ca17..c7c71ce88b097819fab2d59404a1972450f4f830 100644 --- a/app/models/concerns/with_blocks.rb +++ b/app/models/concerns/with_blocks.rb @@ -3,6 +3,7 @@ module WithBlocks included do has_many :blocks, as: :about, class_name: 'Communication::Block', dependent: :destroy + has_many :headings, as: :about, class_name: 'Communication::Block::Heading', dependent: :destroy end def git_block_dependencies diff --git a/app/models/university/with_communication.rb b/app/models/university/with_communication.rb index 5dd2a35ba0a12770d34550ec521d462bc3d6bbfb..7506fb822e11cf59b1f9bba43c9ab3fbb348fef9 100644 --- a/app/models/university/with_communication.rb +++ b/app/models/university/with_communication.rb @@ -16,9 +16,12 @@ module University::WithCommunication class_name: 'Communication::Website::Post', dependent: :destroy - has_many :communication_blocks, + has_many :communication_blocks, class_name: 'Communication::Block', dependent: :destroy alias_attribute :blocks, :communication_blocks + has_many :communication_block_headings, + class_name: 'Communication::Block::Heading', + dependent: :destroy end end diff --git a/app/services/polymorphic.rb b/app/services/polymorphic.rb new file mode 100644 index 0000000000000000000000000000000000000000..461b9fabd9c24800ca9557c8b400954e88f7cb85 --- /dev/null +++ b/app/services/polymorphic.rb @@ -0,0 +1,11 @@ +class Polymorphic + # Rails uses ActiveRecord::Inheritance#polymorphic_name to hydrate the about_type. + # Example: A Block for a Communication::Website::Page::Home will have about_type = "Communication::Website::Page" + def self.find(params, key) + key_id = "#{key}_id".to_sym + key_type = "#{key}_type".to_sym + klass = params[key_type].constantize + id = params[key_id] + klass.find id + end +end \ No newline at end of file diff --git a/app/views/admin/communication/blocks/_list.html.erb b/app/views/admin/communication/blocks/_list.html.erb index 482f2d6fd24d9ec2f26162be9714592c30ca3ffb..78a27993151e2393ae91ab5e912e457c519022eb 100644 --- a/app/views/admin/communication/blocks/_list.html.erb +++ b/app/views/admin/communication/blocks/_list.html.erb @@ -3,8 +3,16 @@ action = '' action += link_to t('admin.communication.blocks.add'), new_admin_communication_block_path(about_id: about.id, about_type: about.class.name), class: button_classes if can? :create, Communication::Block +action += link_to t('admin.communication.blocks.headings.add'), + new_admin_communication_heading_path(about_id: about.id, about_type: about.class.name), + class: button_classes('ms-2') if can? :create, Communication::Block::Heading %> <%= osuny_panel Communication::Block.model_name.human(count: 2), action: action do %> + <% if about.headings.any? %> + <% about.headings.root.each do |heading| %> + <%= link_to heading, edit_admin_communication_heading_path(heading) %> + <% end %> + <% end %> <% if about.blocks.any? %> <div class="table-responsive"> <table class="<%= table_classes %>"> diff --git a/app/views/admin/communication/blocks/headings/_form.html.erb b/app/views/admin/communication/blocks/headings/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..34108a9817d51711da3651f514b8fdc27d74d762 --- /dev/null +++ b/app/views/admin/communication/blocks/headings/_form.html.erb @@ -0,0 +1,14 @@ +<% +url = heading.persisted? ? admin_communication_heading_path(heading) + : admin_communication_headings_path +%> +<%= simple_form_for [:admin, heading], url: url do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + <%= f.input :title %> + <%= f.input :about_type, as: :hidden %> + <%= f.input :about_id, as: :hidden %> + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> +<% end %> diff --git a/app/views/admin/communication/blocks/headings/edit.html.erb b/app/views/admin/communication/blocks/headings/edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..fa54c115a75d21f60c197f12f00c0390f74ad936 --- /dev/null +++ b/app/views/admin/communication/blocks/headings/edit.html.erb @@ -0,0 +1,2 @@ +<% content_for :title, @heading %> +<%= render 'form', heading: @heading %> diff --git a/app/views/admin/communication/blocks/headings/new.html.erb b/app/views/admin/communication/blocks/headings/new.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..43b08afec5cb3b4d0fadc057436bc1260e4aa7f7 --- /dev/null +++ b/app/views/admin/communication/blocks/headings/new.html.erb @@ -0,0 +1,2 @@ +<% content_for :title, t('admin.communication.blocks.headings.add') %> +<%= render 'form', heading: @heading %> diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml index 30696959a57ef9179226ec6aa01fea6ca1dd949b..36855bb24ac26295dbdf73898c3e6ebb0d3fb845 100644 --- a/config/locales/communication/en.yml +++ b/config/locales/communication/en.yml @@ -55,9 +55,11 @@ en: all: All posts attributes: communication/block: - name: Name + title: Title template: Kind of block published: Published? + communication/block/heading: + title: Title communication/extranet: about: About about_: Independent extranet @@ -247,6 +249,8 @@ en: time_slot: from: From to: to + headings: + add: Add a title templates: call_to_action: description: A title, a text, an optional image and up to 3 call to action buttons. diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index 046e1d967786f187d575b05658b60ee2d00a4035..02c715e7f02e004b249095a7cc84cb77be4946db 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -58,6 +58,8 @@ fr: title: Titre template: Type de bloc published: Publié ? + communication/block/heading: + title: Titre communication/extranet: about: Sujet de l'extranet about_: Extranet indépendant @@ -247,6 +249,8 @@ fr: time_slot: from: De to: à + headings: + add: Ajouter un titre templates: call_to_action: description: Un titre, un texte, un visuel et 3 boutons pour inviter les personnes à agir. diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb index c5ddb466f4dbc1e3564ebde5ed0fc659dced1a4e..869c89d9bef569e76a705dbb11c27a37d347301d 100644 --- a/config/routes/admin/communication.rb +++ b/config/routes/admin/communication.rb @@ -60,6 +60,7 @@ namespace :communication do end resources :blocks, controller: 'blocks', except: [:index] do collection do + resources :headings, controller: 'blocks/headings' post :reorder end member do diff --git a/db/migrate/20230321082433_create_communication_block_headings.rb b/db/migrate/20230321082433_create_communication_block_headings.rb new file mode 100644 index 0000000000000000000000000000000000000000..e1f99f85d367629ce9aa945b08a521cc7c6c6439 --- /dev/null +++ b/db/migrate/20230321082433_create_communication_block_headings.rb @@ -0,0 +1,16 @@ +class CreateCommunicationBlockHeadings < ActiveRecord::Migration[7.0] + def change + create_table :communication_block_headings, id: :uuid do |t| + t.references :university, null: false, foreign_key: true, type: :uuid + t.references :about, polymorphic: true, null: false, type: :uuid + t.string :title + t.integer :level, default: 1 + t.references :parent, null: true, foreign_key: {to_table: :communication_block_headings}, type: :uuid + t.integer :position + t.string :slug + + t.timestamps + end + add_reference :communication_blocks, :heading, null: true, foreign_key: {to_table: :communication_block_headings}, type: :uuid + end +end diff --git a/db/schema.rb b/db/schema.rb index 61b664759abad49dedad4660b95e5a347b4d5248..aac33c6b2b613e876a6597aa1c2c552a14a1bf30 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,13 +10,13 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do +ActiveRecord::Schema[7.0].define(version: 2023_03_21_082433) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" enable_extension "unaccent" - create_table "action_text_rich_texts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "action_text_rich_texts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name", null: false t.text "body" t.string "record_type", null: false @@ -26,7 +26,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["record_type", "record_id", "name"], name: "index_action_text_rich_texts_uniqueness", unique: true end - create_table "active_storage_attachments", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_attachments", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false t.uuid "record_id", null: false @@ -36,7 +36,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end - create_table "active_storage_blobs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_blobs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "key", null: false t.string "filename", null: false t.string "content_type" @@ -50,13 +50,13 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_active_storage_blobs_on_university_id" end - create_table "active_storage_variant_records", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_variant_records", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "blob_id", null: false t.string "variation_digest", null: false t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true end - create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.integer "number" t.text "name" t.text "description" @@ -64,7 +64,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.datetime "updated_at", null: false end - create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "criterion_id", null: false t.integer "number" t.text "name" @@ -78,7 +78,23 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["criterion_id"], name: "index_administration_qualiopi_indicators_on_criterion_id" end - create_table "communication_blocks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_block_headings", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.string "about_type", null: false + t.uuid "about_id", null: false + t.string "title" + t.integer "level", default: 1 + t.uuid "parent_id" + t.integer "position" + t.string "slug" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["about_type", "about_id"], name: "index_communication_block_headings_on_about" + t.index ["parent_id"], name: "index_communication_block_headings_on_parent_id" + t.index ["university_id"], name: "index_communication_block_headings_on_university_id" + end + + create_table "communication_blocks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "about_type" t.uuid "about_id" @@ -89,7 +105,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.datetime "updated_at", null: false t.string "title" t.boolean "published", default: true + t.uuid "heading_id" t.index ["about_type", "about_id"], name: "index_communication_website_blocks_on_about" + t.index ["heading_id"], name: "index_communication_blocks_on_heading_id" t.index ["university_id"], name: "index_communication_blocks_on_university_id" end @@ -175,7 +193,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_communication_extranet_posts_on_university_id" end - create_table "communication_extranets", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranets", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name" t.uuid "university_id", null: false t.string "host" @@ -207,7 +225,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_communication_extranets_on_university_id" end - create_table "communication_website_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "communication_website_id", null: false t.string "name" @@ -241,7 +259,22 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["communication_website_post_id", "communication_website_category_id"], name: "post_category" end - create_table "communication_website_git_files", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_connections", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.uuid "website_id", null: false + t.string "object_type", null: false + t.uuid "object_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "source_type" + t.uuid "source_id" + t.index ["object_type", "object_id"], name: "index_communication_website_connections_on_object" + t.index ["source_type", "source_id"], name: "index_communication_website_connections_on_source" + t.index ["university_id"], name: "index_communication_website_connections_on_university_id" + t.index ["website_id"], name: "index_communication_website_connections_on_website_id" + end + + create_table "communication_website_git_files", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "previous_path" t.string "about_type", null: false t.uuid "about_id", null: false @@ -253,7 +286,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_git_files_on_website_id" end - create_table "communication_website_imported_authors", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_authors", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.uuid "author_id" @@ -269,7 +302,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "idx_communication_website_imported_auth_on_website" end - create_table "communication_website_imported_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.uuid "category_id" @@ -287,7 +320,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "idx_communication_website_imported_cat_on_website" end - create_table "communication_website_imported_media", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_media", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "identifier" t.jsonb "data" t.text "file_url" @@ -302,7 +335,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_imported_media_on_website_id" end - create_table "communication_website_imported_pages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_pages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.uuid "page_id" @@ -326,7 +359,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_imported_pages_on_website_id" end - create_table "communication_website_imported_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.uuid "post_id" @@ -351,7 +384,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_imported_posts_on_website_id" end - create_table "communication_website_imported_websites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_imported_websites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.integer "status", default: 0 @@ -361,7 +394,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_imported_websites_on_website_id" end - create_table "communication_website_menu_items", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_menu_items", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.uuid "menu_id", null: false @@ -381,7 +414,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_menu_items_on_website_id" end - create_table "communication_website_menus", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_menus", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "communication_website_id", null: false t.string "title" @@ -397,7 +430,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_communication_website_menus_on_university_id" end - create_table "communication_website_pages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_pages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "communication_website_id", null: false t.string "title" @@ -412,10 +445,10 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.text "github_path" t.string "featured_image_alt" t.text "text" + t.text "summary" t.string "breadcrumb_title" t.text "header_text" t.integer "kind" - t.text "summary" t.string "bodyclass" t.uuid "language_id", null: false t.text "featured_image_credit" @@ -429,7 +462,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_communication_website_pages_on_university_id" end - create_table "communication_website_permalinks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_permalinks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "website_id", null: false t.string "about_type", null: false @@ -443,7 +476,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["website_id"], name: "index_communication_website_permalinks_on_website_id" end - create_table "communication_website_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "communication_website_id", null: false t.string "title" @@ -469,7 +502,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_communication_website_posts_on_university_id" end - create_table "communication_websites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_websites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" t.string "url" @@ -521,7 +554,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["priority", "run_at"], name: "delayed_jobs_priority" end - create_table "education_academic_years", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "education_academic_years", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.integer "year" t.datetime "created_at", null: false @@ -536,7 +569,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_person_id", "education_academic_year_id"], name: "index_person_academic_year" end - create_table "education_cohorts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "education_cohorts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "program_id", null: false t.uuid "academic_year_id", null: false @@ -557,7 +590,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_person_id", "education_cohort_id"], name: "index_person_cohort" end - create_table "education_diplomas", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "education_diplomas", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name" t.string "short_name" t.integer "level", default: 0 @@ -571,7 +604,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_education_diplomas_on_university_id" end - create_table "education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "education_programs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" t.integer "capacity" @@ -631,7 +664,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["education_program_id", "user_id"], name: "index_education_programs_users_on_program_id_and_user_id" end - create_table "education_schools", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "education_schools", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" t.string "address" @@ -647,7 +680,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_education_schools_on_university_id" end - create_table "imports", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "imports", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.integer "number_of_lines" t.jsonb "processing_errors" t.integer "kind" @@ -660,7 +693,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["user_id"], name: "index_imports_on_user_id" end - create_table "languages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "languages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name" t.string "iso_code" t.datetime "created_at", null: false @@ -727,7 +760,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_journal_paper_kinds_on_university_id" end - create_table "research_journal_papers", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journal_papers", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "title" t.datetime "published_at", precision: nil t.uuid "university_id", null: false @@ -763,7 +796,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["researcher_id"], name: "index_research_journal_papers_researchers_on_researcher_id" end - create_table "research_journal_volumes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journal_volumes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "research_journal_id", null: false t.string "title" @@ -783,7 +816,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_journal_volumes_on_university_id" end - create_table "research_journals", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journals", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "title" t.text "meta_description" @@ -794,7 +827,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_journals_on_university_id" end - create_table "research_laboratories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_laboratories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" t.string "address" @@ -806,7 +839,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_laboratories_on_university_id" end - create_table "research_laboratory_axes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_laboratory_axes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "research_laboratory_id", null: false t.string "name" @@ -820,7 +853,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_laboratory_axes_on_university_id" end - create_table "research_theses", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "research_theses", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "research_laboratory_id", null: false t.uuid "author_id", null: false @@ -838,7 +871,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_research_theses_on_university_id" end - create_table "universities", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "universities", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.string "name" t.string "identifier" t.string "address" @@ -877,7 +910,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_university_organization_categories_on_university_id" end - create_table "university_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "university_organizations", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" t.string "long_name" @@ -915,7 +948,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["organization_id"], name: "index_university_organizations_categories_on_organization_id" end - create_table "university_people", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "university_people", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "user_id" t.string "last_name" @@ -971,7 +1004,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_university_person_categories_on_university_id" end - create_table "university_person_experiences", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "university_person_experiences", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "person_id", null: false t.uuid "organization_id", null: false @@ -985,7 +1018,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_university_person_experiences_on_university_id" end - create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "university_person_involvements", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "person_id", null: false t.integer "kind" @@ -1000,7 +1033,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_university_person_involvements_on_university_id" end - create_table "university_roles", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "university_roles", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "target_type" t.uuid "target_id" @@ -1012,7 +1045,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do t.index ["university_id"], name: "index_university_roles_on_university_id" end - create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + create_table "users", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "first_name" t.string "last_name" @@ -1061,6 +1094,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" add_foreign_key "administration_qualiopi_indicators", "administration_qualiopi_criterions", column: "criterion_id" + add_foreign_key "communication_block_headings", "communication_block_headings", column: "parent_id" + add_foreign_key "communication_block_headings", "universities" + add_foreign_key "communication_blocks", "communication_block_headings", column: "heading_id" add_foreign_key "communication_blocks", "universities" add_foreign_key "communication_extranet_connections", "communication_extranets", column: "extranet_id" add_foreign_key "communication_extranet_connections", "universities" @@ -1085,6 +1121,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_20_125138) do add_foreign_key "communication_website_categories", "education_programs", column: "program_id" add_foreign_key "communication_website_categories", "languages" add_foreign_key "communication_website_categories", "universities" + add_foreign_key "communication_website_connections", "communication_websites", column: "website_id" + add_foreign_key "communication_website_connections", "universities" add_foreign_key "communication_website_git_files", "communication_websites", column: "website_id" add_foreign_key "communication_website_imported_authors", "communication_website_imported_websites", column: "website_id" add_foreign_key "communication_website_imported_authors", "universities"