forked from saurabh/orbit4-5
185 lines
4.6 KiB
Ruby
185 lines
4.6 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])
|
|
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
|
|
|
|
# render render_final_page("#{module_app}/#{params[:target_action]}",page)
|
|
render :html => render_final_page("#{module_app}/#{params[:target_action]}",page).html_safe
|
|
end
|
|
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 new
|
|
@page = Page.new
|
|
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
|
|
@modules = ModuleApp.all
|
|
|
|
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
|
|
if params[:page][:parent_page] == ""
|
|
params[:page][:parent_page] = nil
|
|
@url = "/#{params[:page][:page_id]}"
|
|
else
|
|
page = Page.find(params[:page][:parent_page])
|
|
page.url = page.url.nil? ? "" : page.url
|
|
@url = page.url + "/#{params[:page][:page_id]}"
|
|
end
|
|
p = params.require(:page).permit(:number, :page_id, :module, :parent_page, name_translations: [:en, :zh_tw])
|
|
p["url"] = @url
|
|
p
|
|
end
|
|
|
|
def get_layout
|
|
if request[:action] == "edit_view"
|
|
page = Page.find(params[:id])
|
|
if page.page_id == "" && page.number == 0
|
|
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
|