Merge branch 'master' of gitlab.tp.rulingcom.com:saurabh/orbit4-5 into nccu

This commit is contained in:
Harry Bomrah 2015-04-21 17:44:39 +08:00
commit babf12c777
12 changed files with 304 additions and 45 deletions

View File

@ -1,9 +1,8 @@
class Admin::ModuleStoreController < OrbitAdminController
layout "structure"
include Admin::ModuleStoreHelper
def index
@extensions = []
@downloaded_extensions = []
# if current_site.site_token?
# if current_site.store_confirmation
# @extensions = get_extensions
@ -24,6 +23,11 @@ class Admin::ModuleStoreController < OrbitAdminController
@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
@ -95,11 +99,28 @@ class Admin::ModuleStoreController < OrbitAdminController
end
def restart
Bundler.with_clean_env { `cd #{Rails.root} && bundle install` }
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
@built_in_extensions = get_built_in_extensions
render :partial => "modules_to_update"
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
sleep 5
end
protected
def get_extensions
@ -133,20 +154,6 @@ class Admin::ModuleStoreController < OrbitAdminController
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?

View File

@ -0,0 +1,66 @@
module Admin::ModuleStoreHelper
def get_built_in_extensions
built_in_extensions = []
extensions_to_update = get_extensions_to_update
@extensions_to_update_count = extensions_to_update.count
built_in_extensions = get_extension_from_file("built_in",extensions_to_update)
built_in_extensions.concat(get_extension_from_file("downloaded",extensions_to_update))
return built_in_extensions
end
def get_extension_from_file(type,extensions_to_update)
temp = []
extensions = File.new("#{Rails.root}/#{type}_extensions.rb", "r")
while (extension = extensions.gets)
is_extension = extension.start_with?("gem")
extension = extension.split(',')
if is_extension
key = extension[0].split(/[\'\"]/)[1]
ma = ModuleApp.find_by_key(key) rescue nil
if !ma.nil?
update_available = extensions_to_update.include?(key) ? true : false
temp << {'key' => key, 'name' => ma.title, 'repo' => extension[1].split(/[\'\"]/)[1], 'tag' => (extension[2].split(/[\'\"]/)[1] rescue ""), "update_available" => update_available, "type" => type}
end
end
end
return temp
end
def get_extensions_to_update
if !File.exists?("#{Rails.root}/built_in_extensions.rb.lock") || !File.exists?("#{Rails.root}/downloaded_extensions.rb.lock")
update_extension_file("built_in")
update_extension_file("downloaded")
return []
else
update_extensions = get_update_info_for_extensions("built_in")
update_extensions.concat(get_update_info_for_extensions("downloaded"))
return update_extensions
end
end
def update_extension_file(type)
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=#{type}_extensions.rb bundle update && bundle` }
end
def get_update_info_for_extensions(type)
buffer = Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=#{type}_extensions.rb bundle outdated` }
buffer = buffer.split("\n")
if buffer.last == "Bundle up to date!"
return []
elsif buffer.first.start_with?("The git source")
update_extension_file(type)
return []
else
output = []
buffer.each do |b|
if b.start_with?(" * ")
temp = b.split(" ")
output << temp[1] if !temp[1].nil?
end
end
return output
end
end
end

View File

@ -229,7 +229,11 @@ module ApplicationHelper
doc = Nokogiri::HTML(file, nil, "UTF-8")
file.close
controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new
data = controller.send("#{params[:target_action]}") rescue nil
begin
data = controller.send("#{params[:target_action]}")# rescue nil
rescue Exception => e
write_debug_file(e,params[:target_controller],params[:target_action]) if Site::DEBUG
end
if !data.nil?
wrap_elements = doc.css("*[data-list][data-level='0']")
htmls = parsing_repeats_again(wrap_elements,data,1)
@ -261,7 +265,11 @@ module ApplicationHelper
doc = Nokogiri::HTML(file, nil, "UTF-8")
file.close
controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new
data = controller.send("#{params[:target_action]}") rescue nil
begin
data = controller.send("#{params[:target_action]}")# rescue nil
rescue Exception => e
write_debug_file(e,params[:target_controller],params[:target_action]) if Site::DEBUG
end
if data.nil?
return "<div class='well'> No content to show. </div>".html_safe
end
@ -500,4 +508,48 @@ module ApplicationHelper
target
end
def write_debug_file(e,controller_name,action_name)
url_dir_name = request.fullpath.split("?")[0]
url_dir_name = URI.decode(url_dir_name)
url_dir_name = (url_dir_name == "/" ? "home" : url_dir_name.sub("/","").gsub("/","_").gsub("-","_").gsub(" ","_"))
directory_name = "tmp/debug/#{url_dir_name}"
FileUtils.mkdir_p(directory_name) unless File.exists?(directory_name)
fn = "#{directory_name}/#{controller_name}_#{action_name}.html"
error_trace_spans = ""
e.backtrace.each do |bt|
error_trace_spans = error_trace_spans + "<span>#{bt}</span><br />"
end
con = "#{controller_name.capitalize}_controller".classify.constantize
File.open(fn, "w"){ |file|
file.puts "<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
<meta charset=UTF-8'>
<title>Debug result</title>
</head>
<body>
<h3>Error Message</h3>
<div class='error-message'>
<h2><i>#{e.message}</i></h2>
</div>
<h3>Request Details</h3>
<div class='request-details'>
<span>Url : <b>#{URI.decode(request.url)}</b></span><br />
<span>Controller : <b>#{con.to_s}</b> </span><br />
<span>Action : <b>#{action_name.capitalize}</b> </span>
</div>
<h3>Error Trace</h3>
<div class='error-trace'>
#{error_trace_spans}
</div>
<h3>Params</h3>
<div class='params'>
#{OrbitHelper.params}
</div>
</body>
</html>"
}
end
end

View File

@ -71,7 +71,11 @@ module PagesHelper
wrap_elements = doc.css("*[data-repeat]")
controller = "#{controller_name.capitalize.pluralize}_controller".classify.constantize.new
OrbitHelper.set_current_widget_module controller_name
data = controller.send("#{widget_method}") rescue nil
begin
data = controller.send("#{widget_method}") #rescue nil
rescue Exception => e
write_widget_debug_file(e,controller_name,widget_method,subpart_id)
end
if !data.nil?
wrap_elements = doc.css("*[data-list][data-level='0']")
htmls = widget_parsing_repeats_again(wrap_elements,data,1)
@ -91,5 +95,50 @@ module PagesHelper
end
end
def write_widget_debug_file(e,controller_name,action_name,sub_part)
url_dir_name = request.fullpath.split("?")[0]
url_dir_name = URI.decode(url_dir_name)
url_dir_name = (url_dir_name == "/" ? "home" : url_dir_name.sub("/","").gsub("/","_").gsub("-","_").gsub(" ","_"))
directory_name = "tmp/debug/#{url_dir_name}"
FileUtils.mkdir_p(directory_name) unless File.exists?(directory_name)
fn = "#{directory_name}/#{controller_name}_#{action_name}_#{(sub_part if !sub_part.nil?)}.html"
error_trace_spans = ""
e.backtrace.each do |bt|
error_trace_spans = error_trace_spans + "<span>#{bt}</span><br />"
end
con = "#{controller_name.capitalize.pluralize}_controller".classify.constantize
File.open(fn, "w"){ |file|
file.puts "<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
<meta charset=UTF-8'>
<title>Debug result</title>
</head>
<body>
<h3>Error Message</h3>
<div class='error-message'>
<h2><i>#{e.message}</i></h2>
</div>
<h3>Request Details</h3>
<div class='request-details'>
<span>Url : <b>#{URI.decode(request.url)}</b></span><br />
<span>Controller : <b>#{con.to_s}</b></span><br />
<span>Action : <b>#{action_name.capitalize}</b></span><br />
<span>SubPart Id : <b>#{sub_part}</b></span>
</div>
<h3>Error Trace</h3>
<div class='error-trace'>
#{error_trace_spans}
</div>
<h3>Params</h3>
<div class='params'>
#{OrbitHelper.params}
</div>
</body>
</html>"
}
end
end

View File

@ -32,8 +32,8 @@ class Page
before_create :assign_page_number
after_save :clear_cache
after_destroy :clear_cache
# after_save :clear_cache
# after_destroy :clear_cache
def clear_cache
I18n.available_locales.each do |locale|

View File

@ -3,6 +3,8 @@ class Site
include Mongoid::Timestamps
include Slug
DEBUG = false
field :title, as: :slug_title, type: String, localize: true
field :school, type: String
field :department, type: String

View File

@ -17,8 +17,8 @@ class SubPart
belongs_to :page_part
belongs_to :mobile_page_part
after_save :clear_cache
after_destroy :clear_cache
# after_save :clear_cache
# after_destroy :clear_cache
def clear_cache
Rails.cache.delete_matched( /#{self.id.to_s}/ )

View File

@ -0,0 +1,12 @@
<tr>
<td class="detail-row">
<span class="mt_title"><%= installed_module["name"] %></span>
</td>
<td class="active">
<% if installed_module["update_available"] %>
<a href="" class="update_module btn btn-primary" data-module-key="<%= installed_module["key"] %>" data-module-type="<%= installed_module["type"] %>">Update</button>
<% else %>
Up to Date
<% end %>
</td>
</tr>

View File

@ -0,0 +1,47 @@
<table class="table table-striped">
<thead>
<tr class="sort-header">
<th class="">Title</th>
<th class="">Update <%= (@extensions_to_update_count == 1 ? "(#{@extensions_to_update_count} update available)" : (@extensions_to_update_count > 1 ? "(#{@extensions_to_update_count} updates available)" : "")) %>
</tr>
</thead>
<tbody class="sort-holder" id="tbody_designs">
<%= render :partial => "installed_module", :collection => @built_in_extensions %>
</tbody>
</table>
<script type="text/javascript">
$("a.update_module").on("click",function(){
if(!$(this).hasClass("disabled")){
$(this).text("Updating").addClass("disabled");
var key = $(this).data("module-key"),
type = $(this).data("module-type")
$.ajax({
url : "/admin/module_store/update_module",
data : {"key" : key, "type" : type},
dataType : "json",
type : "post"
}).always(function(obj){
if(obj.status == 200){
update_module_table.html(obj.responseText);
}
})
}
return false;
})
$("a#update_all_modules").on("click",function(){
if(!$(this).hasClass("disabled")){
$(this).text("Updating").addClass("disabled");
$.ajax({
url : "/admin/module_store/restart",
type : "post"
}).always(function(obj){
if(obj.status == 200){
update_module_table.html(obj.responseText);
}
})
}
return false;
})
</script>

View File

@ -9,6 +9,15 @@
<%= javascript_include_tag 'lib/footable-0.1' %>
<%= javascript_include_tag 'lib/all-list' %>
<%= javascript_include_tag 'lib/retina' %>
<style type="text/css">
.loading-image-wrapper {
text-align: center;
}
.loading-image-wrapper > span {
display: block;
padding: 20px 0;
}
</style>
</head>
<%= flash[:notice] rescue nil%>
@ -39,7 +48,7 @@
<ul>
<li class="active">
<a href="#installed_modules" data-toggle="tab">
<i class="icons-download"></i><%= t(:installed_modules) %>
<i class="icon-cloud-download"></i> <%= t(:installed_modules) %>
</a>
</li>
<li>
@ -47,6 +56,11 @@
<i class="icon-shopping-cart"></i><%= t(:module_store) %>
</a>
</li>
<li>
<a href="#update_module" data-toggle="tab">
<i class="icon-download-alt"></i> <%= t(:update_modules) %>
</a>
</li>
</ul>
</div>
<div class="pannel-body tab-content">
@ -57,6 +71,12 @@
<div class="tab-pane fade" id="module_store">
<%= render :partial => "admin/store/store", :locals => {:section => "apps"} %>
</div>
<div class="tab-pane fade" id="update_module">
<div class="loading-image-wrapper">
<img src="/assets/preloader.gif" />
<span>Fetching module update info.</span>
</div>
</div>
</div>
</div>
<div class="modal-backdrop"></div>
@ -129,11 +149,6 @@
$("#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();
});
});
});
});
}
@ -153,14 +168,26 @@
$("#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();
});
});
});
});
}
var update_module_table = $("#update_module");
$('a[data-toggle="tab"]').on('shown', function (e) {
var el = $(e.target),
prev_el = $(e.relatedTarget);
if(el.attr("href") == "#update_module"){
$.ajax({
url : "/admin/module_store/modules_to_update",
type : "get",
dataType : "html"
}).done(function(data){
update_module_table.html(data);
})
}else if(prev_el.attr("href") == "#update_module"){
update_module_table.html('<div class="loading-image-wrapper"><img src="/assets/preloader.gif" /><span>Fetching module update info.</span></div>');
}
})
</script>

View File

@ -126,8 +126,6 @@
<div style="height: 55px;">
<% if @store_permissions["permission_granted"] %>
<button id="update_btn" class="btn btn-primary pull-right" style="margin: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.system_update") %></button>
<button id="module_update_btn" class="btn btn-primary pull-right" style="margin-right: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.module_update") %></button>
<% else %>
<a href="/<%= I18n.locale.to_s %>/admin/designs" class="pull-right">Please register here.</a>
<% end %>
@ -173,9 +171,6 @@
</div>
<div style="padding: 10px 0; height: 65px;">
<button id="chech_update_btn" class="btn btn-small btn-inverse pull-right"><i class="icon-refresh icon-white"></i> <%= t("update_manager_.check_update") %></button>
<% if @store_permissions["permission_granted"] %>
<button id="module_update_btn" class="btn btn-primary btn-small pull-right" style="margin-right: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.module_update") %></button>
<% end %>
</div>
</div>
</div>
@ -269,7 +264,7 @@
check_updates();
get_update_history();
$("#module_update_btn").click(check_module_updates);
// $("#module_update_btn").click(check_module_updates);
$("#chech_update_btn").click(check_updates);

View File

@ -236,10 +236,12 @@ Orbit::Application.routes.draw do
get 'design_list' => 'designs#design_list'
get 'module_store' => 'module_store#index'
get 'module_store/show' => 'module_store#show'
post 'module_store/update_module' => 'module_store#update_module'
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'
post 'module_store/restart' => 'module_store#restart'
get 'module_store/modules_to_update' => 'module_store#modules_to_update'
#store routes