mail tracking

This commit is contained in:
Nicolas Bally 2014-10-30 19:09:42 +01:00
parent 4720c272bd
commit 8490632452
14 changed files with 166 additions and 9 deletions

View File

@ -0,0 +1,18 @@
# -*- encoding : utf-8 -*-
class Admin::MailTrackingsController < ApplicationController
# GET /people
# GET /people.xml
def update
@mail_archive = MailArchive.find_by_token(params[:token])
@mail_archive.update_attributes(:readed => true)
send_file 'public/tracking.png', type: 'image/png', disposition: 'inline'
end
end

View File

@ -76,8 +76,8 @@ class Admin::NewslettersController < ApplicationController
def send_test def send_test
@newsletter = Newsletter.find(params[:id]) @newsletter = Newsletter.find(params[:id])
NewsletterMails.newsletter(@newsletter, params[:email]).deliver #NewsletterMails.newsletter(@newsletter, params[:email]).deliver
send_helper @newsletter, params[:email]
flash[:notice]= "La newsletter a bien été envoyée à l'email de test" flash[:notice]= "La newsletter a bien été envoyée à l'email de test"
@ -86,10 +86,27 @@ class Admin::NewslettersController < ApplicationController
def send_helper(newsletter, email, options = {}) def send_helper(newsletter, email, options = {})
if email and email != ""
begin begin
@mail_archive = MailArchive.new
@mail_archive.archive_newsletter_id = @archive_newsletter.id if @archive_newsletter
@mail_archive.email = email
@mail_archive.newsletter_id = newsletter.id
@mail_archive.sheet = options[:sheet]
@mail_archive.person = options[:person]
@mail_archive.save
options = options.merge({:mail_archive => @mail_archive})
NewsletterMails.newsletter(newsletter, email, options).deliver if email and email != "" NewsletterMails.newsletter(newsletter, email, options).deliver if email and email != ""
rescue rescue
@errors << "<span class'error'>#{p.email}</span>" @errors << "<span class'error'>#{email}</span>"
end
end end
end end
@ -97,6 +114,8 @@ class Admin::NewslettersController < ApplicationController
def send_newsletter def send_newsletter
@errors = [] @errors = []
@newsletter = Newsletter.find(params[:id]) @newsletter = Newsletter.find(params[:id])
@archive_newsletter = ArchiveNewsletter.create :newsletter_id => @newsletter.id, :title => @newsletter.title, :content => @newsletter.content, :email_from => Newsletter::EMAIL_TEXTES[@newsletter.email_from][0].to_s+ " <#{@newsletter.email_from}>"
if params[:confirmed_groups] if params[:confirmed_groups]
PeopleNewsgroup.all(:conditions => {:newsgroup_id => params[:confirmed_groups]}).each do |pn| PeopleNewsgroup.all(:conditions => {:newsgroup_id => params[:confirmed_groups]}).each do |pn|
if pn.person if pn.person

View File

@ -0,0 +1,3 @@
class ArchiveNewsletter < ActiveRecord::Base
belongs_to :newsletter
end

View File

@ -0,0 +1,17 @@
class MailArchive < ActiveRecord::Base
belongs_to :newsletter
belongs_to :archive_newsletter
belongs_to :sheet
belongs_to :person
before_create do
self.generate_token
end
def generate_token
begin
self[:token] = SecureRandom.urlsafe_base64
end while MailArchive.exists?(:token => self[token])
end
end

View File

@ -15,4 +15,5 @@
%br %br
%br %br
=link_to @newsletter.email_from, "mailto:#{@newsletter.email_from}" =link_to @newsletter.email_from, "mailto:#{@newsletter.email_from}"
-if @options[:mail_archive] and @options[:mail_archive].token
=image_tag image_tracking_url(:token => @options[:mail_archive].token)

View File

@ -5,7 +5,7 @@ Survey::Application.routes.draw do
get 'plaquettes/gaspillage.:f' => 'plaquettes#gaspillage', :f => "html" get 'plaquettes/gaspillage.:f' => 'plaquettes#gaspillage', :f => "html"
get 'plaquettes/:slug.:f' => 'plaquettes#show', :f => "html" get 'plaquettes/:slug.:f' => 'plaquettes#show', :f => "html"
get 'mail_assets/:token.png' => "admin/mail_trackings#update", :as => :image_tracking
#admin #admin

View File

@ -0,0 +1,15 @@
class CreateMailArchives < ActiveRecord::Migration
def change
create_table :mail_archives do |t|
t.references :newsletter, index: true
t.references :archive_newsletter, index: true
t.string :email
t.references :sheet, index: true
t.references :person, index: true
t.string :token
t.boolean :readed
t.timestamps
end
end
end

View File

@ -0,0 +1,12 @@
class CreateArchiveNewsletters < ActiveRecord::Migration
def change
create_table :archive_newsletters do |t|
t.references :newsletter, index: true
t.string :title
t.text :content
t.string :email_from
t.timestamps
end
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140619095558) do ActiveRecord::Schema.define(version: 20141030173048) do
create_table "admins", force: true do |t| create_table "admins", force: true do |t|
t.string "email", default: "", null: false t.string "email", default: "", null: false
@ -48,6 +48,17 @@ ActiveRecord::Schema.define(version: 20140619095558) do
add_index "answer_sets", ["question_set_id"], name: "index_answer_sets_on_question_set_id", using: :btree add_index "answer_sets", ["question_set_id"], name: "index_answer_sets_on_question_set_id", using: :btree
add_index "answer_sets", ["survey_item_answer_id"], name: "index_answer_sets_on_survey_item_answer_id", using: :btree add_index "answer_sets", ["survey_item_answer_id"], name: "index_answer_sets_on_survey_item_answer_id", using: :btree
create_table "archive_newsletters", force: true do |t|
t.integer "newsletter_id"
t.string "title"
t.text "content"
t.string "email_from"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "archive_newsletters", ["newsletter_id"], name: "index_archive_newsletters_on_newsletter_id", using: :btree
create_table "donates", force: true do |t| create_table "donates", force: true do |t|
t.date "paid_at" t.date "paid_at"
t.integer "amount" t.integer "amount"
@ -141,6 +152,23 @@ ActiveRecord::Schema.define(version: 20140619095558) do
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
end end
create_table "mail_archives", force: true do |t|
t.integer "newsletter_id"
t.integer "archive_newsletter_id"
t.string "email"
t.integer "sheet_id"
t.integer "person_id"
t.string "token"
t.boolean "readed"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "mail_archives", ["archive_newsletter_id"], name: "index_mail_archives_on_archive_newsletter_id", using: :btree
add_index "mail_archives", ["newsletter_id"], name: "index_mail_archives_on_newsletter_id", using: :btree
add_index "mail_archives", ["person_id"], name: "index_mail_archives_on_person_id", using: :btree
add_index "mail_archives", ["sheet_id"], name: "index_mail_archives_on_sheet_id", using: :btree
create_table "newsgroups", force: true do |t| create_table "newsgroups", force: true do |t|
t.string "name" t.string "name"
t.text "description" t.text "description"

BIN
public/tracking.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

13
test/fixtures/archive_newsletters.yml vendored Normal file
View File

@ -0,0 +1,13 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
one:
newsletter_id:
title: MyString
content: MyText
:
two:
newsletter_id:
title: MyString
content: MyText
:

17
test/fixtures/mail_archives.yml vendored Normal file
View File

@ -0,0 +1,17 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
one:
newsletter_id:
archive_newsletter_id:
email: MyString
sheet_id:
person_id:
token: MyString
two:
newsletter_id:
archive_newsletter_id:
email: MyString
sheet_id:
person_id:
token: MyString

View File

@ -0,0 +1,7 @@
require 'test_helper'
class ArchiveNewsletterTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,7 @@
require 'test_helper'
class MailArchiveTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end