forked from spen/seminar
84 lines
3.9 KiB
Ruby
84 lines
3.9 KiB
Ruby
class SeminarTemplateSetting
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
DefaultMenu = ["introduction","news","registration","submission","album"]
|
|
belongs_to :seminar_main
|
|
field :enable_custom_template, type: Boolean, default: false
|
|
field :display_menu, type: Array, default: ["introduction","news","registration","submission","album"]
|
|
field :announcement_limit, type: Integer , default: 4
|
|
field :album_limit, type: Integer , default: 4
|
|
field :website_title, type: String , default: "", localize: true
|
|
field :footer_info, type: String , default: "", localize: true
|
|
field :introduction, type: String , default: "", localize: true
|
|
field :background_style, type: String , default: ""
|
|
field :content_style, type: String , default: ""
|
|
has_many :seminar_banner_images, :autosave => true, :dependent => :destroy
|
|
accepts_nested_attributes_for :seminar_banner_images, :allow_destroy => true
|
|
after_save do
|
|
if self.display_menu_changed?
|
|
@seminar_page_root = Page.where(:parent_page_id=>self.seminar_main_id).first
|
|
display_menu = self.display_menu
|
|
available_locales = Site.first.in_use_locales rescue I18n.available_locales
|
|
available_locales = available_locales.map{|l| l.to_s}
|
|
if @seminar_page_root
|
|
default_display_menu = self.class::DefaultMenu
|
|
default_display_menu.each do |page_id|
|
|
page = @seminar_page_root.child_page.where(:page_id=>page_id).first
|
|
if page
|
|
if display_menu.include?(page_id)
|
|
page.update(:enabled_for=>available_locales,:menu_enabled_for=>available_locales)
|
|
else
|
|
page.update(:enabled_for=>[],:menu_enabled_for=>[])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
def self.initialize_variables
|
|
app_path = Pathname.new(__FILE__).dirname.dirname
|
|
@@background_style_infos = {}
|
|
Dir.glob("#{app_path}/assets/stylesheets/seminar/background_style/*/").each do |folder|
|
|
files = Dir.glob("#{folder}/*")
|
|
image_file = files.select{|f| File.basename(f).match(/jpg|gif|png|jpeg/i)}
|
|
folder_name = File.basename(folder)
|
|
image_file = image_file.select{|f| File.basename(f).include?(folder_name)}.first
|
|
key = File.basename(folder)
|
|
image_path = "/assets/seminar/background_style/#{key}/#{File.basename(image_file) rescue ''}"
|
|
@@background_style_infos[key] = {
|
|
"image"=>image_path,
|
|
"css"=> get_folder_content(folder,"css"),
|
|
"js"=> get_folder_content(folder,"js")
|
|
}
|
|
end
|
|
@@background_style_infos = @@background_style_infos.sort_by {|k, v| (k.match(/\d+/)[0].to_i rescue 0)}.to_h
|
|
@@content_style_infos = {}
|
|
Dir.glob("#{app_path}/assets/stylesheets/seminar/content_style/*/").each do |folder|
|
|
files = Dir.glob("#{folder}/*")
|
|
image_file = files.select{|f| File.basename(f).match(/jpg|gif|png|jpeg/i)}
|
|
folder_name = File.basename(folder)
|
|
image_file = image_file.select{|f| File.basename(f).include?(folder_name)}.first
|
|
key = File.basename(folder)
|
|
image_path = "/assets/seminar/content_style/#{key}/#{File.basename(image_file) rescue ''}"
|
|
template_info = (JSON.parse(File.read("#{folder}/info.json")) rescue {"template"=> "horizontal"})
|
|
@@content_style_infos[key] = {
|
|
"image"=>image_path,
|
|
"css"=> get_folder_content(folder,"css"),
|
|
"js"=> get_folder_content(folder,"js"),
|
|
"info"=>template_info,
|
|
"template"=>"#{app_path}/assets/stylesheets/seminar/templates/#{template_info["template"]}/"
|
|
}
|
|
end
|
|
@@content_style_infos = @@content_style_infos.sort_by {|k, v| (k.match(/\d+/)[0].to_i rescue 0)}.to_h
|
|
end
|
|
def self.get_folder_content(folder,content)
|
|
return Dir.glob("#{folder}#{content}/*").map{|content| content.split("app")[1..-1].join("app").sub("/stylesheets/",'/')}
|
|
end
|
|
def self.background_style_infos
|
|
@@background_style_infos
|
|
end
|
|
def self.content_style_infos
|
|
@@content_style_infos
|
|
end
|
|
initialize_variables
|
|
end |