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