diff --git a/app/controllers/admin/mail_trackings_controller.rb b/app/controllers/admin/mail_trackings_controller.rb
new file mode 100644
index 0000000..6762289
--- /dev/null
+++ b/app/controllers/admin/mail_trackings_controller.rb
@@ -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
diff --git a/app/controllers/admin/newsletters_controller.rb b/app/controllers/admin/newsletters_controller.rb
index d1070c2..e4d61a8 100755
--- a/app/controllers/admin/newsletters_controller.rb
+++ b/app/controllers/admin/newsletters_controller.rb
@@ -76,8 +76,8 @@ class Admin::NewslettersController < ApplicationController
def send_test
@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"
@@ -86,10 +86,27 @@ class Admin::NewslettersController < ApplicationController
def send_helper(newsletter, email, options = {})
- begin
- NewsletterMails.newsletter(newsletter, email, options).deliver if email and email != ""
- rescue
- @errors << "#{p.email}"
+
+ if email and email != ""
+
+ 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 != ""
+
+
+ rescue
+ @errors << "#{email}"
+ end
end
end
@@ -97,6 +114,8 @@ class Admin::NewslettersController < ApplicationController
def send_newsletter
@errors = []
@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]
PeopleNewsgroup.all(:conditions => {:newsgroup_id => params[:confirmed_groups]}).each do |pn|
if pn.person
diff --git a/app/models/archive_newsletter.rb b/app/models/archive_newsletter.rb
new file mode 100644
index 0000000..b9e1a0e
--- /dev/null
+++ b/app/models/archive_newsletter.rb
@@ -0,0 +1,3 @@
+class ArchiveNewsletter < ActiveRecord::Base
+ belongs_to :newsletter
+end
diff --git a/app/models/mail_archive.rb b/app/models/mail_archive.rb
new file mode 100644
index 0000000..0906cec
--- /dev/null
+++ b/app/models/mail_archive.rb
@@ -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
diff --git a/app/views/newsletter_mails/newsletter.html.haml b/app/views/newsletter_mails/newsletter.html.haml
index 3e0edee..6ea6337 100644
--- a/app/views/newsletter_mails/newsletter.html.haml
+++ b/app/views/newsletter_mails/newsletter.html.haml
@@ -15,4 +15,5 @@
%br
%br
=link_to @newsletter.email_from, "mailto:#{@newsletter.email_from}"
-
\ No newline at end of file
+-if @options[:mail_archive] and @options[:mail_archive].token
+ =image_tag image_tracking_url(:token => @options[:mail_archive].token)
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index cfff28b..4d35906 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,7 +5,7 @@ Survey::Application.routes.draw do
get 'plaquettes/gaspillage.:f' => 'plaquettes#gaspillage', :f => "html"
get 'plaquettes/:slug.:f' => 'plaquettes#show', :f => "html"
-
+ get 'mail_assets/:token.png' => "admin/mail_trackings#update", :as => :image_tracking
#admin
diff --git a/db/migrate/20141030163836_create_mail_archives.rb b/db/migrate/20141030163836_create_mail_archives.rb
new file mode 100644
index 0000000..82ee3f3
--- /dev/null
+++ b/db/migrate/20141030163836_create_mail_archives.rb
@@ -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
diff --git a/db/migrate/20141030173048_create_archive_newsletters.rb b/db/migrate/20141030173048_create_archive_newsletters.rb
new file mode 100644
index 0000000..8f37b24
--- /dev/null
+++ b/db/migrate/20141030173048_create_archive_newsletters.rb
@@ -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
diff --git a/db/schema.rb b/db/schema.rb
index d6b6b7a..3d1d9e7 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# 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|
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", ["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|
t.date "paid_at"
t.integer "amount"
@@ -141,6 +152,23 @@ ActiveRecord::Schema.define(version: 20140619095558) do
t.datetime "updated_at", null: false
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|
t.string "name"
t.text "description"
diff --git a/public/tracking.png b/public/tracking.png
new file mode 100644
index 0000000..487dd30
Binary files /dev/null and b/public/tracking.png differ
diff --git a/test/fixtures/archive_newsletters.yml b/test/fixtures/archive_newsletters.yml
new file mode 100644
index 0000000..1d1b86e
--- /dev/null
+++ b/test/fixtures/archive_newsletters.yml
@@ -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
+ :
diff --git a/test/fixtures/mail_archives.yml b/test/fixtures/mail_archives.yml
new file mode 100644
index 0000000..28ff7f1
--- /dev/null
+++ b/test/fixtures/mail_archives.yml
@@ -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
diff --git a/test/models/archive_newsletter_test.rb b/test/models/archive_newsletter_test.rb
new file mode 100644
index 0000000..0d34f1f
--- /dev/null
+++ b/test/models/archive_newsletter_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ArchiveNewsletterTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end
diff --git a/test/models/mail_archive_test.rb b/test/models/mail_archive_test.rb
new file mode 100644
index 0000000..f50db69
--- /dev/null
+++ b/test/models/mail_archive_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class MailArchiveTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end