forgeplus/app/models/laboratory_setting.rb

89 lines
1.9 KiB
Ruby

# == Schema Information
#
# Table name: laboratory_settings
#
# id :integer not null, primary key
# laboratory_id :integer
# config :text(65535)
#
# Indexes
#
# index_laboratory_settings_on_laboratory_id (laboratory_id)
#
class LaboratorySetting < ApplicationRecord
belongs_to :laboratory
serialize :config, JSON
%i[name navbar footer].each do |method_name|
define_method method_name do
config&.[](method_name.to_s)
end
define_method "#{method_name}=" do |value|
self.config ||= {}
config.[]=(method_name.to_s, value)
end
end
def login_logo_url
image_url('login')
end
def nav_logo_url
image_url('nav')
end
def tab_logo_url
image_url('tab')
end
def subject_banner_url
image_url('_subject_banner')
end
def course_banner_url
image_url('_course_banner')
end
def competition_banner_url
image_url('_competition_banner')
end
def moop_cases_banner_url
image_url('_moop_cases_banner')
end
def oj_banner_url
image_url('_oj_banner')
end
def default_navbar
self.class.default_config[:navbar]
end
private
def image_url(type)
return nil unless Util::FileManage.exists?(self, type)
Util::FileManage.source_disk_file_url(self, type)
end
def self.default_config
{
name: nil,
navbar: [
{ 'name' => '首页', 'link' => '/projects', 'hidden' => false },
{ 'name' => '课程', 'link' => '/courses', 'hidden' => false },
{ 'name' => '项目', 'link' => '', 'hidden' => true },
{ 'name' => '数据', 'link' => '/datas', 'hidden' => false },
{ 'name' => '竞赛', 'link' => '/competitions', 'hidden' => false },
{ 'name' => '问吧', 'link' => '/forums', 'hidden' => false },
{ 'name' => '开源社区', 'link' => '/projects', 'hidden' => false },
],
footer: nil
}
end
end