Add check gem installed.
Add bundle install after generating plugin.
This commit is contained in:
parent
998ffa0a8a
commit
256fd5784b
|
@ -1,7 +1,7 @@
|
|||
class Admin::PersonalPluginFieldsController < OrbitAdminController
|
||||
require 'fileutils'
|
||||
include Admin::PersonalPluginFieldsHelper
|
||||
before_action :set_personal_plugin_field, only: [:show, :edit , :update, :destroy, :fields_setting, :update_fields_setting,:generate_plugin]
|
||||
before_action :set_personal_plugin_field, only: [:show, :edit , :update, :destroy, :fields_setting, :update_fields_setting,:generate_plugin]
|
||||
|
||||
def index
|
||||
@personal_plugin_fields = PersonalPluginField.order_by(:created_at=>'desc').page(params[:page]).per(10)
|
||||
|
@ -28,7 +28,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
end
|
||||
def create
|
||||
personal_plugin_field = PersonalPluginField.create(personal_plugin_field_params)
|
||||
redirect_to params[:referer_url]
|
||||
redirect_to admin_personal_plugin_fields_path
|
||||
end
|
||||
|
||||
def edit
|
||||
|
@ -42,7 +42,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
def update
|
||||
@personal_plugin_field.update_attributes(personal_plugin_field_params)
|
||||
@personal_plugin_field.save
|
||||
redirect_to params[:referer_url]
|
||||
redirect_to admin_personal_plugin_fields_path
|
||||
end
|
||||
def fields_setting
|
||||
end
|
||||
|
@ -131,6 +131,24 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
"<%= #{plugin_template}.#{field_name} %>"
|
||||
end
|
||||
end
|
||||
backend_profile_fields = @personal_plugin_field.backend_fields["profile"] rescue []
|
||||
backend_profile_fields_contents = backend_profile_fields.map do |field_name|
|
||||
if field_name == slug_title
|
||||
"\r\n <%= link_to #{plugin_template}.#{field_name}, page_for_#{plugin_template}(#{plugin_template}), target: \"blank\" %>\r\n" +
|
||||
" <div class=\"quick-edit\">\r\n"+
|
||||
" <ul class=\"nav nav-pills hide\">\r\n"+
|
||||
" <li><%= link_to t('edit'), edit_admin_#{plugin_template}_path(#{plugin_template},:page => params[:page]) %></li>\r\n"+
|
||||
" <li><%= link_to t(:delete_), admin_#{plugin_template}_path(id: #{plugin_template}.id, :page => params[:page]), method: :delete, data: { confirm: 'Are you sure?' } %></li>\r\n"+
|
||||
" </ul>\r\n"+
|
||||
" </div>\r\n "
|
||||
elsif field_name.include?(".")
|
||||
"<%= #{plugin_template}.#{field_name} rescue \"\" %>"
|
||||
elsif fields.include?(field_name) || plugin_template_related_members.include?(field_name) || field_name == "member_profile" #file or link or member
|
||||
"<%= #{plugin_template}.display_field(\"#{field_name}\").html_safe rescue \"\" %>"
|
||||
else
|
||||
"<%= #{plugin_template}.#{field_name} %>"
|
||||
end
|
||||
end
|
||||
col_name_to_show = @personal_plugin_field.frontend_fields["member_show"] rescue []
|
||||
col_name_to_show_in_show_page = @personal_plugin_field.frontend_fields["show"] rescue []
|
||||
col_name_to_show_in_index_page = @personal_plugin_field.frontend_fields["index"] rescue []
|
||||
|
@ -160,8 +178,6 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
related_locale_fields_input_fields << f3
|
||||
related_none_locale_fields_input_fields << f4
|
||||
end
|
||||
backend_profile_fields = backend_index_fields
|
||||
backend_profile_fields_contents = backend_index_fields_contents
|
||||
datetime_field_types_hash = {"year_month"=>"%Y/%m","date"=>"%Y/%m/%d","time"=>"%H:%M","date_time"=>"%Y/%m/%d %H:%M"}
|
||||
datetime_fields = primary_modal_fields.select{|field_value| datetime_field_types_hash.keys.include?(field_value[:field_type])}.map{|field_value|
|
||||
[field_value[:field_name],datetime_field_types_hash[field_value[:field_type]]]
|
||||
|
@ -292,7 +308,9 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
#end
|
||||
copy_templates("#{cp_template_dir_path}modules/#{@personal_plugin_field.module_name}/")
|
||||
#render :html => @logs#@match_pattern#@logs.join("<br>").html_safe#@match_pattern
|
||||
@personal_plugin_field.update(:log_text=>"")
|
||||
@personal_plugin_field.update(:log_text=>"")
|
||||
add_plugin("downloaded_extensions.rb",@personal_plugin_field.module_name)
|
||||
bundle_install
|
||||
render :json => {:success=>true,:url=>"/admin/#{plugin_template.pluralize}/",:name=>@personal_plugin_field.title}
|
||||
rescue => e
|
||||
@match_pattern = {"parse_again_start"=>"","parse_again_end"=>"","col_name_translate_yaml"=>""}
|
||||
|
@ -550,6 +568,55 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
can_install = (PersonalPluginField.find(params[:id]).module_name == params[:plugin_name] rescue false) if !can_install
|
||||
render :json => {:can_install => can_install }
|
||||
end
|
||||
def add_plugin(extention_file,plugin_name)
|
||||
txt = File.read(extention_file) rescue nil
|
||||
if txt.nil?
|
||||
File.open(extention_file,'w+'){|f| f.write("")}
|
||||
txt = ""
|
||||
end
|
||||
txt_scan = txt.scan(/^[\n]*gem\s*["']#{plugin_name}["'].*\n/)
|
||||
if txt_scan.count != 1
|
||||
delete_plugin(extention_file,plugin_name)
|
||||
txt = File.read(extention_file) rescue ""
|
||||
txt = txt + "\r\ngem \"#{plugin_name}\", path: \"#{Rails.root}/tmp/#{plugin_name}\"\r\n"
|
||||
File.open(extention_file,'w+') do |f|
|
||||
f.write(txt)
|
||||
end
|
||||
end
|
||||
end
|
||||
def delete_plugin(extention_file,plugin_name)
|
||||
txt = File.read(extention_file) rescue nil
|
||||
return if txt.nil?
|
||||
txt_change = txt.gsub(/^[\n]*gem\s*["']#{plugin_name}["'].*\n/,'')
|
||||
if txt_change != txt
|
||||
File.open(extention_file,'w+') do |f|
|
||||
f.write(txt_change)
|
||||
end
|
||||
end
|
||||
end
|
||||
def check_modal_name
|
||||
primary_modal_names = PersonalPluginField.where(:id.ne=>params[:id]).pluck(:primary_modal_name)
|
||||
related_modal_names = PersonalPluginField.where(:id.ne=>params[:id]).pluck(:related_modal_name).flatten.uniq
|
||||
other_modal_names = primary_modal_names + related_modal_names
|
||||
personal_plugin_field = PersonalPluginField.where(:id=>params[:id]).first
|
||||
all_modal_names = PersonalPluginField.get_modal_names_cache
|
||||
if personal_plugin_field.present?
|
||||
except_modals = Dir.glob("tmp/#{personal_plugin_field.module_name}/app/models/*.rb").map{|f|
|
||||
fn = File.basename(f)
|
||||
fn.slice(0,fn.length - 3)
|
||||
}
|
||||
all_modal_names = all_modal_names - except_modals
|
||||
end
|
||||
all_modal_names = all_modal_names + other_modal_names
|
||||
all_modal_names = all_modal_names.uniq
|
||||
self_modal_names = params[:modal_names]
|
||||
invalid_modal_names = self_modal_names.select{|n| all_modal_names.include?(n)}
|
||||
if invalid_modal_names.count != 0
|
||||
render :json => {:success=>false,:invalid_modal_names=>invalid_modal_names}
|
||||
else
|
||||
render :json => {:success=>true}
|
||||
end
|
||||
end
|
||||
private
|
||||
def personal_plugin_field_params
|
||||
personal_plugin_field_params = params.require(:personal_plugin_field).permit! rescue {}
|
||||
|
@ -571,6 +638,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
|
||||
|
||||
def set_personal_plugin_field
|
||||
PersonalPluginField.get_modal_names_cache
|
||||
path = request.path.split('/')
|
||||
if path.last.include? '-'
|
||||
uid = path[-1].split("-").last
|
||||
|
@ -581,4 +649,9 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController
|
|||
end
|
||||
@personal_plugin_field = PersonalPluginField.find_by(:uid => uid) rescue PersonalPluginField.find(params[:id] || params[:personal_plugin_field_id])
|
||||
end
|
||||
def bundle_install
|
||||
Bundler.with_clean_env { system("cd #{Rails.root} && bundle install") }
|
||||
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||
sleep 2
|
||||
end
|
||||
end
|
|
@ -14,7 +14,22 @@ class PersonalPluginField
|
|||
field :frontend_fields, :type => Hash, :default => {}
|
||||
field :log_text, :type => String, :default => ""
|
||||
field :fields_order, :type => Hash, :default => {}
|
||||
before_save :check_plugin_exist
|
||||
field :copy_id
|
||||
before_save :change_extensions,:check_modal_name
|
||||
after_destroy do
|
||||
delete_plugin("downloaded_extensions.rb",self.module_name)
|
||||
restart_server
|
||||
end
|
||||
before_create do
|
||||
if self.copy_id
|
||||
copy_item = self.class.find(copy_id) rescue nil
|
||||
if !copy_item.nil?
|
||||
self.backend_fields = copy_item.backend_fields
|
||||
self.frontend_fields = copy_item.frontend_fields
|
||||
self.fields_order = copy_item.fields_order
|
||||
end
|
||||
end
|
||||
end
|
||||
def get_all_gem_plugins
|
||||
extention_files = ["downloaded_extensions.rb","built_in_extensions.rb"]
|
||||
gem_plugins = extention_files.map{|f| (File.read(f).scan(/\n\s*gem\s*["'](.*)["']\s*,/).flatten rescue [])}.flatten
|
||||
|
@ -25,4 +40,57 @@ class PersonalPluginField
|
|||
can_install = (self.class.where(:module_name=>self.module_name,:id.ne=>self.id).count == 0 rescue false) if !can_install
|
||||
return can_install
|
||||
end
|
||||
def change_extensions
|
||||
if !check_plugin_exist
|
||||
return false
|
||||
else
|
||||
extention_file = "downloaded_extensions.rb"
|
||||
if self.module_name_changed?
|
||||
if self.module_name_was.present?
|
||||
delete_plugin(extention_file,module_name_was)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
def delete_plugin(extention_file,plugin_name)
|
||||
txt = File.read(extention_file) rescue nil
|
||||
return if txt.nil?
|
||||
txt_change = txt.gsub(/^[\n]*gem\s*["']#{plugin_name}["'].*\n/,'')
|
||||
if txt_change != txt
|
||||
File.open(extention_file,'w+') do |f|
|
||||
f.write(txt_change)
|
||||
end
|
||||
end
|
||||
end
|
||||
def check_modal_name
|
||||
primary_modal_names = self.class.where(:id.ne=>self.id).pluck(:primary_modal_name)
|
||||
related_modal_names = self.class.where(:id.ne=>self.id).pluck(:related_modal_name).flatten.uniq
|
||||
other_modal_names = primary_modal_names + related_modal_names
|
||||
all_modal_names = self.class.get_modal_names_cache
|
||||
except_modals = Dir.glob("tmp/#{self.module_name}/app/models/*.rb").map{|f|
|
||||
fn = File.basename(f)
|
||||
fn.slice(0,fn.length - 3)
|
||||
}
|
||||
all_modal_names = all_modal_names - except_modals
|
||||
all_modal_names = all_modal_names + other_modal_names
|
||||
all_modal_names = all_modal_names.uniq
|
||||
self_modal_names = ([self.primary_modal_name]+self.related_modal_name).flatten
|
||||
if self_modal_names.select{|n| all_modal_names.include?(n)}.count != 0
|
||||
return false
|
||||
end
|
||||
end
|
||||
def self.get_modal_names
|
||||
name_routes = Rails.application.routes.named_routes.map{|k,v| k}.select{|s| s.to_s[0..4] == "admin"}.map{|s| s.to_s.split('admin_').last}
|
||||
modal_names = name_routes.map{|n| n.classify}.select{|n| (n.constantize rescue nil)}
|
||||
modal_names = modal_names.map{|n| n.constantize}.select{|n| n.class == Class }.uniq
|
||||
@@modal_names = modal_names.map{|n| n.to_s.underscore}
|
||||
end
|
||||
def self.get_modal_names_cache
|
||||
@@modal_names ||= get_modal_names
|
||||
end
|
||||
def restart_server
|
||||
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||
sleep 2
|
||||
end
|
||||
end
|
||||
|
|
|
@ -239,7 +239,26 @@
|
|||
$.post("<%=check_plugin_exist_admin_personal_plugin_field_path%>",{plugin_name: $("#personal_plugin_field_module_name").val(), id: "<%=f.object.id %>"}).done(function(data){
|
||||
console.log(data);
|
||||
if(data["can_install"]){
|
||||
$("#personal_plugin_field_module_name").css('border', '');
|
||||
can_install = true;
|
||||
var modal_names = $("[name*=modal_name]").map(function(i,v){return v.value})
|
||||
modal_names = Array.from(modal_names);
|
||||
$.post("<%=check_modal_name_admin_personal_plugin_field_path%>",{modal_names: modal_names, id: "<%=f.object.id %>"}).done(function(data){
|
||||
if(!data["success"]){
|
||||
var invalid_modal_names = data["invalid_modal_names"];
|
||||
console.log(invalid_modal_names)
|
||||
$("[name*=modal_name]").each(function(i,v){
|
||||
if(invalid_modal_names.indexOf($(v).val()) != -1){
|
||||
$(v).css("border", '2px solid red');
|
||||
window.location.href = "#" + $(".main-forms")[0].id;
|
||||
}else{
|
||||
$(v).css("border", '');
|
||||
}
|
||||
})
|
||||
can_install = false;
|
||||
}
|
||||
})
|
||||
|
||||
}else{
|
||||
$("#personal_plugin_field_module_name").css('border', '2px solid red');
|
||||
alert("<%=thead_field("please_change_module_name")%>");
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<%= form_for @personal_plugin_field, url: admin_personal_plugin_fields_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
|
||||
<fieldset>
|
||||
<%= f.hidden_field :copy_id, :value => params[:personal_plugin_field_id] %>
|
||||
<%= render partial: 'form', locals: {f: f} %>
|
||||
</fieldset>
|
||||
<% end %>
|
|
@ -25,6 +25,7 @@
|
|||
<h4><%= thead_field('backend_page') %></h4>
|
||||
<div id="backend_page">
|
||||
<%= render :partial => 'render_fields_check_table',locals: {:f=>f,:root_name=>'backend_fields',:page_name=>'index'} %>
|
||||
<%= render :partial => 'render_fields_check_table',locals: {:f=>f,:root_name=>'backend_fields',:page_name=>'profile'} %>
|
||||
<%= render :partial => 'render_fields_check_table',locals: {:f=>f,:root_name=>'backend_fields',:page_name=>'analysis',:access_field_types=>["date","date_time","year","year_month","time"]} %>
|
||||
</div>
|
||||
<h4><%= thead_field('frontend_page') %></h4>
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
})
|
||||
var url = $(this).data("url");
|
||||
$.get(url).done(function(data){
|
||||
console.log(data);
|
||||
$("#preloader").css("display",'none');
|
||||
$("#generating_plugin").css("display",'none');
|
||||
if(data["success"]){
|
||||
|
|
|
@ -29,6 +29,7 @@ en:
|
|||
fields_display_setting: Fields display setting
|
||||
backend_page: Backend Page
|
||||
frontend_page: Frontend Page
|
||||
profile: Personal Profile
|
||||
index: Index Page
|
||||
show: Show Page
|
||||
member_show: Member show page
|
||||
|
|
|
@ -29,6 +29,7 @@ zh_tw:
|
|||
fields_display_setting: 欄位顯示設定
|
||||
backend_page: 後台頁面
|
||||
frontend_page: 前台頁面
|
||||
profile: 個人資料
|
||||
index: Index 頁面
|
||||
show: Show 頁面
|
||||
member_show: 會員show頁面
|
||||
|
|
|
@ -10,7 +10,8 @@ Rails.application.routes.draw do
|
|||
get 'copy' , to: 'personal_plugin_fields#copy'
|
||||
end
|
||||
resource :personal_plugin_field do
|
||||
post 'check_plugin_exist' ,to: 'personal_plugin_fields#check_plugin_exist'
|
||||
post 'check_plugin_exist' ,to: 'personal_plugin_fields#check_plugin_exist'
|
||||
post 'check_modal_name' ,to: 'personal_plugin_fields#check_modal_name'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue