fixes for member show page

This commit is contained in:
Saurabh Bhatia 2014-07-02 17:37:34 +08:00
parent 2d1db840c1
commit e524127242
15 changed files with 415 additions and 4 deletions

View File

@ -23,6 +23,9 @@ gem 'active_model_serializers'
#parser
gem 'nokogiri'
#store api
gem 'httparty'
#database
gem 'mongoid', github: "mongoid/mongoid", ref: 'f9e6fdb'

View File

@ -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

View File

@ -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

View File

@ -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
{

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,19 @@
<div class="index-journal-paper">
<h3 class="index-title">
<span>{{widget-title}}</span>
</h3>
<div class="row" data-level="0" data-list="journal_papers">
<div class="index-content col-sm-6">
<div class="index-content-inner">
<section class="index-part">
<h4 class="index-content-title">
<a href="{{link_to_show}}">{{paper_title}}</a>
</h4>
<p class="index-subtitle">{{authors}}</p>
<a class="more" href="{{link_to_show}}">Read More »</a>
</section>
</div>
</div>
</div>
</div>
{{pagination_goes_here}}

View File

@ -0,0 +1,29 @@
<article class="show-journal-paper">
<h1 class="show-title">
<span>{{title}}</span>
</h1>
<p><label>Journal Title:</label>&nbsp;{{journal_title}}</p>
<p><label>Year:</label>&nbsp;{{year}}</p>
<p><label>Authors:</label>&nbsp;{{authors}}</p>
<p><label>ISBN:</label>&nbsp;{{isbn}}</p>
<p><label>Volume Number:</label>&nbsp;{{vol_no}}</p>
<p><label>Start Page:</label>&nbsp;{{form_to_start}}</p>
<p><label>End Page:</label>&nbsp;{{form_to_end}}</p>
<p><label>Language:</label>&nbsp;{{language}}</p>
<p><label>Issue No:</label>&nbsp;{{issue_no}}</p>
<p><label>Total Pages:</label>&nbsp;{{total_pages}}</p>
<p><label>Abstract:</label>&nbsp;{{abstract}}</p>
<p><label>Publication Date</label>&nbsp;{{publication_date}}</p>
<p><label>URL:</label>&nbsp;{{url}}</p>
<p><label>Note:</label>&nbsp;{{note}}</p>
<ul class="post-related list-unstyled">
<li class="post-related-files">
<i class="fa fa-fw fa-paperclip"></i>
<div class="post-related-flises-list" data-list="journal_paper_files" data-level="0">
<a href="{{file_url}}">{{file_title}}</a>
</div>
</li>
</ul>
</article>

View File

@ -228,4 +228,105 @@
<div class="modal-backdrop"></div>
<script type="text/javascript">
var toggle_modules = new Array();
var extensions = <%= @extensions.to_json.to_s.html_safe %>;
var module_to_delete;
$.each(extensions,function(){
var module_key = this['key'];
var module_title = this['title'];
if(typeof this['installed']=='undefined') return;
if(this['updated']==false) console.log(this['key']);
var checked = "";
if(this['enabled']==true) checked="checked='checked'";
$("#extensions_table").append("<tr><td width='15%'><i class='icons-"+this['key']+" icon-3x'></i><br/>"+this['title']+"</td><td width='40%'>Version<br/>v"+this['installed_version']+"</td><td><%= t(:active) %><br/><input type='checkbox' class='toggle-check set-sidebar-state' data-disabled='true' "+checked+" onclick='toggle_module(\""+this['key']+"\");'></td><td>"+
"<button id='delete_"+this['key']+"' class='btn btn-small btn-danger'><i class='icon-trash'></i> <%= t(:delete_) %></button></td></tr>");
$("#delete_"+this['key']).click(function(){
module_to_delete = module_key;
$("#module_icon").html("<i class='icons-"+module_key+" icon-3x'></i>");
$("#module_title").html(module_title);
$(".modal-backdrop").fadeIn(300,function(){
$("#delete_confirm_wrap").fadeIn(300);
});
});
});
$("#cancel_btn").click(function(){
$("#delete_confirm_wrap").fadeOut(200,function(){
$(".modal-backdrop").fadeOut(100);
});
});
$("#delete_module_btn").click(function(){
$("#delete_confirm_wrap").fadeOut();
remove_module(module_to_delete);
});
function toggle_module(module){
if((idx = $.inArray(module, toggle_modules))>=0){
toggle_modules.splice(idx, 1);
}else{
toggle_modules.push(module);
}
if(toggle_modules.length>0){
$("#apply_change_btn").show();
}else{
$("#apply_change_btn").hide();
}
}
function apply_change(){
$(document).scrollTop(0);
$("#module_msg_title").html("<%= t(:applying_change) %>");
$("#module_msg_content").html("<%= t(:please_wait) %>");
$(".modal-backdrop").fadeIn(300,function(){
$("#alert_wrap").fadeIn(300);
$.get("<%= admin_module_store_toggle_module_path%>?"+$.param({'module':toggle_modules}),function(data){
toggle_modules = new Array();
$("#apply_change_btn").hide();
$("#module_msg_title").html("<%= t(:change_applied) %>");
$("#module_msg_content").html("<%= t("update_manager_.restart_server") %>");
$.get("<%= admin_module_store_restart_server_path%>",function(){
$("#alert_wrap").delay(2000).fadeOut(300,function(){
$(".modal-backdrop").fadeOut();
});
});
});
});
}
function remove_module(mod_key){
$(document).scrollTop(0);
$("#module_msg_title").html("<%= t(:applying_change) %>");
$("#module_msg_content").html("<%= t(:please_wait) %>");
$(".modal-backdrop").fadeIn(300,function(){
$("#alert_wrap").fadeIn(300);
$.get("<%= admin_module_store_remove_module_path%>?module="+mod_key,function(data){
toggle_modules = new Array();
$("#apply_change_btn").hide();
$("#module_msg_title").html("<%= t(:change_applied) %>");
$("#module_msg_content").html("<%= t("update_manager_.restart_server") %>");
$.get("<%= admin_module_store_restart_server_path%>",function(){
$("#alert_wrap").delay(2000).fadeOut(300,function(){
$(".modal-backdrop").fadeOut();
location.reload();
});
});
});
});
}
</script>

View File

@ -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

View File

@ -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"

4
config/store_config.yml Normal file
View File

@ -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"'

View File

@ -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

52
lib/store.rb Normal file
View File

@ -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

6
public/import_status.yml Normal file
View File

@ -0,0 +1,6 @@
---
total_images: 6
current_status: 0
success: true
current_album_id: '1'
current_album_name: "系統測試"