class Admin::ModuleStoreController < OrbitAdminController layout "structure" include Admin::ModuleStoreHelper def index @extensions = [] # if current_site.site_token? # if current_site.store_confirmation # @extensions = get_extensions # @store_confirmation = true # else # @extensions = [] # @store_confirmation = false # end # else # @store_confirmation = true # @extensions = [] # @downloaded_extensions = get_downloaded_extension # end end def show @extension = get_extension(params[:id]) rescue nil end def modules_to_update @built_in_extensions = get_built_in_extensions render :partial => "modules_to_update" 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"] tag = extension["tag"] module_installed = File.read("downloaded_extensions.rb").include?(extension["key"]) if module_installed.eql?(false) @download_link = "gem '#{extension_name}', :git => '#{git_repository_url}', :tag => '#{tag}'" File.open("downloaded_extensions.rb", 'a') do |file| file.puts @download_link end end restart 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") 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") restart render text: "true" end def restart_server render text: "true" end def restart Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` } Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` } @built_in_extensions = get_built_in_extensions render :partial => "modules_to_update" %x(kill -s USR2 `cat tmp/pids/unicorn.pid`) sleep 5 end def update_module key = params["key"] type = params["type"] # if type == "built_in" # Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update #{key}` } # elsif type == "downloaded" # Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update #{key}` } # end Bundler.with_clean_env { `cd #{Rails.root} && bundle update #{key}` } render :nothing => true %x(kill -s USR2 `cat tmp/pids/unicorn.pid`) sleep 5 end protected def get_extensions extensions = store_session.extensions 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[2].split(/[\'\"]/)[1] if extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['tag'] != exist_ext[2].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) store_session.get_extension(id) end def toggle_item(module_key, active) if !module_key.nil? end end end