added subscriber list and also test email sent done with email improvements.
This commit is contained in:
parent
15ab527f37
commit
5ec89f067c
|
@ -0,0 +1,157 @@
|
|||
.epaper-show {
|
||||
.epaper-show-title {
|
||||
border-bottom: 2px solid #ddd;
|
||||
padding: 0 0 10px;
|
||||
margin: 10px 0 20px;
|
||||
color: #881f05;
|
||||
}
|
||||
|
||||
.ep-info {
|
||||
background: #fff;
|
||||
border-radius: 3px;
|
||||
padding: 10px;
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
|
||||
.ep-info-title {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 0 0 5px;
|
||||
margin: 0 0 8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.ep-info-date {
|
||||
float: left;
|
||||
width: 50%;
|
||||
margin: 0 0 5px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.ep-info-period {
|
||||
float: right;
|
||||
width: 50%;
|
||||
margin: 0 0 5px;
|
||||
text-align: right;
|
||||
padding: 0 10px 0 0;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.ep-info-description {
|
||||
clear: both;
|
||||
padding: 10px 0 0;
|
||||
overflow: hidden;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.ep-info-description span {
|
||||
float: right;
|
||||
width: calc(100% - 90px);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.ep-content-item {
|
||||
float: left;
|
||||
width: calc(50% - 20px);
|
||||
border: 1px solid #ccc;
|
||||
vertical-align: top;
|
||||
min-height: 200px;
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.ep-content-title {
|
||||
color: #881f05;
|
||||
font-size: 20px;
|
||||
border-left: 4px solid #881f05;
|
||||
display: block;
|
||||
padding: 0 0 0 10px;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
|
||||
p.ep-content-text {
|
||||
color: #666;
|
||||
font-size: 15px;
|
||||
}
|
||||
a.ep-content-more {
|
||||
background: #881f05;
|
||||
color: #fff;
|
||||
padding: 2px 10px;
|
||||
border-radius: 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
.ep-topic-show {
|
||||
.ep-topic-title {
|
||||
margin: 10px 0;
|
||||
color: #881f05;
|
||||
}
|
||||
|
||||
.ep-topic-date {
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
|
||||
.ep-topic-content {
|
||||
font-size: 15px;
|
||||
line-height: 2;
|
||||
}
|
||||
}
|
||||
|
||||
//widget
|
||||
.epaper-form {
|
||||
background: #fff;
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
margin: auto;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0 30px rgba(0,0,0,0.05);
|
||||
|
||||
input.input-mail {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 0 0 20px;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
width: 50%;
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.btn-white {
|
||||
background: none;
|
||||
width: 50%;
|
||||
outline: none;
|
||||
float: right;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.btn-white:active {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.btn-white:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.ep-form-title {
|
||||
font-size: 20px;
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
|
||||
h3.ep-form-title .en {
|
||||
display: none;
|
||||
}
|
||||
|
||||
form {
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
|
@ -62,6 +62,31 @@ class Admin::EPapersController < OrbitAdminController
|
|||
redirect_to admin_e_papers_path(:page => params[:page])
|
||||
end
|
||||
|
||||
def subscribers
|
||||
@table_fields = [:email, :actions]
|
||||
@subscribers = Subscriber.all.desc(:created_at)
|
||||
@filter_fields = {}
|
||||
@subscribers = search_data(@subscribers, [:email]).page(params[:page]).per(10)
|
||||
if request.xhr?
|
||||
render :partial => "subscriber_index"
|
||||
end
|
||||
end
|
||||
|
||||
def delete_subscriber
|
||||
subscriber = Subscriber.find(params[:id])
|
||||
subscriber.destroy
|
||||
redirect_to subscribers_admin_e_papers_path(:page => params[:page])
|
||||
end
|
||||
|
||||
def send_test_email
|
||||
paper = Paper.find(params[:id])
|
||||
page = Page.where(:module_app => "e_paper").first.url rescue ""
|
||||
email = Email.new(:mail_subject => paper.title, :mail_lang => :zh_tw, :template => "admin/e_papers/emailer", :template_data => {"paper" => paper, "page" => "http://" + request.host_with_port + page}, :mail_to => params[:email])
|
||||
email.deliver
|
||||
|
||||
render :json => {"success" => true}.to_json
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ class Paper
|
|||
include Slug
|
||||
|
||||
field :title,as: :slug_title, localize: true
|
||||
field :period, localize: true
|
||||
field :period, type: DateTime
|
||||
field :description, localize: true
|
||||
field :mailed, type: Boolean, default: false
|
||||
field :ready_to_send, type: Boolean, default: false
|
||||
|
|
|
@ -61,17 +61,13 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="control-group input-period">
|
||||
<%= f.label :period ,t('e_paper.period'), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.fields_for :period_translations do |f| %>
|
||||
<%= f.text_field locale, :class=>'input-large', :value => (@paper.period_translations[locale] rescue nil) %>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="controls">
|
||||
<%= f.datetime_picker :period, :no_label => true, :new_record => @paper.new_record? %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="control-group input-description">
|
||||
<%= f.label :description ,t('e_paper.description'), :class => "control-label muted" %>
|
||||
<%= f.fields_for :description_translations do |f| %>
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
<li><span class="label"><%= t('e_paper.published') %></span></li>
|
||||
<% else %>
|
||||
<li><a href="<%= send_email_to_subscribers_admin_e_paper_path(paper.id) %>"><%= t('e_paper.send') %></a></li>
|
||||
<li><a href="<%= send_test_email_admin_e_paper_path(paper.id) %>" class="test-email"><%= t('e_paper.test_mail') %></a></li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
@ -46,11 +47,27 @@
|
|||
</table>
|
||||
<div class="bottomnav clearfix" style="left: 81px;">
|
||||
<% if user_has_rights %>
|
||||
|
||||
<div class="action pull-right">
|
||||
<a class="btn btn-primary" href="<%= new_admin_e_paper_path %>">
|
||||
<%= t("e_paper.new_paper") %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="action pull-right">
|
||||
<a class="btn btn-primary" href="<%= new_admin_e_paper_path %>">
|
||||
<%= t("e_paper.new_paper") %>
|
||||
</a>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(".test-email").on("click",function(){
|
||||
var el = $(this),
|
||||
email = prompt("Please enter an email address to send test email.", "<%= current_user.member_profile.email rescue "" %>");
|
||||
if(email != null){
|
||||
$.ajax({
|
||||
url : el.attr("href"),
|
||||
data : {"email" : email},
|
||||
dataType : "json",
|
||||
type : "get"
|
||||
}).done(function(){
|
||||
alert("Email sent.")
|
||||
})
|
||||
}
|
||||
return false;
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,31 @@
|
|||
<script>
|
||||
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
|
||||
</script>
|
||||
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<% @table_fields.each do |f| %>
|
||||
<%= thead(f) %>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @subscribers.each do |sub| %>
|
||||
<tr>
|
||||
<td>
|
||||
<%= sub.email %>
|
||||
</td>
|
||||
<td>
|
||||
<a data-method="delete" data-confirm="Are you sure?" href="<%= delete_subscriber_admin_e_paper_path(sub.id, :page => params[:page]) %>" class="btn btn-danger"><%= t(:delete_) %></a>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%=
|
||||
content_tag :div, class: "bottomnav clearfix" do
|
||||
content_tag :div, paginate(@subscribers), class: "pagination pagination-centered"
|
||||
end
|
||||
%>
|
|
@ -1,15 +1,175 @@
|
|||
<% paper = @data["paper"] %>
|
||||
<% page = @data["page"] %>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= paper.title %></title>
|
||||
<style type="text/css">
|
||||
.epaper-show .epaper-show-title {
|
||||
border-bottom: 2px solid #ddd;
|
||||
padding: 0 0 10px;
|
||||
margin: 10px 0 20px;
|
||||
color: #881f05;
|
||||
}
|
||||
.epaper-show .ep-info {
|
||||
background: #fff;
|
||||
border-radius: 3px;
|
||||
padding: 10px;
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
.epaper-show .ep-info-title {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 0 0 5px;
|
||||
margin: 0 0 8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
.epaper-show .ep-info-date {
|
||||
float: left;
|
||||
width: 50%;
|
||||
margin: 0 0 5px;
|
||||
color: #888;
|
||||
}
|
||||
.epaper-show .ep-info-period {
|
||||
float: right;
|
||||
width: 50%;
|
||||
margin: 0 0 5px;
|
||||
text-align: right;
|
||||
padding: 0 10px 0 0;
|
||||
color: #888;
|
||||
}
|
||||
.epaper-show .ep-info-description {
|
||||
clear: both;
|
||||
padding: 10px 0 0;
|
||||
overflow: hidden;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
.epaper-show .ep-info-description span {
|
||||
float: right;
|
||||
width: calc(100% - 90px);
|
||||
line-height: 1.5;
|
||||
}
|
||||
.epaper-show .ep-content-item {
|
||||
float: left;
|
||||
width: calc(50% - 20px);
|
||||
border: 1px solid #ccc;
|
||||
vertical-align: top;
|
||||
min-height: 200px;
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
.epaper-show .ep-content-title {
|
||||
color: #881f05;
|
||||
font-size: 20px;
|
||||
border-left: 4px solid #881f05;
|
||||
display: block;
|
||||
padding: 0 0 0 10px;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
.epaper-show p.ep-content-text {
|
||||
color: #666;
|
||||
font-size: 15px;
|
||||
}
|
||||
.epaper-show a.ep-content-more {
|
||||
background: #881f05;
|
||||
color: #fff;
|
||||
padding: 2px 10px;
|
||||
border-radius: 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.ep-topic-show .ep-topic-title {
|
||||
margin: 10px 0;
|
||||
color: #881f05;
|
||||
}
|
||||
.ep-topic-show .ep-topic-date {
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
.ep-topic-show .ep-topic-content {
|
||||
font-size: 15px;
|
||||
line-height: 2;
|
||||
}
|
||||
|
||||
.epaper-form {
|
||||
background: #fff;
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
margin: auto;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0 30px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.epaper-form input.input-mail {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 0 0 20px;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
color: #333;
|
||||
}
|
||||
.epaper-form .btn-primary {
|
||||
width: 50%;
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
.epaper-form .btn-white {
|
||||
background: none;
|
||||
width: 50%;
|
||||
outline: none;
|
||||
float: right;
|
||||
color: #888;
|
||||
}
|
||||
.epaper-form .btn-white:active {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.epaper-form .btn-white:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.epaper-form .ep-form-title {
|
||||
font-size: 20px;
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
.epaper-form h3.ep-form-title .en {
|
||||
display: none;
|
||||
}
|
||||
.epaper-form form {
|
||||
overflow: hidden;
|
||||
}
|
||||
.school-heading{
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #c8c8c8;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2><a href="#"><%= paper.title %></a></h2>
|
||||
<ol>
|
||||
<% paper.topics.each do |topic| %>
|
||||
<li><a href=""><%= topic.episode %></a></li>
|
||||
<% end %>
|
||||
</ol>
|
||||
<div class="school-heading">
|
||||
<img src="http://hps.pending.rulingcom.com/uploads/site/site_logo/589d279202dcf06d74000018/title.png" alt="Health Promoting School">
|
||||
</div>
|
||||
<div class="epaper-show">
|
||||
<h3 class="epaper-show-title"><%= t('e_paper.intro') %></h3>
|
||||
<div class="ep-info">
|
||||
<div class="ep-info-title"><%= t('e_paper.title') %>:<span><%= paper.title %></span></div>
|
||||
<div class="ep-info-date"><%= t('e_paper.date') %>:<span><%= paper.created_at.strftime("%Y-%m-%d") %></span></div>
|
||||
<div class="ep-info-period"><%= t('e_paper.period') %>:<span><%= paper.period.strftime("%Y-%m-%d") %></span></div>
|
||||
<div class="ep-info-description"><%= t('e_paper.description') %><span><%= paper.description %></span></div>
|
||||
</div>
|
||||
|
||||
<div class="ep-content">
|
||||
<% paper.topics.desc(:created_at).each do |topic| %>
|
||||
<div class="ep-content-item">
|
||||
<a class="ep-content-title" href="<%= page + "/" + paper.to_param + "?method=showtopic" %>" target="_blank"><%= topic.episode %></a>
|
||||
<% t = strip_tags(topic.content) %>
|
||||
<p class="ep-content-text"><%= t[0..100] %></p>
|
||||
<a class="ep-content-more" href="<%= page + "/" + paper.to_param + "?method=showtopic" %>" target="_blank">more</a>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,4 @@
|
|||
<%= render_filter @filter_fields, "index_table" %>
|
||||
<span id="index_table">
|
||||
<%= render 'subscriber_index'%>
|
||||
</span>
|
|
@ -12,7 +12,8 @@ en:
|
|||
history: "History Episode"
|
||||
intro: "Intro"
|
||||
date: "Date"
|
||||
send: "Send e-Paper"
|
||||
send: "Mail e-Paper"
|
||||
sending: "Sending in process"
|
||||
published: "Published"
|
||||
|
||||
subscribers: Subscribers
|
||||
test_mail: Send Test Email
|
|
@ -16,3 +16,5 @@ zh_tw:
|
|||
send: "發送電子報"
|
||||
sending: "發送處理中"
|
||||
published: "已發送"
|
||||
subscribers: 訂閱
|
||||
test_mail: Send Test Email
|
|
@ -7,6 +7,11 @@ Rails.application.routes.draw do
|
|||
resources :e_papers do
|
||||
member do
|
||||
get :send_email_to_subscribers
|
||||
delete "delete_subscriber"
|
||||
get "send_test_email"
|
||||
end
|
||||
collection do
|
||||
get "subscribers"
|
||||
end
|
||||
end
|
||||
resources :topics
|
||||
|
|
|
@ -24,6 +24,12 @@ module EPaper
|
|||
:active_for_action=>{'admin/e_papers'=>"index"},
|
||||
:available_for => 'users'
|
||||
|
||||
context_link 'e_paper.subscribers',
|
||||
:link_path=>"subscribers_admin_e_papers_path" ,
|
||||
:priority=>1,
|
||||
:active_for_action=>{'admin/e_papers'=>"subscribers"},
|
||||
:available_for => 'users'
|
||||
|
||||
# context_link 'new_',
|
||||
# :link_path=>"new_admin_e_paper_path" ,
|
||||
# :priority=>2,
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace :epaper do
|
|||
if !paper.nil?
|
||||
subscribers = Subscriber.all
|
||||
emails = []
|
||||
mail_limit = 2
|
||||
mail_limit = 25
|
||||
subscribers.each do |subscriber|
|
||||
emails << subscriber.email
|
||||
subscriber.last_paper_sent = paper.id.to_s
|
||||
|
|
Loading…
Reference in New Issue