diff --git a/app/controllers/admin/personal_plugin_fields_controller.rb b/app/controllers/admin/personal_plugin_fields_controller.rb
index 42d7f31..05a688b 100644
--- a/app/controllers/admin/personal_plugin_fields_controller.rb
+++ b/app/controllers/admin/personal_plugin_fields_controller.rb
@@ -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" +
+ "
\r\n"+
+ "
\r\n"+
+ " - <%= link_to t('edit'), edit_admin_#{plugin_template}_path(#{plugin_template},:page => params[:page]) %>
\r\n"+
+ " - <%= link_to t(:delete_), admin_#{plugin_template}_path(id: #{plugin_template}.id, :page => params[:page]), method: :delete, data: { confirm: 'Are you sure?' } %>
\r\n"+
+ "
\r\n"+
+ "
\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("
").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
\ No newline at end of file
diff --git a/app/models/personal_plugin_field.rb b/app/models/personal_plugin_field.rb
index 762a4cc..eb0549c 100644
--- a/app/models/personal_plugin_field.rb
+++ b/app/models/personal_plugin_field.rb
@@ -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
diff --git a/app/views/admin/personal_plugin_fields/_form.html.erb b/app/views/admin/personal_plugin_fields/_form.html.erb
index 9632ed0..56a7051 100644
--- a/app/views/admin/personal_plugin_fields/_form.html.erb
+++ b/app/views/admin/personal_plugin_fields/_form.html.erb
@@ -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")%>");
diff --git a/app/views/admin/personal_plugin_fields/copy.html.erb b/app/views/admin/personal_plugin_fields/copy.html.erb
index 32ac43c..b9d030d 100644
--- a/app/views/admin/personal_plugin_fields/copy.html.erb
+++ b/app/views/admin/personal_plugin_fields/copy.html.erb
@@ -1,5 +1,6 @@
<%= form_for @personal_plugin_field, url: admin_personal_plugin_fields_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
<% end %>
\ No newline at end of file
diff --git a/app/views/admin/personal_plugin_fields/fields_setting.html.erb b/app/views/admin/personal_plugin_fields/fields_setting.html.erb
index 5bab09c..1c968a2 100644
--- a/app/views/admin/personal_plugin_fields/fields_setting.html.erb
+++ b/app/views/admin/personal_plugin_fields/fields_setting.html.erb
@@ -25,6 +25,7 @@
<%= thead_field('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"]} %>
<%= thead_field('frontend_page') %>
diff --git a/app/views/admin/personal_plugin_fields/index.html.erb b/app/views/admin/personal_plugin_fields/index.html.erb
index a89895d..508d45a 100644
--- a/app/views/admin/personal_plugin_fields/index.html.erb
+++ b/app/views/admin/personal_plugin_fields/index.html.erb
@@ -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"]){
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 721bfea..b0e85b4 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -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
diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml
index 8fecb49..15c99bc 100644
--- a/config/locales/zh_tw.yml
+++ b/config/locales/zh_tw.yml
@@ -29,6 +29,7 @@ zh_tw:
fields_display_setting: 欄位顯示設定
backend_page: 後台頁面
frontend_page: 前台頁面
+ profile: 個人資料
index: Index 頁面
show: Show 頁面
member_show: 會員show頁面
diff --git a/config/routes.rb b/config/routes.rb
index 8b2c537..0799707 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -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