orbit4-5/app/controllers/page_parts_controller.rb

204 lines
6.6 KiB
Ruby

class PagePartsController < ApplicationController
before_action :get_key
def new
@part = part_model.new
@part.sub_parts.build
@part_number = params[:part]
@page_id = params[:page_id]
@modules = ModuleApp.widget_enabled
@modules = @modules.concat(OrbitWidget.all)
@no_orbit_bar = @no_side_bar = true
@select_number = 0
@html_class = "page-parts"
render :layout => "structure"
end
def edit
page = Page.find(params[:page_id])
parts = $mobile.blank? ? page.page_parts : page.mobile_page_parts
@part = parts.where(:part_id => params[:id]).first
@part.sub_parts.build
@page_id = params[:page_id]
@part_number = params[:id]
@select_number = @part.sub_parts.count
@modules = ModuleApp.widget_enabled
@modules = @modules.concat(OrbitWidget.all)
@no_orbit_bar = @no_side_bar = true
@html_class = "page-parts"
render :layout => "structure"
end
def edit_sub_part
@part = part_model.find(params[:part_id])
@subpart = SubPart.find(params[:sub_part_id])
@select_number = @part.sub_parts.index(@subpart)
@kind = @subpart.kind
@modules = ModuleApp.widget_enabled
@modules = @modules.concat(OrbitWidget.all)
if @kind == "module_widget"
module_name = @subpart.module
@widget_types = get_widget_files(module_name)
app = ModuleApp.find_by_key(module_name) rescue nil
app = OrbitWidget.find_by_key(module_name) if app.nil?
@categories = app.categories rescue []
@tags = app.tags rescue []
@widget_methods = app.get_registration.get_widget_methods
@widget_settings = app.get_registration.get_widget_settings
@data_count = nil
if !@widget_settings.blank?
@data_count = @widget_settings["data_count"] rescue nil
if !@widget_settings['override_category_with'].nil?
@custom = @widget_settings['override_category_with'].classify.constantize.all
@multiselect = @widget_settings['multiselect'] rescue true
@display_field = @widget_settings['display_field']
end
elsif @widget_settings.nil?
@widget_settings = {}
@widget_settings['override_category_with'] = nil
end
end
@no_orbit_bar = @no_side_bar = true
@html_class = "page-parts"
render :layout => "structure"
end
def update_sub_part
subpart = SubPart.find(params[:id])
p = part_params["sub_parts_attributes"]
keys = p.keys
final_params = {}
keys.each do |key|
p["#{key}"].each do |k,value|
final_params["#{k}"] = value
end
end
if final_params["kind"] == "none"
page_part = subpart.page_part
subpart.destroy
if page_part.sub_parts.count == 0
page_part.destroy
end
else
if final_params['categories'].nil?
final_params['categories'] = []
end
if final_params['tags'].nil?
final_params['tags'] = []
end
subpart.update_attributes(final_params)
end
render :json => {"success"=>true}.to_json
end
def getwidgets
module_name = params[:module]
part = part_model.where(:part_id => params[:part_id], :page_id => params[:page_id]).first
@select_number = part.sub_parts.count rescue 0
@widget_types = get_widget_files(module_name)
module_name = module_name.downcase.singularize
app = ModuleApp.find_by_key(module_name) rescue nil
app = OrbitWidget.find_by_key(module_name) if app.nil?
@categories = app.categories rescue []
@tags = app.tags rescue []
@widget_methods = app.get_registration.get_widget_methods
@widget_settings = app.get_registration.get_widget_settings
@data_count = nil
if !@widget_settings.blank?
@data_count = @widget_settings["data_count"] rescue nil
if !@widget_settings['override_category_with'].nil?
@custom = @widget_settings['override_category_with'].classify.constantize.all
@multiselect = @widget_settings['multiselect'] rescue true
@display_field = @widget_settings['display_field']
end
elsif @widget_settings.nil?
@widget_settings = {}
@widget_settings['override_category_with'] = nil
end
render :layout => false
end
def info
page = Page.find(params[:page_id])
parts = OrbitHelper.is_mobile_view ? page.mobile_page_parts : page.page_parts
data = []
parts.each do |part|
partid = "data-pp=" + part.part_id.to_s
subparts = part.sub_parts.desc(:created_at)
subpart = []
subparts.each do |p|
subpart << {"module" => p.module, "widget" => p.widget_type, "id" => p.id.to_s, "kind" => p.kind}
end
data << {"name" => partid, "subparts" => subpart, "id" => part.id.to_s}
end
render :json => {"parts" => data}.to_json
end
def create
@part = part_model.new(part_params)
@part.save!
render :json => {"success"=>true}.to_json
end
def update
@part = part_model.find(params[:part_id])
@part.update_attributes(part_params)
render :json => {"success"=>true}.to_json
end
private
def get_widget_files(module_name)
temp = []
f = File.join("#{Rails.root}/app/templates/#{@key}/modules/#{module_name.downcase}/info.json")
if File.exists?f
info = File.read(f)
hash = JSON.parse(info) rescue {}
widgets = hash["widgets"] || []
widgets.each do |w|
w["thumbnail"] = "/assets/#{module_name.downcase}/thumbs/#{w["thumbnail"]}"
temp << w
end
end
if temp.empty?
Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_name.downcase}/*").each do |w|
next if File.ftype(w).eql?("directory")
w = File.basename(w, ".*")
w = File.basename(w, ".*")
temp << w.gsub("_","") if w[0,1] == "_"
end
end
if temp.empty?
f = File.join("#{Rails.root}/app/templates/#{@key}/widgets/#{module_name.downcase}/info.json")
if File.exists?f
info = File.read(f)
hash = JSON.parse(info) rescue {}
widgets = hash["widgets"] || []
widgets.each do |w|
w["thumbnail"] = "/assets/#{module_name.downcase}/thumbs/#{w["thumbnail"]}"
temp << w
end
end
end
if temp.empty?
Dir.glob("#{Rails.root}/app/templates/#{@key}/widgets/#{module_name.downcase}/*").each do |w|
next if File.ftype(w).eql?("directory")
w = File.basename(w, ".*")
w = File.basename(w, ".*")
temp << w.gsub("_","") if w[0,1] == "_"
end
end
temp
end
def part_params
params.require(:page_part).permit!
end
def part_model
$mobile.blank? ? "page_part".classify.constantize : "mobile_page_part".classify.constantize
end
end