themes_controller.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:3k
源码类别:

Ajax

开发平台:

Others

  1. class Admin::ThemesController < Admin::BaseController
  2.   require 'open-uri'
  3.   require 'time'
  4.   require 'rexml/document'
  5.   cache_sweeper :blog_sweeper
  6.   def index
  7.     @themes = Theme.find_all
  8.     @themes.each do |theme|
  9.       theme.description_html = TextFilter.filter_text(this_blog, theme.description, nil, [:markdown,:smartypants])
  10.     end
  11.     @active = this_blog.current_theme
  12.   end
  13.   def preview
  14.     send_file "#{Theme.themes_root}/#{params[:theme]}/preview.png", :type => 'image/png', :disposition => 'inline', :stream => false
  15.   end
  16.   def switchto
  17.     this_blog.theme = params[:theme]
  18.     this_blog.save
  19.     zap_theme_caches
  20.     this_blog.current_theme(:reload)
  21.     flash[:notice] = _("Theme changed successfully")
  22.     require "#{this_blog.current_theme.path}/helpers/theme_helper.rb" if File.exists? "#{this_blog.current_theme.path}/helpers/theme_helper.rb"
  23.     redirect_to :action => 'index'
  24.   end
  25.   def editor
  26.     case params[:type].to_s
  27.     when "stylesheet"
  28.       path = this_blog.current_theme.path + "/stylesheets/"
  29.       if params[:file] =~ /css$/
  30.         filename = params[:file]
  31.       else
  32.         flash[:error] = _("You are not authorized to open this file")
  33.         return
  34.       end
  35.     when "layout"
  36.       path = this_blog.current_theme.path + "/layouts/"
  37.       if params[:file] =~ /rhtml$|erb$/
  38.         filename = params[:file]
  39.       else
  40.         flash[:error] = _("You are not authorized to open this file")
  41.         return
  42.       end
  43.     end
  44.     if path and filename
  45.       if File.exists? path + filename
  46.         if File.writable? path + filename
  47.           case request.method
  48.           when :post
  49.             theme = File.new(path + filename, "r+")
  50.             theme.write(params[:theme_body])
  51.             theme.close
  52.             flash[:notice] = _("File saved successfully")
  53.             zap_theme_caches
  54.           end
  55.         else
  56.           flash[:notice] = _("Unable to write file")
  57.         end
  58.         @file = ""
  59.         file = File.readlines(path + filename, "r")
  60.         file.each do |line|
  61.           @file << line
  62.         end
  63.       end
  64.     end
  65.   end
  66.   def catalogue
  67.     # Data get by this URI is a JSON formatted
  68.     # The return is a list. All element represent a item
  69.     # Each item is a hash with this key :
  70.     #  * uid
  71.     #  * download_uri
  72.     #  * name
  73.     #  * author
  74.     #  * description
  75.     #  * tags
  76.     #  * screenshot_uri
  77.     url = "http://www.dev411.com/typo/themes_2-1.txt"
  78.     open(url) do |http|
  79.       @themes = parse_catalogue_by_json(http.read)
  80.     end
  81.   rescue OpenURI::HTTPError
  82.     @themes = []
  83.     @error = true
  84.   end
  85.   protected
  86.   def zap_theme_caches
  87.     FileUtils.rm_rf(%w{stylesheets javascript images}.collect{|v| page_cache_directory + "/#{v}/theme"})
  88.   end
  89.   private
  90.   
  91.   class ThemeItem < Struct.new(:image, :name, :url, :author, :description)
  92.     def to_s; name; end
  93.   end
  94.   def parse_catalogue_by_json(body)
  95.     items_json = JSON.parse(body)
  96.     items = []
  97.     items_json.each do |elem|
  98.       next unless elem['download_uri'] # No display theme without download URI
  99.       item = ThemeItem.new
  100.       item.image = elem['screenshot_uri']
  101.       item.url = elem['download_uri']
  102.       item.name = elem['name']
  103.       item.author = elem['author']
  104.       item.description = elem['description']
  105.       items << item
  106.     end
  107.     items
  108.     items.sort_by { |item| item.name }
  109.   end
  110. end