diff --git a/app/controllers/server/emergency_messages_controller.rb b/app/controllers/server/emergency_messages_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..92399350820f0d2b28e3f72d1660eadc57157d73 --- /dev/null +++ b/app/controllers/server/emergency_messages_controller.rb @@ -0,0 +1,68 @@ +class Server::EmergencyMessagesController < Server::ApplicationController + load_and_authorize_resource + + def index + @emergency_messages = @emergency_messages.reorder(created_at: :desc) + breadcrumb + end + + def show + breadcrumb + end + + def new + breadcrumb + end + + def edit + breadcrumb + add_breadcrumb t('edit') + end + + def create + if @emergency_message.save + redirect_to [:server, @emergency_message], notice: t('admin.successfully_created_html', model: @emergency_message.to_s) + else + breadcrumb + render :new, status: :unprocessable_entity + end + end + + def update + if @emergency_message.update(emergency_message_params) + redirect_to [:server, @emergency_message], notice: t('admin.successfully_updated_html', model: @emergency_message.to_s) + else + breadcrumb + add_breadcrumb t('edit') + render :edit, status: :unprocessable_entity + end + end + + def deliver + @emergency_message.deliver! + redirect_to [:server, @emergency_message], notice: t('server_admin.emergency_messages.delivered') + end + + def destroy + @emergency_message.destroy + redirect_to server_emergency_messages_url, notice: t('admin.successfully_destroyed_html', model: @emergency_message.to_s) + end + + protected + + def breadcrumb + super + add_breadcrumb EmergencyMessage.model_name.human(count: 2), server_emergency_messages_path + if @emergency_message + if @emergency_message.persisted? + add_breadcrumb @emergency_message, [:server, @emergency_message] + else + add_breadcrumb t('create') + end + end + end + + def emergency_message_params + params.require(:emergency_message).permit(:name, :subject_fr, :subject_en, :content_fr, :content_en, :university_id, :role) + end +end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 1b8521d1b5b1f90c2fdee4cb31e4ac7c514f7e42..26efb189a4a3ef6bfa336bfccc287aa7a5e022ea 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -13,4 +13,12 @@ class NotificationMailer < ApplicationMailer mail(from: import.university.mail_from[:full], to: import.user.email, subject: subject) end + def emergency_message(emergency_message, user, lang) + merge_with_university_infos(user.university, {}) + I18n.locale = user.language.iso_code + subject = emergency_message.public_send("subject_#{lang}") + @message = emergency_message.public_send("content_#{lang}") + mail(from: user.university.mail_from[:full], to: user.email, subject: subject) + end + end diff --git a/app/models/communication/extranet.rb b/app/models/communication/extranet.rb index 0dc31636314ab864924471003317609996665e7c..1a4615b3d6c6865f180dd318b43f9c1268235907 100644 --- a/app/models/communication/extranet.rb +++ b/app/models/communication/extranet.rb @@ -2,34 +2,35 @@ # # Table name: communication_extranets # -# id :uuid not null, primary key -# about_type :string indexed => [about_id] -# color :string -# cookies_policy :text -# css :text -# feature_alumni :boolean default(FALSE) -# feature_contacts :boolean default(FALSE) -# feature_jobs :boolean default(FALSE) -# feature_library :boolean default(FALSE) -# feature_posts :boolean default(FALSE) -# has_sso :boolean default(FALSE) -# home_sentence :text -# host :string -# name :string -# privacy_policy :text -# registration_contact :string -# sass :text -# sso_button_label :string -# sso_cert :text -# sso_mapping :jsonb -# sso_name_identifier_format :string -# sso_provider :integer default("saml") -# sso_target_url :string -# terms :text -# created_at :datetime not null -# updated_at :datetime not null -# about_id :uuid indexed => [about_type] -# university_id :uuid not null, indexed +# id :uuid not null, primary key +# about_type :string indexed => [about_id] +# allow_experiences_modification :boolean default(TRUE) +# color :string +# cookies_policy :text +# css :text +# feature_alumni :boolean default(FALSE) +# feature_contacts :boolean default(FALSE) +# feature_jobs :boolean default(FALSE) +# feature_library :boolean default(FALSE) +# feature_posts :boolean default(FALSE) +# has_sso :boolean default(FALSE) +# home_sentence :text +# host :string +# name :string +# privacy_policy :text +# registration_contact :string +# sass :text +# sso_button_label :string +# sso_cert :text +# sso_mapping :jsonb +# sso_name_identifier_format :string +# sso_provider :integer default("saml") +# sso_target_url :string +# terms :text +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid indexed => [about_type] +# university_id :uuid not null, indexed # # Indexes # diff --git a/app/models/emergency_message.rb b/app/models/emergency_message.rb new file mode 100644 index 0000000000000000000000000000000000000000..7419fb1c2733880c5490a7204cd8f9943c76cb6b --- /dev/null +++ b/app/models/emergency_message.rb @@ -0,0 +1,59 @@ +# == Schema Information +# +# Table name: emergency_messages +# +# id :uuid not null, primary key +# content_en :text +# content_fr :text +# delivered_at :datetime +# delivered_count :integer +# name :string +# role :string +# subject_en :string +# subject_fr :string +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid indexed +# +# Indexes +# +# index_emergency_messages_on_university_id (university_id) WHERE (university_id IS NOT NULL) +# +# Foreign Keys +# +# fk_rails_3bd377a11a (university_id => universities.id) +# +class EmergencyMessage < ApplicationRecord + belongs_to :university, optional: true + + validates :name, :subject_fr, :subject_en, :content_fr, :content_en, presence: true + + def deliver! + users_fr = target.where(language_id: Language.find_by(iso_code: 'fr').id) + users_fr.each do |user| + NotificationMailer.emergency_message(self, user, 'fr').deliver_later + end + # other users fallback to :en + users_en = target.where.not(language_id: Language.find_by(iso_code: 'fr').id) + users_en.each do |user| + NotificationMailer.emergency_message(self, user, 'en').deliver_later + end + update(delivered_at: Time.now, delivered_count: target.size) + end + + def delivered? + delivered_at.present? + end + + def to_s + "#{name}" + end + + def target + users = User.all + users = users.where(university_id: university_id) if university_id.present? + users = users.where(role: role) if role.present? + users + end + +end diff --git a/app/models/user.rb b/app/models/user.rb index e298ab38fe39211fbef66f4cae36c32edd3a0268..3da9b8ced4d07c41daa1ab9719aa18aec6cc34d6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -71,6 +71,7 @@ class User < ApplicationRecord include WithUniversity belongs_to :language + has_many :university_people, class_name: 'University::Person', dependent: :nullify scope :ordered, -> { order(:last_name, :first_name) } scope :for_language, -> (language_id) { where(language_id: language_id) } diff --git a/app/views/admin/users/show.html.erb b/app/views/admin/users/show.html.erb index 6d9f32033abae5d7b443d093847453418f02feee..f599dff6eca416ac581fefe5c9ec906ba5a21d08 100644 --- a/app/views/admin/users/show.html.erb +++ b/app/views/admin/users/show.html.erb @@ -11,10 +11,10 @@ <td><%= User.human_attribute_name('email') %></td> <td class="text-end"><%= link_to @user.email, "mailto:#{@user.email}" %></td> </tr> - <% ['first_name', 'last_name', 'mobile_phone'].each do |variable| %> + <% ['first_name', 'last_name', 'mobile_phone'].each do |attribute| %> <tr> - <td><%= User.human_attribute_name(variable) %></td> - <td class="text-end"><%= @user.public_send variable %></td> + <td><%= User.human_attribute_name(attribute) %></td> + <td class="text-end"><%= @user.public_send attribute %></td> </tr> <% end %> <tr> diff --git a/app/views/mailers/notifications/emergency_message.html.erb b/app/views/mailers/notifications/emergency_message.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..eae4020ce83d7ebf0b0020a5a131b31c040c0c01 --- /dev/null +++ b/app/views/mailers/notifications/emergency_message.html.erb @@ -0,0 +1 @@ +<%= sanitize @message %> \ No newline at end of file diff --git a/app/views/server/emergency_messages/_form.html.erb b/app/views/server/emergency_messages/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..7227cc00b4ec0490e048d98cd243a82086ec622b --- /dev/null +++ b/app/views/server/emergency_messages/_form.html.erb @@ -0,0 +1,40 @@ +<%= simple_form_for [:server, emergency_message] do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + + <div class="row"> + <div class="col-md-4"> + <%= f.input :name %> + </div> + </div> + + <h2 class="mt-4"><%= t('server_admin.emergency_messages.content') %></h2> + <div class="row"> + <div class="col-md-6"> + <%= f.input :subject_fr %> + <%= f.input :content_fr, + as: :summernote, + input_html: { + data: { 'summernote-config' => 'mini' } + } %> + </div> + <div class="col-md-6"> + <%= f.input :subject_en %> + <%= f.input :content_en, + as: :summernote, input_html: { + data: { 'summernote-config' => 'mini' } + } %> + </div> + </div> + + <h2 class="mt-4"><%= t('server_admin.emergency_messages.filters') %></h2> + <div class="col-md-4"> + <%= f.association :university %> + <%= f.input :role, collection: current_user.managed_roles, label_method: lambda { |k| t("activerecord.attributes.user.roles.#{k}")} %> + </div> + </div> + + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> +<% end %> diff --git a/app/views/server/emergency_messages/edit.html.erb b/app/views/server/emergency_messages/edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..808c59f3cb42f6fb0b11063fbba01d244f47aa52 --- /dev/null +++ b/app/views/server/emergency_messages/edit.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, @emergency_message %> + +<%= render 'form', emergency_message: @emergency_message %> diff --git a/app/views/server/emergency_messages/index.html.erb b/app/views/server/emergency_messages/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..7948651c2f73eca59eb2063c5a16b90537bb4e2c --- /dev/null +++ b/app/views/server/emergency_messages/index.html.erb @@ -0,0 +1,40 @@ +<% content_for :title, EmergencyMessage.model_name.human(count: 2) %> + +<div class="table-responsive"> + <table class="<%= table_classes %>"> + <thead> + <tr> + <th><%= EmergencyMessage.human_attribute_name('name') %></th> + <th><%= EmergencyMessage.human_attribute_name('delivered_at') %></th> + <th></th> + </tr> + </thead> + + <tbody> + <% @emergency_messages.each do |emergency_message| %> + <tr> + <td><%= link_to emergency_message, [:server, emergency_message] %></td> + <td><%= l emergency_message.delivered_at if emergency_message.delivered? %></td> + <td class="text-end"> + <div class="btn-group" role="group"> + <% unless emergency_message.delivered? %> + <%= link_to t('edit'), + edit_server_emergency_message_path(emergency_message), + class: button_classes %> + <%= link_to t('delete'), + server_emergency_message_path(emergency_message), + method: :delete, + data: { confirm: t('please_confirm') }, + class: button_classes_danger %> + <% end %> + </div> + </td> + </tr> + <% end %> + </tbody> + </table> +</div> + +<% content_for :action_bar_right do %> + <%= link_to t('create'), new_server_emergency_message_path, class: button_classes %> +<% end %> diff --git a/app/views/server/emergency_messages/new.html.erb b/app/views/server/emergency_messages/new.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..80c1ca46f6636175f974627685a5b4ca0c587ba0 --- /dev/null +++ b/app/views/server/emergency_messages/new.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, EmergencyMessage.model_name.human %> + +<%= render 'form', emergency_message: @emergency_message %> diff --git a/app/views/server/emergency_messages/show.html.erb b/app/views/server/emergency_messages/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..8da1a471df96738939585e654a8368a093573b02 --- /dev/null +++ b/app/views/server/emergency_messages/show.html.erb @@ -0,0 +1,56 @@ +<% content_for :title, @emergency_message %> + +<div class="row"> + <div class="col-md-6"> + <div class="card"> + <div class="card-header"> + <h2 class="card-title"><%= t('server_admin.emergency_messages.content') %></h2> + </div> + <div class="table-responsive"> + <table class="<%= table_classes %>"> + <% ['subject_fr', 'content_fr', 'subject_en', 'content_en'].each do |attribute| %> + <tr> + <td><%= EmergencyMessage.human_attribute_name(attribute) %></td> + <td class="text-end"><%= sanitize @emergency_message.public_send attribute %></td> + </tr> + <% end %> + </table> + </div> + </div> + </div> + <div class="col-md-6"> + <div class="card"> + <div class="card-header"> + <h2 class="card-title"><%= t('server_admin.emergency_messages.filters') %></h2> + </div> + <div class="table-responsive"> + <table class="<%= table_classes %>"> + <tr> + <td><%= EmergencyMessage.human_attribute_name(:university) %></td> + <td class="text-end"><%= @emergency_message.university.present? ? link_to(@emergency_message.university, server_university_path(@emergency_message.university)) : t('server_admin.emergency_messages.all_universities') %></td> + </tr> + <tr> + <td><%= EmergencyMessage.human_attribute_name(:role) %></td> + <td class="text-end"><%= @emergency_message.role.present? ? t("activerecord.attributes.user.roles.#{@emergency_message.role}") : t('server_admin.emergency_messages.all_roles') %></td> + </tr> + <tr> + <td><%= t('server_admin.emergency_messages.target') %></td> + <% count = @emergency_message.delivered? ? @emergency_message.delivered_count : @emergency_message.target.size %> + <td class="text-end"><%= t('server_admin.emergency_messages.users', count: count) %></td> + </tr> + </table> + </div> + </div> + </div> +</div> + +<% content_for :action_bar_right do %> + <% unless @emergency_message.delivered? %> + <%= link_to t('edit'), edit_server_emergency_message_path(@emergency_message), class: button_classes %> + <%= link_to t('server_admin.emergency_messages.deliver'), + deliver_server_emergency_message_path(@emergency_message), + method: :post, + data: { confirm: t('please_confirm') }, + class: button_classes %> + <% end %> +<% end %> diff --git a/app/views/server/languages/show.html.erb b/app/views/server/languages/show.html.erb index b2260d97cae65bc30c270bfb82383aa76a6bb086..bfb596c59eff405a8338e9a37d766ed2fdad9b4a 100644 --- a/app/views/server/languages/show.html.erb +++ b/app/views/server/languages/show.html.erb @@ -8,10 +8,10 @@ </div> <div class="table-responsive"> <table class="<%= table_classes %>"> - <% ['iso_code', 'summernote_locale'].each do |variable| %> + <% ['iso_code', 'summernote_locale'].each do |attribute| %> <tr> - <td><%= Language.human_attribute_name(variable) %></td> - <td class="text-end"><%= @language.public_send variable %></td> + <td><%= Language.human_attribute_name(attribute) %></td> + <td class="text-end"><%= @language.public_send attribute %></td> </tr> <% end %> </table> diff --git a/app/views/server/universities/show.html.erb b/app/views/server/universities/show.html.erb index 45bab30c290e0cc2d84404ec5dd4dc577355fbad..e4c0548dcd86f9b91bc84d4d1bd3ff25d321b25f 100644 --- a/app/views/server/universities/show.html.erb +++ b/app/views/server/universities/show.html.erb @@ -9,10 +9,10 @@ <td><%= t('activerecord.attributes.university.url') %></td> <td class="text-end"><%= link_to @university.url, @university.url, target: :_blank %></td> </tr> - <% ['address', 'zipcode', 'city', 'country', 'private'].each do |variable| %> + <% ['address', 'zipcode', 'city', 'country', 'private'].each do |attribute| %> <tr> - <td><%= University.human_attribute_name(variable) %></td> - <td class="text-end"><%= @university.public_send variable %></td> + <td><%= University.human_attribute_name(attribute) %></td> + <td class="text-end"><%= @university.public_send attribute %></td> </tr> <% end %> <% unless @university.invoice_amount.blank? %> diff --git a/config/locales/en.yml b/config/locales/en.yml index fbb389e853f30ad23025f3f1604328466249778b..a5eb4f89bc7eb1d0c59d4f601314ef7a2ab26f0e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -43,6 +43,15 @@ en: text_html: The video has no text transcription for blind people, or for users with a low bitrate connection who could not read the video properly. Please add a text transcription. activerecord: attributes: + emergency_message: + content_en: Message (en) + content_fr: Message (fr) + delivered_at: Delivered at + name: Name + role: Target role + subject_en: Subject (en) + subject_fr: Subject (fr) + university: Target university import: date: Date file: File @@ -75,6 +84,9 @@ en: websites_to_manage: Websites managed errors: models: + emergency_message: + one: Emergency message + other: Emergency messages import: attributes: file: @@ -284,6 +296,17 @@ en: search: Search select_language: Select language server_admin: + emergency_messages: + all_universities: All + all_roles: All + content: Content + deliver: Send + delivered: Your message has been sent + filters: Filters + target: Target + users: + one: "%{count} user" + other: "%{count} users" websites: buttons: theme: @@ -295,6 +318,9 @@ en: error_notification: default_message: "Please review the problems below:" hints: + emergency_message: + role: Leave blank to send to all roles + university: Leave blank to send to all universities import: file: .xlsx file only language: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b11726e561be19e475c5c3f7b14ada78221cff34..5557ca5e1f8dd3e937c7f42fcb09a3172731a7cc 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -43,6 +43,15 @@ fr: text_html: La vidéo n'est pas accompagnée d'une transcription textuelle pour les personnes malvoyantes, ou pour les situations de faible débit qui empêcheraient la lecture. activerecord: attributes: + emergency_message: + content_en: Message (en) + content_fr: Message (fr) + delivered_at: Date d'envoi + name: Nom + role: Rôle de destination + subject_en: Sujet (en) + subject_fr: Sujet (fr) + university: Université de destination import: date: Date file: Fichier @@ -85,6 +94,9 @@ fr: password: password_strength: ne répond pas aux critères de sécurité models: + emergency_message: + one: Message d'urgence + other: Messages d'urgence import: one: Import other: Imports @@ -284,6 +296,17 @@ fr: search: Rechercher select_language: Sélectionnez une langue server_admin: + emergency_messages: + all_universities: Toutes + all_roles: Tous + content: Contenu + deliver: Envoyer + delivered: Votre message a bien été envoyé + filters: Filtres + target: Cible + users: + one: "%{count} utilisateur" + other: "%{count} utilisateurs" websites: buttons: theme: @@ -295,6 +318,9 @@ fr: error_notification: default_message: "Les erreurs ci-dessous empêchent la validation :" hints: + emergency_message: + role: Laisser vide pour envoyer à tous les rôles + university: Laisser vide pour envoyer à toutes les universités import: file: Fichier .xlsx uniquement language: diff --git a/config/routes/server.rb b/config/routes/server.rb index 9feaac85cca9f81c568a08f00b8598de37c51856..af417e0c0892810bb70e1b1594b20f9ecc1c5b1b 100644 --- a/config/routes/server.rb +++ b/config/routes/server.rb @@ -10,5 +10,10 @@ namespace :server do resources :blocks, only: [:index, :show] do post :resave, on: :member end + resources :emergency_messages do + member do + post :deliver + end + end root to: 'dashboard#index' end diff --git a/config/server_navigation.rb b/config/server_navigation.rb index 549117ae9eca3145a65b8c8568004bb421d90121..5fb45438459d4f44f4c0bba5bd7a081dd28fcf9f 100644 --- a/config/server_navigation.rb +++ b/config/server_navigation.rb @@ -24,5 +24,8 @@ SimpleNavigation::Configuration.run do |navigation| primary.item :blocks, Communication::Block.model_name.human(count: 2), server_blocks_path + primary.item :emergency_messages, + EmergencyMessage.model_name.human(count: 2), + server_emergency_messages_path end end diff --git a/db/migrate/20230717132026_create_emergency_messages.rb b/db/migrate/20230717132026_create_emergency_messages.rb new file mode 100644 index 0000000000000000000000000000000000000000..96e20d31bbec0a2b0d50d275648d6fd7afee71c9 --- /dev/null +++ b/db/migrate/20230717132026_create_emergency_messages.rb @@ -0,0 +1,16 @@ +class CreateEmergencyMessages < ActiveRecord::Migration[7.0] + def change + create_table :emergency_messages, id: :uuid do |t| + t.references :university, foreign_key: true, type: :uuid, index: { where: "(university_id IS NOT NULL)" } + t.string :name + t.string :role + t.string :subject_fr + t.string :subject_en + t.text :content_fr + t.text :content_en + + t.datetime :delivered_at + t.timestamps + end + end +end diff --git a/db/migrate/20230717160238_add_delivered_count_to_emergency_messages.rb b/db/migrate/20230717160238_add_delivered_count_to_emergency_messages.rb new file mode 100644 index 0000000000000000000000000000000000000000..568f08cb3635f21f22b5fe6004ca12fbe98f810e --- /dev/null +++ b/db/migrate/20230717160238_add_delivered_count_to_emergency_messages.rb @@ -0,0 +1,5 @@ +class AddDeliveredCountToEmergencyMessages < ActiveRecord::Migration[7.0] + def change + add_column :emergency_messages, :delivered_count, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 7ab94a7582f9ac7507748f6eb2d1b485c074ec49..e7fc9d96a08fc7e900f81ec3569da8f381e672f4 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[7.0].define(version: 2023_07_16_050520) do +ActiveRecord::Schema[7.0].define(version: 2023_07_17_160238) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -105,8 +105,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_16_050520) do t.datetime "updated_at", null: false t.string "title" t.boolean "published", default: true - t.uuid "heading_id" t.uuid "communication_website_id" + t.uuid "heading_id" t.index ["about_type", "about_id"], name: "index_communication_website_blocks_on_about" t.index ["communication_website_id"], name: "index_communication_blocks_on_communication_website_id" t.index ["heading_id"], name: "index_communication_blocks_on_heading_id" @@ -223,6 +223,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_16_050520) do t.text "home_sentence" t.text "sass" t.text "css" + t.boolean "allow_experiences_modification", default: true t.index ["about_type", "about_id"], name: "index_communication_extranets_on_about" t.index ["university_id"], name: "index_communication_extranets_on_university_id" end @@ -462,7 +463,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_16_050520) do t.index ["university_id"], name: "index_communication_website_pages_on_university_id" end - create_table "communication_website_permalinks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_permalinks", id: :uuid, default: -> { "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 @@ -680,6 +681,21 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_16_050520) do t.index ["university_id"], name: "index_education_schools_on_university_id" end + create_table "emergency_messages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id" + t.string "name" + t.string "role" + t.string "subject_fr" + t.string "subject_en" + t.text "content_fr" + t.text "content_en" + t.datetime "delivered_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "delivered_count" + t.index ["university_id"], name: "index_emergency_messages_on_university_id", where: "(university_id IS NOT NULL)" + end + create_table "imports", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| t.integer "number_of_lines" t.jsonb "processing_errors" @@ -1194,6 +1210,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_16_050520) do add_foreign_key "education_programs", "education_programs", column: "parent_id" add_foreign_key "education_programs", "universities" add_foreign_key "education_schools", "universities" + add_foreign_key "emergency_messages", "universities" add_foreign_key "imports", "universities" add_foreign_key "imports", "users" add_foreign_key "research_journal_paper_kinds", "research_journals", column: "journal_id" diff --git a/test/fixtures/communication/extranets.yml b/test/fixtures/communication/extranets.yml index c4a72564511a4905256b44eff1b90d9ad95d76db..5b00f559b78ac19b9a3871e2736923e92e325c4b 100644 --- a/test/fixtures/communication/extranets.yml +++ b/test/fixtures/communication/extranets.yml @@ -2,34 +2,35 @@ # # Table name: communication_extranets # -# id :uuid not null, primary key -# about_type :string indexed => [about_id] -# color :string -# cookies_policy :text -# css :text -# feature_alumni :boolean default(FALSE) -# feature_contacts :boolean default(FALSE) -# feature_jobs :boolean default(FALSE) -# feature_library :boolean default(FALSE) -# feature_posts :boolean default(FALSE) -# has_sso :boolean default(FALSE) -# home_sentence :text -# host :string -# name :string -# privacy_policy :text -# registration_contact :string -# sass :text -# sso_button_label :string -# sso_cert :text -# sso_mapping :jsonb -# sso_name_identifier_format :string -# sso_provider :integer default("saml") -# sso_target_url :string -# terms :text -# created_at :datetime not null -# updated_at :datetime not null -# about_id :uuid indexed => [about_type] -# university_id :uuid not null, indexed +# id :uuid not null, primary key +# about_type :string indexed => [about_id] +# allow_experiences_modification :boolean default(TRUE) +# color :string +# cookies_policy :text +# css :text +# feature_alumni :boolean default(FALSE) +# feature_contacts :boolean default(FALSE) +# feature_jobs :boolean default(FALSE) +# feature_library :boolean default(FALSE) +# feature_posts :boolean default(FALSE) +# has_sso :boolean default(FALSE) +# home_sentence :text +# host :string +# name :string +# privacy_policy :text +# registration_contact :string +# sass :text +# sso_button_label :string +# sso_cert :text +# sso_mapping :jsonb +# sso_name_identifier_format :string +# sso_provider :integer default("saml") +# sso_target_url :string +# terms :text +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid indexed => [about_type] +# university_id :uuid not null, indexed # # Indexes #