Skip to content
Snippets Groups Projects
extranet.rb 3.38 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: communication_extranets
#
pabois's avatar
pabois committed
#  id                         :uuid             not null, primary key
#  about_type                 :string           indexed => [about_id]
Sébastien Gaya's avatar
Sébastien Gaya committed
#  color                      :string
#  cookies_policy             :text
pabois's avatar
pabois committed
#  has_sso                    :boolean          default(FALSE)
#  host                       :string
#  name                       :string
Sébastien Gaya's avatar
Sébastien Gaya committed
#  privacy_policy             :text
pabois's avatar
pabois committed
#  registration_contact       :string
Sébastien Gaya's avatar
Sébastien Gaya committed
#  sso_button_label           :string
pabois's avatar
pabois committed
#  sso_cert                   :text
#  sso_mapping                :jsonb
#  sso_name_identifier_format :string
#  sso_provider               :integer          default("saml")
#  sso_target_url             :string
Sébastien Gaya's avatar
Sébastien Gaya committed
#  terms                      :text
pabois's avatar
pabois committed
#  created_at                 :datetime         not null
#  updated_at                 :datetime         not null
#  about_id                   :uuid             indexed => [about_type]
#  university_id              :uuid             not null, indexed
Arnaud Levy's avatar
Arnaud Levy committed
#
# Indexes
#
pabois's avatar
pabois committed
#  index_communication_extranets_on_about          (about_type,about_id)
Arnaud Levy's avatar
Arnaud Levy committed
#  index_communication_extranets_on_university_id  (university_id)
#
# Foreign Keys
#
#  fk_rails_c2268c7ebd  (university_id => universities.id)
#
class Communication::Extranet < ApplicationRecord
Sébastien Gaya's avatar
Sébastien Gaya committed
  self.filter_attributes += [:sso_cert]

  # We don't include Sanitizable because too many complex attributes. We handle it below.
pabois's avatar
pabois committed
  include WithAbouts
Sébastien Gaya's avatar
Sébastien Gaya committed
  include WithLegal
pabois's avatar
pabois committed
  include WithSso
Arnaud Levy's avatar
Arnaud Levy committed
  include WithUniversity
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  has_one_attached_deletable :logo
pabois's avatar
pabois committed
  has_one_attached_deletable :favicon do |attachable|
    attachable.variant :thumb, resize_to_limit: [228, 228]
  end
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  validates_presence_of :name, :host
  validates :logo, size: { less_than: 1.megabytes }
  validates :favicon, size: { less_than: 1.megabytes }

pabois's avatar
pabois committed
  scope :ordered, -> { order(:name) }
  scope :for_search_term, -> (term) {
    where("
      unaccent(communication_extranets.host) ILIKE unaccent(:term) OR
pabois's avatar
pabois committed
      unaccent(communication_extranets.name) ILIKE unaccent(:term)
    ", term: "%#{sanitize_sql_like(term)}%")
  }

Arnaud Levy's avatar
Arnaud Levy committed
  def self.with_host(host)
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def should_show_years?
Arnaud Levy's avatar
Arnaud Levy committed
    # For a single program, year is like cohort
pabois's avatar
pabois committed
    return false if about.nil? || about&.is_a?(Education::Program)
Arnaud Levy's avatar
Arnaud Levy committed
    # if a school has a single program, same thing
pabois's avatar
pabois committed
    about&.programs&.many?
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def alumni
    about&.university_person_alumni
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def users
    university.users.where(person: alumni)
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def cohorts
    about&.cohorts
  end

  def years
    about&.academic_years
  end
Arnaud Levy's avatar
Arnaud Levy committed
  alias academic_years years
Arnaud Levy's avatar
Arnaud Levy committed

  def organizations
    about&.alumni_organizations
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def experiences
    about&.alumni_experiences
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def url
    @url ||= Rails.env.development? ? "http://#{host}:3000" : "https://#{host}"
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def to_s
    "#{name}"
  end

  private

  def sanitize_fields
    self.color = Osuny::Sanitizer.sanitize(self.color, 'string')
    self.cookies_policy = Osuny::Sanitizer.sanitize(self.cookies_policy, 'text')
    self.host = Osuny::Sanitizer.sanitize(self.host, 'string')
    self.name = Osuny::Sanitizer.sanitize(self.name, 'string')
    self.privacy_policy = Osuny::Sanitizer.sanitize(self.privacy_policy, 'text')
    self.registration_contact = Osuny::Sanitizer.sanitize(self.registration_contact, 'string')
    self.terms = Osuny::Sanitizer.sanitize(self.terms, 'text')
  end
Arnaud Levy's avatar
Arnaud Levy committed
end