class FeedsController < ApplicationController skip_before_action :verify_authenticity_token def notify_change feed = SiteFeed.where(:feed_uid=>params[:uid]).first feed_annc = SiteFeedAnnc.where(:feed_id=>feed.id).first if feed_annc locales = Site.first.in_use_locales rescue I18n.available_locales site_root_url = Site.first.root_url rescue "" main_directory = File.join("#{Rails.root}","public","site_feeds") feed_directory = File.join(main_directory.to_s, feed.id.to_s) feed_data = JSON.parse(File.read(File.join(feed_directory.to_s, feed.feed_uid + ".json"))) channel_key_pluralize = feed_annc.channel_key.pluralize if params[:type] == 'create' locales.each do |locale| trans = {} locale = locale.to_s trans[locale] = {} I18n.with_locale(locale) do trans[locale]['top'] = I18n.t(:top) trans[locale]['hot'] = I18n.t(:hot) trans[locale]['more_plus'] = I18n.t("feed.more") end locale_sym = locale.to_sym params[:data].each do |a| a = JSON.parse(a) postdate = Time.parse(a["postdate"]) insert_idx = 0 if postdate insert_idx = feed_annc[:all_contents_for_feed][locale_sym].index{|aa| aa["postdate"] <= postdate} insert_idx = 0 if insert_idx.nil? end feed_annc.all_contents_for_feed_will_change! feed_annc[:all_contents_for_feed][locale_sym].insert(insert_idx, feed_annc.process_tmp(a,locale,trans,site_root_url)) feed_data[channel_key_pluralize].insert(insert_idx, a) end end feed_annc.instance_variable_set(:@skip_callback, true) feed_annc.save! elsif params[:type] == 'update' locales.each do |locale| trans = {} locale = locale.to_s trans[locale] = {} I18n.with_locale(locale) do trans[locale]['top'] = I18n.t(:top) trans[locale]['hot'] = I18n.t(:hot) trans[locale]['more_plus'] = I18n.t("feed.more") end locale_sym = locale.to_sym params[:data].each do |a| a = JSON.parse(a) feed_annc[:all_contents_for_feed][locale_sym].each_with_index do |aa, i| if aa["id"] == a["id"] feed_annc.all_contents_for_feed_will_change! feed_annc[:all_contents_for_feed][locale_sym][i] = feed_annc.process_tmp(a,locale,trans,site_root_url) feed_data[channel_key_pluralize][i] = a break end end end end feed_annc.instance_variable_set(:@skip_callback, true) feed_annc.save! elsif params[:type] == 'destroy' locales.each do |locale| locale_sym = locale.to_sym feed_annc.all_contents_for_feed_will_change! feed_annc[:all_contents_for_feed][locale_sym].reject!{|a| params[:data].include?(a["id"]) } feed_data[channel_key_pluralize].reject!{|a| params[:data].include?(a["id"]) } end feed_annc.instance_variable_set(:@skip_callback, true) feed_annc.save! end feed_data = feed_data.to_json FileUtils.mkdir_p(feed_directory) if !File.exists?(feed_directory) File.open(File.join(feed_directory.to_s,feed.feed_uid + ".json"),"w") do |file| feed_data.force_encoding("utf-8") file.write(feed_data) end end render :json => {success: true} end end