class PublicationsController < ApplicationController FrontendMethods = ["chapter", "online_read_publication", "online_read_chapter"] def index @show_option_items = OrbitHelper.this_module_app.show_option_items rescue nil is_search = false if !(@show_option_items.nil?) OrbitHelper.page.select_option_items.each do |select_option_item| if select_option_item.field_name == @show_option_items.keys.first.to_s value = YAML.load(select_option_item.value) tmp = value[:en] I18n.with_locale(:en) do if tmp == t('publication.search_style') is_search = true end end end end end if is_search return search_index end params = OrbitHelper.params categories = [] data = [] publications = Publication.order("created_at" => :desc).filter_by_categories .page(OrbitHelper.params[:page_no]).per(OrbitHelper.page_data_count) ModuleApp.find_by("key" => 'publication').categories.each do |e| categories << [e.id.to_s, e.title] end category_maps = categories.to_h publications.each do |node| status = node.statuses_with_classname.collect do |stat| { "status" => stat[:name], "status-class" =>"status-#{stat[:classname]}" } end tags = node.tags.collect do |tag| { "tag" => tag.name } end data << { "id" => node.id.to_s, "statuses" => status, "tags" => tags, "title" => node.title, "author" => node.author, "pub_date" => (node.pub_date.strftime('%Y-%m-%d') rescue ""), "category" => category_maps[node.category_id], "cover" => (node.cover ? (OrbitHelper.is_mobile_view ? node.cover.mobile.url : node.cover.url) : ""), "cover_description" => node.cover_description, "chapters" => node.chapters.count, "link_to_show" => (node.is_external_link ? node.external_link : OrbitHelper.url_to_show(node.to_param)), "pub_information" => node.pub_information } end { "publications" => data, "extras" => { "widget-title" => t("module_name.publication"), "th_cover" => t('publication.cover'), "th_pub_date" => t('publication.pub_date'), "th_title" => t('publication.title'), "th_author" => t('publication.author'), "th_chapter" => t('publication.chapter'), "th_chapters" => t('publication.chapters'), "categories" => categories }, "total_pages" => publications.total_pages } end def search_index publication_ids = Publication.order("created_at" => :desc).filter_by_categories(nil, false).pluck(:id) chapters = Chapter.where(:publication_id.in => publication_ids).filter_by_tags.order("sort_number" => :asc, "created_at" => :asc) .page(OrbitHelper.params[:page_no]).per(OrbitHelper.page_data_count).includes(:publication) params = OrbitHelper.params if !params[:keywords].blank? regexes = params[:keywords].split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/) regex = Regexp.union(regexes.map{|word| Regexp.new(word, "i")}) extra_query = [] ['title', 'keywords'].each do |key| I18n.available_locales.each do |locale| extra_query << {"#{key}.#{locale}" => regex} end end chapters = chapters.where({"$or" => extra_query}) end data = get_show_render_data(chapters) @_request = OrbitHelper.request csrf_value = form_authenticity_token data['extras'].merge!({ 'search_placeholder' => t('chapter.search_placeholder'), 'search_text' => t('chapter.keywords'), 'search_value' => params[:keywords].to_s.gsub(/\"/,''), 'search' => t('chapter.search'), 'csrf_value' => csrf_value, 'is_search' => true, 'url' => OrbitHelper.page.url }) data['extras'] data end def show @show_option_items = OrbitHelper.this_module_app.show_option_items rescue nil layout_type = 0 if !(@show_option_items.nil?) OrbitHelper.page.select_option_items.each do |select_option_item| if select_option_item.field_name == @show_option_items.keys.first.to_s value = YAML.load(select_option_item.value) tmp = value[:en] I18n.with_locale(:en) do if tmp == t('publication.table_style') layout_type = 0 elsif tmp == t('publication.accordion_style') || tmp == t('publication.search_style') layout_type = 1 end end end end end params = OrbitHelper.params publication = Publication.find_by("uid" => params[:uid]) chapters = Chapter.where("publication_id" => publication.id).order("sort_number" => :asc, "created_at" => :asc) .page(OrbitHelper.page_number.to_i).per(OrbitHelper.page_data_count) data = get_show_render_data(chapters) data['publication'] = [{ "author_display" => (!publication.author.blank? ? '' : "hide"), "author" => publication.author, "cover" => publication.cover.url, "cover_description" => publication.cover_description, "title" => publication.title, "pub_date_display" => (publication.pub_date ? '' : "hide"), "pub_date" => (publication.pub_date.strftime('%Y-%m-%d') rescue ""), "pub_information" => publication.pub_information, "file_display" => (publication.full_file ? '' : 'hide'), "file" => (publication.full_file ? publication.full_file.file.url : ''), "file_title" => (publication.full_file ? publication.full_file.title : ''), "file_description" => (publication.full_file ? publication.full_file.description : ''), "online_reader_display" => (publication.full_file && publication.is_online_flipping_reader ? '' : 'hide'), "online_reader" => OrbitHelper.url_to_show("#{publication.to_param}?method=online_read_publication") }] data['extras']['layout_type'] = layout_type data end def online_read_publication params = OrbitHelper.params publication = Publication.find_by("uid" => params[:uid]) rescue nil data = { url: (publication.full_file.file.url rescue nil), file_title: (c.full_file.title rescue nil), file_description: (c.full_file.description rescue nil), title: (publication.title rescue nil) } end def online_read_chapter params = OrbitHelper.params c = Chapter.find_by("uid" => params[:uid]) rescue nil data = { url: (c.chapter_file.file.url rescue nil), file_title: (c.chapter_file.title rescue nil), file_description: (c.chapter_file.description rescue nil), title: (c.title rescue nil) } end def chapter params = OrbitHelper.params chapters = [Chapter.find_by("uid" => params[:uid])] rescue [] get_show_render_data(chapters) end def widget #code end def get_chapter_data(chapters) chapters.collect do |node| publication = node.publication { "id" => node.id.to_s, "title" => node.title, "author_display" => (!node.author.blank? ? '' : "hide"), "author" => (!node.author_url.blank? ? "#{node.author}" : node.author), "author_description" => node.author_description, "page_display" => (!node.page.blank? ? '' : 'hide'), "page" => node.page, "keywords_display" => (!node.keywords.blank? ? '' : 'hide'), "keywords" => node.keywords, "link_to_show" => OrbitHelper.url_to_show("#{node.to_param}?method=chapter"), "file" => (node.chapter_file ? node.chapter_file.file.url : ''), "file_title" => (node.chapter_file ? node.chapter_file.title : ''), "file_description" => (node.chapter_file ? node.chapter_file.description : ''), "file_display" => (node.chapter_file ? '' : 'hide'), "online_reader_display" => (node.chapter_file && node.is_online_flipping_reader ? '' : 'hide'), "online_reader" => OrbitHelper.url_to_show("#{node.to_param}?method=online_read_chapter"), "tags" => node.tags.map{|tag| { "tag" => tag.name }}, "in_class" => 'in', "text" => node.text, "link_to_publication" => (publication.is_external_link ? publication.external_link : OrbitHelper.url_to_show(publication.to_param)), "publication_title" => publication.title } end end def get_show_render_data(chapters) data = get_chapter_data(chapters) { "chapters" => data, "extras" => { "widget-title" => t("module_name.publication"), "th_keywords" => t('chapter.keywords'), "th_tags" => t('tags'), "th_title" => t('publications.chapter'), "th_pub_date" => t('publication.pub_date'), "th_chapter_title" => t('chapter.title'), "th_author" => t('chapter.author'), "th_page" => t('chapter.page'), "th_action" => t('chapter.action'), "th_cover" => t('publication.cover'), "th_download" => t('publication.download'), "th_online_reader" => t('publication.is_online_flipping_reader') }, "total_pages" => (chapters.total_pages rescue 0) } end end