From 71ea2eb2dd5f7cc2e5b8e64eb7114a71e558f11b Mon Sep 17 00:00:00 2001 From: JiangRu Date: Fri, 26 Dec 2014 10:26:40 +0800 Subject: [PATCH 1/4] fix menu tag --- app/controllers/pages_controller.rb | 46 +++++++++++++---------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 48ef10f..5cfca10 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -11,7 +11,7 @@ class PagesController < ApplicationController before_filter :set_edit_mode def index - @pages = Page.all + @pages = Page.all # render json: @pages end @@ -75,26 +75,13 @@ class PagesController < ApplicationController end params[:url] = page.url categories = [] - if page.module == "member" - if page.categories.first == "all" - categories = ["all"] - else - page.categories.each do |c| - category = Role.find(c) rescue nil - if !category.nil? && !category.disabled - categories << c - end - end + page.categories.each do |c| + category = Category.find(c) rescue nil + if !category.nil? && !category.disable + categories << c end - else - page.categories.each do |c| - category = Category.find(c) rescue nil - if !category.nil? && !category.disable - categories << c - end - end - categories = ["all"] if categories.blank? end + categories = ["all"] if categories.blank? @manifest = @key OrbitHelper.set_params params,current_user OrbitHelper.set_site_locale locale @@ -190,30 +177,38 @@ class PagesController < ApplicationController "id" => cat.id.to_s } end + tags = module_app.tags.collect do |t| + { + "name" => t.name, + "id" => t.id.to_s + } + end else categories = [] + tags = [] end end roles = roles.nil? ? [] : roles categories = categories.nil? ? [] : categories + tags = tags.nil? ? [] : tags if module_app.data_count.nil? - render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}, "locale" => I18n.locale.to_s}.to_json + render :json => {"categories" => categories, "tags" => tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}, "locale" => I18n.locale.to_s}.to_json else - render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}, "locale" => I18n.locale.to_s}.to_json + render :json => {"categories" => categories, "tags" => tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}, "locale" => I18n.locale.to_s}.to_json end end def new - @page = Page.new( + @page = Page.new( :enabled_for_mobile=>true, :menu_enabled_for=>["en", "zh_tw"], :enabled_for=>["en", "zh_tw"], :enabled_for_sitemap=>["en", "zh_tw"] ) - @pages = Page.where(:page_id.ne => "" , :page_id.exists => true) - @modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc') + @pages = Page.where(:page_id.ne => "" , :page_id.exists => true) + @modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc') end @@ -264,7 +259,7 @@ class PagesController < ApplicationController end end - private + private def get_layouts(module_app) layout_types = [] @@ -436,6 +431,7 @@ class PagesController < ApplicationController p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, :member_sort_position, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: valid_locales, external_url_translations: valid_locales) p["role_status"] = p["role_status"] || [] p["categories"] = p["categories"] || [] + p["tags"] = p["tags"] || [] p["enabled_for"] = p["enabled_for"] || [] p["menu_enabled_for"] = p["menu_enabled_for"] || [] p["enabled_for_sitemap"] = p["enabled_for_sitemap"] || [] From 207fc9c0f83bdd8903b1b348630f4a198bd0844e Mon Sep 17 00:00:00 2001 From: JiangRu Date: Fri, 26 Dec 2014 16:20:47 +0800 Subject: [PATCH 2/4] fix member plugin intro or complete list & fix journal all author --- app/controllers/admin/import_controller.rb | 6 ++- app/controllers/members_controller.rb | 46 ++++++++++++++-------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index e427eca..563e3a9 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -1040,7 +1040,11 @@ class Admin::ImportController < OrbitAdminController :paper_title_translations => { "en" => rss2_journal["paper_title"]["en"], - "zh_tw" => rss2_journal["paper_title"]["zh-tw"]} + "zh_tw" => rss2_journal["paper_title"]["zh-tw"]}, + + :authors_translations => { + "en" => rss2_journal["author"], + "zh_tw" => rss2_journal["author"]} } journal = JournalPaper.where(:rss2_id => rss2_journal["rss_id"]).first diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 13cb49d..aba6008 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -139,29 +139,44 @@ class MembersController < ApplicationController plugins = OrbitApp::Plugin::Registration.all rescue nil plugin_list = plugins.collect.with_index do |plugin, idx| intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil - if intro.nil? or intro.complete_list - plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil - pd = plugin_data.collect do |p| - slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title - { - "data_title" => slug_title, - "link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore) - } + if !intro.blank? + if !intro.complete_list.blank? + plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil + pd = plugin_data.collect do |p| + slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title + { + "data_title" => slug_title, + "link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore) + } + end end - elsif intro.brief_intro == true - pd = [] - pd << {"data_title" => intro.text.html_safe} - end - { + if !intro.brief_intro.blank? + pdi = [] + pdi << {"data_intro_title" => intro.text.html_safe} + end + + if intro.complete_list.blank? + complete_display = "hide" + end + + if intro.brief_intro.blank? + brief_display = "hide" + end + end + + { "plugin_data" => pd, + "plugin_data_intro" => pdi, + "complete_display" => complete_display, + "brief_display" => brief_display, "plugin_name" => plugin.module_app_name.underscore, "plugin_title" => t('module_name.'+plugin.module_app_name.underscore), "plugin_class" => idx==0 ? "active" : "" - } + } end - plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].blank?} + plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].blank? and plugin['plugin_data_intro'].blank?} { "plugins" => plugin_list, "profile_data" => profile_data, @@ -175,7 +190,6 @@ class MembersController < ApplicationController def member_data(member, fields_to_show) profile_data = [] fields_to_show.each do |field| - # debugger case field['type'] when 'profile' field_data = member.get_attribute_data(field) rescue {} From aac913514959b5685f8473d9428a5bf37bbe51e9 Mon Sep 17 00:00:00 2001 From: JiangRu Date: Fri, 26 Dec 2014 16:23:51 +0800 Subject: [PATCH 3/4] member plugin front page show --- app/templates/orbit_bootstrap/modules/member/show.html.erb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/templates/orbit_bootstrap/modules/member/show.html.erb b/app/templates/orbit_bootstrap/modules/member/show.html.erb index df04c1f..62f7a3b 100644 --- a/app/templates/orbit_bootstrap/modules/member/show.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/show.html.erb @@ -19,8 +19,11 @@
+ + + - +
{{data_intro_title}}
{{data_title}}
{{data_title}}
From 4575fce2a98af927c52d3a71ae255dd5e219338f Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Fri, 26 Dec 2014 16:55:28 +0800 Subject: [PATCH 4/4] counter added and also some changes for store --- Gemfile | 2 +- app/assets/javascripts/validator.js | 57 +++++++++++-------- app/controllers/admin/sites_controller.rb | 4 +- app/controllers/store_api_controller.rb | 48 ++++++++++++++++ app/helpers/application_helper.rb | 2 + .../orbit_bootstrap/home/footer.html.erb | 1 + config/routes.rb | 1 + 7 files changed, 88 insertions(+), 27 deletions(-) diff --git a/Gemfile b/Gemfile index fd3868a..dda513e 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem 'mongoid', github: "mongoid/mongoid" gem "mini_magick", "3.5.0" gem 'carrierwave' gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid' - +gem 'zip-zip' gem 'kaminari' gem "impressionist" gem "chartkick" diff --git a/app/assets/javascripts/validator.js b/app/assets/javascripts/validator.js index 847a6d4..89c653a 100644 --- a/app/assets/javascripts/validator.js +++ b/app/assets/javascripts/validator.js @@ -25,7 +25,10 @@ var FormValidator = function(form){ nospace : function(value){ return (/\s/.test(value) ? false : true); }, - email : function(value){ + lowercase : function(value){ + return (value == value.toLowerCase() ? true : false); + }, + email : function(){ var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(value); } @@ -40,35 +43,39 @@ var FormValidator = function(form){ var _attachSubmitHandler = function(){ fv.form.on("submit",function(){ - failed_elements = []; - $.each(elements_data,function(key,element){ - var validators = element.validators, - messages = element.messages, - el = fv.form.find("#" + key); - for(i = 0; i < validators.length; i++){ - var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("
")); - if(typeof fv.validate_functions[validators[i]] == "function"){ - if(!fv.validate_functions[validators[i]](el.val(),el)){ - error_span.text(messages[i]); - el.after(error_span); - failed_elements.push(el); - break; - }else{ - error_span.remove(); - } + return fv.isFormValidated(); + }) + } + + this.isFormValidated = function(){ + failed_elements = []; + $.each(elements_data,function(key,element){ + var validators = element.validators, + messages = element.messages, + el = fv.form.find("#" + key); + for(i = 0; i < validators.length; i++){ + var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("
")); + if(typeof fv.validate_functions[validators[i]] == "function"){ + if(!fv.validate_functions[validators[i]](el.val(),el)){ + error_span.text(messages[i]); + el.after(error_span); + failed_elements.push(el); + break; }else{ - console.info("Not validating for " + validators[i] + ". Skipping."); + error_span.remove(); } + }else{ + console.info("Not validating for " + validators[i] + ". Skipping."); } - }) - if(failed_elements.length){ - var offset = failed_elements[0].offset().top - fv.form.offset().top + fv.form.scrollTop(); - fv.form.parent().animate({scrollTop:offset-50}, '300', 'swing'); - return false; - }else{ - return true; } }) + if(failed_elements.length){ + var offset = failed_elements[0].offset().top - fv.form.offset().top + fv.form.scrollTop(); + fv.form.parent().animate({scrollTop:offset-50}, '300', 'swing'); + return false; + }else{ + return true; + } } var _putFieldsValidatorAndMessage = function(){ diff --git a/app/controllers/admin/sites_controller.rb b/app/controllers/admin/sites_controller.rb index 87175db..eb9c299 100644 --- a/app/controllers/admin/sites_controller.rb +++ b/app/controllers/admin/sites_controller.rb @@ -106,7 +106,9 @@ class Admin::SitesController < OrbitAdminController else result = "success" # Bundler.with_clean_env { `cd #{Rails.root} && bundle update` } - 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=built_in_extensions.rb bundle update && bundle` } + Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` } + end render :text => result diff --git a/app/controllers/store_api_controller.rb b/app/controllers/store_api_controller.rb index 50eb645..b526e54 100644 --- a/app/controllers/store_api_controller.rb +++ b/app/controllers/store_api_controller.rb @@ -1,3 +1,6 @@ +require "net/http" +require 'open-uri' +require 'zip/zip' class StoreApiController < ApplicationController def confirmation site_token = params[:site_token] @@ -11,4 +14,49 @@ class StoreApiController < ApplicationController render :json => {"success" => false}.to_json end end + + def install_module + file = File.join(Rails.root,"downloaded_extensions.rb") + g = "gem '#{params[:module_key]}', git: '#{params[:git_path]}'" + File.open(file,"a+") { |f| f.puts(g) } + if !directory_exists?(File.join(Rails.root,"app","templates","#{Site.first.template}","modules","#{params[:module_key]}")) + download_template(params[:template],params[:template_filename]) + end + bundle_install + render :json => {"success" => true} .to_json + end + + private + def bundle_install + Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` } + %x(kill -s USR2 `cat tmp/pids/unicorn.pid`) + sleep 5 + end + + def download_template(url,name) + dir = File.join(Rails.root,"public","template_cache") + destination = File.join(Rails.root,"app","templates","#{Site.first.template}","modules") + if !directory_exists?(dir) + Dir.mkdir dir + end + zipfile = File.join(Rails.root, "public" , "template_cache", name) + open(zipfile, 'wb') do |fo| + fo.print open(url).read + end + unzip_file(zipfile,destination) + end + + def directory_exists?(directory) + File.directory?(directory) + end + + def unzip_file (file, destination) + Zip::ZipFile.open(file) { |zip_file| + zip_file.each { |f| + f_path=File.join(destination, f.name) + FileUtils.mkdir_p(File.dirname(f_path)) + zip_file.extract(f, f_path) unless File.exist?(f_path) + } + } + end end \ No newline at end of file diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 624d2f5..7d1f857 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -64,6 +64,8 @@ module ApplicationHelper end site_footer = site_footer.nil? ? "" : site_footer html = html.gsub("{{footer-data}}",site_footer) + counter = Page.root.view_count.to_s rescue "" + html = html.gsub("{{site-counter}}",counter) html.html_safe end diff --git a/app/templates/orbit_bootstrap/home/footer.html.erb b/app/templates/orbit_bootstrap/home/footer.html.erb index 76aa7cc..110eb8f 100644 --- a/app/templates/orbit_bootstrap/home/footer.html.erb +++ b/app/templates/orbit_bootstrap/home/footer.html.erb @@ -1,5 +1,6 @@ \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index cd62b5e..2da0372 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,6 +27,7 @@ Orbit::Application.routes.draw do get "/module/:name" => "home#index" get "/module/:name/show" => "home#show" post "/store/confirmation" => "store_api#confirmation" + post "/store/install_module" => "store_api#install_module" # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes".