orbit4-5/app/controllers/pages_controller.rb

252 lines
6.8 KiB
Ruby

class PagesController < ApplicationController
before_action :get_key
layout :get_layout
include PagesHelper
def index
@pages = Page.all
# render json: @pages
end
def edit_view
@manifest = @key
@dataApi = "edit"
# @qq = render_to_string(:partial => @p, :layout => false)
render get_view
end
def home
@manifest = @key
@dataApi = nil
page = Page.first
OrbitHelper.set_params params
OrbitHelper.set_site_locale locale
render :html => render_final_page("home",page).html_safe
end
def show
path = request.original_fullpath.split('/')
if path.size <= 2
redirect_to root_path
else
if path.last.include? '-'
params[:page_id] = path[-2]
params[:slug] = path[-1]
params[:uid] = path[-1].split("-").last
params[:target_action] = "show"
else
params[:page_id] = path[-1]
params[:slug] = nil
params[:uid] = nil
params[:target_action] = "index"
end
page = Page.find_by_param(params[:page_id])
if !page.nil?
if page.enabled_for.include? I18n.locale.to_s
module_app = page.module.downcase.pluralize
params[:target_controller] = "#{module_app}"
params[:url] = page.url
@manifest = @key
@dataApi = nil
OrbitHelper.set_params params
OrbitHelper.set_site_locale locale
OrbitHelper.set_page_categories page.categories || []
OrbitHelper.set_page_data_count page.data_count
# render render_final_page("#{module_app}/#{params[:target_action]}",page)
render :html => render_final_page("#{module_app}/#{params[:target_action]}",page).html_safe
else
render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
end
else
render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
end
end
end
def update_item_position
@page = Page.find(params[:id])
new_parent_page = Page.find(params[:parent_id])
old_parent_page_id = @page.parent_page_id
@page.parent_page_id = new_parent_page.id
if new_parent_page.id != old_parent_page_id
url = (new_parent_page.url == "/" ? "" : new_parent_page.url)
@page.url = url + "/#{@page.page_id}"
end
@page.save
params["children_ids"].each_with_index do |child,i|
page = Page.find(child)
page.number = i
page.save
end
if new_parent_page.id != old_parent_page_id
old_parent_page = Page.find(old_parent_page_id)
old_parent_page.child_page.each_with_index do |page,i|
page.number = i
page.save
end
end
render :json => {"success"=>true}.to_json
end
def preview
render render_final_page
end
def destroy
page = Page.find(params[:id])
page.destroy
respond_to do |format|
format.js
end
end
def get_categories
module_app = ModuleApp.find_by_key(params[:module]);
@categories = module_app.categories.collect do |cat|
{
"title" => cat.title,
"id" => cat.id.to_s
}
end
render :json => {"categories" => @categories}.to_json
end
def new
@page = Page.new
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
@modules = ModuleApp.all
end
def edit
@page = Page.find(params[:id])
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
@modules = ModuleApp.all
module_app = ModuleApp.find_by_key(@page.module);
@categories = module_app.categories
end
def update
@page = Page.find(params[:id])
@page.update_attributes(page_update_params)
@page.save
respond_to do |format|
format.js
end
end
def create
@page = Page.new(page_params)
@page.save!
respond_to do |format|
format.js
end
end
private
def render_final_page(original_view=get_view,page)
parts = page.page_parts
@part_partials = {}
parts.each do |part|
subparts = part.sub_parts
partials = []
subparts.each do |subpart|
partials << render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type)
end
@part_partials["data-pp='#{part.part_id}'"] = partials
end
@file = nil
@layout_html = nil
if original_view == "home"
@file = File.join('../templates', "#{@key}", '/home/index.html.erb')
else
@file = File.join('../templates', "#{@key}", '/home/page.html.erb')
end
@layout_html = render_to_string(@file)
doc = Nokogiri::HTML(@layout_html, nil, "UTF-8")
@part_partials.each do |key, partial|
html_string = ""
partial.each do |p|
html_string = html_string + p
end
pp = doc.css("*[#{key}]")
pp = pp[0]
pp.inner_html = html_string
end
if original_view != "home"
viewarea = doc.css("*[data-content='true']")[0]
viewarea.inner_html = render_to_string(original_view)
end
# newlayout = "#{page.name}_layout.html.erb"
# file_path = File.join(Rails.root, 'app', 'views', 'frontend', newlayout)
# f = File.open(file_path,"w")
# f.write(doc.to_html)
# f.close
# view_to_render = "frontend/#{newlayout}"
# view_to_render
doc.to_html
end
def get_widget_path(widget)
file = File.join('../templates', "#{@key}", "modules/#{widget}")
end
def get_view
page = Page.find(params[:id])
if page == Page.first
@view = File.join(Rails.root, 'app', 'templates', "#{@key}", 'home/index.html.erb')
else
module_name = page.module.downcase.singularize
@view = File.join(Rails.root, 'app', 'templates', "#{@key}", "modules/#{module_name}/index.html.erb")
end
end
def page_params
page = Page.find(params[:page][:parent_page])
page.url = page.url == "/" ? "" : page.url
@url = page.url + "/#{params[:page][:page_id]}"
p = params.require(:page).permit(:number, :page_id, :module, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw])
p["url"] = @url
p
end
def page_update_params
p = params.require(:page).permit(:number, :page_id, :module, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw])
p["enabled_for"] = p["enabled_for"] || []
p["menu_enabled_for"] = p["menu_enabled_for"] || []
p
end
def get_layout
if request[:action] == "edit_view"
page = Page.find(params[:id])
if page.page_id == "" || page.page_id == nil
false
else
File.join("../../templates", "#{@key}", '/home/page.html.erb')
end
# elsif request[:action] == "show" || request[:action] == "moduleShow"
# File.join("../../templates", "themes", "#{@key}", '/home/page.html.erb')
else
false
end
end
end