demarches-normaliennes/app/helpers/application_helper.rb

163 lines
4.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
module ApplicationHelper
APP_HOST = ENV['APP_HOST']
APP_HOST_LEGACY = ENV['APP_HOST_LEGACY']
REGEXP_REPLACE_TRAILING_EXTENSION = /(\.\w+)+$/.freeze
REGEXP_REPLACE_WORD_SEPARATOR = /[\s_-]+/.freeze
def app_host_legacy?(request)
return false if APP_HOST_LEGACY.blank?
Regexp.new(APP_HOST_LEGACY).match?(request.base_url)
end
def auto_switch_domain?(request, user_signed_in)
switch_domain_enabled?(request) && !user_signed_in && app_host_legacy?(request)
end
def switch_domain_enabled?(request)
request.params.key?(:switch_domain) || Flipper.enabled?(:switch_domain, Current.user)
end
def html_lang
I18n.locale.to_s
end
def active_locale_link(locale)
link_to save_locale_path(locale:), {
method: :post,
class: "fr-translate__language fr-nav__link",
hreflang: locale,
lang: locale,
"aria-current": I18n.locale == locale ? "true" : nil
}.compact do
yield
end
end
def flash_class(level, sticky: false, fixed: false)
class_names = []
case level
when 'notice'
class_names << 'alert-success'
when 'alert', 'error'
class_names << 'alert-danger'
when 'routing_mode'
class_names << 'hidden'
end
2018-11-14 16:28:02 +01:00
if sticky
class_names << 'sticky'
end
if fixed
class_names << 'alert-fixed'
end
class_names.join(' ')
end
2017-06-22 16:45:57 +02:00
def flash_role(level)
return "status" if level == "notice"
'alert'
end
2017-06-22 16:45:57 +02:00
def current_email
2018-05-30 18:45:46 +02:00
current_user&.email ||
current_instructeur&.email ||
2023-08-25 22:53:30 +02:00
current_administrateur&.email ||
current_gestionnaire&.email
2017-06-22 16:45:57 +02:00
end
def staging?
2021-03-24 15:05:24 +01:00
Rails.application.config.ds_env == 'staging'
end
2018-08-29 15:00:35 +02:00
def contact_link(title, options = {})
2018-08-30 15:10:18 +02:00
tags, type, dossier_id = options.values_at(:tags, :type, :dossier_id)
options.except!(:tags, :type, :dossier_id)
params = { tags: Array.wrap(tags), type: type, dossier_id: dossier_id }.compact
2019-01-17 11:52:38 +01:00
link_to title, contact_url(params), options
2018-08-29 15:00:35 +02:00
end
def root_path_for_profile(nav_bar_profile)
case nav_bar_profile
when :instructeur
instructeur_procedures_path
when :user
dossiers_path
else
root_path
end
end
def root_path_info_for_profile(nav_bar_profile)
case nav_bar_profile
when :administrateur
[admin_procedures_path, t("admin", scope: "layouts.root_path_link_title")]
when :gestionnaire
[gestionnaire_groupe_gestionnaires_path, t("gestionnaire", scope: "layouts.root_path_link_title")]
when :instructeur
[instructeur_procedures_path, t("instructeur", scope: "layouts.root_path_link_title")]
when :user
[dossiers_path, t("user", scope: "layouts.root_path_link_title")]
else
[root_path, t("default", scope: "layouts.root_path_link_title")]
end
end
def try_format_date(date)
date.present? ? I18n.l(date, format: :long) : ''
end
2023-07-03 16:50:07 +02:00
def try_format_datetime(datetime, format: nil)
datetime.present? ? I18n.l(datetime, format:) : ''
end
def try_parse_format_date(date)
date.then { Date.parse(_1) rescue nil }&.then { I18n.l(_1) }
end
def try_format_mois_effectif(etablissement)
2020-04-21 20:26:07 +02:00
if etablissement.entreprise_effectif_mois.present? && etablissement.entreprise_effectif_annee.present?
[etablissement.entreprise_effectif_mois, etablissement.entreprise_effectif_annee].join('/')
else
''
end
end
def show_outdated_browser_banner?
!BrowserSupport.supported?(browser)
end
def external_link_attributes
{ target: "_blank", rel: "noopener noreferrer" }
end
def new_tab_suffix(title)
[title, I18n.t('utils.new_tab')].compact.join(' — ')
end
def download_details(attachment)
"#{attachment.filename.extension.upcase} #{number_to_human_size(attachment.byte_size)}"
end
2023-11-27 13:56:13 +01:00
def dsfr_icon(classes, *options)
sm = options.include?(:sm)
mr = options.include?(:mr)
tag.span(class: class_names(classes, 'fr-icon--sm': sm, 'fr-mr-1v': mr),
"aria-hidden" => true)
end
def acronymize(str)
str.gsub(REGEXP_REPLACE_TRAILING_EXTENSION, '')
.split(REGEXP_REPLACE_WORD_SEPARATOR)
.map { |word| word[0].upcase }
.join
end
2024-07-15 23:28:36 +02:00
def asterisk = render(EditableChamp::AsteriskMandatoryComponent.new)
end