-
+
- <%= t('list.role') %> + <% @sorted_users.each_key do |role| %> +
- <%= role.title %> + <% end %> +
diff --git a/app/assets/javascripts/member-selection.js b/app/assets/javascripts/member-selection.js
index 276b48b..700f8d5 100644
--- a/app/assets/javascripts/member-selection.js
+++ b/app/assets/javascripts/member-selection.js
@@ -1,7 +1,7 @@
$(document).ready(function() {
$(".select_user_modal").on('click', function(){
var ids = [];
- var users = $('.selected_user');
+ var users = $(this).siblings('.selected_users').children('span.selected_user');
users.each(function(i) {
ids.push(users.eq(i).attr('id'));
});
@@ -10,16 +10,20 @@ $(document).ready(function() {
type: 'GET',
url: $(this).attr("rel"),
dataType: 'script',
- data: {ids: ids},
+ data: {field: $(this).attr("field"), ids: ids},
success: function (msg) {
$("#member-filter").modal('show'); },
error: function(){
- // TODO: i18n in javascript
alert("ERROR");
}
});
return false;
});
+
+ $(document).on('click', ".remove_user", function(){
+ $(this).parent().remove();
+ });
+
$("#remove_users").on('click', function(){
var ids = [];
var users = $('.selected_user input[type="checkbox"]:checked');
diff --git a/app/assets/stylesheets/basic/global.css b/app/assets/stylesheets/basic/global.css
index 1880808..4f92e52 100644
--- a/app/assets/stylesheets/basic/global.css
+++ b/app/assets/stylesheets/basic/global.css
@@ -549,11 +549,30 @@ legend {
margin-left: -45%;
}
#show_preview .modal-body {
+ background-color: #fff;
padding: 0;
max-height: none;
height: 100%;
overflow: hidden;
}
+#show_preview .modal-body > div {
+ height: 100%;
+}
+#show_preview .modal-body .modal-left {
+ overflow: auto;
+ float: left;
+ width: 19.8%;
+ border-right: 1px solid #DFDFDF;
+}
+#show_preview .modal-body .modal-left > * {
+ padding: 1em;
+ margin: 0;
+ list-style: none;
+}
+#show_preview .modal-body .modal-right {
+ float: right;
+ width: 80%;
+}
#show_preview iframe {
border: 0;
outline: none;
diff --git a/app/assets/stylesheets/member_select.css b/app/assets/stylesheets/member_select.css
new file mode 100644
index 0000000..0d4e9df
--- /dev/null
+++ b/app/assets/stylesheets/member_select.css
@@ -0,0 +1,237 @@
+/* Member Filter */
+#select_user #select_user_modal.modal {
+ width: 80%;
+ margin-left: -40%;
+}
+#select_user #select_user_modal .modal-body {
+ max-height: 425px;
+}
+#select_user #select_user_modal .modal-body form {
+ margin-bottom: 0px;
+}
+#select_user #select_user_modal .modal-body form fieldset {
+ min-height: 360px;
+}
+#select_user #select_user_modal .modal-body .radio.inline,
+#select_user #select_user_modal .modal-body .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ min-width: 100px;
+ margin-left: 0;
+}
+#select_user #select_user_modal .modal-body .form-actions {
+ margin: 20px 0 0;
+ padding: 10px 0 0;
+ background-color: transparent;
+ text-align: right;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano {
+ width: 160px;
+ min-height: 425px;
+ float: left;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
+ right: 6px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
+ width: 140px;
+ float: left;
+ margin-bottom: 0;
+ margin-right: 0;
+ border-right: 1px solid #ddd;
+ border-bottom: none;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
+ float: none;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+#select_user #select_user_modal .member-filter-options {
+ float: left;
+ display: inline-block;
+ width: 175px;
+ min-height: 425px;
+ margin-right: 10px;
+ padding: 0 10px 0 0;
+}
+#select_user #select_user_modal .member-filter-options select {
+ width: 165px;
+}
+#select_user #select_user_modal .member-filter-options .btn {
+ display: block;
+}
+#select_user #select_user_modal .member-filter-result {
+ padding-left: 15px;
+ min-height: 360px;
+ width: auto;
+}
+
+
+/* Check Box Card */
+.checkbox-card {
+ margin: 0;
+}
+.checkbox-card li {
+ position: relative;
+ list-style: none;
+ color: #FFFFFF;
+ width: 180px;
+ height: 40px;
+ margin: 0 10px 10px 0;
+ float: left;
+ display: inline-block;
+ background-color: #cccccc;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+.checkbox-card li.mark {
+ width: 0;
+ height: 0;
+ padding: 0;
+ margin: 0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ visibility: hidden;
+}
+.checkbox-card li:hover {
+ background-color: #0088cc;
+}
+.checkbox-card li:after {
+ content: "";
+ display: block;
+ clear: both;
+ height: 0;
+ visibility: hidden;
+}
+.checkbox-card li.active:before {
+ -webkit-text-size-adjust : none;
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ color: #FFF;
+ text-decoration: inherit;
+ content: "\f00c";
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ line-height: 14px;
+ text-indent: 10px;
+ font-size: 10px;
+ width: 0px;
+ height: 0px;
+ border-style: solid;
+ border-width: 0 22px 22px 0;
+ border-color: transparent #51a351 transparent transparent;
+}
+.checkbox-card li.active label {
+}
+.checkbox-card li label {
+ margin-bottom: 0px;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.checkbox-card li input {
+ opacity: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+ z-index: 10;
+}
+.checkbox-card li label span {
+ -webkit-text-size-adjust : none;
+ font-size: 10px;
+ display: block;
+ width: 130px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #666666;
+ margin-top: -3px;
+}
+.checkbox-card li:hover label span,
+.checkbox-card li:hover label span.user-name {
+ color: #FFFFFF;
+}
+.checkbox-card li label span.user-name {
+ font-size: 12px;
+ color: #363636;
+ padding: 2px 0 0;
+ margin-top: 0;
+}
+.checkbox-card li .user-pic {
+ float: left;
+ margin-right: 5px;
+ width: 40px;
+ height: 40px;
+}
+#selected_users .selected_user {
+ display: inline-block;
+ margin-bottom: 5px;
+}
+#selected_users .selected_user .remove_user {
+ font-size: 15px;
+}
+#selected_email_users .selected_user {
+ display: inline-block;
+ margin-bottom: 5px;
+}
+#selected_email_users .selected_user .remove_user {
+ font-size: 15px;
+}
+/*
+.promoter {
+ border-color: #CCCCCC;
+ border-style: solid;
+ border-width: 0 1px;
+ padding: 0 10px 5px 10px;
+}
+.promoter > div {
+ border-bottom: 1px solid #CCCCCC;
+}
+.promoter > div:after {
+ content: "";
+ clear: both;
+ display: block;
+ visibility: hidden;
+}
+.promoter > div > span {
+ display: block;
+ margin-left: 70px;
+ padding-bottom: 5px;
+}
+.promoter p {
+ width: 70px;
+ float: left;
+ text-align:right;
+}*/
\ No newline at end of file
diff --git a/app/controllers/admin/mail_cron_logs_controller.rb b/app/controllers/admin/mail_cron_logs_controller.rb
new file mode 100644
index 0000000..7909427
--- /dev/null
+++ b/app/controllers/admin/mail_cron_logs_controller.rb
@@ -0,0 +1,43 @@
+class Admin::MailCronLogsController < OrbitBackendController
+
+ # layout "new_admin"
+ before_filter :authenticate_user!
+ before_filter :is_admin?
+
+ def index
+
+ # @mail_cron_logs = MailCronLog.all.desc(:created_at).page(params[:page_main] ).per('20')
+ @mail_cron_logs = (params[:sort]) ? get_sorted_and_filtered("mail_cron_log") : get_viewable("mail_cron_log")
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.xml { render :xml => @mail_crons }
+ format.js
+ end
+
+ end
+
+ def destroy
+ @mail_cron_log = MailCronLog.find(params[:id])
+ @mail_cron_log.destroy
+
+ respond_to do |format|
+ # format.html { redirect_to(admin_mail_cron_logs_url) }
+ # format.xml { head :ok }
+ format.js { render :layout => false }
+ end
+ end
+
+ def delete
+ if params[:ids]
+ # @mail_cron_logs = MailCronLog.any_in(:_id => params[:ids]).destroy_all
+ @mail_cron_logs = MailCronLog.any_in(:_id => params[:ids])
+ end
+
+ respond_to do |format|
+ format.js { render :layout => false }
+ end
+ # redirect_to admin_mail_cron_logs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
+ end
+
+end
diff --git a/app/controllers/admin/mail_crons_controller.rb b/app/controllers/admin/mail_crons_controller.rb
new file mode 100644
index 0000000..d0ff698
--- /dev/null
+++ b/app/controllers/admin/mail_crons_controller.rb
@@ -0,0 +1,130 @@
+class Admin::MailCronsController < OrbitBackendController
+
+ # layout "new_admin"
+ before_filter :authenticate_user!
+ before_filter :is_admin?
+
+ def index
+
+ # @mail_crons = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
+ @mail_crons = (params[:sort]) ? get_sorted_and_filtered("mail_cron") : get_viewable("mail_cron")
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.xml { render :xml => @mail_crons }
+ format.js
+ end
+
+ end
+
+ def show
+ end
+
+ def new
+ @mail_cron = MailCron.new
+
+ respond_to do |format|
+ format.html # new.html.erb
+ format.xml { render :xml => @mail_cron }
+ end
+ end
+
+ def create
+ @mail_cron = MailCron.new(params[:mail_cron])
+
+ @mail_cron.create_user_id = current_user.id
+ @mail_cron.update_user_id = current_user.id
+
+ respond_to do |format|
+ if @mail_cron.save
+ format.html { redirect_to(admin_mail_crons_url) }
+ format.xml { render :xml => @mail_cron, :status => :created, :location => @mail_cron }
+ else
+ format.html { render :action => "new" }
+ format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ def edit
+ @mail_cron = MailCron.find(params[:id])
+ end
+
+ def update
+
+
+
+ @datas = MailCron.where(:mail_sentdate.lte => Time.now, :mail_sent => false)
+
+ @datas.each do |mail_data|
+
+ @mail_j = 0
+ @read_mails = Array.new
+
+ @mails = mail_data.mail_to.split(",")
+
+ @mails.each do |send_mail|
+
+ @read_mails << send_mail
+
+ @mail_j += 1
+
+ if 0 == @mail_j % 30
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ if !@read_mails.join(',').blank?
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ @mail_cron = MailCron.find(params[:id])
+
+ @mail_cron.update_user_id = current_user.id
+
+ respond_to do |format|
+ if @mail_cron.update_attributes(params[:mail_cron])
+ format.html { redirect_to(admin_mail_crons_url) }
+ format.js { render 'toggle_enable' }
+ format.xml { head :ok }
+ else
+ format.html { render :action => "edit" }
+ format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ def destroy
+ @mail_cron = MailCron.find(params[:id])
+ @mail_cron.destroy
+
+ respond_to do |format|
+ # format.html { redirect_to(admin_mail_crons_url) }
+ # format.xml { head :ok }
+ format.js { render :layout => false }
+ end
+ end
+
+ def delete
+ if params[:ids]
+ # mail_crons = MailCron.any_in(:_id => params[:ids]).destroy_all
+ @mail_crons = MailCron.any_in(:_id => params[:ids])
+ end
+ respond_to do |format|
+ format.js { render :layout => false }
+ end
+ # redirect_to admin_mail_crons_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
+ end
+
+ protected
+
+end
diff --git a/app/controllers/admin/member_selects_controller.rb b/app/controllers/admin/member_selects_controller.rb
index 64c8b72..e612b5b 100644
--- a/app/controllers/admin/member_selects_controller.rb
+++ b/app/controllers/admin/member_selects_controller.rb
@@ -1,4 +1,6 @@
class Admin::MemberSelectsController < OrbitBackendController
+
+ open_for_visitor :only => [:select_members, :set_roles, :set_users, :select_email_members, :set_email_roles, :set_email_users]
def index
@@ -96,4 +98,32 @@ class Admin::MemberSelectsController < OrbitBackendController
render 'admin/member_selects/update_selected_users'
end
+ def select_email_members
+ selected_users = User.find(params[:ids]) rescue []
+ @field = params[:field]
+ roles = Role.all
+ @sorted_users = roles.inject({}) do |users, role|
+ # users[role] = role.users.where(:email.not => /guest|rulingcom/) - selected_users
+ users[role] = role.users.where(:email.not => /guest/) - selected_users
+ users
+ end
+ end
+
+ def set_email_roles
+ roles = Role.find(params[:email_role_ids]) rescue []
+ @field = params[:field]
+ @users = roles.inject([]) do |users, role|
+ # users += role.users.where(:email.not => /guest|rulingcom/).entries
+ users += role.users.where(:email.not => /guest/).entries
+ users
+ end
+ render 'admin/member_selects/update_selected_email_users'
+ end
+
+ def set_email_users
+ @users = User.find(params[:email_user_ids]) rescue []
+ @field = params[:field]
+ render 'admin/member_selects/update_selected_email_users'
+ end
+
end
diff --git a/app/controllers/admin/sites_controller.rb b/app/controllers/admin/sites_controller.rb
index 5e355b0..503769f 100644
--- a/app/controllers/admin/sites_controller.rb
+++ b/app/controllers/admin/sites_controller.rb
@@ -76,6 +76,18 @@ class Admin::SitesController < OrbitBackendController
@nginx_version = %x[/opt/nginx/sbin/nginx -v 2>&1].gsub("\n","
").html_safe
@mongo_version = `mongod --version`.split("\n")[0].html_safe
@linux_version = `lsb_release -d`.split(":")[1].html_safe
+
+ @user_actions = UserAction.all.desc(:created_at).page(params[:page]).per(100)
+
+ @mail_crons = MailCron.desc(:created_at)
+
+ @mail_cron_logs = MailCronLog.desc(:created_at).page(params[:page]).per(100)
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.js
+ end
+
end
def search_engine
diff --git a/app/jobs/email_cron.rb b/app/jobs/email_cron.rb
new file mode 100644
index 0000000..51dec11
--- /dev/null
+++ b/app/jobs/email_cron.rb
@@ -0,0 +1,42 @@
+class EmailCron
+ @queue = :mail
+
+ def self.perform
+
+ @datas = MailCron.where(:mail_sentdate.lte => Time.now)
+
+ @datas.each do |mail_data|
+
+ @mail_j = 0
+ @read_mails = Array.new
+
+ @mails = mail_data.mail_to.split(",")
+
+ @mails.each do |send_mail|
+
+ @read_mails << send_mail
+
+ @mail_j += 1
+
+ if 0 == @mail_j % 30
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ if !@read_mails.join(',').blank?
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ end
+
+
+end
\ No newline at end of file
diff --git a/app/mailer/mail_cron_mailer.rb b/app/mailer/mail_cron_mailer.rb
new file mode 100644
index 0000000..3de6e63
--- /dev/null
+++ b/app/mailer/mail_cron_mailer.rb
@@ -0,0 +1,86 @@
+# encoding: utf-8
+
+class MailCronMailer < ActionMailer::Base
+ default :from => "orbit_test@rulingcom.com"
+
+ def get_settings
+
+ @site = Site.first
+
+ @smtp_settings = {
+ :address => @site['site_settings']['address'],
+ :port => @site['site_settings']['port'],
+ :domain => @site['site_settings']['domain'],
+ :authentication => @site['site_settings']['authentication'],
+ :enable_starttls_auto => @site['site_settings']['enable_starttls_auto']
+ }
+
+ if !@site['site_settings']['user_name'].blank?
+ @smtp_settings[:user_name] = @site['site_settings']['user_name']
+ end
+
+ if !@site['site_settings']['password'].blank?
+ @smtp_settings[:password] = @site['site_settings']['password']
+ end
+
+
+ ActionMailer::Base.smtp_settings = @smtp_settings
+
+ end
+
+
+ def cron_mail( data_id, group_mail )
+
+ get_settings
+
+ @data = MailCron.find(data_id)
+
+ if @data
+
+ I18n.locale = @data.mail_content["lang"] if !@data.mail_content["lang"].blank?
+
+ @mail_from = !@data.mail_from.blank? ? @data.mail_from : @site['site_settings']['service_email']
+
+ @mail_reply_to = !@data.mail_reply_to.blank? ? @data.mail_reply_to : @site['site_settings']['reply_email']
+
+ @user = User.find(@data.create_user_id)
+
+ if !@data.mail_cron_files.blank?
+ @data.mail_cron_files.each_with_index do |mail_cron_file, i|
+ file_type = File.extname(mail_cron_file.file.to_s)
+ file_content = Mongo::GridFileSystem.new(Mongoid.database).open(mail_cron_file.file.url.gsub("/gridfs/", "").force_encoding("UTF-8"), 'r')
+ attachments["#{mail_cron_file.title}#{file_type}"] = file_content.read
+ end
+ end
+
+ if !@data.mail_content["text"].blank?
+ mail( :from => "\"#{@site.title}\" <#{@mail_from}>", :reply_to => @mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
+ format.html { render :text => @data.mail_content["text"] }
+ end
+ elsif !@data.mail_content["template"].blank?
+ mail( :from => "\"#{@site.title}\" <#{@mail_from}>", :reply_to => @mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
+ format.html { render :template => @data.mail_content["template"], :collection => @data.mail_content }
+ end
+ end
+
+
+ @mail_cron_log = {
+ :mail_subject => @data.mail_subject,
+ :mail_to => group_mail,
+ :mail_user => "#{@user.name} <#{@user.email}>",
+ :mailer_count => group_mail.split(",").size,
+ :mail_from_app => @data.mail_from_app
+ }
+
+ @mail_cron_log = MailCronLog.new(@mail_cron_log)
+
+
+ @mail_cron_log.save
+
+ @data.destroy
+
+ end
+
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/mail_cron.rb b/app/models/mail_cron.rb
new file mode 100644
index 0000000..d68bca4
--- /dev/null
+++ b/app/models/mail_cron.rb
@@ -0,0 +1,94 @@
+class MailCron
+
+ include Mongoid::Document
+ include Mongoid::Timestamps
+
+
+ field :mail_from_app
+ field :mail_from
+ field :mail_to
+ field :mail_reply_to
+ field :mail_subject
+ field :mail_content, :type => Hash
+ field :mail_sentdate , :type => DateTime
+
+ field :create_user_id
+ field :update_user_id
+
+ has_many :mail_cron_files, :autosave => true, :dependent => :destroy
+
+ accepts_nested_attributes_for :mail_cron_files, :allow_destroy => true
+
+ after_save :save_mail_cron_files
+
+
+ def save_mail_cron_files
+ self.mail_cron_files.each do |t|
+ if t.should_destroy
+ t.destroy
+ end
+ end
+ end
+
+ def self.get_send_group_mail(send_mails, other_send_mails = '')
+
+ @group_mail = Array.new
+
+ send_mails.each do |email_user_id|
+
+ if !email_user_id.blank?
+
+ @user = User.find(email_user_id)
+
+ @group_mail << @user.email if !@user.blank?
+
+ end
+
+ end if !send_mails.blank?
+
+ other_send_mails.split(",").collect do |oa|
+ @group_mail << oa
+ end if !other_send_mails.blank?
+
+ @group_mail.uniq
+
+ end
+
+ def self.send_mail_now(mail_cron_id)
+
+ mail_data = MailCron.find(mail_cron_id)
+
+ if !mail_data.blank?
+
+ @mail_j = 0
+ @read_mails = Array.new
+
+ @mails = mail_data.mail_to.split(",")
+
+ @mails.each do |send_mail|
+
+ @read_mails << send_mail
+
+ @mail_j += 1
+
+ if 0 == @mail_j % 30
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ if !@read_mails.join(',').blank?
+ MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
+ @read_mails = Array.new
+
+ sleep 10
+ end
+
+ end
+
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/mail_cron_file.rb b/app/models/mail_cron_file.rb
new file mode 100644
index 0000000..ceaa2d0
--- /dev/null
+++ b/app/models/mail_cron_file.rb
@@ -0,0 +1,13 @@
+class MailCronFile
+
+ include Mongoid::Document
+ include Mongoid::Timestamps
+
+ mount_uploader :file, AssetUploader
+
+ field :should_destroy, :type => Boolean
+ field :title
+
+ belongs_to :mail_cron
+
+end
diff --git a/app/models/mail_cron_log.rb b/app/models/mail_cron_log.rb
new file mode 100644
index 0000000..8aed7e2
--- /dev/null
+++ b/app/models/mail_cron_log.rb
@@ -0,0 +1,14 @@
+class MailCronLog
+
+ include Mongoid::Document
+ include Mongoid::Timestamps
+
+
+ field :mail_subject
+ field :mail_to
+ field :mail_user
+ field :mailer_count
+ field :mail_from_app
+
+
+end
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/_clear_filters.html.erb b/app/views/admin/mail_cron_logs/_clear_filters.html.erb
new file mode 100644
index 0000000..3b9cc61
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/_clear_filters.html.erb
@@ -0,0 +1,3 @@
+
| + | + | + | + | + | + |
|---|
| File | +File Name | ++ |
|---|---|---|
|
+
+ <%= hidden_field_tag 'plugin_file_field_count', @mail_cron.mail_cron_files.count %>
+ ADD/新增
+
+ |
+ ||
| + | + | + | + | + |
|---|
<%= mail_cron.mail_to.gsub(/,/, ", ").html_safe %>
<%= mail_cron_log.mail_to.gsub(/,/, ", ").html_safe %>
| <%= I18n.t 'user_action.time' %> | +<%= I18n.t 'user_action.name' %> | +<%= I18n.t 'user_action.page' %> | +
|---|