class DesktopThemesController < OrbitBackendController require "net/http" require "uri" require 'zip/zip' def index @desktopThemes = DesktopTheme.all render :layout => false end def destroy dt = DesktopTheme.find(params[:id]) dt.destroy redirect_to desktop_theme_path end def upload if !params[:desktop_theme].nil? temp_file = Tempfile.new("temp_file") original_file = params[:desktop_theme][:package_file] #if original_file.content_type == 'application/zip' temp_file.write(original_file.read.force_encoding('UTF-8')) temp_file.rewind filename = File.basename(original_file.original_filename,".zip") unzip_widget(temp_file, filename) #else # flash[:error] = "Upload file should be in zip format" #end temp_file.close end render :layout => false end def edit @dw = DesktopWidget.find(params[:id]) end def unzip_widget(file, zip_name) Zip::ZipFile.open(file) { |zip_file| dt = DesktopTheme.new.from_json(zip_file.read("#{zip_name}/settings.json")) Dir.mktmpdir('f_path') { |dir| images_entries = [] zip_file.entries.each do |entry| case (path = entry.to_s) when /\A(#{zip_name})\/(theme\.css)\z/ #for default css dt.build_css_default(:file => get_temp_file(zip_file, dir, entry)) when /\A(#{zip_name})\/(background)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img images_entries << entry end end images_entries.each do |image| dt.images.build(:file => get_temp_file(zip_file,dir,image)) end } dt.save } end def get_temp_file(zip_file, dir, entry) filename = File.basename(entry.to_s) temp_file = File.new(dir + '/' + filename, 'w+') temp_file.write (zip_file.read entry ).force_encoding('UTF-8') temp_file end def settings if params[:id] == "custom" @id = DesktopTheme.first.id.to_s else @id = params[:id] end dt = DesktopTheme.find(@id) if !dt.nil? dt['css'] = dt.css_default.file.url dt['background'] = dt.images.where(:name=>dt.background).first.file.url end icons = DesktopTheme::ICONS dt['icons'] = icons render :json => dt.to_json end end