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