diff --git a/app/controllers/admin/module_store_controller.rb b/app/controllers/admin/module_store_controller.rb
index 7385bbd..fbf4ba3 100644
--- a/app/controllers/admin/module_store_controller.rb
+++ b/app/controllers/admin/module_store_controller.rb
@@ -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,21 +154,7 @@ 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?
diff --git a/app/helpers/admin/module_store_helper.rb b/app/helpers/admin/module_store_helper.rb
new file mode 100644
index 0000000..6f573da
--- /dev/null
+++ b/app/helpers/admin/module_store_helper.rb
@@ -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
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index f05df9b..b1dd7f6 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -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 "
No content to show.
".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 + "#{bt} "
+ end
+ con = "#{controller_name.capitalize}_controller".classify.constantize
+ File.open(fn, "w"){ |file|
+ file.puts "
+
+
+
+ Debug result
+
+
+ Error Message
+
+
#{e.message}
+
+ Request Details
+
+ Url : #{URI.decode(request.url)}
+ Controller : #{con.to_s}
+ Action : #{action_name.capitalize}
+
+ Error Trace
+
+ #{error_trace_spans}
+
+ Params
+
+ #{OrbitHelper.params}
+
+
+ "
+
+ }
+ end
+
end
diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb
index 7403cda..0c561ae 100644
--- a/app/helpers/pages_helper.rb
+++ b/app/helpers/pages_helper.rb
@@ -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 + "#{bt} "
+ end
+ con = "#{controller_name.capitalize.pluralize}_controller".classify.constantize
+ File.open(fn, "w"){ |file|
+ file.puts "
+
+
+
+ Debug result
+
+
+ Error Message
+
+
#{e.message}
+
+ Request Details
+
+ Url : #{URI.decode(request.url)}
+ Controller : #{con.to_s}
+ Action : #{action_name.capitalize}
+ SubPart Id : #{sub_part}
+
+ Error Trace
+
+ #{error_trace_spans}
+
+ Params
+
+ #{OrbitHelper.params}
+
+
+ "
+
+ }
+ end
+
end
diff --git a/app/models/page.rb b/app/models/page.rb
index aeea7fe..0f3d801 100644
--- a/app/models/page.rb
+++ b/app/models/page.rb
@@ -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|
diff --git a/app/models/site.rb b/app/models/site.rb
index eda2909..ed4f3c7 100644
--- a/app/models/site.rb
+++ b/app/models/site.rb
@@ -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
diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb
index c2dd336..ff9f9dd 100644
--- a/app/models/sub_part.rb
+++ b/app/models/sub_part.rb
@@ -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}/ )
diff --git a/app/views/admin/module_store/_installed_module.html.erb b/app/views/admin/module_store/_installed_module.html.erb
new file mode 100644
index 0000000..504bc73
--- /dev/null
+++ b/app/views/admin/module_store/_installed_module.html.erb
@@ -0,0 +1,12 @@
+
+
+ <%= installed_module["name"] %>
+
+
+ <% if installed_module["update_available"] %>
+ " data-module-type="<%= installed_module["type"] %>">Update
+ <% else %>
+ Up to Date
+ <% end %>
+
+
\ No newline at end of file
diff --git a/app/views/admin/module_store/_modules_to_update.html.erb b/app/views/admin/module_store/_modules_to_update.html.erb
new file mode 100644
index 0000000..ab3f372
--- /dev/null
+++ b/app/views/admin/module_store/_modules_to_update.html.erb
@@ -0,0 +1,47 @@
+
+
+
+
+
+ <%= render :partial => "installed_module", :collection => @built_in_extensions %>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/module_store/index.html.erb b/app/views/admin/module_store/index.html.erb
index a053f70..d0d8b6d 100644
--- a/app/views/admin/module_store/index.html.erb
+++ b/app/views/admin/module_store/index.html.erb
@@ -9,6 +9,15 @@
<%= javascript_include_tag 'lib/footable-0.1' %>
<%= javascript_include_tag 'lib/all-list' %>
<%= javascript_include_tag 'lib/retina' %>
+
<%= flash[:notice] rescue nil%>
@@ -39,7 +48,7 @@
@@ -57,6 +71,12 @@
<%= render :partial => "admin/store/store", :locals => {:section => "apps"} %>
+
+
+
+
Fetching module update info.
+
+
@@ -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('Fetching module update info. ');
+ }
+})
+
diff --git a/app/views/admin/sites/update_manager.erb b/app/views/admin/sites/update_manager.erb
index a486f6d..678c441 100644
--- a/app/views/admin/sites/update_manager.erb
+++ b/app/views/admin/sites/update_manager.erb
@@ -126,8 +126,6 @@
<% if @store_permissions["permission_granted"] %>
<%= t("update_manager_.system_update") %>
-
-
<%= t("update_manager_.module_update") %>
<% else %>
Please register here.
<% end %>
@@ -173,9 +171,6 @@
<%= t("update_manager_.check_update") %>
- <% if @store_permissions["permission_granted"] %>
- <%= t("update_manager_.module_update") %>
- <% end %>
@@ -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);
diff --git a/config/routes.rb b/config/routes.rb
index 0a197dd..22ef598 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -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