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 000000000..b07c9d5cd
--- /dev/null
+++ b/app/controllers/admin/mail_cron_logs_controller.rb
@@ -0,0 +1,31 @@
+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')
+
+ 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
+ end
+ end
+
+ def delete
+ if params[:ids]
+ mail_cron_logs = MailCronLog.any_in(:_id => params[:ids]).destroy_all
+ 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 000000000..b9c2575bf
--- /dev/null
+++ b/app/controllers/admin/mail_crons_controller.rb
@@ -0,0 +1,119 @@
+class Admin::MailCronsController < OrbitBackendController
+
+ layout "new_admin"
+ before_filter :authenticate_user!
+ before_filter :is_admin?
+
+ def index
+
+ @mail_logs = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
+
+ 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
+ end
+ end
+
+ def delete
+ if params[:ids]
+ mail_crons = MailCron.any_in(:_id => params[:ids]).destroy_all
+ 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/jobs/email_cron.rb b/app/jobs/email_cron.rb
new file mode 100644
index 000000000..51dec1166
--- /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 000000000..a469e9820
--- /dev/null
+++ b/app/mailer/mail_cron_mailer.rb
@@ -0,0 +1,81 @@
+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'],
+ # :user_name => @site['site_settings']['user_name'],
+ # :password => @site['site_settings']['password'],
+ :tls => (@site['site_settings']['tls'] == '0' ? false : true ) ,
+ :enable_starttls_auto => (@site['site_settings']['enable_starttls_auto'] == '0' ? false : true )
+ }
+
+ 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
+
+ @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 => @data.mail_from, :reply_to => @data.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 => @data.mail_from, :reply_to => @data.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.user_id,
+ :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 000000000..de885c9a4
--- /dev/null
+++ b/app/models/mail_cron.rb
@@ -0,0 +1,32 @@
+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
+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 000000000..ceaa2d09f
--- /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 000000000..8aed7e2e0
--- /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 000000000..3b9cc6187
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/_clear_filters.html.erb
@@ -0,0 +1,3 @@
+
+ <%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
+
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/_filter.html.erb b/app/views/admin/mail_cron_logs/_filter.html.erb
new file mode 100644
index 000000000..63882b8f0
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/_filter.html.erb
@@ -0,0 +1,11 @@
+
+
+<% content_for :page_specific_javascript do %>
+ <%= javascript_include_tag "sort_header" %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/_mail_cron_log.html.erb b/app/views/admin/mail_cron_logs/_mail_cron_log.html.erb
new file mode 100644
index 000000000..35c59b37c
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/_mail_cron_log.html.erb
@@ -0,0 +1,29 @@
+
+
+ <% if is_manager? %>
+ <%= check_box_tag 'to_delete[]', mail_cron_log.id, false, :class => "checkbox_in_list" %>
+ <% end -%>
+ |
+
+ <%= mail_cron_log.mail_subject %>
+
+
+ <%if at_least_module_manager %>
+ - <%= link_to t(:delete_), admin_mail_cron_log_path(mail_cron_log), :confirm => t('sure?'), :method => :delete, :remote => true %>
+ <% end -%>
+
+
+ |
+
+ <%= mail_cron_log.mail_to.gsub(/,/, " ").html_safe %>
+ |
+
+ <%= mail_cron_log.mail_user %>
+ |
+
+ <%= mail_cron_log.mail_from_app %>
+ |
+
+ <%= display_date_time(mail_cron_log.created_at) %>
+ |
+
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/_sort_headers.html.erb b/app/views/admin/mail_cron_logs/_sort_headers.html.erb
new file mode 100644
index 000000000..1faf81142
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/_sort_headers.html.erb
@@ -0,0 +1,6 @@
+<%= render_sort_bar(true, delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
+ ['subject', 'subject','span2', :subject] ,
+ ['mail_to', 'mail_to','span2', :mail_to] ,
+ ['mail_user', 'mail_user','span2', :mail_user] ,
+ ['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
+ ['sentdate', 'sentdate','span2', :sentdate] ).html_safe %>
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/destroy.js.erb b/app/views/admin/mail_cron_logs/destroy.js.erb
new file mode 100644
index 000000000..9e65f1760
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/destroy.js.erb
@@ -0,0 +1 @@
+$("#<%= dom_id @mail_cron_log %>").remove();
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/index.html.erb b/app/views/admin/mail_cron_logs/index.html.erb
new file mode 100644
index 000000000..07d13f255
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/index.html.erb
@@ -0,0 +1,28 @@
+<% content_for :side_bar do %>
+ <%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
+<% end %>
+
+ <%= render 'filter' %>
+
+
+
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ <%= render :partial => "mail_cron_log",:collection=> @mail_cron_logs%>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/mail_cron_logs/index.js.erb b/app/views/admin/mail_cron_logs/index.js.erb
new file mode 100644
index 000000000..6605cc4a6
--- /dev/null
+++ b/app/views/admin/mail_cron_logs/index.js.erb
@@ -0,0 +1,3 @@
+$("#sort_headers").html("<%= j render 'sort_headers' %>");
+$("#tbody_mail_cron_logs").html("<%= j render :partial => 'mail_cron_log', :collection => @mail_cron_logs %>");
+$("#mail_cron_log_pagination").html("<%= j paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/_clear_filters.html.erb b/app/views/admin/mail_crons/_clear_filters.html.erb
new file mode 100644
index 000000000..3b9cc6187
--- /dev/null
+++ b/app/views/admin/mail_crons/_clear_filters.html.erb
@@ -0,0 +1,3 @@
+
+ <%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
+
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/_filter.html.erb b/app/views/admin/mail_crons/_filter.html.erb
new file mode 100644
index 000000000..63882b8f0
--- /dev/null
+++ b/app/views/admin/mail_crons/_filter.html.erb
@@ -0,0 +1,11 @@
+
+
+<% content_for :page_specific_javascript do %>
+ <%= javascript_include_tag "sort_header" %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/_form.html.erb b/app/views/admin/mail_crons/_form.html.erb
new file mode 100644
index 000000000..40d7bdebc
--- /dev/null
+++ b/app/views/admin/mail_crons/_form.html.erb
@@ -0,0 +1,122 @@
+
+<% # encoding: utf-8 %>
+
+ <%= f.error_messages %>
+
+
+
+
+
+
+
+
+
+
+
+
+ <%= f.label :mail_subject ,t(:mail_subject)%>
+ <%= f.text_field :mail_subject %>
+
+ <%= f.label :mail_from ,t(:mail_from)%>
+ <%= f.text_field :mail_from %>
+
+ <%= f.label :mail_reply_to ,t(:mail_reply_to)%>
+ <%= f.text_field :mail_reply_to %>
+
+ <%= f.label :mail_to ,t(:mail_to)%>
+ <%= f.text_field :mail_to %>
+
+ <%= f.label :mail_content ,t(:mail_content)%>
+ <%= f.text_area :mail_content, :class=>"span12", :cols=>"25", :rows=>"10" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ File |
+ File Name |
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+ <% @mail_cron.mail_cron_files.each_with_index do |mail_cron_file, i| %>
+ <%= f.fields_for :mail_cron_files, mail_cron_file do |f| %>
+ <%= render :partial => 'form_file', :object => mail_cron_file, :locals => {:f => f, :i => i} %>
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%= f.submit t('submit'), :class=>'btn btn-primary' %>
+ <%= link_to t('cancel'), get_go_back, :class=>"btn" %>
+
+
+
+
+
+<% content_for :page_specific_javascript do %>
+ <%= javascript_include_tag "archive_plugin_form" %>
+
+<% end %>
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/_form_file.html.erb b/app/views/admin/mail_crons/_form_file.html.erb
new file mode 100644
index 000000000..e7fe526da
--- /dev/null
+++ b/app/views/admin/mail_crons/_form_file.html.erb
@@ -0,0 +1,35 @@
+<% # encoding: utf-8 %>
+
+ " class='list_item'>
+
+
+
+ <%= f.file_field :file %>
+ <%= form_file.file.file ? ( link_to t(:view), form_file.file.url, {:class => 'btn', :target => '_blank', :title => t(:view)} ) : '' %>
+
+
+ |
+
+
+
+
+ <%= f.text_field :title %>
+
+
+
+ |
+
+
+
+ <% if form_file.new_record? %>
+
+ <% else %>
+ <%= f.hidden_field :id %>
+
+ <%= f.hidden_field :should_destroy, :value => nil, :class => 'should_destroy' %>
+ <% end %>
+
+
+ |
+
+
diff --git a/app/views/admin/mail_crons/_mail_cron.html.erb b/app/views/admin/mail_crons/_mail_cron.html.erb
new file mode 100644
index 000000000..be7cf80de
--- /dev/null
+++ b/app/views/admin/mail_crons/_mail_cron.html.erb
@@ -0,0 +1,26 @@
+
+
+ <% if is_manager? %>
+ <%= check_box_tag 'to_delete[]', mail_cron.id, false, :class => "checkbox_in_list" %>
+ <% end -%>
+ |
+
+ <%= mail_cron.mail_subject %>
+
+
+ <%if at_least_module_manager %>
+ - <%= link_to t(:delete_), admin_mail_cron_path(mail_cron), :confirm => t('sure?'), :method => :delete, :remote => true %>
+ <% end -%>
+
+
+ |
+
+ <%= mail_cron.mail_to.gsub(/,/, " ").html_safe %>
+ |
+
+ <%= mail_cron.mail_from_app %>
+ |
+
+ <%= display_date_time(mail_cron.mail_sentdate) %>
+ |
+
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/_sort_headers.html.erb b/app/views/admin/mail_crons/_sort_headers.html.erb
new file mode 100644
index 000000000..261623f7b
--- /dev/null
+++ b/app/views/admin/mail_crons/_sort_headers.html.erb
@@ -0,0 +1,5 @@
+<%= render_sort_bar(true, delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
+ ['subject', 'subject','span2', :subject] ,
+ ['mail_to', 'mail_to','span2', :mail_to] ,
+ ['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
+ ['sentdate', 'sentdate','span2', :sentdate] ).html_safe %>
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/destroy.js.erb b/app/views/admin/mail_crons/destroy.js.erb
new file mode 100644
index 000000000..7c22134b1
--- /dev/null
+++ b/app/views/admin/mail_crons/destroy.js.erb
@@ -0,0 +1 @@
+$("#<%= dom_id @mail_cron %>").remove();
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/edit.html.erb b/app/views/admin/mail_crons/edit.html.erb
new file mode 100644
index 000000000..e3d8b2d42
--- /dev/null
+++ b/app/views/admin/mail_crons/edit.html.erb
@@ -0,0 +1,9 @@
+<% content_for :side_bar do %>
+ <%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
+<% end %>
+
+<%= t('mail_cron.editing_mail_cron') %>
+
+<%= form_for @mail_cron, :url => admin_mail_cron_path(@mail_cron), :html => {:class => 'clear'} do |f| %>
+ <%= render :partial => 'form', :locals => {:f => f} %>
+<% end %>
diff --git a/app/views/admin/mail_crons/index.html.erb b/app/views/admin/mail_crons/index.html.erb
new file mode 100644
index 000000000..3057dce6e
--- /dev/null
+++ b/app/views/admin/mail_crons/index.html.erb
@@ -0,0 +1,28 @@
+
+<% content_for :side_bar do %>
+ <%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
+<% end %>
+
+ <%= render 'filter' %>
+
+
+
+ |
+ |
+ |
+ |
+ |
+
+
+
+ <%= render :partial => "mail_cron",:collection=> @mail_logs%>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/index.js.erb b/app/views/admin/mail_crons/index.js.erb
new file mode 100644
index 000000000..8b187b189
--- /dev/null
+++ b/app/views/admin/mail_crons/index.js.erb
@@ -0,0 +1,3 @@
+$("#sort_headers").html("<%= j render 'sort_headers' %>");
+$("#tbody_mail_crons").html("<%= j render :partial => 'mail_cron', :collection => @mail_crons %>");
+$("#mail_cron_pagination").html("<%= j paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
\ No newline at end of file
diff --git a/app/views/admin/mail_crons/new.html.erb b/app/views/admin/mail_crons/new.html.erb
new file mode 100644
index 000000000..06d3c7891
--- /dev/null
+++ b/app/views/admin/mail_crons/new.html.erb
@@ -0,0 +1,12 @@
+
+<% content_for :side_bar do %>
+ <%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
+<% end %>
+
+
+
<%= t('mail_cron.new_mail_cron') %>
+<%= form_for @mail_cron, :url => admin_mail_crons_path, :html => {:class => 'clear'} do |f| %>
+ <%= render :partial => 'form', :locals => {:f => f} %>
+<% end %>
+
+
diff --git a/app/views/admin/sites/_side_bar.html.erb b/app/views/admin/sites/_side_bar.html.erb
index 2a564bd52..db6ceaa85 100644
--- a/app/views/admin/sites/_side_bar.html.erb
+++ b/app/views/admin/sites/_side_bar.html.erb
@@ -9,6 +9,8 @@
<%#= content_tag :li, link_to(t(:theme), admin_site_ui_theme_path(@site)), :class => active_for_action('sites', 'ui_theme') %>
<%= content_tag :li, link_to(t('sitemap'), admin_site_sitemap_path(@site)), :class => active_for_action('sites', 'sitemap') %>
<%= content_tag :li, link_to(t('user_actions'), admin_user_actions_path), :class => active_for_action('user_actions', 'index') %>
+ <%= content_tag :li, link_to(t('mail.mail_cron'), admin_mail_crons_path), :class => active_for_action('mail_cron', 'index') %>
+ <%= content_tag :li, link_to(t('mail.mail_cron_log'), admin_mail_cron_logs_path), :class => active_for_action('mail_cron_log', 'index') %>
<% end -%>
<% end -%>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d83137253..a12932337 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -272,6 +272,8 @@ en:
setting: Mail settings
tls: TLS
user_name: User Name
+ mail_cron: Scheduled Email
+ mail_cron_log: Email Log
manager: Manager
markup: Markup
markup_options: Markup options
diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml
index 7c1b180ef..bdad5d25f 100644
--- a/config/locales/zh_tw.yml
+++ b/config/locales/zh_tw.yml
@@ -272,6 +272,8 @@ zh_tw:
setting: 電子郵件設定
tls: 電子郵件TLS
user_name: 電子郵件帳號
+ mail_cron: 待寄Email
+ mail_cron_log: Email發送記錄
manager: 管理者
markup: 輸入模式
markup_options: 標註選項
diff --git a/config/resque_schedule.yml b/config/resque_schedule.yml
index 98a5da1d2..f1b41aac0 100644
--- a/config/resque_schedule.yml
+++ b/config/resque_schedule.yml
@@ -14,4 +14,10 @@ generate_system_summary:
cron: 0 0 12 * * *
class: GenerateSystemSummary
args:
- description: Generate the system status such as disk free space,package version list for showing at site tab
\ No newline at end of file
+ description: Generate the system status such as disk free space,package version list for showing at site tab
+
+ email_cron:
+ cron: 0 0 [10,16,22] * * *
+ class: EmailCron
+ args:
+ description: EmailCron
diff --git a/config/routes.rb b/config/routes.rb
index 527c5aa0a..716918775 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -29,6 +29,19 @@ Orbit::Application.routes.draw do
get 'delete'
end
end
+
+ resources :mail_crons do
+ collection do
+ get 'delete'
+ end
+ end
+
+ resources :mail_cron_logs do
+ collection do
+ get 'delete'
+ end
+ end
+
resources :asset_categories
resources :asset_tags
resources :app_auths