# forum_id t.integer # user_id t.integer # topic_id t.integer # category_id t.integer # language_id t.integer # hyperlink_id t.integer # suggestion, t.boolean default: false # state, t.string limit: 20, default: new # content t.text # resolution t.text # created_at t.datetime # updated_at t.datetime module Xforum class Translation < ActiveRecord::Base require 'json' belongs_to :forum belongs_to :category belongs_to :topic belongs_to :hyperlink def self.translate_to(list) list.each{|entry| translations=Translation.grab({forum_id:entry[:id]},[:language,:content],{}) entry.store(:translations,translations) } list end def self.get_localized_forum(language,params) return if params.nil? plucking=ForumAssist.make_string_list(params[:plucking]) ordering=ForumAssist.make_string_list(params[:ordering]) unless params[:ordering].nil? params[:ordering].nil? ? alist=Forum.where(params[:lookup]).pluck(plucking) : alist= Forum.where(params[:lookup]).order(ordering).pluck(plucking) unless alist.empty? indexes=plucking.split(',') content=indexes.index('content') language_list=Language.where(active:true).order(:code).pluck(:id,:name) language_list=ForumAssist.named_array(language_list,[:id,:item]) if alist.is_a?(Array) alist.each { |a_entry| entry=ForumAssist.named_array(a_entry,params[:plucking])[0] translation = Translation.where(forum_id:entry[:id],language_id:language).pluck(:content)[0] unless language.nil? a_entry[content]=translation unless translation.nil? full_list=Translation.where(forum_id:entry[:id]).pluck(:language_id) a_entry.push(!(full_list.size==language_list.size)) if language_list.empty? a_entry.push(['nothing']) else this_list=[] language_list.each{ |thisone| this_list.push(thisone[:item]) unless full_list.include?(thisone[:id]) } a_entry.push(this_list.clone.to_json ) end } else translation = Translation.where(forum_id:alist[:id],language_id:language).pluck(:content)[0] alist[:content]=translation unless translation.nil? end params[:size] == 0 ? alist[0] : alist end end # noinspection RubyLiteralArrayInspection def self.get_translations(params) language_id = Language.get_me(params) topic_id = Topic.where(name:params[:topic]).pluck(:id)[0] #ForumAssist.named_array(Translation.where(topic_id:topic_id,language_id:language_id,state:['new','open']).pluck(:forum_id,:content,:suggestion),[:forum_id,:item,:suggestion]) Translation.grab({topic_id:topic_id,language_id:language_id,state:['new','open']},[:forum_id,:content,:suggestion],{swap:{content: :item}}) end def self.add_one(params,topic_id,user_id,forum_id) unless params[:translation] == '' if PeopleList.check_people({topic:topic_id,list:'moderator',user_id:user_id}) && !Translation.where(language_id:Language.get_me(params),forum_id:params[:id]).nil? Translation.where(forum_id:forum_id,topic_id:topic_id, language_id:Language.get_me(params)).update_all(content:params[:translation],suggestion:false,state:'open') Translation.where(forum_id:params[:id],topic_id:topic_id,suggestion:true).update_all(state:'closed') else suggestion = !Translation.where(language_id:Language.get_me(params),forum_id:forum_id).nil? Translation.create(forum_id:forum_id,user_id:user_id,topic_id:topic_id, language_id:Language.get_me(params), content:params[:translation],suggestion:suggestion,state:'new') end end end def self.translate_list(alist,language,list_name) alist.each.each {|entry| translation=Translation.find_by(forum_id:entry[:id],language_id:language) unless language.nil? case list_name when 'category' entry.store(:item,Category.where(id:entry[:id]).pluck(:name)[0] ) entry.store(:value,entry[:item]) when 'topic' entry.store(:item,Topic.where(id:entry[:id]).pluck(:name)[0] ) entry.store(:value,entry[:item]) when 'language' translation ={content:entry[:value].concat(' - ').concat(entry[:local_name])} entry.store(:value,'wait') else end entry[:value]=translation[:content] unless translation.nil? } alist end end end