class DefaultWidgetController< OrbitWidgetController def front_end_available(var) @page_part = case params[:item_type] when "page" Page.find params[:page_id] when "page_part" PagePart.find params[:part_id] end @page_part.module_app.enable_frontend? end def query_for_default_widget @ori_class_name = @default_widget["query"].split('.')[0] result = nil result_objects = nil if !params["tag_id"].blank? if params["category_id"].blank? #has tag no cate result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"]) else #has tag and cate result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])") end elsif params["category_id"].blank? #no tag no cate result = eval(@default_widget["query"]) else #no tag has cate result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])") end result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate) end def search_result @search = query_for_default_widget.solr_search do fulltext params[:search_query] end search_result = @search.results.collect{|result| result.id} @items = eval(@ori_class_name).all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result) end def default_widget @search = params["search_query"].blank? ? false : true if !params[:id].blank? and !params["clicked_field_name"].blank? clicked_field_name = params["clicked_field_name"].to_sym redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})") elsif !params[:id].blank? and params["preview"] clicked_field_name = :title @preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]} redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})") else @tag_class = nil @default_widget = @page_part.module_app.get_default_widget @widget_image_field = @default_widget["image"] || @default_widget[:image] case @page_part when Page @frontend_field_names = @page_part.frontend_field_name @frontend_classes = @page_part.frontend_class @frontend_sat_to_links = @page_part.frontend_sat_to_link @data_limit = @page_part.frontend_data_count.is_a?(Fixnum) ? @page_part.frontend_data_count : (@page_part.frontend_data_count.to_i rescue 3) @paginate = true @page_id = @page_part.id when PagePart @frontend_field_names = @page_part.widget_field_name @frontend_classes = @page_part.widget_class @frontend_sat_to_links = @page_part.widget_sat_to_link @fields = @page_part.widget_field @data_limit = @page_part.widget_data_count.is_a?(Fixnum) ? @page_part.widget_data_count : (@page_part.widget_data_count.to_i rescue 3) end if params[:filter_category_id] and !params[:filter_category_id].blank? @data = get_filter_data.page(params[:page_main]).per(@data_limit) elsif @paginate || @search if @search @data = search_result.page(params[:page_main]).per(@data_limit) rescue [] else #regular listing @data = query_for_default_widget.includes(@widget_image_field).page(params[:page_main]).per(@data_limit) end # @data = query_for_default_widget.limit(@data_limit).includes(@widget_image_field) else @data = query_for_default_widget.includes(@widget_image_field).limit(@data_limit) # @data = eval(@default_widget["query"]).limit(@data_limit).includes(@widget_image_field).desc(:created_at) end case params[:type] when "typeA" @tag_class = 'default_widget_typeA' @partial = "typeA" when /typeB_/ @tag_class = "default_widget_#{params[:type]}" @partial = "typeB" when "typeC" @tag_class = 'default_widget_typeC' @partial = "typeC" end end end def get_filter_data model = eval(@default_widget["query"]) if params[:filter_category_id].is_a? Array data = model.where(:category_id.in => params[:filter_category_id]) elsif params[:filter_category_id].is_a? String data = model.where(:category_id => params[:filter_category_id]) end data.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate) end def get_category_field_name @ori_class_name = @ori_class_name.constantize @ori_class_name.fields.each_key do |key| return key if key.include?('category_id') end nil end end