diff --git a/app/controllers/admin/template_store_controller.rb b/app/controllers/admin/template_store_controller.rb index 4a24902c..1bd5472b 100644 --- a/app/controllers/admin/template_store_controller.rb +++ b/app/controllers/admin/template_store_controller.rb @@ -1,22 +1,95 @@ +require 'net/http' +require 'uri' +require 'fileutils' +require 'zip/zip' class Admin::TemplateStoreController < OrbitBackendController @@store_domain = STORE_CONFIG[:store_settings]["url"] def index @store = @@store_domain + @design_ids = Design.all.map{|d| d.template_store_id} @templates = JSON.parse(get_templates) end def show @store = @@store_domain + @design_ids = Design.all.map{|d| d.template_store_id} @template = JSON.parse(get_template(params[:id])) rescue nil end def download_theme - render :json => {"success"=>true}.to_json + url = @@store_domain + params["url"] + url_base = url.split('/')[2] + url_path = '/'+url.split('/')[3..-1].join('/') + Net::HTTP.start(url_base) do |http| + open("public/#{params['slug']}.zip", "wb") do |file| + http.get(url_path) do |str| + file.write(str) + end + end + end + upload_package("#{params['slug']}.zip", params["id"]) + File.delete("public/#{params['slug']}.zip") + render :json => {"success"=>true,"url"=>@@store_domain + params["url"]}.to_json end protected + def upload_package(package_name,template_store_id) + + temp_file = Tempfile.new("temp_file") + original_file = File.open("#{Rails.root}/public/#{package_name}") + temp_file.write(original_file.read.force_encoding('UTF-8')) + temp_file.rewind + filename = File.basename(original_file,".zip") + unzip_design(temp_file, filename, template_store_id) + temp_file.close + + end + + def unzip_design(file, zip_name, template_store_id) + Zip::ZipFile.open(file) { |zip_file| + design = Design.new.from_json(zip_file.read("#{zip_name}/info.json")) + design.template_store_id = template_store_id + Dir.mktmpdir('f_path') { |dir| + themes_entries = [] + javascripts_entries = [] + images_entries = [] + + zip_file.entries.each do |entry| + case (path = entry.to_s) + when /\A(#{zip_name})\/(default\.css)\z/ #for default css + design.build_css_default(:file => get_temp_file(zip_file, dir, entry)) + when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css + design.build_css_reset(:file => get_temp_file(zip_file, dir, entry)) + when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html + design.build_layout(:file => get_temp_file(zip_file, dir, entry)) + when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css + themes_entries << entry + when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js + javascripts_entries << entry + when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img + images_entries << entry + end + end + + ['themes', 'javascripts', 'images'].each do |type| + eval("#{type}_entries").each do |entry| + eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry)) + end + end + } + design.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 get_template(id) uri = URI.parse("#{@@store_domain}/api/templates/#{id}") http = Net::HTTP.new(uri.host, uri.port) diff --git a/app/models/design/design.rb b/app/models/design/design.rb index 6e7a9aff..c0105a55 100644 --- a/app/models/design/design.rb +++ b/app/models/design/design.rb @@ -7,6 +7,7 @@ class Design field :intro, :type => String field :title, :type => String field :version, :type => String + field :template_store_id, :type => String mount_uploader :zip_file, AssetUploader diff --git a/app/views/admin/template_store/index.html.erb b/app/views/admin/template_store/index.html.erb index 54a01c28..3b270849 100644 --- a/app/views/admin/template_store/index.html.erb +++ b/app/views/admin/template_store/index.html.erb @@ -60,7 +60,11 @@ Free - <%= link_to "Download", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-primary download-link' %> + <% if @design_ids.include?(template["_id"]["$oid"]) %> + <%= link_to "Installed", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-success download-link', "disabled"=>"disabled", "data-name"=>template['title'], "data-slug"=>template["_slugs"][0], "data-id"=>template["_id"]["$oid"] %> + <% else %> + <%= link_to "Download", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-primary download-link', "data-name"=>template['title'], "data-slug"=>template["_slugs"][0], "data-id"=>template["_id"]["$oid"] %> + <% end %> <% end %> @@ -71,20 +75,20 @@ + diff --git a/orbitdefault.zip b/orbitdefault.zip deleted file mode 100755 index 3e12d382..00000000 Binary files a/orbitdefault.zip and /dev/null differ