Skip to content
Snippets Groups Projects
page.rb 2.26 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: communication_website_imported_pages
#
#  id            :uuid             not null, primary key
Arnaud Levy's avatar
Arnaud Levy committed
#  content       :text
Arnaud Levy's avatar
Arnaud Levy committed
#  data          :jsonb
Arnaud Levy's avatar
Arnaud Levy committed
#  excerpt       :text
#  identifier    :string
#  parent        :string
Arnaud Levy's avatar
Arnaud Levy committed
#  path          :text
Arnaud Levy's avatar
Arnaud Levy committed
#  slug          :text
Arnaud Levy's avatar
Arnaud Levy committed
#  status        :integer          default(0)
Arnaud Levy's avatar
Arnaud Levy committed
#  title         :string
Arnaud Levy's avatar
Arnaud Levy committed
#  url           :text
Arnaud Levy's avatar
Arnaud Levy committed
#  created_at    :datetime         not null
#  updated_at    :datetime         not null
#  page_id       :uuid             not null
#  university_id :uuid             not null
#  website_id    :uuid             not null
#
# Indexes
#
#  index_communication_website_imported_pages_on_page_id        (page_id)
#  index_communication_website_imported_pages_on_university_id  (university_id)
#  index_communication_website_imported_pages_on_website_id     (website_id)
#
# Foreign Keys
#
#  fk_rails_...  (page_id => communication_website_pages.id)
#  fk_rails_...  (university_id => universities.id)
#  fk_rails_...  (website_id => communication_website_imported_websites.id)
#
class Communication::Website::Imported::Page < ApplicationRecord
  belongs_to :university
Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :website,
             class_name: 'Communication::Website::Imported::Website'
  belongs_to :page,
             class_name: 'Communication::Website::Page',
             optional: true

Arnaud Levy's avatar
Arnaud Levy committed
  before_validation :sync
Arnaud Levy's avatar
Arnaud Levy committed
  default_scope { order(:path) }

Arnaud Levy's avatar
Arnaud Levy committed
  def data=(value)
    super value
    self.url = value['link']
    self.slug = value['slug']
    self.title = value['title']['rendered']
    self.excerpt = value['excerpt']['rendered']
    self.content = value['content']['rendered']
    self.parent = value['parent']
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def to_s
    "#{title}"
  end

  protected

Arnaud Levy's avatar
Arnaud Levy committed
  def sync
Arnaud Levy's avatar
Arnaud Levy committed
    if page.nil?
Arnaud Levy's avatar
Arnaud Levy committed
      self.page = Communication::Website::Page.new  university: university,
                                                    website: website.website, # Real website, not imported website
                                                    slug: path
Arnaud Levy's avatar
Arnaud Levy committed
      self.page.title = "Untitled"
Arnaud Levy's avatar
Arnaud Levy committed
      self.page.save
    end
Arnaud Levy's avatar
Arnaud Levy committed
    # TODO only if not modified since import
Arnaud Levy's avatar
Arnaud Levy committed
    page.slug = slug
Arnaud Levy's avatar
Arnaud Levy committed
    page.title = Wordpress.clean title.to_s
Arnaud Levy's avatar
Arnaud Levy committed
    page.description = Wordpress.clean excerpt.to_s
Arnaud Levy's avatar
Arnaud Levy committed
    page.text = Wordpress.clean content.to_s
Arnaud Levy's avatar
Arnaud Levy committed
    page.save
  end
Arnaud Levy's avatar
Arnaud Levy committed
end