2024-02-25 12:15:55 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-09-05 08:59:51 -04:00
|
|
|
class HelpPage < ApplicationRecord
|
|
|
|
validates :wiki_page, :name, uniqueness: true
|
|
|
|
validates :wiki_page, :name, presence: true
|
2024-02-15 14:05:36 -05:00
|
|
|
normalizes :name, with: ->(name) { name.downcase.strip.tr(" ", "_") }
|
2019-09-05 08:59:51 -04:00
|
|
|
validate :wiki_page_exists
|
2024-11-04 10:36:52 -05:00
|
|
|
after_create :log_create
|
|
|
|
after_update :log_update
|
2023-04-10 11:51:25 -04:00
|
|
|
after_destroy :invalidate_cache
|
2024-11-04 10:36:52 -05:00
|
|
|
after_destroy :log_destroy
|
2019-09-05 08:59:51 -04:00
|
|
|
after_save :invalidate_cache
|
2024-07-25 13:42:42 -04:00
|
|
|
belongs_to :wiki, class_name: "WikiPage", foreign_key: "wiki_page", primary_key: "title"
|
2019-09-05 08:59:51 -04:00
|
|
|
|
|
|
|
def invalidate_cache
|
2023-04-10 11:51:25 -04:00
|
|
|
Cache.delete("help_index")
|
2019-09-05 08:59:51 -04:00
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
def wiki_page_exists
|
2024-07-25 13:42:42 -04:00
|
|
|
errors.add(:wiki_page, "must exist") if wiki.blank?
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|
|
|
|
|
2024-02-15 14:05:36 -05:00
|
|
|
def pretty_title
|
|
|
|
title.presence || name.titleize
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|
|
|
|
|
2024-02-15 14:05:36 -05:00
|
|
|
def related_array
|
|
|
|
related.split(",").map(&:strip)
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|
|
|
|
|
2024-02-15 14:05:36 -05:00
|
|
|
def self.pretty_related_title(related, help_pages)
|
|
|
|
related_help_page = help_pages.find { |help_page| help_page.name == related }
|
2019-09-05 08:59:51 -04:00
|
|
|
|
2024-02-15 14:05:36 -05:00
|
|
|
return related_help_page.pretty_title if related_help_page
|
2019-09-05 08:59:51 -04:00
|
|
|
|
2024-02-15 14:05:36 -05:00
|
|
|
related.titleize
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.help_index
|
2024-02-15 14:11:44 -05:00
|
|
|
Cache.fetch("help_index", expires_in: 12.hours) { HelpPage.all.sort_by(&:pretty_title) }
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|
2024-11-04 10:36:52 -05:00
|
|
|
|
|
|
|
module LogMethods
|
|
|
|
def log_create
|
|
|
|
ModAction.log(:help_create, { name: name, wiki_page: wiki_page })
|
|
|
|
end
|
|
|
|
|
|
|
|
def log_update
|
|
|
|
ModAction.log(:help_update, { name: name, wiki_page: wiki_page })
|
|
|
|
end
|
|
|
|
|
|
|
|
def log_destroy
|
|
|
|
ModAction.log(:help_delete, { name: name, wiki_page: wiki_page })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
include LogMethods
|
2019-09-05 08:59:51 -04:00
|
|
|
end
|