From e524127242c647806ab88c2e806619214436a563 Mon Sep 17 00:00:00 2001 From: Saurabh Bhatia Date: Wed, 2 Jul 2014 17:37:34 +0800 Subject: [PATCH] fixes for member show page --- Gemfile | 3 + .../admin/module_store_controller.rb | 149 ++++++++++++++++++ app/controllers/application_controller.rb | 9 ++ app/controllers/members_controller.rb | 4 +- app/helpers/orbit_helper.rb | 5 + app/models/site.rb | 24 ++- .../modules/journal_paper/index.html.erb | 19 +++ .../modules/journal_paper/show.html.erb | 29 ++++ app/views/admin/module_store/index.html.erb | 101 ++++++++++++ config/initializers/store.rb | 2 + config/routes.rb | 6 + config/store_config.yml | 4 + lib/orbit_app/plugin/registration.rb | 6 +- lib/store.rb | 52 ++++++ public/import_status.yml | 6 + 15 files changed, 415 insertions(+), 4 deletions(-) create mode 100644 app/templates/orbit_bootstrap/modules/journal_paper/index.html.erb create mode 100644 app/templates/orbit_bootstrap/modules/journal_paper/show.html.erb create mode 100644 config/initializers/store.rb create mode 100644 config/store_config.yml create mode 100644 lib/store.rb create mode 100644 public/import_status.yml diff --git a/Gemfile b/Gemfile index 08c23aa..d623077 100644 --- a/Gemfile +++ b/Gemfile @@ -23,6 +23,9 @@ gem 'active_model_serializers' #parser gem 'nokogiri' +#store api +gem 'httparty' + #database gem 'mongoid', github: "mongoid/mongoid", ref: 'f9e6fdb' diff --git a/app/controllers/admin/module_store_controller.rb b/app/controllers/admin/module_store_controller.rb index 10422e3..b08c4c8 100644 --- a/app/controllers/admin/module_store_controller.rb +++ b/app/controllers/admin/module_store_controller.rb @@ -3,5 +3,154 @@ class Admin::ModuleStoreController < OrbitAdminController 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 + @downloaded_extensions = get_downloaded_extension + else + @store_confirmation = true + @extensions = [] + @downloaded_extensions = get_downloaded_extension + end 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"] + 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 install` } + %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 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], 'repo' => extension[1].split(/[\'\"]/)[1], 'tag' => extension[2].split(/[\'\"]/)[1], 'status' => status} + end + extensions.close + downloaded_extensions.to_json + end + + def toggle_item(module_key, active) + if !module_key.nil? + + end + end + end \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2070561..5117dbd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -95,6 +95,15 @@ class ApplicationController < ActionController::Base end end + def site_token_present? + current_site.site_token? + end + + def store_session + api_key = STORE_CONFIG[:store_settings]["api_key"] + @store = Store.new(current_site.id.to_s, current_site.site_token,api_key) if current_site.site_token + end + private def current_user diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 9990a63..56a3b8d 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -66,7 +66,7 @@ class MembersController < ApplicationController pd = plugin_data.collect do |p| { "data_title" => p.slug_title, - "link_to_show" => OrbitHelper.url_to_show(p.to_param) + "?method=personal_plugin&plugin_name=#{plugin.app_name}" + "link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name) } end { @@ -78,7 +78,7 @@ class MembersController < ApplicationController pd = plugin_data.collect do |p| { "data_title" => p.slug_title, - "link_to_show" => OrbitHelper.url_to_show(p.to_param) + "?method=personal_plugin&plugin_name=#{plugin.app_name}" + "link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore) } end { diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 9eff2db..48d737e 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -75,6 +75,11 @@ module OrbitHelper end end + def self.url_to_plugin_show(slug,module_app) + page = Page.find_by(:module => module_app) + @url_to_plugin_show = "/#{@site_locale}#{page.url}/#{slug}" + end + def self.set_widget_item_url(widget) @url_widget_for_show = "" module_app = widget.module diff --git a/app/models/site.rb b/app/models/site.rb index b5d47af..762893b 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -30,7 +30,8 @@ class Site field :search,:type => Hash field :site_settings field :template, type: String - + field :site_token + field :store_confirmation, type: Boolean, default: false mount_uploader :default_image, ImageUploader mount_uploader :site_logo, ImageUploader @@ -40,4 +41,25 @@ class Site I18n.locale = :en title.parameterize end + + def confirm_store(site_token) + if self.site_token.eql?(site_token) + self.store_confirmation = true + self.save + end + end + + def generate_site_token + if self.site_token.nil? + self.site_token = SecureRandom.uuid.gsub('-','') + self.save + end + end + + def register_site(url,university,department,email,country) + api_key = STORE_CONFIG[:store_settings]["api_key"] + self.generate_site_token + store = Store.new(self.id.to_s,self.site_token,api_key) + store.post_client(self.id.to_s,self.site_token,self.title,url,university,department,email,country) + end end diff --git a/app/templates/orbit_bootstrap/modules/journal_paper/index.html.erb b/app/templates/orbit_bootstrap/modules/journal_paper/index.html.erb new file mode 100644 index 0000000..cc98f3f --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/journal_paper/index.html.erb @@ -0,0 +1,19 @@ +
+

+ {{widget-title}} +

+
+
+
+
+

+ {{paper_title}} +

+

{{authors}}

+ Read More » +
+
+
+
+
+{{pagination_goes_here}} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/journal_paper/show.html.erb b/app/templates/orbit_bootstrap/modules/journal_paper/show.html.erb new file mode 100644 index 0000000..84b9b1b --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/journal_paper/show.html.erb @@ -0,0 +1,29 @@ +
+

+ {{title}} +

+ +

 {{journal_title}}

+

 {{year}}

+

 {{authors}}

+

 {{isbn}}

+

 {{vol_no}}

+

 {{form_to_start}}

+

 {{form_to_end}}

+

 {{language}}

+

 {{issue_no}}

+

 {{total_pages}}

+

 {{abstract}}

+

 {{publication_date}}

+

 {{url}}

+

 {{note}}

+ + +
diff --git a/app/views/admin/module_store/index.html.erb b/app/views/admin/module_store/index.html.erb index 714d0b7..578ab71 100644 --- a/app/views/admin/module_store/index.html.erb +++ b/app/views/admin/module_store/index.html.erb @@ -228,4 +228,105 @@ diff --git a/config/initializers/store.rb b/config/initializers/store.rb new file mode 100644 index 0000000..5a7644c --- /dev/null +++ b/config/initializers/store.rb @@ -0,0 +1,2 @@ +data = File.open(File.join(Rails.root, 'config', 'store_config.yml')).read +STORE_CONFIG = YAML::load(ERB.new(data).result(binding)).symbolize_keys \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index afe2d50..3d88f90 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -203,6 +203,12 @@ Orbit::Application.routes.draw do end get 'design_list' => 'designs#design_list' get 'module_store' => 'module_store#index' + get 'module_store/show' => 'module_store#show' + get 'module_store/download' => 'module_store#download' + get 'module_store/remove_module' => 'module_store#remove_module' + get 'module_store/toggle_module' => 'module_store#toggle_module' + get 'module_store/restart_server' => 'module_store#restart_server' + get "import" => "import#index" get "import/check_url" => "import#check_url" diff --git a/config/store_config.yml b/config/store_config.yml new file mode 100644 index 0000000..e3c359d --- /dev/null +++ b/config/store_config.yml @@ -0,0 +1,4 @@ +store_settings: + url: "http://store.tp.rulingcom.com" + api_url: "http://store.tp.rulingcom.com/api" + api_key: 'Token token="2870f77e59168dbe3fbdffba466c7c8d"' \ No newline at end of file diff --git a/lib/orbit_app/plugin/registration.rb b/lib/orbit_app/plugin/registration.rb index d73ec8c..896410e 100644 --- a/lib/orbit_app/plugin/registration.rb +++ b/lib/orbit_app/plugin/registration.rb @@ -57,6 +57,7 @@ module OrbitApp @sort_number = partial[0][:sort_number] @app_name = partial[0][:app_name] @intro_app_name = partial[0][:intro_app_name] + @module_app_name = partial[0][:module_app_name] @partial_path = '' @front_partial_path = '' @admin_partial_path = '' @@ -82,6 +83,10 @@ module OrbitApp return @intro_app_name end + def module_app_name + return @module_app_name + end + def profile_partial_path return @partial_path end @@ -93,7 +98,6 @@ module OrbitApp def admin_partial_path return @admin_partial_path end - end end end diff --git a/lib/store.rb b/lib/store.rb new file mode 100644 index 0000000..0dde702 --- /dev/null +++ b/lib/store.rb @@ -0,0 +1,52 @@ +require 'httparty' +class Store + include HTTParty + + format :json + base_uri STORE_CONFIG[:store_settings]["api_url"] + + def initialize(site_id,site_token,api_key) + @options_for_get = { + headers: { + "Authorization" => api_key, + "X-SiteToken" => site_token, + "X-SiteId" => site_id, + "Content-Type" => "application/json", + 'Accept' => 'application/json' + } + } + + @options_for_client = { + headers: { + "Authorization" => api_key, + "Content-Type" => "application/json", + 'Accept' => 'application/json' + } + } + end + + def templates(options={}) + options = @options_for_get + self.class.get('/templates', options) + end + + def get_template(id) + options = @options_for_get + self.class.get("/templates/#{id}", options) + end + + def extensions(options={}) + options = @options_for_get + self.class.get('/extensions', options) + end + + def get_extension(id) + options = @options_for_get + self.class.get("/extensions/#{id}", options) + end + + def post_client(site_id,site_token,site_name,url,university,department,email,country) + options = @options_for_client.merge({ :body => {:site_name => site_name, :site_id => site_id,:url => url, :university => university, :department => department, :email => email, :country => country, :site_token => site_token}.to_json }) + self.class.post('/clients', options ) + end +end \ No newline at end of file diff --git a/public/import_status.yml b/public/import_status.yml new file mode 100644 index 0000000..82b2d7a --- /dev/null +++ b/public/import_status.yml @@ -0,0 +1,6 @@ +--- +total_images: 6 +current_status: 0 +success: true +current_album_id: '1' +current_album_name: "系統測試"