]> source.dussan.org Git - redmine.git/commitdiff
Mailer:
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Nov 2007 10:43:39 +0000 (10:43 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Nov 2007 10:43:39 +0000 (10:43 +0000)
* added an application setting to specify the application protocol (http or https) used to generate urls
* added layouts for text and html emails
* no more language specific templates
* urls are now generated using UrlWriter
* the mailer now uses AdvAttrAccessor code style to set email parameters

git-svn-id: http://redmine.rubyforge.org/svn/trunk@877 e93f8b46-1217-0410-a6f0-8f06a7374b81

52 files changed:
app/models/mailer.rb
app/views/mailer/_issue_text_html.rhtml
app/views/mailer/_issue_text_plain.rhtml
app/views/mailer/account_information.rhtml [deleted file]
app/views/mailer/account_information.text.html.rhtml [new file with mode: 0644]
app/views/mailer/account_information.text.plain.rhtml [new file with mode: 0644]
app/views/mailer/account_information_fr.rhtml [deleted file]
app/views/mailer/account_information_pl.rhtml [deleted file]
app/views/mailer/account_information_sr.rhtml [deleted file]
app/views/mailer/attachments_added.text.html.rhtml
app/views/mailer/attachments_added.text.plain.rhtml
app/views/mailer/document_added.text.html.rhtml
app/views/mailer/document_added.text.plain.rhtml
app/views/mailer/issue_add.text.html.rhtml
app/views/mailer/issue_add.text.plain.rhtml
app/views/mailer/issue_edit.text.html.rhtml
app/views/mailer/issue_edit.text.plain.rhtml
app/views/mailer/layout.text.html.rhtml [new file with mode: 0644]
app/views/mailer/layout.text.plain.rhtml [new file with mode: 0644]
app/views/mailer/lost_password.rhtml [deleted file]
app/views/mailer/lost_password.text.html.rhtml [new file with mode: 0644]
app/views/mailer/lost_password.text.plain.rhtml [new file with mode: 0644]
app/views/mailer/message_posted.text.html.rhtml
app/views/mailer/message_posted.text.plain.rhtml
app/views/mailer/news_added.text.html.rhtml
app/views/mailer/news_added.text.plain.rhtml
app/views/mailer/register.rhtml [deleted file]
app/views/mailer/register.text.html.rhtml [new file with mode: 0644]
app/views/mailer/register.text.plain.rhtml [new file with mode: 0644]
app/views/mailer/test.text.html.rhtml
app/views/mailer/test.text.plain.rhtml
app/views/settings/edit.rhtml
config/settings.yml
lang/bg.yml
lang/cs.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fr.yml
lang/he.yml
lang/it.yml
lang/ja.yml
lang/nl.yml
lang/pl.yml
lang/pt-br.yml
lang/pt.yml
lang/ro.yml
lang/sr.yml
lang/sv.yml
lang/zh.yml
test/fixtures/attachments.yml
test/unit/mailer_test.rb

index da7937404fa1597ad9ac0b29c91ca95d317b207a..c17e2aa195501f2fdad14c794a1d6af426c32fad 100644 (file)
@@ -20,99 +20,111 @@ class Mailer < ActionMailer::Base
   helper IssuesHelper
   helper CustomFieldsHelper
   
-  def account_information(user, password)
-    set_language_if_valid user.language
-    recipients user.mail
-    from Setting.mail_from
-    subject l(:mail_subject_register)
-    body :user => user, :password => password
-  end
-
-  def issue_add(issue)
-    set_language_if_valid(Setting.default_language)
-    @recipients     = issue.recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
-    @body['issue']  = issue
+  include ActionController::UrlWriter
+  
+  def issue_add(issue)    
+    recipients issue.recipients    
+    subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
+    body :issue => issue,
+         :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
   end
 
   def issue_edit(journal)
-    set_language_if_valid(Setting.default_language)
     issue = journal.journalized
-    @recipients     = issue.recipients
+    recipients issue.recipients
     # Watchers in cc
-    @cc             = issue.watcher_recipients - @recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
-    @body['issue']  = issue
-    @body['journal']= journal
+    cc(issue.watcher_recipients - @recipients)
+    subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
+    body :issue => issue,
+         :journal => journal,
+         :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
   end
   
   def document_added(document)
-    set_language_if_valid(Setting.default_language)
-    @recipients     = document.project.recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
-    @body['document'] = document
+    recipients document.project.recipients
+    subject "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
+    body :document => document,
+         :document_url => url_for(:controller => 'documents', :action => 'show', :id => document)
   end
   
   def attachments_added(attachments)
-    set_language_if_valid(Setting.default_language)
     container = attachments.first.container
-    url = ''
     added_to = ''
+    added_to_url = ''
     case container.class.name
     when 'Version'
-      url = {:only_path => false, :host => Setting.host_name, :controller => 'projects', :action => 'list_files', :id => container.project_id}
+      added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
       added_to = "#{l(:label_version)}: #{container.name}"
     when 'Document'
-      url = {:only_path => false, :host => Setting.host_name, :controller => 'documents', :action => 'show', :id => container.id}
+      added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id)
       added_to = "#{l(:label_document)}: #{container.title}"
     end
-    @recipients     = container.project.recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{container.project.name}] #{l(:label_attachment_new)}"
-    @body['attachments'] = attachments
-    @body['url']    = url
-    @body['added_to'] = added_to
+    recipients container.project.recipients
+    subject "[#{container.project.name}] #{l(:label_attachment_new)}"
+    body :attachments => attachments,
+         :added_to => added_to,
+         :added_to_url => added_to_url
   end
 
   def news_added(news)
-    set_language_if_valid(Setting.default_language)
-    @recipients     = news.project.recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
-    @body['news'] = news
+    recipients news.project.recipients
+    subject "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
+    body :news => news,
+         :news_url => url_for(:controller => 'news', :action => 'show', :id => news)
   end
-  
+
+  def message_posted(message, recipients)
+    recipients(recipients)
+    subject "[#{message.board.project.name} - #{message.board.name}] #{message.subject}"
+    body :message => message,
+         :message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
+  end
+   
+  def account_information(user, password)
+    set_language_if_valid user.language
+    recipients user.mail
+    subject l(:mail_subject_register)
+    body :user => user,
+         :password => password,
+         :login_url => url_for(:controller => 'account', :action => 'login')
+  end
+
   def lost_password(token)
     set_language_if_valid(token.user.language)
-    @recipients     = token.user.mail
-    @from           = Setting.mail_from
-    @subject        = l(:mail_subject_lost_password)
-    @body['token']  = token
+    recipients token.user.mail
+    subject l(:mail_subject_lost_password)
+    body :token => token,
+         :url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
   end  
 
   def register(token)
     set_language_if_valid(token.user.language)
-    @recipients     = token.user.mail
-    @from           = Setting.mail_from
-    @subject        = l(:mail_subject_register)
-    @body['token']  = token
-  end
-  
-  def message_posted(message, recipients)
-    set_language_if_valid(Setting.default_language)
-    @recipients     = recipients
-    @from           = Setting.mail_from
-    @subject        = "[#{message.board.project.name} - #{message.board.name}] #{message.subject}"
-    @body['message'] = message
+    recipients token.user.mail
+    subject l(:mail_subject_register)
+    body :token => token,
+         :url => url_for(:controller => 'account', :action => 'register', :token => token.value)
   end
   
   def test(user)
     set_language_if_valid(user.language)
-    @recipients     = user.mail
-    @from           = Setting.mail_from
-    @subject        = 'Redmine'
+    recipients user.mail
+    subject 'Redmine test'
+    body :url => url_for(:controller => 'welcome')
+  end
+  
+  private
+  def initialize_defaults(method_name)
+    super
+    set_language_if_valid Setting.default_language
+    from Setting.mail_from
+    default_url_options[:host] = Setting.host_name
+    default_url_options[:protocol] = Setting.protocol
+  end
+  
+  # Renders a message with the corresponding layout
+  def render_message(method_name, body)
+    layout = method_name.match(%r{text\.html\.(rhtml|rxml)}) ? 'layout.text.html.rhtml' : 'layout.text.plain.rhtml'
+    body[:content_for_layout] = render(:file => method_name, :body => body)
+    ActionView::Base.new(File.join(template_root, 'mailer'), body, self).render(:file => layout)
   end
 end
index 80885ebabe17dd3c8d5ded4a3cc1cfd018d9b914..a3eb05b0180acbd4905b6268bc857653798b34f4 100644 (file)
@@ -1,5 +1,4 @@
-<%= link_to "#{issue.tracker.name} ##{issue.id}",  :only_path => false, :host => Setting.host_name, :controller => 'issues', :action => 'show', :id => issue %>:
-<%= issue.subject %>
+<h1><%= link_to "#{issue.tracker.name} ##{issue.id}: #{issue.subject}", issue_url %></h1>
 
 <ul>
 <li><%=l(:field_author)%>: <%= issue.author %></li>
index 5e211f9aff7aaa6141decb128ad1dd76908668d7..6b87c18087e72167e76f12dbe38ff8c9d7ab5004 100644 (file)
@@ -1,5 +1,5 @@
 <%= "#{issue.tracker.name} ##{issue.id}: #{issue.subject}" %>
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'issues', :action => 'show', :id => issue %>
+<%= issue_url %>
 
 <%=l(:field_author)%>: <%= issue.author %>
 <%=l(:field_status)%>: <%= issue.status %>
diff --git a/app/views/mailer/account_information.rhtml b/app/views/mailer/account_information.rhtml
deleted file mode 100644 (file)
index 98b2916..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<% if @user.auth_source %>You can use your "<%= @user.auth_source.name %>" account to log into Redmine.
-<% else %>Your Redmine account information:
-* Login:    <%= @user.login %>
-* Password: <%= @password %>
-<% end %>
-Log in: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'login' %>
-<% unless @user.auth_source %>
-You can change your password here: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'my', :action => 'account' %>
-<% end %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/account_information.text.html.rhtml b/app/views/mailer/account_information.text.html.rhtml
new file mode 100644 (file)
index 0000000..3b6ab6a
--- /dev/null
@@ -0,0 +1,11 @@
+<% if @user.auth_source %>
+<p><%= l(:mail_body_account_information_external, @user.auth_source.name) %></p>
+<% else %>
+<p><%= l(:mail_body_account_information) %>:</p>
+<ul>
+    <li><%= l(:field_login) %>: <%= @user.login %></li>
+    <li><%= l(:field_password) %>: <%= @password %></li>
+</ul>
+<% end %>
+
+<p><%= l(:label_login) %>: <%= auto_link(@login_url) %></p>
diff --git a/app/views/mailer/account_information.text.plain.rhtml b/app/views/mailer/account_information.text.plain.rhtml
new file mode 100644 (file)
index 0000000..0a02566
--- /dev/null
@@ -0,0 +1,6 @@
+<% if @user.auth_source %><%= l(:mail_body_account_information_external, @user.auth_source.name) %>
+<% else %><%= l(:mail_body_account_information) %>:
+* <%= l(:field_login) %>: <%= @user.login %>
+* <%= l(:field_password) %>: <%= @password %>
+<% end %>
+<%= l(:label_login) %>: <%= @login_url %>
diff --git a/app/views/mailer/account_information_fr.rhtml b/app/views/mailer/account_information_fr.rhtml
deleted file mode 100644 (file)
index 71df345..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<% if @user.auth_source %>Vous pouvez utiliser votre compte "<%= @user.auth_source.name %>" pour vous connecter à Redmine.
-<% else %>Paramètres de connexion de votre compte Redmine:
-* Identifiant:  <%= @user.login %>
-* Mot de passe: <%= @password %>
-<% end %>
-Pour se connecter à l'application: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'login' %>
-<% unless @user.auth_source %>
-Vous pouvez changer votre mot de passe à l'adresse: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'my', :action => 'account' %>
-<% end %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/account_information_pl.rhtml b/app/views/mailer/account_information_pl.rhtml
deleted file mode 100644 (file)
index 7f9060b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<% if @user.auth_source %>Możesz użyć twojego "<%= @user.auth_source.name %>" konta do zalogowania do Redmine.
-<% else %>Twoje konto w Redmine:
-* Login:    <%= @user.login %>
-* Hasło: <%= @password %>
-<% end %>
-Zaloguj: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'login' %>
-<% unless @user.auth_source %>
-Możesz zmienić swoje hasło tutaj: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'my', :action => 'account' %>
-<% end %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/account_information_sr.rhtml b/app/views/mailer/account_information_sr.rhtml
deleted file mode 100644 (file)
index 0acd87d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<% if @user.auth_source %>Mozete koristiti vas "<%= @user.auth_source.name %>" nalog da bi ste se prikljucili na Redmine.
-<% else %>Informacije o vasem Redmine nalogu:
-* Login:    <%= @user.login %>
-* Password: <%= @password %>
-<% end %>
-Log in: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'login' %>
-<% unless @user.auth_source %>
-Ovde mozete izmeniti svoju lozinku: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'my', :action => 'account' %>
-<% end %>
index 9bb30db1d29058d28bb61659f63fcc9cbb01921d..d2355b1c42e90d167a7f1cb9c79c2ad0f99008d2 100644 (file)
@@ -1,7 +1,5 @@
-<%= link_to @added_to, @url %><br />
+<%= link_to @added_to, @added_to_url %><br />
 
 <ul><% @attachments.each do |attachment | %>
 <li><%= attachment.filename %></li>
 <% end %></ul>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
index 7e4245ef298121213fbb4ab86fa702fa11c297ec..28cb8285e13b0d14500cf98283651aa4c6f0d539 100644 (file)
@@ -1,6 +1,4 @@
 <%= @added_to %><% @attachments.each do |attachment | %>
 - <%= attachment.filename %><% end %>
 
-<%= url_for @url %>
-----------------------------------------
-<%= Setting.emails_footer %>
+<%= @added_to_url %>
index d7d6558b87783f83b4941f8fbc3a05d7f378660e..2ef63012b97d7ba7a7f20f65d3156e9805c0867a 100644 (file)
@@ -1,6 +1,3 @@
-<%= link_to @document.title, :only_path => false, :host => Setting.host_name, :controller => 'documents', :action => 'show', :id => @document %>
-(<%= @document.category.name %>)<br />
+<%= link_to @document.title, @document_url %> (<%= @document.category.name %>)<br />
 <br />
 <%= textilizable(@document.description) %>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
index bb42758f7a5180b4216e6d9432a6d2a18688b2d8..a6a72829e72efcd569a26be45f0dc4814eb07378 100644 (file)
@@ -1,6 +1,4 @@
 <%= @document.title %> (<%= @document.category.name %>)
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'documents', :action => 'show', :id => @document %>
+<%= @document_url %>
 
 <%= @document.description %>
-----------------------------------------
-<%= Setting.emails_footer %>
index 7a0712c368237b4f56b717440679c41f21b25140..adcb4c9fe5f4854fe3ba07e83b719e53b971dd99 100644 (file)
@@ -1,5 +1,3 @@
 <%= l(:text_issue_added, "##{@issue.id}") %>
 <hr />
-<%= render :file => "_issue_text_html", :use_full_path => true, :locals => { :issue => @issue } %>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
+<%= render :file => "_issue_text_html", :use_full_path => true, :locals => { :issue => @issue, :issue_url => @issue_url } %>
index a5740ad89a0930989e89455bb9699660365db5f6..797fb11b68a0f68d54984fc71eea32988bef0549 100644 (file)
@@ -1,5 +1,3 @@
 <%= l(:text_issue_added, "##{@issue.id}") %>
 ----------------------------------------
-<%= render :file => "_issue_text_plain", :use_full_path => true, :locals => { :issue => @issue } %>
-----------------------------------------
-<%= Setting.emails_footer %>
+<%= render :file => "_issue_text_plain", :use_full_path => true, :locals => { :issue => @issue, :issue_url => @issue_url } %>
index fddd194311d82c4ad14672c8922648cb4e8e4a65..40d34968e0bd23bfa410ad76567e674c239380ac 100644 (file)
@@ -7,6 +7,4 @@
 </ul>
 <%= textilizable(@journal.notes) %>
 <hr />
-<%= render :file => "_issue_text_html", :use_full_path => true, :locals => { :issue => @issue } %>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
+<%= render :file => "_issue_text_html", :use_full_path => true, :locals => { :issue => @issue, :issue_url => @issue_url } %>
index 4ecc3754942577688951df5229eaedd2238c1bb8..32019eaea01d76b53a8d0111625b8d43e7c9a453 100644 (file)
@@ -5,6 +5,4 @@
 <% end %>
 <%= @journal.notes if @journal.notes? %>
 ----------------------------------------
-<%= render :file => "_issue_text_plain", :use_full_path => true, :locals => { :issue => @issue } %>
-----------------------------------------
-<%= Setting.emails_footer %>
+<%= render :file => "_issue_text_plain", :use_full_path => true, :locals => { :issue => @issue, :issue_url => @issue_url } %>
diff --git a/app/views/mailer/layout.text.html.rhtml b/app/views/mailer/layout.text.html.rhtml
new file mode 100644 (file)
index 0000000..b78e92b
--- /dev/null
@@ -0,0 +1,17 @@
+<html>
+<head>
+<style>
+body { font-family: Verdana, sans-serif; font-size: 0.8em; color:#484848; }
+body h1 { font-family: "Trebuchet MS", Verdana, sans-serif; font-size: 1.2em; margin: 0;}
+a, a:link, a:visited{ color: #2A5685; }
+a:hover, a:active{ color: #c61a1a; }
+hr { width: 100%; height: 1px; background: #ccc; border: 0; }
+.footer { font-size: 0.8em; font-style: italic; }
+</style>
+</head>
+<body>
+<%= yield %>
+<hr />
+<span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.emails_footer) %></span>
+</body>
+</html>
diff --git a/app/views/mailer/layout.text.plain.rhtml b/app/views/mailer/layout.text.plain.rhtml
new file mode 100644 (file)
index 0000000..ec3e1bf
--- /dev/null
@@ -0,0 +1,3 @@
+<%= yield %>
+----------------------------------------
+<%= Setting.emails_footer %>
diff --git a/app/views/mailer/lost_password.rhtml b/app/views/mailer/lost_password.rhtml
deleted file mode 100644 (file)
index 5b5bb3b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<%= l(:mail_body_lost_password) %>
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'lost_password', :token => @token.value %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/lost_password.text.html.rhtml b/app/views/mailer/lost_password.text.html.rhtml
new file mode 100644 (file)
index 0000000..26eacfa
--- /dev/null
@@ -0,0 +1,2 @@
+<p><%= l(:mail_body_lost_password) %><br />
+<%= auto_link(@url) %></p>
diff --git a/app/views/mailer/lost_password.text.plain.rhtml b/app/views/mailer/lost_password.text.plain.rhtml
new file mode 100644 (file)
index 0000000..aec1b5b
--- /dev/null
@@ -0,0 +1,2 @@
+<%= l(:mail_body_lost_password) %>
+<%= @url %>
index 89346e724a8937fa12a66b7c6b4db3949ec54caa..558a6e52a65c8294975ca671739cfaf97a633948 100644 (file)
@@ -1,6 +1,4 @@
-<%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to @message.subject, :only_path => false, :host => Setting.host_name, :controller => 'messages', :action => 'show', :board_id => @message.board_id, :id => @message.root %><br />
+<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to @message.subject, @message_url %></h1>
 <em><%= @message.author.name %></em>
 
 <%= textilizable @message.content %>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
index 97539fd01b212f386e5cdd44991f1f2a1cee2390..cc11205676be79cfb2c94823f07dcdec50f9048c 100644 (file)
@@ -1,6 +1,4 @@
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'messages', :action => 'show', :board_id => @message.board_id, :id => @message.root %>
+<%= @message_url %>
 <%= @message.author.name %>
 
 <%= @message.content %>
-----------------------------------------
-<%= Setting.emails_footer %>
index e99dfd5bcd35b83cd7dc5eac2bcfd50f36289b7c..010ef8ee1baf7b75267297db6d6337e91015ca10 100644 (file)
@@ -1,6 +1,4 @@
-<%= link_to @news.title, :only_path => false, :host => Setting.host_name, :controller => 'news', :action => 'show', :id => @news %><br />
+<h1><%= link_to @news.title, @news_url %></h1>
 <em><%= @news.author.name %></em>
 
 <%= textilizable(@news.description) %>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
index 1a04af9ca766d99bf4a6e7098e2e236abb25354b..c8ae3035f3371e455f76ac74db103c8616f28c5e 100644 (file)
@@ -1,7 +1,5 @@
 <%= @news.title %>
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'news', :action => 'show', :id => @news %>
+<%= @news_url %>
 <%= @news.author.name %>
 
 <%= @news.description %>
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/register.rhtml b/app/views/mailer/register.rhtml
deleted file mode 100644 (file)
index 55fcf1e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<%= l(:mail_body_register) %>
-<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'account', :action => 'register', :token => @token.value %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
diff --git a/app/views/mailer/register.text.html.rhtml b/app/views/mailer/register.text.html.rhtml
new file mode 100644 (file)
index 0000000..145c3d7
--- /dev/null
@@ -0,0 +1,2 @@
+<p><%= l(:mail_body_register) %><br />
+<%= auto_link(@url) %></p>
diff --git a/app/views/mailer/register.text.plain.rhtml b/app/views/mailer/register.text.plain.rhtml
new file mode 100644 (file)
index 0000000..102a15e
--- /dev/null
@@ -0,0 +1,2 @@
+<%= l(:mail_body_register) %>
+<%= @url %>
index f1cb1881a10ea2603304fbea948a1d34087c7f62..25ad20c51487dbc5e226ea603bdd6f6fcdc3a3bb 100644 (file)
@@ -1,5 +1,2 @@
 <p>This is a test email sent by Redmine.<br />
-Redmine URL: <%= link_to url_for(:only_path => false, :host => Setting.host_name, :controller => 'welcome'),
-                         url_for(:only_path => false, :host => Setting.host_name, :controller => 'welcome') %></p>
-<hr />
-<small><em><%= textilizable Setting.emails_footer %></em></small>
+Redmine URL: <%= auto_link(@url) %></p>
index 0519caab5ee2800670a978bee9ae3dda7290a43b..790d6ab22f574e831fd3529f24b69238481a77ab 100644 (file)
@@ -1,5 +1,2 @@
 This is a test email sent by Redmine.
-Redmine URL: <%= url_for :only_path => false, :host => Setting.host_name, :controller => 'welcome' %>
-
-----------------------------------------
-<%= Setting.emails_footer %>
+Redmine URL: <%= @url %>
index 503339884648e1c0727fc1f693f152d6a0cb9be6..d3f994d4f83ef5edc8aa32ee06a37e954769881b 100644 (file)
@@ -37,6 +37,9 @@
 <p><label><%= l(:setting_host_name) %></label>
 <%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %></p>
 
+<p><label><%= l(:setting_protocol) %></label>
+<%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p>
+
 <p><label><%= l(:setting_text_formatting) %></label>
 <%= select_tag 'settings[text_formatting]', options_for_select([[l(:label_none), "0"], ["textile", "textile"]], Setting.text_formatting) %></p>
 
@@ -91,4 +94,4 @@
 
 <%= submit_tag l(:button_save) %>
 </div>
-<% end %>
\ No newline at end of file
+<% end %>
index ff695cc7cbacaaf699d6f7f2ce21ebc97b998327..333203f032aa64c3c77ec8f3889a342c8c8283ee 100644 (file)
@@ -47,6 +47,8 @@ default_language:
   default: en
 host_name:
   default: localhost:3000
+protocol:
+  default: http
 feeds_limit:
   format: int
   default: 15
index 366aa94a3a53a8397d977ca8c5050b8c1cc29e92..4697925353a40d69624ce9a21f32f712a7fe037f 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 4f35c8a3bbb94d49ae8e2fa9f3947189aa3c64aa..d62746633a3ae8f0564c66d64d975ed2e7f95ce6 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 350a86e4cf1858bf54dc726d724dbf4f320f363b..9a5fcee2b107dc4fbe610dac395775a3d302453e 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 4a52d281b9d83cb6575a11eed9fc907c950132bd..2ab4c11a2a9fb90422a4975779ae0b9bd58803ff 100644 (file)
@@ -80,6 +80,8 @@ mail_subject_lost_password: Your Redmine password
 mail_body_lost_password: 'To change your Redmine password, click on the following link:'
 mail_subject_register: Redmine account activation
 mail_body_register: 'To activate your Redmine account, click on the following link:'
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
 
 gui_validation_error: 1 error
 gui_validation_error_plural: %d errors
@@ -189,6 +191,7 @@ setting_cross_project_issue_relations: Allow cross-project issue relations
 setting_issue_list_default_columns: Default columns displayed on the issue list
 setting_repositories_encodings: Repositories encodings
 setting_emails_footer: Emails footer
+setting_protocol: Protocol
 
 label_user: User
 label_user_plural: Users
index 5d1f806c77966b4cdf4c779c1c93b9fbaae7a602..e93fb5bd877642fd41a3a8e4e3273417c54708e0 100644 (file)
@@ -537,3 +537,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index e5a2b843fadd7a2e8c62a6e6ff5261aaf893d929..1f35272c127607c916e00f19f2b43aebbff65565 100644 (file)
@@ -80,6 +80,8 @@ mail_subject_lost_password: Votre mot de passe redMine
 mail_body_lost_password: 'Pour changer votre mot de passe Redmine, cliquez sur le lien suivant:'
 mail_subject_register: Activation de votre compte redMine
 mail_body_register: 'Pour activer votre compte Redmine, cliquez sur le lien suivant:'
+mail_body_account_information_external: Vous pouvez utiliser votre compte "%s" pour vous connecter à Redmine.
+mail_body_account_information: Paramètres de connexion de votre compte Redmine
 
 gui_validation_error: 1 erreur
 gui_validation_error_plural: %d erreurs
@@ -189,6 +191,7 @@ setting_cross_project_issue_relations: Autoriser les relations entre demandes de
 setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes
 setting_repositories_encodings: Encodages des dépôts
 setting_emails_footer: Pied-de-page des emails
+setting_protocol: Protocole
 
 label_user: Utilisateur
 label_user_plural: Utilisateurs
index 206d33093757fcfe3e200ac31fee3a7f372bb530..73f72d5bbe4567787012289234b27f3d28daf1db 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 36475e6782fc2b1e41b9247e9bd0225756361a47..224843e0ef7fd29e93b55c1ea17ef8036ed97d9c 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 5a3362c214a2c23bb6424ccb51c3882c1741aa2d..4ff45f5fb6e44af21cfd79b9bf05109c66db9092 100644 (file)
@@ -535,3 +535,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 4d9479f32216f2470e188d25c762ce4d865d289a..f43f5a5b99e0d438e1da8d11ff8bcfc9282d7170 100644 (file)
@@ -535,3 +535,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 6f8d7f2fcb11474179216de0fa558efa6ac650b5..e636afe5b468d5fea7e4ff58c3d8dfa1d236ba16 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: Możesz użyć twojego "%s" konta do zalogowania do Redmine.
+mail_body_account_information: Twoje konto w Redmine
+setting_protocol: Protocol
index a01793979e9f902460b6c21b6c95b8e3fa35bb35..707baffcdfbdc11f32518da4ac7320b2811e18a1 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer\r
 label_float: Float\r
 button_copy: Copy\r
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.\r
+mail_body_account_information: Your Redmine account information\r
+setting_protocol: Protocol\r
index da919938dd06eb8b3eb4601b001348a048258c3e..687ab512ba4b449faf87a4bd7cdd4042e233531e 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 7328093341ed27282ec5a7643dc526798dc45994..f31bd6f84478cb8f43ac2cdb69051d9ba4be488c 100644 (file)
@@ -534,3 +534,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 96cd92734152aa10ebdb24045dceb641d757f03f..d958557310cfe173526e4ec00d0a2597d3d678e4 100644 (file)
@@ -80,6 +80,8 @@ mail_subject_lost_password: Vaša redMine lozinka
 mail_body_lost_password: 'Da biste izmenili vašu Redmine lozinku, kliknite na sledeći link:'
 mail_subject_register: aktivacija redMine naloga
 mail_body_register: 'Da biste aktivirali vaš Redmine nalog, kliknite na sledeći link:'
+mail_body_account_information_external: Mozete koristiti vas "%s" nalog da bi ste se prikljucili na Redmine.
+mail_body_account_information: Informacije o vasem Redmine nalogu
 
 gui_validation_error: 1 greška
 gui_validation_error_plural: %d grešaka
@@ -535,3 +537,4 @@ enumeration_doc_categories: Kategorija dokumenata
 enumeration_activities: Aktivnosti (praćenje vremena))
 label_float: Float
 button_copy: Copy
+setting_protocol: Protocol
index ae1329db5d59b7cfc673c5a31858d056c279edf1..0cd4f1a1fae96a5863207fdac516449555739a9b 100644 (file)
@@ -535,3 +535,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index a7ce17e191e1568dcff7713737595acaaf9d2b30..7150109229dcc51751bb08b215e8821ff1e7e265 100644 (file)
@@ -537,3 +537,6 @@ label_user_mail_option_none: "Only for things I watch or I'm involved in"
 setting_emails_footer: Emails footer
 label_float: Float
 button_copy: Copy
+mail_body_account_information_external: You can use your "%s" account to log into Redmine.
+mail_body_account_information: Your Redmine account information
+setting_protocol: Protocol
index 6c352e1e3c9d7284631e3ac62e0b5ed16731e98f..7649487558df13327e77f220d4ec0753635e75d5 100644 (file)
@@ -11,3 +11,16 @@ attachments_001:
   filesize: 28\r
   filename: error281.txt\r
   author_id: 2\r
+attachments_002: \r
+  created_on: 2006-07-19 21:07:27 +02:00\r
+  downloads: 0\r
+  content_type: text/plain\r
+  disk_filename: 060719210727_document.txt\r
+  container_id: 1\r
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
+  id: 2\r
+  container_type: Document\r
+  filesize: 28\r
+  filename: document.txt\r
+  author_id: 2\r
+  
\ No newline at end of file
index d92c5837bdd4b907ce9fd0a2dc8fa2cfca64cd9c..096551ee50a84801c6dcce1bd7907e76b3e0411b 100644 (file)
@@ -18,7 +18,7 @@
 require File.dirname(__FILE__) + '/../test_helper'
 
 class MailerTest < Test::Unit::TestCase
-  fixtures :projects, :issues, :users, :members, :documents, :attachments, :tokens, :journals, :journal_details, :trackers, :issue_statuses, :enumerations
+  fixtures :projects, :issues, :users, :members, :documents, :attachments, :news, :tokens, :journals, :journal_details, :trackers, :issue_statuses, :enumerations
   
   # test mailer methods for each language
   def test_issue_add
@@ -37,18 +37,54 @@ class MailerTest < Test::Unit::TestCase
     end
   end
   
-  def test_document_add
+  def test_document_added
     document = Document.find(1)
     GLoc.valid_languages.each do |lang|
       Setting.default_language = lang.to_s
       assert Mailer.deliver_document_added(document)
     end
   end
+  
+  def test_attachments_added
+    attachements = [ Attachment.find_by_container_type('Document') ]
+    GLoc.valid_languages.each do |lang|
+      Setting.default_language = lang.to_s
+      assert Mailer.deliver_attachments_added(attachements)
+    end
+  end
+  
+  def test_news_added
+    news = News.find(:first)
+    GLoc.valid_languages.each do |lang|
+      Setting.default_language = lang.to_s
+      assert Mailer.deliver_news_added(news)
+    end
+  end
+  
+  def test_message_posted
+    message = Message.find(:first)
+    recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
+    recipients = recipients.compact.uniq
+    GLoc.valid_languages.each do |lang|
+      Setting.default_language = lang.to_s
+      assert Mailer.deliver_message_posted(message, recipients)
+    end
+  end
+  
+  def test_account_information
+    user = User.find(:first)
+    GLoc.valid_languages.each do |lang|
+      user.update_attribute :language, lang.to_s
+      user.reload
+      assert Mailer.deliver_account_information(user, 'pAsswORd')
+    end
+  end
 
   def test_lost_password
     token = Token.find(2)
     GLoc.valid_languages.each do |lang|
       token.user.update_attribute :language, lang.to_s
+      token.reload
       assert Mailer.deliver_lost_password(token)
     end
   end
@@ -57,7 +93,8 @@ class MailerTest < Test::Unit::TestCase
     token = Token.find(1)
     GLoc.valid_languages.each do |lang|
       token.user.update_attribute :language, lang.to_s
+      token.reload
       assert Mailer.deliver_register(token)
     end
   end
-end
\ No newline at end of file
+end