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 %> + +
TitleUpdate <%= (@extensions_to_update_count == 1 ? "(#{@extensions_to_update_count} update available)" : (@extensions_to_update_count > 1 ? "(#{@extensions_to_update_count} updates available)" : "")) %> +
+ + \ 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"] %> - - <% else %> Please register here. <% end %> @@ -173,9 +171,6 @@
- <% if @store_permissions["permission_granted"] %> - - <% 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