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"] %> + + + + + + + +
+
+ + <%= t('announcement.mail_hi') %>

+ <%= t('announcement.mail_url_view') %>

+ " target="_blank"> <%= @data.mail_content["title"] %>

+ + --
+ <%= t('announcement.mail_source') %> :" target="_blank"> <%= @data.mail_content["site_title"] %>
+ <%= t('announcement.mail_time') %> <%= DateTime.now %> +
+ + + + + + + + + + + \ No newline at end of file diff --git a/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/app/views/panel/announcement/back_end/bulletins/_form.html.erb index d124fac..b869a95 100644 --- a/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -9,7 +9,8 @@ <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> <%= javascript_include_tag "lib/modal-preview" %> <%= javascript_include_tag "lib/file-type" %> - <%= javascript_include_tag "lib/module-area" %> + <%= javascript_include_tag "lib/module-area" %> + <%= javascript_include_tag "member-selection" %> <% end %> <%= f.error_messages %> @@ -34,6 +35,9 @@
  • <%= t(:image) %>
  • +
  • + <%= t('announcement.email_reminder')%> +
  • @@ -140,6 +144,46 @@ + +
    + + +
    + +
    + + + +
    +

    + <%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'bulletin[email_user_ids][]', users: @email_users} %> +

    +
    +
    +
    +
    + +
    +
    + <%= "#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%> + <%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %> +
    +
    +
    + +
    +
    + +
    + <%= f.datetime_picker :email_sentdate, :no_label => true %> +
    +
    +
    + +
    + @@ -301,6 +345,12 @@ $(this).parents('.start-line').hide(); } }); + + $('#remind-check').prop('checked') ? '':$('.content-box').addClass('hide') + $('#remind-check').on('change', function() { + $(this).prop('checked') ? $('.content-box').removeClass('hide'):$('.content-box').addClass('hide') + }) + }); <% end %> diff --git a/app/views/panel/announcement/back_end/bulletins/index.html.erb b/app/views/panel/announcement/back_end/bulletins/index.html.erb index e2ffb3e..6a287dc 100644 --- a/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -37,6 +37,11 @@ field type: 'tags', hide: 'all', sort: 'tags' + field db_field: 'email_user_ids', + hide: 'all', + translation: 'announcement.email_to', + display_option: '"
    #{MailCron.get_send_group_mail(object.email_user_ids , object.other_mailaddress).join(", ").html_safe}"', + sort: 'email_user_ids' field type: 'id', db_field: 'update_user_id', model: User, diff --git a/config/locales/en.yml b/config/locales/en.yml index 990fcd7..3cc6bc5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -36,3 +36,15 @@ en: bulletins_and_web_links: Differential Nav. index: Index search: Search + email_reminder: Email Reminder + activate_email_reminder: Activate Email Reminder + email_sentdate: Email Time + email_to: Email To + mail_subject: this is an announcement reminder from【%{site_title}】 + other_mailaddress: Other Email + other_mailaddress_note: Divide different email accounts with "," + mail_hi: Hi + mail_url_view: This email is the reminder of an announcement, please click the link for the details + mail_source: Source + mail_time: Time + image_upload_size_note: The following recommendations %{image_upload_size} upload size diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index cb5128a..a8af0d1 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -38,4 +38,16 @@ zh_tw: bulletins_and_web_links: 分眾頁籤 index: 索引 search: 搜尋 - more: 更多+ \ No newline at end of file + more: 更多+ + email_reminder: 寄送提醒 + activate_email_reminder: 開啟寄送提醒 + email_sentdate: 寄送時間 + email_to: 寄送對象 + other_mailaddress: 其他Mail + other_mailaddress_note: 輸入多組mail時,請用","逗號隔開 + mail_subject: 來自【%{site_title}】的公告事件提醒 + mail_hi: 您好 + mail_url_view: 此封信件為公告事件提醒,請點選以下連結詳細觀看 + mail_source: 來源 + mail_time: 時間 + image_upload_size_note: 建議檔案小於%{image_upload_size}