| Class | Theme |
| In: |
app/models/theme.rb
|
| Parent: | Object |
| config | [R] | |
| id | [R] |
# File app/models/theme.rb, line 16
16: def create(id, attributes = {})
17: if find(id) || system_themes.map(&:id).include?(id)
18: raise DuplicatedIdentifier
19: end
20: Theme.new(id, attributes).save
21: end
# File app/models/theme.rb, line 23
23: def find(the_id)
24: if File.directory?(File.join(user_themes_dir, the_id))
25: Theme.new(the_id)
26: else
27: nil
28: end
29: end
# File app/models/theme.rb, line 31
31: def find_by_owner(owner)
32: Dir.glob(File.join(user_themes_dir, '*', 'theme.yml')).select do |desc|
33: config = YAML.load_file(desc)
34: (config['owner_type'] == owner.class.base_class.name) && (config['owner_id'] == owner.id)
35: end.map do |desc|
36: Theme.find(File.basename(File.dirname(desc)))
37: end
38: end
# File app/models/theme.rb, line 47
47: def initialize(id, attributes = {})
48: @id = id
49: load_config
50: attributes.each do |k,v|
51: self.send("#{k}=", v)
52: end
53: end
# File app/models/theme.rb, line 4
4: def system_themes
5: Dir.glob(RAILS_ROOT + '/public/designs/themes/*').map do |item|
6: File.basename(item)
7: end.map do |item|
8: new(item)
9: end
10: end
# File app/models/theme.rb, line 12
12: def user_themes_dir
13: File.join(RAILS_ROOT, 'public', 'user_themes')
14: end
# File app/models/theme.rb, line 63
63: def ==(other)
64: other.is_a?(self.class) && (other.id == self.id)
65: end
# File app/models/theme.rb, line 67
67: def add_css(filename)
68: FileUtils.mkdir_p(stylesheets_directory)
69: FileUtils.touch(stylesheet_path(filename))
70: end
# File app/models/theme.rb, line 87
87: def add_image(filename, data)
88: FileUtils.mkdir_p(images_directory)
89: File.open(image_path(filename), 'w') do |f|
90: f.write(data)
91: end
92: end
# File app/models/theme.rb, line 83
83: def css_files
84: Dir.glob(File.join(stylesheets_directory, '*.css')).map { |f| File.basename(f) }
85: end
# File app/models/theme.rb, line 94
94: def image_files
95: Dir.glob(image_path('*')).map {|item| File.basename(item)}
96: end
# File app/models/theme.rb, line 110
110: def image_path(filename)
111: File.join(images_directory, filename)
112: end
# File app/models/theme.rb, line 114
114: def images_directory
115: File.join(self.class.user_themes_dir, id, 'images')
116: end
# File app/models/theme.rb, line 128
128: def owner
129: return nil unless config['owner_type'] && config['owner_id']
130: @owner ||= config['owner_type'].constantize.find(config['owner_id'])
131: end
# File app/models/theme.rb, line 133
133: def owner=(model)
134: config['owner_type'] = model.class.base_class.name
135: config['owner_id'] = model.id
136: @owner = model
137: end
# File app/models/theme.rb, line 79
79: def read_css(filename)
80: File.read(stylesheet_path(filename))
81: end
# File app/models/theme.rb, line 118
118: def save
119: FileUtils.mkdir_p(self.class.user_themes_dir)
120: FileUtils.mkdir_p(File.join(self.class.user_themes_dir, id))
121: %w[ common help menu article button search blocks forms login-box ].each do |item|
122: add_css(item)
123: end
124: write_config
125: self
126: end
# File app/models/theme.rb, line 98
98: def stylesheet_path(filename)
99: suffix = ''
100: unless filename =~ /\.css$/
101: suffix = '.css'
102: end
103: File.join(stylesheets_directory, filename + suffix)
104: end
# File app/models/theme.rb, line 106
106: def stylesheets_directory
107: File.join(Theme.user_themes_dir, self.id, 'stylesheets')
108: end
# File app/models/theme.rb, line 72
72: def update_css(filename, content)
73: add_css(filename)
74: File.open(stylesheet_path(filename), 'w') do |f|
75: f.write(content)
76: end
77: end
# File app/models/theme.rb, line 147
147: def load_config
148: if File.exists?(File.join(self.class.user_themes_dir, self.id, 'theme.yml'))
149: @config = YAML.load_file(File.join(self.class.user_themes_dir, self.id, 'theme.yml'))
150: else
151: @config = {}
152: end
153: end