From d7107f02f494f68c96d9485f49f20d9021eb353c Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 22 May 2014 19:19:25 +0800 Subject: [PATCH] change in parser and widget rendering completed with also lot of changes in kernel Conflicts: app/helpers/orbit_helper.rb --- .../javascripts/basic/orbit_js_1.0.1.js | 8 +- app/assets/javascripts/edit-main.js | 8 +- app/controllers/admin/sites_controller.rb | 1 + app/controllers/page_parts_controller.rb | 94 ++++++-- app/controllers/pages_controller.rb | 98 ++++---- app/controllers/sitemaps_controller.rb | 18 ++ app/helpers/application_helper.rb | 211 +++++++++++------- app/helpers/orbit_helper.rb | 36 +++ app/helpers/pages_helper.rb | 55 +++-- app/models/module_app.rb | 3 + app/models/page.rb | 34 +-- app/models/site.rb | 3 +- app/models/sub_part.rb | 7 +- .../orbit_bootstrap/home/footer.html.erb | 7 + .../_header.html.erb => home/header.html.erb} | 7 +- .../orbit_bootstrap/home/index.html.erb | 8 +- .../orbit_bootstrap/home/menu.html.erb | 2 +- .../orbit_bootstrap/home/page.html.erb | 8 +- .../modules/ad_banner/_widget.html.erb | 45 +--- .../modules/announcement/_widget.html.erb | 6 +- .../modules/announcement/_widget1.html.erb | 4 +- .../modules/archive/_widget.html.erb | 38 +--- .../modules/faq/_widget.html.erb | 25 +-- .../modules/faq/_widget1.html.erb | 12 - .../modules/gallery/_widget.html.erb | 15 +- .../orbit_bootstrap/partial/_footer.html.erb | 9 - .../orbit_bootstrap/partial/_head.html.erb | 1 + app/views/admin/sites/site_info.html.erb | 38 ++-- app/views/page_parts/_form.html.erb | 85 +++---- app/views/page_parts/_widget_form.html.erb | 54 +++++ app/views/page_parts/edit.html.erb | 63 ++---- app/views/page_parts/edit_sub_part.html.erb | 28 +++ app/views/page_parts/getwidgets.html.erb | 5 +- app/views/page_parts/new.html.erb | 30 +-- app/views/pages/edit_view.html.erb | 1 + app/views/sitemaps/index.html.erb | 1 + built_in_extensions.rb | 15 +- config/routes.rb | 9 +- lib/orbit_app/module/registration.rb | 16 +- lib/orbit_category/categorizable.rb | 21 ++ 40 files changed, 670 insertions(+), 459 deletions(-) create mode 100644 app/controllers/sitemaps_controller.rb create mode 100644 app/templates/orbit_bootstrap/home/footer.html.erb rename app/templates/orbit_bootstrap/{partial/_header.html.erb => home/header.html.erb} (60%) delete mode 100644 app/templates/orbit_bootstrap/modules/faq/_widget1.html.erb delete mode 100644 app/templates/orbit_bootstrap/partial/_footer.html.erb create mode 100644 app/views/page_parts/_widget_form.html.erb create mode 100644 app/views/page_parts/edit_sub_part.html.erb create mode 100644 app/views/pages/edit_view.html.erb create mode 100644 app/views/sitemaps/index.html.erb diff --git a/app/assets/javascripts/basic/orbit_js_1.0.1.js b/app/assets/javascripts/basic/orbit_js_1.0.1.js index 7589e7c..521ab1d 100755 --- a/app/assets/javascripts/basic/orbit_js_1.0.1.js +++ b/app/assets/javascripts/basic/orbit_js_1.0.1.js @@ -65,10 +65,10 @@ if($.support.touch) { $checked.each(function(i) { if($(this).attr('type') == "checkbox") { if($(this).data().disabled) { - console.log("d") $(this).parent('.togglebox').addClass('disable').closest('li').addClass('disabled'); if($(this).prop('checked')) { $(this).parent('.togglebox').removeClass('disable').closest('li').removeClass('disabled'); + $(this).val("1"); }; } else { if($(this).prop('checked')) { @@ -79,6 +79,12 @@ if($.support.touch) { change: function() { $(this).parent('.togglebox').toggleClass('disable'); $(this).closest('tr').toggleClass('disable'); + if($(this).is(":checked")){ + $(this).val("1"); + }else{ + $(this).val("0"); + $(this).prop("checked","checked"); + } } }); }; diff --git a/app/assets/javascripts/edit-main.js b/app/assets/javascripts/edit-main.js index d308029..3b38c32 100644 --- a/app/assets/javascripts/edit-main.js +++ b/app/assets/javascripts/edit-main.js @@ -25,8 +25,11 @@ $.each(data.parts,function(i,part){ var page_part = $("*[" + part.name + "]"); $.each(part.subparts,function(x,subpart){ - var newsub = $("
" + subpart.module + "/" + subpart.widget + "
"); + var newsub = (subpart.kind == "module_widget" ? $("
" + subpart.module + "/" + subpart.widget + "
") : $("
Text
")); page_part.prepend(newsub); + newsub.click(function(){ + window.location.href = "/page_parts/edit_sub_part?page_id=" + page_params["id"] + "&part_id=" + $(this).data("partid") + "&sub_part_id=" + $(this).data("ps"); + }) }) }) }) @@ -41,8 +44,7 @@ window.location.href = "/page_parts/new?part=" + part.data("pp") + "&page_id=" + page_params["id"]; } }) - $(this).append(add_btn); + part.append(add_btn); }) - }) })(); \ No newline at end of file diff --git a/app/controllers/admin/sites_controller.rb b/app/controllers/admin/sites_controller.rb index 3da7c88..0155228 100644 --- a/app/controllers/admin/sites_controller.rb +++ b/app/controllers/admin/sites_controller.rb @@ -6,6 +6,7 @@ class Admin::SitesController < OrbitAdminController end def site_info + @pages = Page.where(:module=>"page_content") end def responsive_setting diff --git a/app/controllers/page_parts_controller.rb b/app/controllers/page_parts_controller.rb index 436d220..b1358c8 100644 --- a/app/controllers/page_parts_controller.rb +++ b/app/controllers/page_parts_controller.rb @@ -5,9 +5,10 @@ class PagePartsController < ApplicationController @part.sub_parts.build @part_number = params[:part] @page_id = params[:page_id] - @modules = ModuleApp.all - @no_orbit_bar = @no_side_bar = true - @html_class = "page-parts" + @modules = ModuleApp.widget_enabled + @no_orbit_bar = @no_side_bar = true + @select_number = 0 + @html_class = "page-parts" render :layout => "structure" end @@ -16,16 +17,70 @@ class PagePartsController < ApplicationController @part = page.page_parts.where(:part_id => params[:id]).first @part.sub_parts.build @page_id = params[:page_id] - @modules = ModuleApp.all + @part_number = params[:id] + @select_number = @part.sub_parts.count + @modules = ModuleApp.widget_enabled @no_orbit_bar = @no_side_bar = true - @html_class = "page-parts" + @html_class = "page-parts" render :layout => "structure" end + def edit_sub_part + @part = PagePart.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 + if @kind == "module_widget" + @widget_types = [] + module_name = @subpart.module + Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_name.downcase}/*").each do |w| + w = File.basename(w, ".*") + w = File.basename(w, ".*") + @widget_types << w.gsub("_","") if w != "index" && w != "show" + end + + app = ModuleApp.find_by_key(module_name) + @categories = app.categories + @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 + 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" + subpart.destroy + else + subpart.update_attributes(final_params) + end + render :json => {"success"=>true}.to_json + end + def getwidgets module_name = params[:module] - - @select_number = params[:number_of_select] + part = PagePart.where(:part_id => params[:part_id], :page_id => params[:page_id]).first + @select_number = part.sub_parts.count rescue 0 @widget_types = [] Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_name.downcase}/*").each do |w| w = File.basename(w, ".*") @@ -34,7 +89,18 @@ class PagePartsController < ApplicationController end module_name = module_name.downcase.singularize app = ModuleApp.find_by_key(module_name) + @categories = app.categories @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 + end render :layout => false end @@ -47,9 +113,9 @@ class PagePartsController < ApplicationController subparts = part.sub_parts subpart = [] subparts.each do |p| - subpart << {"module" => p.module, "widget" => p.widget_type} + subpart << {"module" => p.module, "widget" => p.widget_type, "id" => p.id.to_s, "kind" => p.kind} end - data << {"name" => partid, "subparts" => subpart} + data << {"name" => partid, "subparts" => subpart, "id" => part.id.to_s} end render :json => {"parts" => data}.to_json end @@ -57,20 +123,20 @@ class PagePartsController < ApplicationController def create @part = PagePart.new(part_params) @part.save! - redirect_to pages_edit_view_path(:id => params[:page_part][:page_id]) + render :json => {"success"=>true}.to_json + end def update - @part = PagePart.find(params[:page_part][:page_part_id]) + @part = PagePart.find(params[:part_id]) @part.update_attributes(part_params) - redirect_to pages_edit_view_path(:id => params[:page_part][:page_id]) - + render :json => {"success"=>true}.to_json end private def part_params - params.require(:page_part).permit(:part_id, :page_id, sub_parts_attributes: [:module, :widget_type,:widget_method, :id]) + params.require(:page_part).permit! end end \ No newline at end of file diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 58268b2..5f6fe2f 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -17,7 +17,10 @@ class PagesController < ApplicationController @dataApi = "edit" # @qq = render_to_string(:partial => @p, :layout => false) - render get_view + view = get_view + if File.exists?(view) + render view + end end def home @@ -69,7 +72,6 @@ class PagesController < ApplicationController end impressionist(page) - # render render_final_page("#{module_app}/#{params[:target_action]}",page) render :html => render_final_page("#{module_app}/#{params[:target_action]}",page,layout).html_safe else render :file => "#{Rails.root}/public/404.html", :layout => false, :status => :not_found @@ -168,56 +170,58 @@ class PagesController < ApplicationController private def render_final_page(original_view=get_view,page,layout) - if layout - parts = page.page_parts rescue [] - @part_partials = {} + if layout + parts = page.page_parts rescue [] + @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) + parts.each do |part| + subparts = part.sub_parts + partials = [] + subparts.each do |subpart| + if subpart.kind == "module_widget" + OrbitHelper.set_widget_data_count subpart.data_count + OrbitHelper.set_widget_categories subpart.categories + OrbitHelper.set_widget_module_app subpart.module + custom_value = subpart.custom_string_field || subpart.custom_array_field rescue nil + if !custom_value.nil? + OrbitHelper.set_widget_custom_value custom_value + end + partials << render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type) + elsif subpart.kind == "text" + partials << subpart.content + end + end + @part_partials["data-pp='#{part.part_id}'"] = partials 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 + doc.to_html - @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') + render_to_string(original_view) 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 - doc.to_html - - else - 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 end def get_widget_path(widget) diff --git a/app/controllers/sitemaps_controller.rb b/app/controllers/sitemaps_controller.rb new file mode 100644 index 0000000..e3faf4d --- /dev/null +++ b/app/controllers/sitemaps_controller.rb @@ -0,0 +1,18 @@ +class SitemapsController < ApplicationController + def index + pages = Page.root.child_pages_enabled_for_sitemap + def create_json(pages) + item = {} + pages.each do |page| + if page.child_page.size > 0 + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.sorted_published_child_pages)} + else + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url} + end + end + item + end + items = create_json(pages) + items + end +end \ No newline at end of file diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 206a6cc..aa45594 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -16,10 +16,42 @@ module ApplicationHelper "/module/#{module_name}/show" end + def render_header + site = Site.first + key = Template::KEY + header_file = File.join('../templates', "#{key}", '/home/header.html.erb') + header_file_html = render :file => header_file + header = Nokogiri::HTML(header_file_html, nil, "UTF-8") + sub_menu_html = site.sub_menu + html = header.to_s + html = html.gsub("{{site_name}}",site.title) + html = html.gsub("%7B%7Blogo_url%7D%7D",(site.default_image.file.url rescue "http://placehold.it/50x50")) + if site.sitemap_menu_in_header + sub_menu_html = sub_menu_html + "Sitemap" + end + html = html.gsub("{{header-data}}",sub_menu_html) + html.html_safe + end + + def render_footer + site = Site.first + key = Template::KEY + footer_file = File.join('../templates', "#{key}", '/home/footer.html.erb') + footer_file_html = render :file => footer_file + footer = Nokogiri::HTML(footer_file_html, nil, "UTF-8") + html = footer.to_s + site_footer = site.footer + if site.enable_terms_of_use + site_footer = site_footer + "Terms of use" + end + html = html.gsub("{{footer-data}}",site_footer) + html.html_safe + end + def render_menu # json_file = File.read(File.join(Rails.root, 'public', "menu.json")) # @items = JSON.parse(json_file) - @pages = Page.where(:parent_page_id.ne => "" , :parent_page_id.exists => false).first.sorted_published_child_pages + @pages = Page.root.sorted_published_child_pages def create_json(pages) item = {} @@ -85,41 +117,41 @@ module ApplicationHelper def render_view - def parsing_repeats_again(elements,d,level) - newhtml = [] - oldhtml = [] - elements.each do |el| - html_to_render = "" - data_name = el.attr("data-list") - wrap_elements = el.css("*[data-list][data-level='#{level}']") - if d["#{data_name}"] - d["#{data_name}"].each_with_index do |item,i| - element = el.inner_html - if wrap_elements.count > 0 - htmls = parsing_repeats_again(wrap_elements,d["#{data_name}"][i], level + 1) - htmls[0].each_with_index do |html,i| - element = element.gsub(html,htmls[1][i]) - end - end - item.each do |key,value| - if !value.kind_of?(Array) - value = value.nil? ? "" : value - element = element.gsub("{{#{key}}}",value) - element = element.gsub("%7B%7B#{key}%7D%7D",value) - end - end - html_to_render = html_to_render + element - end - temp = el.to_s - oldhtml << temp - temp = temp.gsub(el.inner_html, html_to_render) - newhtml << temp - end - end - [oldhtml,newhtml] - end + def parsing_repeats_again(elements,d,level) + newhtml = [] + oldhtml = [] + elements.each do |el| + html_to_render = "" + data_name = el.attr("data-list") + wrap_elements = el.css("*[data-list][data-level='#{level}']") + if d["#{data_name}"] + d["#{data_name}"].each_with_index do |item,i| + element = el.inner_html + if wrap_elements.count > 0 + htmls = parsing_repeats_again(wrap_elements,d["#{data_name}"][i], level + 1) + htmls[0].each_with_index do |html,i| + element = element.gsub(html,htmls[1][i]) + end + end + item.each do |key,value| + if !value.kind_of?(Array) + value = value.nil? ? "" : value + element = element.gsub("{{#{key}}}",value.to_s) + element = element.gsub("%7B%7B#{key}%7D%7D",value.to_s) + end + end + html_to_render = html_to_render + element + end + temp = el.to_s + oldhtml << temp + temp = temp.gsub(el.inner_html, html_to_render) + newhtml << temp + end + end + [oldhtml,newhtml] + end + - if params[:target_action] == "index" file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") @@ -129,54 +161,54 @@ module ApplicationHelper keys = data.keys wrap_elements = doc.css("*[data-list][data-level='0']") htmls = parsing_repeats_again(wrap_elements,data,1) - html = doc.to_s - htmls[0].each_with_index do |h,i| - html = html.gsub(h,htmls[1][i]) - end + html = doc.to_s + htmls[0].each_with_index do |h,i| + html = html.gsub(h,htmls[1][i]) + end - if keys[1] - (data[keys[1]].kind_of?(Array) ? data[keys[0]] : data[keys[1]]).each do |key,value| - value = value.nil? ? "" : value - html = html.gsub("{{#{key}}}",value) - html = html.gsub("%7B%7B#{key}%7D%7D",value) - end - end - html.html_safe + if keys[1] + (data[keys[1]].kind_of?(Array) ? data[keys[0]] : data[keys[1]]).each do |key,value| + value = value.nil? ? "" : value + html = html.gsub("{{#{key}}}",value.to_s) + html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s) + end + end + html.html_safe elsif params[:target_action] == "show" file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new data = controller.send("#{params[:target_action]}") + if data.blank? || data.empty? file = File.open("#{Rails.root}/public/404.html") doc = Nokogiri::HTML(file, nil, "UTF-8") file.close doc.to_html.html_safe else - unless data['impressionist'].blank? - impression = data['impressionist'].impressions.create - impression.user_id = request.session['user_id'] - impression.controller_name = params[:target_controller] - impression.action_name = params[:target_action] - impression.ip_address = request.remote_ip - impression.session_hash = request.session.id - impression.request_hash = @impressionist_hash - impression.referrer = request.referrer - impression.save - data['impressionist'].view_count = data['impressionist'].impressions.count - data['impressionist'].save - end + unless data['impressionist'].blank? + impression = data['impressionist'].impressions.create + impression.user_id = request.session['user_id'] + impression.controller_name = params[:target_controller] + impression.action_name = params[:target_action] + impression.ip_address = request.remote_ip + impression.session_hash = request.session.id + impression.request_hash = @impressionist_hash + impression.referrer = request.referrer + impression.save + data['impressionist'].view_count = data['impressionist'].impressions.count + data['impressionist'].save + end wrap_elements = doc.css("*[data-list][data-level='0']") if wrap_elements.count == 0 wrap_element_html = doc.to_s - el = wrap_element_html data.each do |key,value| - next if key.eql? 'impressionist' + next if key.eql? 'impressionist' value = value.nil? ? "" : value - el = el.gsub("{{#{key}}}",value) - el = el.gsub("%7B%7B#{key}%7D%7D",value) + el = el.gsub("{{#{key}}}",value.to_s) + el = el.gsub("%7B%7B#{key}%7D%7D",value.to_s) end el.html_safe else @@ -185,24 +217,23 @@ module ApplicationHelper data.keys.each do |key| not_array_key = key if data["#{key}"].kind_of?(Hash) end - htmls = parsing_repeats_again(wrap_elements,data,1) - html = doc.to_s - htmls[0].each_with_index do |h,i| - html = html.gsub(h,htmls[1][i]) - end - if data["#{not_array_key}"] - data["#{not_array_key}"].each do |key,value| - next if key.eql? 'impressionist' - value = value.nil? ? "" : value - html = html.gsub("{{#{key}}}",value) - html = html.gsub("%7B%7B#{key}%7D%7D",value) - end - end - html.html_safe + htmls = parsing_repeats_again(wrap_elements,data,1) + html = doc.to_s + htmls[0].each_with_index do |h,i| + html = html.gsub(h,htmls[1][i]) + end + if data["#{not_array_key}"] + data["#{not_array_key}"].each do |key,value| + next if key.eql? 'impressionist' + value = value.nil? ? "" : value + html = html.gsub("{{#{key}}}",value.to_s) + html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s) + end + end + html.html_safe end end end - end def action_data @@ -249,4 +280,26 @@ module ApplicationHelper image_tag(user.avatar.thumb.url) end + def render_sitemap + items = action_data + def node(items) + html = "" + html + end + html = node(items) + html.html_safe + end + end diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 26735aa..0fe8add 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -22,10 +22,27 @@ module OrbitHelper def self.this_module_app @module_app end + + def self.widget_module_app + @widget_module_app + end + def self.set_this_module_app(module_app) @module_app = ModuleApp.where(:key=>module_app).first end + def self.set_widget_custom_value(value) + @widget_custom_value = value + end + + def self.widget_custom_value + @widget_custom_value + end + + def self.set_widget_module_app(module_app) + @widget_module_app = ModuleApp.where(:key=>module_app).first + end + def self.params @params end @@ -47,6 +64,22 @@ module OrbitHelper @site_locale = locale end + def self.set_widget_data_count(data_count) + @widget_data_count = data_count + end + + def self.widget_data_count + @widget_data_count + end + + def self.set_widget_categories(categories) + @widget_categories = categories + end + + def self.widget_categories + @widget_categories + end + def self.get_site_locale @site_locale end @@ -62,6 +95,9 @@ module OrbitHelper def get_item_module_infos(page) if page.parent_page_id.nil? ["Home","icons-house"] + elsif page.module == "sitemap" + module_app = ModuleApp.find_by_key("page_content") + [module_app.title, module_app.get_registration.icon_class] else module_app = ModuleApp.where(:key => page.module).first unless module_app.nil? diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index 5c66ff8..fdcaceb 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -12,6 +12,39 @@ module PagesHelper end def render_widget_for_frontend(controller_name, widget_method, widget_file) + def parsing_repeats_again(elements,d,level) + newhtml = [] + oldhtml = [] + elements.each do |el| + html_to_render = "" + data_name = el.attr("data-list") + wrap_elements = el.css("*[data-list][data-level='#{level}']") + if d["#{data_name}"] + d["#{data_name}"].each_with_index do |item,i| + element = el.inner_html + if wrap_elements.count > 0 + htmls = parsing_repeats_again(wrap_elements,d["#{data_name}"][i], level + 1) + htmls[0].each_with_index do |html,i| + element = element.gsub(html,htmls[1][i]) + end + end + item.each do |key,value| + if !value.kind_of?(Array) + value = value.nil? ? "" : value + element = element.gsub("{{#{key}}}",value.to_s) + element = element.gsub("%7B%7B#{key}%7D%7D",value.to_s) + end + end + html_to_render = html_to_render + element + end + temp = el.to_s + oldhtml << temp + temp = temp.gsub(el.inner_html, html_to_render) + newhtml << temp + end + end + [oldhtml,newhtml] + end controller_name = controller_name.downcase.singularize f = File.join('../templates', current_site.template, 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); s = render_to_string(f) @@ -21,24 +54,16 @@ module PagesHelper OrbitHelper.set_current_widget_module controller_name data = controller.send("#{widget_method}") keys = data.keys - wrap_elements.each do |wrap_element| - html_to_render = "" - (data[keys[0]].kind_of?(Array) ? data[keys[0]] : data[keys[1]]).each do |item| - el = wrap_element.inner_html - item.each do |key,value| - value = value.nil? ? "" : value - el = el.gsub("{{#{key}}}",value.to_s) - el = el.gsub("%7B%7B#{key}%7D%7D",value.to_s) - end - html_to_render = html_to_render + el - end - wrap_element.inner_html = html_to_render + wrap_elements = doc.css("*[data-list][data-level='0']") + htmls = parsing_repeats_again(wrap_elements,data,1) + html = doc.to_s + htmls[0].each_with_index do |h,i| + html = html.gsub(h,htmls[1][i]) end - html = doc.to_html if keys[1] (data[keys[1]].kind_of?(Array) ? data[keys[0]] : data[keys[1]]).each do |key,value| - html = html.gsub("{{#{key}}}",value) - html = html.gsub("%7B%7B#{key}%7D%7D",value) + html = html.gsub("{{#{key}}}",value.to_s) + html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s) end end html.html_safe diff --git a/app/models/module_app.rb b/app/models/module_app.rb index 3b838f9..ac3ba16 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -10,12 +10,14 @@ class ModuleApp field :frontend_enable, type: Boolean, default: false field :sidebar_order,type: Integer,default: 0 field :authorizable_models, type: Array + field :widget_enable, type: Boolean, default: false has_many :categories, dependent: :destroy, :autosave => true has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true has_many :authorizations scope :frontend_enabled, ->{ where(:frontend_enable => true)} + scope :widget_enabled, ->{ where(:widget_enable => true)} def refetch_setting!(reg) self[:taggable] = reg.is_taggable @@ -23,6 +25,7 @@ class ModuleApp self[:authorizable] = reg.is_authorizable self[:authorizable_models] = reg.get_authorizable_models self[:frontend_enable] = reg.is_frontend_enabled + self[:widget_enable] = reg.is_widget_enabled end def get_registration diff --git a/app/models/page.rb b/app/models/page.rb index 2100f6c..536639b 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -1,8 +1,8 @@ class Page - include Mongoid::Document - include Mongoid::Timestamps - include OrbitModel::Impression - + include Mongoid::Document + include Mongoid::Timestamps + include OrbitModel::Impression + field :name, localize: true field :number, type: Integer field :module @@ -11,8 +11,8 @@ class Page field :data_count, type: Integer, default: 10 field :enabled_for, type: Array, default: [] field :menu_enabled_for, type: Array, default: [] - field :categories, type: Array, :default => [] - field :enabled_for_sitemap, type: Array, :default => [] + field :categories, type: Array, :default => [] + field :enabled_for_sitemap, type: Array, :default => [] has_many :page_parts, :autosave => true, :dependent => :destroy @@ -22,11 +22,11 @@ class Page def to_param - page_id.parameterize - end + page_id.parameterize + end def self.find_by_param(input) - self.find_by(page_id: input) rescue nil + self.find_by(page_id: input) rescue nil end def self.root @@ -37,11 +37,15 @@ class Page self.parent_page_id.nil? end - def sorted_published_child_pages - self.child_page.where(:menu_enabled_for => I18n.locale).asc(:number) - end + def sorted_published_child_pages + self.child_page.where(:menu_enabled_for => I18n.locale).asc(:number) + end - def published_child_pages - self.child_page.where(:menu_enabled_for => I18n.locale) - end + def child_pages_enabled_for_sitemap + self.child_page.where(:enabled_for_sitemap => I18n.locale) + end + + def published_child_pages + self.child_page.where(:menu_enabled_for => I18n.locale) + end end \ No newline at end of file diff --git a/app/models/site.rb b/app/models/site.rb index eb117f9..a02fb1e 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -8,7 +8,8 @@ class Site field :address, type: String field :footer, localize: true field :sub_menu, localize: true - field :terms_of_use, localize: true + field :site_map_link, type: String, :default => "/sitemap" + field :terms_of_use_link, type: String field :google_analytics, type: String field :in_use_locales, :type => Array field :valid_locales, :type => Array diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb index 7aa83d1..6b9e539 100644 --- a/app/models/sub_part.rb +++ b/app/models/sub_part.rb @@ -3,10 +3,15 @@ class SubPart include Mongoid::Timestamps field :module + field :title, localize: true field :widget_type field :widget_method field :kind, default: "none" - + field :content, localize: true + field :data_count, type: Integer, default: 10 + field :categories, type: Array, :default => [] + field :custom_string_field, type: String + field :custom_array_field, type: Array, :default => [] belongs_to :page_part end \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/home/footer.html.erb b/app/templates/orbit_bootstrap/home/footer.html.erb new file mode 100644 index 0000000..a7bdd0f --- /dev/null +++ b/app/templates/orbit_bootstrap/home/footer.html.erb @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/partial/_header.html.erb b/app/templates/orbit_bootstrap/home/header.html.erb similarity index 60% rename from app/templates/orbit_bootstrap/partial/_header.html.erb rename to app/templates/orbit_bootstrap/home/header.html.erb index b36bf7e..8cbcce5 100644 --- a/app/templates/orbit_bootstrap/partial/_header.html.erb +++ b/app/templates/orbit_bootstrap/home/header.html.erb @@ -3,14 +3,13 @@

- + {{site_name}}

-
- Sitemap - Contact +
+ {{header-data}}
<%= render_partial("menu") %> diff --git a/app/templates/orbit_bootstrap/home/index.html.erb b/app/templates/orbit_bootstrap/home/index.html.erb index 6d6d689..4106ae6 100644 --- a/app/templates/orbit_bootstrap/home/index.html.erb +++ b/app/templates/orbit_bootstrap/home/index.html.erb @@ -5,10 +5,10 @@
- <%= render_partial("header") %> + <%= render_header %> -
- <%= render_widget "ad_banner/widget" %> +
+ <%#= render_widget "ad_banner/widget" %>
@@ -29,7 +29,7 @@
- <%= render_partial("footer") %> + <%= render_footer %> \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/home/menu.html.erb b/app/templates/orbit_bootstrap/home/menu.html.erb index 4e7cc84..db75ba1 100644 --- a/app/templates/orbit_bootstrap/home/menu.html.erb +++ b/app/templates/orbit_bootstrap/home/menu.html.erb @@ -1,6 +1,6 @@