diff --git a/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/app/controllers/panel/announcement/back_end/bulletins_controller.rb index 2a42d4d..d607440 100644 --- a/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # include OrbitControllerLib::DivisionForDisable @@ -48,7 +49,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # GET /bulletins/new.xml def new if(session[:in_validate_object].blank?) - @bulletin = Bulletin.new(:postdate => DateTime.now) + @bulletin = Bulletin.new(:postdate => DateTime.now, :email_sentdate => DateTime.now) else @bulletin = session[:in_validate_object] session[:in_validate_object] = {} @@ -65,6 +66,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # GET /bulletins/1/edit def edit @bulletin = Bulletin.find(params[:id]) + @email_users = @bulletin.get_email_users @tags = get_tags is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil @@ -83,6 +85,10 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # POST /bulletins.xml def create @tags = get_tags + + params[:bulletin][:email_user_ids] = params[:bulletin][:email_user_ids].uniq + params[:bulletin][:email_user_ids].delete('') + @bulletin = Bulletin.new(params[:bulletin]) @bulletin.deadline = nil if (@bulletin.deadline < @bulletin.postdate rescue nil) @@ -97,6 +103,14 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController respond_to do |format| if @bulletin.save + if @bulletin.email_sent == true && (is_manager? || is_admin?) + send_email_data(@bulletin) + + @bulletin.email_sent = false + @bulletin.save + end + + format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('announcement.create_bulletin_success')) } format.xml { render :xml => @bulletin, :status => :created, :location => @bulletin } # format.js @@ -122,11 +136,23 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController def update @bulletin = Bulletin.find(params[:id]) + params[:bulletin][:tag_ids] = (params[:bulletin][:tag_ids] ? params[:bulletin][:tag_ids] : []) + + params[:bulletin][:email_user_ids] = params[:bulletin][:email_user_ids].uniq + params[:bulletin][:email_user_ids].delete('') + delete_out_invalid_date_from_params respond_to do |format| if @bulletin.update_attributes(params[:bulletin]) + if @bulletin.email_sent == true && (is_manager? || is_admin?) + send_email_data(@bulletin) + + @bulletin.email_sent = false + @bulletin.save + end + format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('bulletin.update_bulletin_success')) } format.js { render 'toggle_enable' } format.xml { head :ok } @@ -164,6 +190,45 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController protected + def send_email_data(bulletin) + + @site = Site.first + @user = User.find(bulletin.create_user_id) + @host = request.host_with_port + + @group_mail = MailCron.get_send_group_mail( bulletin.email_user_ids , bulletin.other_mailaddress ) + + if !@group_mail.join.blank? + + @mail_content = { + "host" => @host, + "lang" => I18n.locale, + "site_title" => @site.title, + "title" => bulletin.title, + "template" => 'announcement_mailer/cron_mail', + "url" => "http://#{@host}#{panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.category.id)}" + } + + @mail_cron = { + :mail_from_app => 'announcement', + # :mail_from => @user.email, + # :mail_reply_to => @user.email, + :mail_subject => "#{t("announcement.mail_subject",:site_title => @site.title)}:#{bulletin.title}", + :mail_to => @group_mail.join(','), + :mail_content => @mail_content , + :mail_sentdate => bulletin.email_sentdate, + :create_user_id => bulletin.create_user_id, + :update_user_id => bulletin.create_user_id + } + + @mail_cron = MailCron.new(@mail_cron) + + @mail_cron.save + + end + + end + def delete_out_invalid_date_from_params if((params[:bulletin]["deadline(1i)"] && params[:bulletin]["deadline(1i)"].blank?) or (params[:bulletin]["deadline(2i)"] && params[:bulletin]["deadline(2i)"].blank?) or (params[:bulletin]["deadline(3i)"] && params[:bulletin]["deadline(3i)"].blank?)) params[:bulletin].delete("deadline(1i)") diff --git a/app/models/bulletin.rb b/app/models/bulletin.rb index 77fa12b..843d597 100644 --- a/app/models/bulletin.rb +++ b/app/models/bulletin.rb @@ -29,6 +29,11 @@ class Bulletin field :public, :type => Boolean, :default => true + field :email_sent, :type => Boolean, :default => false + field :email_sentdate , :type => DateTime + field :email_user_ids + field :other_mailaddress + mount_uploader :image, ImageUploader has_many :bulletin_links, :autosave => true, :dependent => :destroy @@ -149,6 +154,9 @@ class Bulletin preview_object end + def get_email_users + User.find(self.email_user_ids) rescue [] + end protected diff --git a/app/views/announcement_mailer/cron_mail.html.erb b/app/views/announcement_mailer/cron_mail.html.erb new file mode 100644 index 0000000..b780edc --- /dev/null +++ b/app/views/announcement_mailer/cron_mail.html.erb @@ -0,0 +1,32 @@ +<% # encoding: utf-8 %> + +<% I18n.locale = @data.mail_content["lang"] %> + + + +
+ + + ++ <%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'bulletin[email_user_ids][]', users: @email_users} %> +
+