Auto merge http and https remote_site_url.
Update cache when updating channel_title or remote_site_url.
This commit is contained in:
parent
967f158612
commit
5ae52c6e5f
|
@ -192,12 +192,15 @@ class Admin::FeedsController < OrbitAdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
def channel_title
|
def channel_title
|
||||||
site_feeds = SiteFeed.where(:remote_site_url => params["url"])
|
Thread.new do
|
||||||
site_feeds.each do |sf|
|
site_feeds = SiteFeed.where(:remote_site_url => params["url"])
|
||||||
sf.channel_title_translations = params["channel_title_translations"]
|
site_feeds.each do |sf|
|
||||||
sf.instance_variable_set(:@skip_callback, true)
|
sf.channel_title_translations = params["channel_title_translations"]
|
||||||
sf.save
|
sf.instance_variable_set(:@skip_callback, true)
|
||||||
sf.sync_data_to_annc
|
sf.save
|
||||||
|
sf.sync_data_to_annc
|
||||||
|
sf.update_channel_title
|
||||||
|
end
|
||||||
end
|
end
|
||||||
render :json => {"success" => true, "title" => params["channel_title_translations"][I18n.locale.to_s]}.to_json
|
render :json => {"success" => true, "title" => params["channel_title_translations"][I18n.locale.to_s]}.to_json
|
||||||
end
|
end
|
||||||
|
@ -212,8 +215,24 @@ class Admin::FeedsController < OrbitAdminController
|
||||||
site_feed.feed_name_translations = params[:feed][:title_translations]
|
site_feed.feed_name_translations = params[:feed][:title_translations]
|
||||||
site_feed.disabled = false
|
site_feed.disabled = false
|
||||||
site_feed.feed_url = params[:feed][:url]
|
site_feed.feed_url = params[:feed][:url]
|
||||||
other_site_feed = SiteFeed.where(:remote_site_url=>site_feed.remote_site_url).first
|
uri = URI(site_feed.remote_site_url)
|
||||||
|
site_host = uri.host
|
||||||
|
other_site_feeds = SiteFeed.where(:remote_site_url=>/:\/\/#{::Regexp.escape(site_host)}/)
|
||||||
|
other_site_feed = other_site_feeds.first
|
||||||
site_feed.channel_title_translations = other_site_feed.channel_title_translations if other_site_feed
|
site_feed.channel_title_translations = other_site_feed.channel_title_translations if other_site_feed
|
||||||
|
other_scheme = URI(other_site_feed.remote_site_url).scheme
|
||||||
|
site_scheme = uri.scheme
|
||||||
|
if (['http','https'] & [other_scheme, site_scheme]).count == 2
|
||||||
|
if site_scheme == 'http'
|
||||||
|
site_feed.remote_site_url = site_feed.remote_site_url.sub('http://','https://')
|
||||||
|
else
|
||||||
|
remote_site_url = site_feed.remote_site_url
|
||||||
|
other_site_feeds.update_all(:remote_site_url=>remote_site_url)
|
||||||
|
site_feed_anncs = SiteFeedAnnc.where(:feed_id.in=>other_site_feeds.pluck(:id))
|
||||||
|
site_feed_anncs.update_all(:remote_site_url=>remote_site_url)
|
||||||
|
site_feed_anncs.each{|sfa| sfa.update_remote_site_url}
|
||||||
|
end
|
||||||
|
end
|
||||||
module_app = ModuleApp.where(:key=>site_feed.channel_key).first
|
module_app = ModuleApp.where(:key=>site_feed.channel_key).first
|
||||||
if module_app.feeds_model
|
if module_app.feeds_model
|
||||||
sync_fields_data = SiteFeed::ModuleAppSyncFields.map{|f| [f, module_app[f]] }.to_h
|
sync_fields_data = SiteFeed::ModuleAppSyncFields.map{|f| [f, module_app[f]] }.to_h
|
||||||
|
|
|
@ -41,11 +41,30 @@ class SiteFeed
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
after_save do
|
after_save do
|
||||||
unless @skip_callback
|
if @skip_callback
|
||||||
|
unless @skip_fix_data
|
||||||
|
update_url = self.remote_site_url_changed?
|
||||||
|
if self.channel_title_changed?
|
||||||
|
self.update_channel_title(update_url)
|
||||||
|
elsif update_url
|
||||||
|
self.update_remote_site_url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
self.sync_data_to_annc
|
self.sync_data_to_annc
|
||||||
end
|
end
|
||||||
|
@site_feed_annc = nil
|
||||||
end
|
end
|
||||||
scope :enabled, ->{where(:disabled => false)}
|
scope :enabled, ->{where(:disabled => false)}
|
||||||
|
def site_feed_annc
|
||||||
|
@site_feed_annc ||= SiteFeedAnnc.where(:feed_id=>self.id).first
|
||||||
|
end
|
||||||
|
def update_channel_title(update_url=false) #update_url=true will also fix remote_site_url in data
|
||||||
|
site_feed_annc.update_channel_title(update_url) if site_feed_annc
|
||||||
|
end
|
||||||
|
def update_remote_site_url
|
||||||
|
site_feed_annc.update_remote_site_url if site_feed_annc
|
||||||
|
end
|
||||||
def sync_data_to_annc(site_feed_annc=nil)
|
def sync_data_to_annc(site_feed_annc=nil)
|
||||||
category_title = self.category[:title] rescue {}
|
category_title = self.category[:title] rescue {}
|
||||||
tmp_channel_title = self.channel_title_for_cache
|
tmp_channel_title = self.channel_title_for_cache
|
||||||
|
|
|
@ -35,6 +35,95 @@ class SiteFeedAnnc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
def update_remote_site_url
|
||||||
|
update_fields = ['source_url','source-site']
|
||||||
|
tmp_url = self.remote_site_url
|
||||||
|
self.all_contents_for_feed_will_change!
|
||||||
|
locales = Site.first.in_use_locales rescue I18n.available_locales
|
||||||
|
locales.each do |l|
|
||||||
|
anns = self[:all_contents_for_feed][l.to_s]
|
||||||
|
if anns
|
||||||
|
(0...anns.count).each do |i|
|
||||||
|
a = anns[i]
|
||||||
|
update_fields.each do |f|
|
||||||
|
a[f] = tmp_url
|
||||||
|
end
|
||||||
|
a['statuses'] = []
|
||||||
|
if a[:is_top]
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => trans[locale]['top'],
|
||||||
|
"status-class" => "status-top"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
if a[:is_hot]
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => trans[locale]['hot'],
|
||||||
|
"status-class" => "status-hot"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
if !a["source-site-title"].blank?
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => "<a href=\"#{a["source_url"]}\" target=\"_blank\" class=\"feed-source\">#{a["source-site-title"]}</a>",
|
||||||
|
"status-class" => "status-source"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.save
|
||||||
|
end
|
||||||
|
def update_channel_title(update_url=false) #update_url=true will also fix remote_site_url in data
|
||||||
|
update_fields = []
|
||||||
|
if update_url
|
||||||
|
update_fields = ['source_url','source-site']
|
||||||
|
end
|
||||||
|
tmp_url = self.remote_site_url
|
||||||
|
self.all_contents_for_feed_will_change!
|
||||||
|
locales = Site.first.in_use_locales rescue I18n.available_locales
|
||||||
|
trans = {}
|
||||||
|
locales.each do |locale|
|
||||||
|
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
|
||||||
|
end
|
||||||
|
locales.each do |locale|
|
||||||
|
source_site_title = (self[:channel_title][locale] rescue "")
|
||||||
|
anns = self[:all_contents_for_feed][locale.to_s]
|
||||||
|
if anns
|
||||||
|
(0...anns.count).each do |i|
|
||||||
|
a = anns[i]
|
||||||
|
a["source-site-title"] = source_site_title
|
||||||
|
update_fields.each do |f|
|
||||||
|
a[f] = tmp_url
|
||||||
|
end
|
||||||
|
a['statuses'] = []
|
||||||
|
if a[:is_top]
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => trans[locale]['top'],
|
||||||
|
"status-class" => "status-top"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
if a[:is_hot]
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => trans[locale]['hot'],
|
||||||
|
"status-class" => "status-hot"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
if !a["source-site-title"].blank?
|
||||||
|
a['statuses'] << {
|
||||||
|
"status" => "<a href=\"#{a["source_url"]}\" target=\"_blank\" class=\"feed-source\">#{a["source-site-title"]}</a>",
|
||||||
|
"status-class" => "status-source"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.save
|
||||||
|
end
|
||||||
def process_tmp(a, locale=nil, trans=nil, site_root_url=nil)
|
def process_tmp(a, locale=nil, trans=nil, site_root_url=nil)
|
||||||
cat = self[:category_title]
|
cat = self[:category_title]
|
||||||
locale = I18n.locale.to_s if locale.nil?
|
locale = I18n.locale.to_s if locale.nil?
|
||||||
|
@ -77,13 +166,12 @@ class SiteFeedAnnc
|
||||||
end
|
end
|
||||||
tmp["category"] = cat
|
tmp["category"] = cat
|
||||||
tmp["source_url"] = self.remote_site_url
|
tmp["source_url"] = self.remote_site_url
|
||||||
|
|
||||||
tmp["source-site"] = self.remote_site_url
|
tmp["source-site"] = self.remote_site_url
|
||||||
tmp["source-site-title"] = (self[:channel_title][locale] rescue "")
|
tmp["source-site-title"] = (self[:channel_title][locale] rescue "")
|
||||||
tmp["params"] = tmp["params"].to_s + "_" + self.feed_id.to_s + "h"
|
tmp["params"] = tmp["params"].to_s + "_" + self.feed_id.to_s + "h"
|
||||||
if !tmp["source-site-title"].blank?
|
if !tmp["source-site-title"].blank?
|
||||||
tmp['statuses'] << {
|
tmp['statuses'] << {
|
||||||
"status" => "<a href='#{tmp["source-site"]}' target='_blank' class='feed-source'>#{tmp["source-site-title"]}</a>",
|
"status" => "<a href=\"#{tmp["source-site"]}\" target=\"_blank\" class=\"feed-source\">#{tmp["source-site-title"]}</a>",
|
||||||
"status-class" => "status-source"
|
"status-class" => "status-source"
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -95,7 +183,7 @@ class SiteFeedAnnc
|
||||||
tmp["title"] = tmp["title_translations"][locale]
|
tmp["title"] = tmp["title_translations"][locale]
|
||||||
tmp["subtitle"] = tmp["subtitle_translations"][locale]
|
tmp["subtitle"] = tmp["subtitle_translations"][locale]
|
||||||
tmp["source-site-link"] = tmp["source-site"]
|
tmp["source-site-link"] = tmp["source-site"]
|
||||||
tmp["source-site"] = "<a href='#{tmp["source-site"]}' target='_blank' class='feed-source'>#{tmp["source-site-title"]}</a>"
|
tmp["source-site"] = "<a href=\"#{tmp["source-site"]}\" target=\"_blank\" class=\"feed-source\">#{tmp["source-site-title"]}</a>"
|
||||||
tmp["link_to_show"] = !tmp["external_link"].blank? ? tmp["external_link"] : nil
|
tmp["link_to_show"] = !tmp["external_link"].blank? ? tmp["external_link"] : nil
|
||||||
tmp["target"] = (site_root_url.blank? || tmp["link_to_show"].blank?) ? '_blank' : (tmp["link_to_show"].include?(site_root_url) ? '_self' : '_blank')
|
tmp["target"] = (site_root_url.blank? || tmp["link_to_show"].blank?) ? '_blank' : (tmp["link_to_show"].include?(site_root_url) ? '_self' : '_blank')
|
||||||
tmp["img_src"] = tmp["image"]["thumb"] || "/assets/announcement-default.jpg"
|
tmp["img_src"] = tmp["image"]["thumb"] || "/assets/announcement-default.jpg"
|
||||||
|
@ -149,15 +237,16 @@ class SiteFeedAnnc
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
tmp["category"] = cat
|
tmp["category"] = cat
|
||||||
|
tmp["source_url"] = self.remote_site_url
|
||||||
tmp["source-site"] = self.remote_site_url
|
tmp["source-site"] = self.remote_site_url
|
||||||
tmp["source-site-title"] = (self[:channel_title][locale] rescue "")
|
tmp["source-site-title"] = (self[:channel_title][locale] rescue "")
|
||||||
tmp["params"] = tmp["params"].to_s + "_" + self.feed_id.to_s + "h"
|
tmp["params"] = tmp["params"].to_s + "_" + self.feed_id.to_s + "h"
|
||||||
tmp['statuses'] << {
|
tmp['statuses'] << {
|
||||||
"status" => "<a href='#{tmp["source-site"]}' target='_blank' class='feed-source'>#{tmp["source-site-title"]}</a>",
|
"status" => "<a href=\"#{tmp["source-site"]}\" target=\"_blank\" class=\"feed-source\">#{tmp["source-site-title"]}</a>",
|
||||||
"status-class" => "status-source"
|
"status-class" => "status-source"
|
||||||
}
|
}
|
||||||
tmp["source-site-link"] = tmp["source-site"]
|
tmp["source-site-link"] = tmp["source-site"]
|
||||||
tmp["source-site"] = "<a href='#{tmp["source-site"]}' target='_blank' class='feed-source'>#{tmp["source-site-title"]}</a>"
|
tmp["source-site"] = "<a href=\"#{tmp["source-site"]}\" target=\"_blank\" class=\"feed-source\">#{tmp["source-site-title"]}</a>"
|
||||||
tmp["target"] = "_self"
|
tmp["target"] = "_self"
|
||||||
tmp["more"] = trans[locale]['more_plus']
|
tmp["more"] = trans[locale]['more_plus']
|
||||||
tmp["view_count"] = ""
|
tmp["view_count"] = ""
|
||||||
|
|
|
@ -46,8 +46,8 @@
|
||||||
<ul class="channel-list list-unstyled">
|
<ul class="channel-list list-unstyled">
|
||||||
<li class="channel-item">
|
<li class="channel-item">
|
||||||
<span class="channel-name"><%= name %></span>
|
<span class="channel-name"><%= name %></span>
|
||||||
<% channels[name].each do |channel| %>
|
<ul class="channel-sublist">
|
||||||
<ul class="channel-sublist">
|
<% channels[name].each do |channel| %>
|
||||||
<li class="channel-subitem" >
|
<li class="channel-subitem" >
|
||||||
<span class="channel-feedname"><%= channel.feed_name %></span>
|
<span class="channel-feedname"><%= channel.feed_name %></span>
|
||||||
<span class="label label-info"><%= channel.category.title rescue "" %></span>
|
<span class="label label-info"><%= channel.category.title rescue "" %></span>
|
||||||
|
@ -57,8 +57,8 @@
|
||||||
<button class="btn btn-danger btn-small unsubscribe-btn" data-feed-uid="<%= channel.feed_uid %>" data-feed-name="<%= channel.feed_name %>"><%= t("feed.unsubscribe") %></button>
|
<button class="btn btn-danger btn-small unsubscribe-btn" data-feed-uid="<%= channel.feed_uid %>" data-feed-name="<%= channel.feed_name %>"><%= t("feed.unsubscribe") %></button>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<% end %>
|
||||||
<% end %>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
dataType : "json",
|
dataType : "json",
|
||||||
type : "post"
|
type : "post"
|
||||||
}).done(function(){
|
}).done(function(){
|
||||||
el.parent().remove();
|
el.parents('.channel-subitem').remove();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,10 +14,19 @@ Rails.application.routes.draw do
|
||||||
trans[locale]['more_plus'] = I18n.t("feed.more")
|
trans[locale]['more_plus'] = I18n.t("feed.more")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
org_remote_site_urls = SiteFeed.all.pluck(:remote_site_url).uniq
|
||||||
|
all_remote_site_urls = org_remote_site_urls.map{|a| a.split('://')[1]}.uniq
|
||||||
|
all_remote_site_urls.each do |remote_site_url|
|
||||||
|
match_urls = org_remote_site_urls.select{|s| s.include?("://#{remote_site_url}")}
|
||||||
|
if match_urls.count == 2
|
||||||
|
SiteFeed.where(:remote_site_url.in=>match_urls).update_all(:remote_site_url=>"https://#{remote_site_url}")
|
||||||
|
SiteFeedAnnc.where(:remote_site_url.in=>match_urls).update_all(:remote_site_url=>"https://#{remote_site_url}")
|
||||||
|
end
|
||||||
|
end
|
||||||
SiteFeed.all.order_by(:channel_title=>-1).to_a.group_by(&:remote_site_url).each do |url, site_feeds|
|
SiteFeed.all.order_by(:channel_title=>-1).to_a.group_by(&:remote_site_url).each do |url, site_feeds|
|
||||||
site_feed = site_feeds.first
|
site_feed = site_feeds.first
|
||||||
channel_title_translations = site_feed.channel_title_translations
|
channel_title_translations = site_feed.channel_title_translations
|
||||||
SiteFeed.where(:id.in=>site_feeds[1..-1].map{|sf| sf.id}).update_all(channel_title_translations.map{|l, s| ["channel_title.#{l}", s]}.to_h)
|
SiteFeed.where(:id.in=>site_feeds[1..-1].map{|sf| sf.id}).update_all(:channel_title_translations => channel_title_translations)
|
||||||
end
|
end
|
||||||
SiteFeedAnnc.where(:feed_id.nin=>SiteFeed.all.pluck(:id)).destroy
|
SiteFeedAnnc.where(:feed_id.nin=>SiteFeed.all.pluck(:id)).destroy
|
||||||
SiteFeed.each do |site_feed|
|
SiteFeed.each do |site_feed|
|
||||||
|
|
Loading…
Reference in New Issue