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