class Admin::ModuleStoreController < OrbitBackendController @@store = STORE_CONFIG[:store_settings]["url"] def index @extensions = get_extensions @downloaded_extensions = get_downloaded_extension end def show @extension = get_extension(params[:id]) rescue nil end def download #get extension related values extension = get_extension(params[:id]) rescue nil extension_name = extension["key"].to_s git_repository_url = extension["git_url"] version = extension["version"] module_installed = File.read("downloaded_extensions.rb").include?(extension["key"]) if module_installed.eql?(false) @download_link = "gem '#{extension_name}', '#{version}', :git => '#{git_repository_url}'" File.open("downloaded_extensions.rb", 'a') do |file| file.puts @download_link end end Bundler.with_clean_env { `cd #{Rails.root} && bundle install && touch tmp/restart.txt` } redirect_to admin_module_store_path end def toggle_module temp_extensions=File.open("#{Rails.root}/extensions.tmp.rb", 'w') extensions = File.new("#{Rails.root}/downloaded_extensions.rb", "r") while (extension = extensions.gets) if params[:module].any? { |mod| extension.include?("gem '"+mod+"'")} @mod = ModuleApp.where(:key=>extension.split("'")[1]).first if extension.start_with?("# ") temp_extensions << extension.gsub("# ","") toggle_item(@mod , true) else temp_extensions << "# "+extension toggle_item(@mod , false) end else temp_extensions << extension end end extensions.close temp_extensions.close FileUtils.mv("#{Rails.root}/extensions.tmp.rb","#{Rails.root}/downloaded_extensions.rb") Bundler.with_clean_env { `cd #{Rails.root} && bundle install && touch tmp/restart.txt` } render :text => "true" end def remove_module temp_extensions=File.open("#{Rails.root}/extensions.tmp.rb", 'w') extensions = File.new("#{Rails.root}/downloaded_extensions.rb", "r") while (extension = extensions.gets) if extension.include?("gem '"+params[:module]+"'") @mod = ModuleApp.where(:key=>extension.split("'")[1]).first toggle_item(@mod , false) temp_extensions << "" else temp_extensions << extension end end extensions.close temp_extensions.close FileUtils.mv("#{Rails.root}/extensions.tmp.rb","#{Rails.root}/downloaded_extensions.rb") Bundler.with_clean_env { `cd #{Rails.root} && bundle install && touch tmp/restart.txt` } render :text => "true" end def restart_server render :text => "true" end protected def get_extensions extensions = JSON.parse(open("#{@@store}/api/extensions").read) exist_exts = [] ext_file = File.new("#{Rails.root}/downloaded_extensions.rb", "r") while (exist_ext = ext_file.gets) status = !exist_ext.start_with?("# ") exist_ext = exist_ext.split(',') if !extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}.blank? extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['installed']=true extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['enabled']=status extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['installed_version']=exist_ext[1].split(/[\'\"]/)[1] if extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['version'] != exist_ext[1].split(/[\'\"]/)[1] extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['updated'] = false else extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['updated'] = true end end end ext_file.close extensions end def get_extension(id) JSON.parse(open("#{@@store}/api/extensions/#{id}").read) end def get_downloaded_extension downloaded_extensions = [] extensions = File.new("#{Rails.root}/downloaded_extensions.rb", "r") while (extension = extensions.gets) status = !extension.start_with?("# ") extension = extension.split(',') downloaded_extensions << {'name' => extension[0].split(/[\'\"]/)[1], 'version' => extension[1].split(/[\'\"]/)[1], 'repo' => extension[2].split(/[\'\"]/)[1], 'status' => status} end extensions.close downloaded_extensions.to_json end def toggle_item(module_key, active) if !module_key.nil? Item.where(:module_app_id=>module_key._id).each do |item| item.is_published = active item.menu_enabled_for = {"zh_tw" => active.to_s, "en" => active.to_s} item.save end end end end