Files
grecia/app/models/widget/card.rb
taitus 7c85daac3f Allow sorting widget_cards on homepage
Note that we keep :created_at order as complement to new :order field.

We do this so that current installations will not notice any change in the
sorting of their cards when upgrading, as the default "order" field will always
be 1, so it will continue to sort by the "created_at".
2024-03-21 18:27:49 +01:00

33 lines
804 B
Ruby

class Widget::Card < ApplicationRecord
include Imageable
belongs_to :cardable, polymorphic: true
translates :label, touch: true
translates :title, touch: true
translates :description, touch: true
translates :link_text, touch: true
include Globalizable
validates_translation :title, presence: true
validates :link_url, presence: true, if: -> { !header? || link_text.present? }
validates :order, numericality: { greater_than_or_equal_to: 1 }
scope :sort_by_order, -> { order(:order, :created_at) }
def self.header
where(header: true)
end
def self.body
where(header: false, cardable_id: nil).sort_by_order
end
def header_or_sdg_header?
header? || sdg_header?
end
def sdg_header?
cardable == WebSection.find_by!(name: "sdg")
end
end