Compare commits

..

No commits in common. "master" and "new" have entirely different histories.
master ... new

4 changed files with 86 additions and 186 deletions

232
app/controllers/admin/e_paper_subscribers_controller.rb Normal file → Executable file
View File

@ -1,25 +1,5 @@
require 'rubyXL'
class Admin::EPaperSubscribersController < OrbitAdminController class Admin::EPaperSubscribersController < OrbitAdminController
RackTempMiddleExist = defined?(Rack::TempfileReaper)
RACK_TEMPFILES = defined?(Rack::RACK_TEMPFILES) ? Rack::RACK_TEMPFILES : 'rack.tempfiles'
Is_Rails5 = (Rails.version.to_f >= 5)
if RackTempMiddleExist
if Is_Rails5
def fix_tempfile_reaper
request.set_header(RACK_TEMPFILES, [])
end
else
def fix_tempfile_reaper
env[RACK_TEMPFILES] = nil
end
end
else
def fix_tempfile_reaper; end
end
def initialize def initialize
super super
@app_title = "e_paper" @app_title = "e_paper"
@ -28,136 +8,115 @@ class Admin::EPaperSubscribersController < OrbitAdminController
def index def index
@table_fields = [t('email'), t('status'), t('language')] @table_fields = [t('email'), t('status'), t('language')]
@filter_fields = filter_fields([], []) @filter_fields = filter_fields([], [])
@filter_fields.delete(:status) @filter_fields.delete(:status)
@filter_fields.delete(:category) @filter_fields.delete(:category)
@filter_fields.delete(:tags) @filter_fields.delete(:tags)
@subscribers = EPaperSubscriber.order_by(sort)
@subscribers = EPaperSubscriber.order_by(sort)
@subscribers = search_data(@subscribers, [:email]).page(params[:page]).per(10) @subscribers = search_data(@subscribers,[:email]).page(params[:page]).per(10)
@thread = (params[:thread_id] ? Multithread.find(params[:thread_id]) : nil rescue nil) @thread = (params[:thread_id] ? Multithread.find(params[:thread_id]) : nil rescue nil)
if @thread && @thread.status[:status] == 'finish' if @thread && @thread.status[:status] == 'finish'
@thread = nil @thread = nil
end end
render :partial => "index" if request.xhr? render :partial => "index" if request.xhr?
end end
def destroy def destroy
subscriber = EPaperSubscriber.find(params[:id]) rescue nil subscriber = EPaperSubscriber.find(params[:id]) rescue nil
subscriber.destroy if subscriber if !subscriber.nil?
subscriber.destroy
end
redirect_to admin_e_paper_subscribers_path redirect_to admin_e_paper_subscribers_path
end end
def export_excel def export_excel
@epaper_subscribers = EPaperSubscriber.where(:email.nin=>[nil,""]).desc(:created_at) @epaper_subscribers = EPaperSubscriber.where(:email.nin=>[nil,""]).desc(:created_at)
@subscribers = @epaper_subscribers.where(:subscribed.ne=>false) @subscribers = @epaper_subscribers.where(:subscribed.ne=>false)
@unsubscribers = @epaper_subscribers.where(:subscribed=>false) @unsubscribers = @epaper_subscribers.where(:subscribed=>false)
respond_to do |format| respond_to do |format|
format.xlsx { format.xlsx {
response.headers['Content-Disposition'] = response.headers['Content-Disposition'] = 'attachment; filename="'+Site.first.title+'-'+I18n.t('e_paper.e_paper')+'-'+I18n.t('e_paper.subscriber')+'.xlsx"'
'attachment; filename="' +
Site.first.title + '-' +
I18n.t('e_paper.e_paper') + '-' +
I18n.t('e_paper.subscriber') + '.xlsx"'
} }
end end
end end
def get_subscribers_modal def get_subscribers_modal
@epaper_subscribers = EPaperSubscriber.where(:email.nin=>[nil,""]).desc(:created_at) @epaper_subscribers = EPaperSubscriber.where(:email.nin=>[nil,""]).desc(:created_at)
@subscribers = @epaper_subscribers.where(:subscribed.ne=>false) @subscribers = @epaper_subscribers.where(:subscribed.ne=>false)
@unsubscribers = @epaper_subscribers.where(:subscribed=>false) @unsubscribers = @epaper_subscribers.where(:subscribed=>false)
render :partial => 'modal_select', :layout => false render :partial => 'modal_select', :layout => false
end end
def import_from_excel def import_from_excel
thread = Multithread.where(:key=>'import_epaper_subscribers').first thread = Multithread.where(:key=>'import_epaper_subscribers').first
if thread.nil? if thread.nil?
thread = Multithread.create(:key=>'import_epaper_subscribers', :status=>{:status=>'Processing'}) thread = Multithread.create(:key=>'import_epaper_subscribers',:status=>{:status=>'Processing'})
else else
thread.update(:status=>{:status=>'Processing'}) thread.update(:status=>{:status=>'Processing'})
end end
file = params["import_file"]
tempfile = file.tempfile
ObjectSpace.undefine_finalizer(tempfile)
fix_tempfile_reaper
Thread.new do Thread.new do
workbook = RubyXL::Parser.parse(tempfile) workbook = RubyXL::Parser.parse(params["import_file"].tempfile)
subscribe_sheet = workbook['Subscribe']
subscribe_sheet = workbook['Subscribe']
unsubscribe_sheet = workbook['Unsubscribe'] unsubscribe_sheet = workbook['Unsubscribe']
all_count = (subscribe_sheet ? (subscribe_sheet.count - 1) : 0) + (unsubscribe_sheet ? (unsubscribe_sheet.count - 1) : 0)
all_count =
(subscribe_sheet ? (subscribe_sheet.count - 1) : 0) +
(unsubscribe_sheet ? (unsubscribe_sheet.count - 1) : 0)
puts_every_count = [all_count * 3 / 100, 1].max puts_every_count = [all_count * 3 / 100, 1].max
current_count = 0 current_count = 0
finish_percent = 0 finish_percent = 0
thread.update(:status=>{:status=>'Importing','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
thread.update( subscribe_sheet.each_with_index do |row, i|
:status=>{ next if i < 1
:status=>'Importing', c0 = row.cells[0]
'all_count'=>all_count, c1 = row.cells[1]
'current_count'=>current_count, if c0
'finish_percent'=>finish_percent email = c0.value
} if email.present?
) subscriber = EPaperSubscriber.where(:email=>email).first
if subscriber.nil?
if subscribe_sheet subscriber = EPaperSubscriber.new(:email=>email)
subscribe_sheet.each_with_index do |row, i| end
next if i < 1 language = c1.value
email = row.cells[0]&.value if language.blank?
next if email.blank? language = I18n.locale.to_s
end
subscriber = EPaperSubscriber.where(:email=>email).first || EPaperSubscriber.new(:email=>email) subscriber.subscribed = true
subscriber.subscribed = true subscriber.language = language
subscriber.language = row.cells[1]&.value.presence || I18n.locale.to_s subscriber.save
subscriber.save
current_count += 1
if current_count % puts_every_count == 0
finish_percent = (current_count * 100.0 / all_count).round(1)
thread.update(:status=>{:status=>'Importing','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
end end
end end
end current_count += 1
if current_count % puts_every_count == 0
if unsubscribe_sheet finish_percent = (current_count * 100.0 / all_count).round(1)
unsubscribe_sheet.each_with_index do |row, i| thread.update(:status=>{:status=>'Importing','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
next if i < 1
email = row.cells[0]&.value
next if email.blank?
subscriber = EPaperSubscriber.where(:email=>email).first || EPaperSubscriber.new(:email=>email)
subscriber.subscribed = false
subscriber.language = row.cells[1]&.value.presence || I18n.locale.to_s
subscriber.save
current_count += 1
if current_count % puts_every_count == 0
finish_percent = (current_count * 100.0 / all_count).round(1)
thread.update(:status=>{:status=>'Importing','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
end
end end
end end
unsubscribe_sheet.each_with_index do |row, i|
thread.update( next if i < 1
:status=>{ c0 = row.cells[0]
:status=>'finish', c1 = row.cells[1]
'all_count'=>all_count, if c0
'current_count'=>current_count, email = c0.value
'finish_percent'=>100 if email.present?
} subscriber = EPaperSubscriber.where(:email=>email).first
) if subscriber.nil?
subscriber = EPaperSubscriber.new(:email=>email)
end
language = c1.value
if language.blank?
language = I18n.locale.to_s
end
subscriber.subscribed = false
subscriber.language = language
subscriber.save
end
end
current_count += 1
if current_count % puts_every_count == 0
finish_percent = (current_count * 100.0 / all_count).round(1)
thread.update(:status=>{:status=>'Importing','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
end
end
finish_percent = 100
thread.update(:status=>{:status=>'finish','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
end end
redirect_to admin_e_paper_subscribers_path(thread_id: thread.id) redirect_to admin_e_paper_subscribers_path(thread_id: thread.id)
end end
@ -166,82 +125,45 @@ class Admin::EPaperSubscribersController < OrbitAdminController
@unsubscribers = [] @unsubscribers = []
respond_to do |format| respond_to do |format|
format.xlsx { format.xlsx {
response.headers['Content-Disposition'] = response.headers['Content-Disposition'] = 'attachment; filename="'+Site.first.title+'-'+I18n.t('e_paper.e_paper')+'-'+I18n.t('e_paper.subscriber')+'excel_format.xlsx"'
'attachment; filename="' +
Site.first.title + '-' +
I18n.t('e_paper.e_paper') + '-' +
I18n.t('e_paper.subscriber') + 'excel_format.xlsx"'
} }
end end
end end
def batch_delete_subscribers def batch_delete_subscribers
@thread = (params[:thread_id] ? Multithread.find(params[:thread_id]) : nil rescue nil) @thread = (params[:thread_id] ? Multithread.find(params[:thread_id]) : nil rescue nil)
if @thread && @thread.status[:status] == 'finish' if @thread && @thread.status[:status] == 'finish'
@thread = nil @thread = nil
end end
end end
def delete_subscribers def delete_subscribers
subscriber_ids = params['subscriber_ids'] subscriber_ids = params['subscriber_ids']
thread = Multithread.where(:key=>'delete_epaper_subscribers').first thread = Multithread.where(:key=>'delete_epaper_subscribers').first
if thread.nil? if thread.nil?
thread = Multithread.create( thread = Multithread.create(:key=>'delete_epaper_subscriber',:status=>{:status=>'Processing'})
:key=>'delete_epaper_subscribers',
:status=>{:status=>'Processing'}
)
else else
thread.update(:status=>{:status=>'Processing'}) thread.update(:status=>{:status=>'Processing'})
end end
if subscriber_ids
if subscriber_ids.present?
all_count = subscriber_ids.count all_count = subscriber_ids.count
puts_every_count = [all_count * 3 / 100, 1].max puts_every_count = [all_count * 3 / 100, 1].max
current_count = 0 current_count = 0
finish_percent = 0 finish_percent = 0
thread.update(:status=>{:status=>'Deleting','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
thread.update(
:status=>{
:status=>'Deleting',
'all_count'=>all_count,
'current_count'=>current_count,
'finish_percent'=>finish_percent
}
)
Thread.new do Thread.new do
EPaperSubscriber.where(:id.in=>subscriber_ids).to_a.each do |s| EPaperSubscriber.where(:id.in=>subscriber_ids).to_a.each do |s|
s.destroy s.destroy
current_count += 1 current_count += 1
if current_count % puts_every_count == 0 if current_count % puts_every_count == 0
finish_percent = (current_count * 100.0 / all_count).round(1) finish_percent = (current_count * 100.0 / all_count).round(1)
thread.update( thread.update(:status=>{:status=>'Deleting','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
:status=>{
:status=>'Deleting',
'all_count'=>all_count,
'current_count'=>current_count,
'finish_percent'=>finish_percent
}
)
end end
end end
finish_percent = 100
thread.update( thread.update(:status=>{:status=>'finish','all_count'=>all_count,'current_count'=>current_count,'finish_percent'=>finish_percent})
:status=>{
:status=>'finish',
'all_count'=>all_count,
'current_count'=>current_count,
'finish_percent'=>100
}
)
end end
else else
thread.update(:status=>{:status=>'finish'}) thread.update(:status=>{:status=>'finish'})
end end
redirect_to admin_e_paper_subscribers_batch_delete_subscribers_path(thread_id: thread.id) redirect_to admin_e_paper_subscribers_batch_delete_subscribers_path(thread_id: thread.id)
end end
end
end

35
app/controllers/e_papers_controller.rb Normal file → Executable file
View File

@ -1,5 +1,5 @@
class EPapersController < ApplicationController class EPapersController < ApplicationController
FrontendMethods = ["papers", "topics","showpaper"] FrontendMethods = ["papers", "topics"]
EmptyImg = "data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=" EmptyImg = "data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="
EmptyImgUrl = "#{EmptyImg}\" style=\"display: none;" EmptyImgUrl = "#{EmptyImg}\" style=\"display: none;"
def self.custom_widget_data def self.custom_widget_data
@ -91,7 +91,7 @@ class EPapersController < ApplicationController
{ {
"title" => criteria.title, "title" => criteria.title,
"description" => criteria.description, "description" => criteria.description,
"link_to_show" => OrbitHelper.url_to_show(criteria.to_param) + "?method=showpaper" "link_to_show" => OrbitHelper.url_to_show(criteria.to_param) + "?method=topics"
} }
end end
{ {
@ -114,7 +114,7 @@ class EPapersController < ApplicationController
member_name = member.name member_name = member.name
end end
{ {
"content" => epaper.content, "content" => epaper.content,
"publish_date" => epaper.period, "publish_date" => epaper.period,
"description" => epaper.description, "description" => epaper.description,
@ -129,23 +129,6 @@ class EPapersController < ApplicationController
} }
end end
def showpaper
params = OrbitHelper.params
if params[:uid].present?
criteria = PaperCriteria.where(:uid => params[:uid]).first
return if criteria.nil?
end
if criteria.banner_image.present?
banner_image = EPaperImage.find(criteria.banner_image).image.url
end
{
"title" => criteria.title,
"banner_image" => banner_image,
"content" => criteria.content,
"description" => criteria.description
}
end
def topics def topics
params = OrbitHelper.params params = OrbitHelper.params
if params[:uid].present? if params[:uid].present?
@ -214,7 +197,7 @@ class EPapersController < ApplicationController
{ {
"title" => criteria.title, "title" => criteria.title,
"description" => criteria.description, "description" => criteria.description,
"link_to_show" => OrbitHelper.widget_item_url(criteria.to_param) + "?method=showpaper" "link_to_show" => OrbitHelper.widget_item_url(criteria.to_param) + "?method=topics"
} }
end end
{ {
@ -280,7 +263,7 @@ class EPapersController < ApplicationController
{ {
"categories" => data, "categories" => data,
"extras" => { "extras" => {
"read_more" => OrbitHelper.widget_more_url + "?method=showpaper" "read_more" => OrbitHelper.widget_more_url + "?method=topics"
} }
} }
end end
@ -317,7 +300,7 @@ class EPapersController < ApplicationController
{ {
"categories" => data, "categories" => data,
"extras" => { "extras" => {
"read_more" => OrbitHelper.widget_more_url + "?method=showpaper" "read_more" => OrbitHelper.widget_more_url + "?method=topics"
} }
} }
end end
@ -349,8 +332,8 @@ class EPapersController < ApplicationController
def unsubscribeuser def unsubscribeuser
subscriber = EPaperSubscriber.where(:email => params[:email]).first rescue nil subscriber = EPaperSubscriber.where(:email => params[:email]).first rescue nil
if !subscriber.nil? if !subscriber.nil?
subscriber.subscribed = false subscriber.subscribed = false
subscriber.save subscriber.save
data = {"success" => true, "msg" => "Successfully Unsubscribed!!!"} data = {"success" => true, "msg" => "Successfully Unsubscribed!!!"}
else else
data = {"success" => false, "msg" => "You are not a subscriber!!!"} data = {"success" => false, "msg" => "You are not a subscriber!!!"}
@ -365,4 +348,4 @@ class EPapersController < ApplicationController
asc_flag ? tmp : -tmp asc_flag ? tmp : -tmp
end end
end end
end end

View File

@ -1 +0,0 @@
<%= render_view %>

View File

@ -1,4 +0,0 @@
<h1>{{title}}</h1>
<img src="{{banner_image}}"/>
<div>{{description}}</div>
<div>{{content}}</div>