|
- # == 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
|