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
 #