# Copyright (C) 2005 akira yamada
# You can redistribute it and/or modify it under GPL2.
THEME_BASE = File.join(::TDiary::PATH, 'theme')
CACHE_FILE = File.join(@cache_path, 'theme_list')
def get_theme_list
if FileTest.exist?(CACHE_FILE) &&
File.mtime(CACHE_FILE) >= File.mtime(THEME_BASE)
File.open(CACHE_FILE, 'r') do |i|
i.flock(File::LOCK_EX)
return Marshal.load(i.read)
end
end
list = []
Dir.glob(File.join(THEME_BASE, '*')).sort.each do |dir|
theme = dir.sub(%r[.*/theme/], '')
next unless FileTest::file?("#{dir}/#{theme}.css".untaint)
name = theme.split(/_/).collect{|s| s.capitalize}.join(' ')
list << [theme, name]
end
File.open(CACHE_FILE, 'w') do |o|
o.flock(File::LOCK_EX)
o.puts Marshal.dump(list)
end
return list
end
def select_theme_form
options = ''
get_theme_list.each do |theme, name|
options << %Q!\t\n!
if theme == DEFAULT_THEME
options = %Q!\t\n! + options
end
end
<
HTML
end
def label
'use'
end
def check_theme(name)
return false if name.nil? || name.empty?
FileTest.file?(File.join(THEME_BASE, name, name + '.css'))
end
with_cgiparam = false
theme = nil
if @cgi.params['select_theme'] && @cgi.params['select_theme'][0]
tmp = @cgi.params['select_theme'][0].gsub(/[^-.\w]/, '')
tmp.untaint
if check_theme(tmp)
theme = tmp
with_cgiparam = true
end
end
if theme.nil? && @cgi.cookies && @cgi.cookies.include?('tdiary_select_theme')
tmp = @cgi.cookies['tdiary_select_theme'][0].gsub(/[^-.\w]/, '')
tmp.untaint
theme = tmp if check_theme(tmp)
end
if theme.nil?
theme = @conf.theme
end
cookie_path = File::dirname( @cgi.script_name )
cookie_path += '/' if cookie_path !~ /\/$/
cookie = CGI::Cookie::new(
'name' => 'tdiary_select_theme',
'value' => theme,
'path' => cookie_path,
'expires' => Time::now.gmtime + 90*24*60*60) # 90days
add_cookie(cookie)
# XXX: OK?
DEFAULT_THEME = @conf.theme
@conf.theme = theme