epaper/app/controllers/admin/e_paper_criterias_controlle...

95 lines
3.1 KiB
Ruby

require 'rake'
class Admin::EPaperCriteriasController < OrbitAdminController
def initialize
super
@app_title = "e_paper"
end
def index
@table_fields = [t('e_paper.criteria_title'),t('e_paper.date_span')]
@filter_fields = filter_fields([], @module_app.tags)
@filter_fields.delete(:status)
@filter_fields.delete(:categories)
@criterias = PaperCriteria.order_by(sort)
# .with_tags(filters("tags"))
@criterias = search_data(@criterias,[:title]).page(params[:page]).per(10)
#@url = "/" + I18n.locale.to_s + "/" +Page.where(:module => "e_paper").first.url + "?method=papers"
render :partial => "index" if request.xhr?
end
def new
@paper_criteria = PaperCriteria.new
end
def create
paper_criteria = PaperCriteria.create(paper_criteria_params)
redirect_to admin_e_paper_criterias_path
end
def edit
@paper_criteria = PaperCriteria.find(params[:id])
end
def update
paper_criteria = PaperCriteria.find(params[:id])
paper_criteria.update_attributes(paper_criteria_params)
redirect_to admin_e_paper_criterias_path
end
def destroy
paper_criteria = PaperCriteria.find(params[:id])
paper_criteria.destroy
redirect_to admin_e_paper_criterias_path
end
def send_test_email
paper_criteria = PaperCriteria.find(params[:id])
papers = paper_criteria.epaper_topics.group_by(&:category)
papers_data = []
page = Page.where(:module => "e_paper").first.url rescue ""
papers_sorted = get_all_categories.map do |v|
tmp = papers.select{|cat,topics| (cat.id==v.id rescue false)}
if tmp.count==0
tmp = nil
end
tmp
end.compact
papers_sorted.each do |paper|
paper.each do |category, topics|
topics_data = Array(topics).compact
papers_data << {
"category_title" => (category.title rescue nil),
"category" => category,
"topics" => topics_data
}
end
end
email = Email.new(:mail_subject => paper_criteria.sending_title, :mail_lang => :zh_tw, :template => "admin/e_paper_criterias/emailer", :template_data => {"paper" => paper_criteria, "page" => "http://" + request.host_with_port + page, "siteurl" => "http://" + request.host_with_port ,"papers_data" => papers_data }, :mail_to => params[:email])
email.deliver
render :json => {"success" => true}.to_json
end
def send_newsletter
Orbit::Application.load_tasks
rake = Rake::Task['epaper:send_email'].execute(OpenStruct.new({:paper_criteria_id => params[:id], :domain => request.host_with_port}))
# rake = Rake::Task['epaper:send_email'].invoke([params[:id], request.host_with_port])
render :json => {"success" => true}.to_json
end
private
def paper_criteria_params
params.require(:paper_criteria).permit!
end
def get_all_categories
app = ModuleApp.where(key: 'e_paper').first
asc_flag = app.asc rescue true
app.categories.enabled.sort_by do |category|
tmp = category.sort_number.to_i rescue 0
asc_flag ? tmp : -tmp
end
end
end