diff --git a/.metadata/.plugins/org.eclipse.debug.core/.launches/Firefox - Internal Server.launch b/.metadata/.plugins/org.eclipse.debug.core/.launches/Firefox - Internal Server.launch
index f21eed9f2..678ced8a0 100644
--- a/.metadata/.plugins/org.eclipse.debug.core/.launches/Firefox - Internal Server.launch
+++ b/.metadata/.plugins/org.eclipse.debug.core/.launches/Firefox - Internal Server.launch
@@ -2,6 +2,7 @@
+
diff --git a/.metadata/.plugins/org.eclipse.debug.core/.launches/Internet Explorer - Internal Server.launch b/.metadata/.plugins/org.eclipse.debug.core/.launches/Internet Explorer - Internal Server.launch
index 2134fa92c..f7b0844d8 100644
--- a/.metadata/.plugins/org.eclipse.debug.core/.launches/Internet Explorer - Internal Server.launch
+++ b/.metadata/.plugins/org.eclipse.debug.core/.launches/Internet Explorer - Internal Server.launch
@@ -2,6 +2,7 @@
+
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 2721c57c7..06e5dac30 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -156,7 +156,16 @@ class ApplicationController < ActionController::Base
user
end
end
+ def try_to_autologin1
+ # auto-login feature starts a new session
+ user = User.try_to_autologin(params[:token])
+ if user
+ start_user_session(user)
+ end
+ user
+
+ end
# Sets the logged in user
def logged_user=(user)
reset_session
@@ -248,7 +257,30 @@ class ApplicationController < ActionController::Base
end
end
end
+ def authorize1(ctrl = params[:controller], action = params[:action],token = params[:token], global = false)
+ if(!User.current.logged? && !token.nil?)
+
+ User.current =try_to_autologin1
+ end
+ allowed = authorize_allowed(params[:controller], params[:action],global)
+
+ if allowed
+ true
+ else
+ if @project && @project.archived?
+ render_403 :message => :notice_not_authorized_archived_project
+ else
+ deny_access
+ end
+ end
+ end
+ def auth_login1(token = params[:token])
+ if(!User.current.logged? && !token.nil?)
+
+ User.current =try_to_autologin1
+ end
+ end
def authorize_allowed(ctrl = params[:controller], action = params[:action], global = false)
#modify by NWB
if @project
@@ -261,6 +293,7 @@ class ApplicationController < ActionController::Base
allowed
end
def authorize_attachment_download(ctrl = params[:controller], action = params[:action], global = false)
+
case @attachment.container_type
when "Memo"
allowed = User.current.allowed_to?(:memos_attachments_download,nil,:global => true)
@@ -289,6 +322,37 @@ class ApplicationController < ActionController::Base
end
end
+ def authorize_attachment_download1(ctrl = params[:controller], action = params[:action],token = params[:token], global = false)
+ if(!User.current.logged? && !token.nil?)
+ User.current = try_to_autologin1
+ end
+ case @attachment.container_type
+ when "Memo"
+ allowed = User.current.allowed_to?(:memos_attachments_download,nil,:global => true)
+ when "Message"
+ if @project
+ allowed = User.current.allowed_to?(:projects_attachments_download,@project,:global => false)
+ elsif @course
+ allowed = User.current.allowed_to?(:course_attachments_download, @course, :global => false)
+ end
+ when "contest"
+ return true
+ when "Course"
+ allowed = User.current.allowed_to?(:course_attachments_download, @course, :global => false)
+ else
+ return true
+ end
+
+ if allowed
+ true
+ else
+ if @project && @project.archived?
+ render_403 :message => :notice_not_authorized_archived_project
+ else
+ deny_access
+ end
+ end
+ end
def authorize_course(ctrl = params[:controller], action = params[:action], global = false)
allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @course || @course, :global => global)
if allowed
@@ -789,4 +853,29 @@ class ApplicationController < ActionController::Base
@organizer = WebFooterOranizer.first
@companies = WebFooterCompany.all
end
+
+
+
+
+ def password_authentication
+ user, last_login_on = User.try_to_login(params[:user_name], params[:password])
+
+
+ successful_authentication(user, last_login_on)
+
+ end
+
+
+ def successful_authentication(user, last_login_on)
+ logger.info "Successful authentication for '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}"
+ # Valid user
+ self.logged_user = user
+ # generate a key and set cookie if autologin
+ if params[:autologin] && Setting.autologin?
+ set_autologin_cookie(user)
+ end
+ call_hook(:controller_account_success_authentication_after, {:user => user })
+
+
+ end
end
diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb
index 952dcdf44..2c6a002b4 100644
--- a/app/controllers/attachments_controller.rb
+++ b/app/controllers/attachments_controller.rb
@@ -17,11 +17,12 @@
class AttachmentsController < ApplicationController
layout "users_base"
+
before_filter :find_project, :only => [:show, :download, :thumbnail, :destroy, :delete_homework]#, :except => [:upload, :autocomplete]
before_filter :file_readable, :read_authorize, :only => [:show, :thumbnail]#Modified by young
before_filter :delete_authorize, :only => :destroy
before_filter :authorize_global, :only => :upload
- before_filter :authorize_attachment_download, :only => :download
+ before_filter :authorize_attachment_download1, :only => :download
#before_filter :login_without_softapplication, only: [:download]
accept_api_auth :show, :download, :upload
require 'iconv'
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index f3c2b199c..c0d83fdcd 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -19,10 +19,13 @@ class IssuesController < ApplicationController
layout 'base_projects'#Added by young
default_search_scope :issues
+ before_filter :authorize1, :only => [:show]
before_filter :find_issue, :only => [:show, :edit, :update]
before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :destroy]
before_filter :find_project, :only => [:new, :create, :update_form]
+ #before_filter :authorize, :except => [:index, :show]
before_filter :authorize, :except => [:index]
+
before_filter :find_optional_project, :only => [:index]
before_filter :check_for_default_issue_status, :only => [:new, :create]
before_filter :build_new_issue_from_params, :only => [:new, :create, :update_form]
@@ -107,7 +110,7 @@ class IssuesController < ApplicationController
end
def show
-
+
@journals = @issue.journals.includes(:user, :details).reorder("#{Journal.table_name}.id ASC").all
@journals.each_with_index {|j,i| j.indice = i+1}
@journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @issue.project)
diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb
index 8ee8d099e..8f00c49cd 100644
--- a/app/controllers/my_controller.rb
+++ b/app/controllers/my_controller.rb
@@ -17,6 +17,9 @@
class MyController < ApplicationController
layout "users_base"
+ # edit
+ before_filter :auth_login1, :only => [:account]
+ #
before_filter :require_login
helper :issues
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 5ff9a3f17..d3df57982 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -31,14 +31,16 @@ class ProjectsController < ApplicationController
menu_item :feedback, :only => :feedback
menu_item l(:label_course_file), :only => :index
menu_item l(:label_course_news), :only => :index
-
+# edit
+ before_filter :authorize1, :only => [:show]
+#
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches]
# before_filter :authorize, :except => [:new_join, :new_homework, :homework, :statistics, :search, :watcherlist, :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file,
# :statistics, :feedback, :course, :enterprise_course, :course_enterprise, :project_respond, :share,
# :show_projects_score, :issue_score_index, :news_score_index, :file_score_index, :code_submit_score_index, :projects_topic_score_index]
#此条勿删 课程相关权限 ,:new_homework,:homework,:feedback,,:member
- before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course]
+ before_filter :authorize, :only => [:settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course]
before_filter :authorize_global, :only => [:new, :create,:view_homework_attaches]
before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy, :calendar]
before_filter :file, :statistics, :watcherlist
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 0fcf35aff..58af43da3 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -15,8 +15,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class UsersController < ApplicationController
+
layout :setting_layout
#Added by young
+ before_filter :auth_login1, :only => [:show, :user_activities]
menu_item :activity
menu_item :user_information, :only => :info
menu_item :user_course, :only => :user_courses
@@ -29,6 +31,9 @@ class UsersController < ApplicationController
#Ended by young
+ # edit
+
+ #
before_filter :can_show_course, :only => [:user_courses,:user_homeworks]
before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :tag_saveEx,:user_projects, :user_newfeedback, :user_comments, :watch_bids, :watch_contests, :info,
:user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks, :watch_projects, :show_score, :topic_score_index, :project_score_index,
@@ -41,7 +46,7 @@ class UsersController < ApplicationController
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index]
before_filter :auth_user_extension, only: :show
- before_filter :rest_user_score, only: :show
+ #before_filter :rest_user_score, only: :show
#before_filter :select_entry, only: :user_projects
accept_api_auth :index, :show, :create, :update, :destroy,:tag_save , :tag_saveEx
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index cb88742ad..7efa02503 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -140,10 +140,12 @@ module ApplicationHelper
# * :text - Link text (default to attachment filename)
# * :download - Force download (default: false)
def link_to_attachment(attachment, options={})
+ token = options[:token] if options[:token]
text = options.delete(:text) || attachment.filename
route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path
html_options = options.slice!(:only_path)
url = send(route_method, attachment, attachment.filename, options)
+ url << "?token=#{token}" unless token.nil?
link_to text, url, html_options
end
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 8390fc61c..6a708051a 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -224,6 +224,7 @@ module IssuesHelper
# as an array of strings
def details_to_strings(details, no_html=false, options={})
options[:only_path] = (options[:only_path] == false ? false : true)
+ options[:token] = options[:token] if options[:token]
strings = []
values_by_field = {}
details.each do |detail|
@@ -312,7 +313,11 @@ module IssuesHelper
old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
# Link to the attachment if it has not been removed
- value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
+ if options[:token].nil?
+ value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
+ else
+ value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :token => options[:token])
+ end
if options[:only_path] != false && atta.is_text?
value += link_to(
image_tag('magnifier.png'),
diff --git a/app/models/issue_observer.rb b/app/models/issue_observer.rb
index 3369387ee..50cbf2a42 100644
--- a/app/models/issue_observer.rb
+++ b/app/models/issue_observer.rb
@@ -18,8 +18,12 @@
class IssueObserver < ActiveRecord::Observer
def after_create(issue)
- thread1=Thread.new do
- Mailer.issue_add(issue).deliver if Setting.notified_events.include?('issue_added')
- end
+ Thread.start do
+ recipients = issue.recipients
+ recipients.each do |rec|
+ Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added')
+ end
+ end
+
end
end
diff --git a/app/models/issue_overdue.rb b/app/models/issue_overdue.rb
index 5caec94c9..3002b74ef 100644
--- a/app/models/issue_overdue.rb
+++ b/app/models/issue_overdue.rb
@@ -20,7 +20,11 @@ class IssueOverdue < ActiveRecord::Base
#发邮件
#puts "11" + issue.id.to_s
#Mailer.issue_expire(issue).deliver
- Mailer.issue_add(issue).deliver
+ recipients = issue.recipients
+ recipients.each do |rec|
+
+ Mailer.issue_edit(issue,rec).deliver
+ end
break
end
end
diff --git a/app/models/journal_observer.rb b/app/models/journal_observer.rb
index 0357fb74d..10d3f7b4b 100644
--- a/app/models/journal_observer.rb
+++ b/app/models/journal_observer.rb
@@ -23,8 +23,12 @@ class JournalObserver < ActiveRecord::Observer
(Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
(Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
)
- Thread.new do
- Mailer.issue_edit(journal).deliver
+ Thread.start do
+ recipients = journal.recipients
+ recipients.each do |rec|
+
+ Mailer.issue_edit(journal,rec).deliver
+ end
end
end
end
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index a7f850766..72e60a0bf 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -95,29 +95,50 @@ class Mailer < ActionMailer::Base
# Example:
# issue_add(issue) => Mail::Message object
# Mailer.issue_add(issue).deliver => sends an email to issue recipients
- def issue_add(issue)
+ def issue_add(issue, recipients)
issue_id = issue.project_index
redmine_headers 'Project' => issue.project.identifier,
'Issue-Id' => issue_id,
'Issue-Author' => issue.author.login
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
message_id issue
+
@author = issue.author
@issue = issue
- @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
- recipients = issue.recipients
- cc = issue.watcher_recipients - recipients
- mail :to => recipients,
- :cc => cc,
- :subject => "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
+ user = User.find_by_mail(recipients)
+
+ token = Token.new(:user =>user , :action => 'autologin')
+ token.save
+ @token = token
+ @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value)
+
+ # edit
+ @issue_author_url = url_for(user_activities_url(@author,:token => @token.value))
+ @project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id, :token => @token.value)
+
+ @user_url = url_for(my_account_url(user,:token => @token.value))
+
+ cc = issue.watcher_recipients - issue.recipients
+ subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
+ mail(:to => recipients,
+ :cc => cc,
+ :subject => subject)
end
+ # issue.attachments.each do |attach|
+ # attachments["#{attach.filename}"] = File.read("#{attach.disk_filename}")
+ # end
+ # cc = issue.watcher_recipients - recipients
+ #mail.attachments['test'] = File.read("#{RAILS.root}/files/2015/01/150114094010_libegl.dll")
+
+
+
# Builds a Mail::Message object used to email recipients of the edited issue.
#
# Example:
# issue_edit(journal) => Mail::Message object
# Mailer.issue_edit(journal).deliver => sends an email to issue recipients
- def issue_edit(journal)
+ def issue_edit(journal,recipients)
issue = journal.journalized.reload
issue_id = issue.project_index
redmine_headers 'Project' => issue.project.identifier,
@@ -127,18 +148,42 @@ class Mailer < ActionMailer::Base
message_id journal
references issue
@author = journal.user
- recipients = journal.recipients
+
+ user = User.find_by_mail(recipients)
+
+ token = Token.new(:user =>user , :action => 'autologin')
+ token.save
+ @token = token
+
+
+ # edit
+ @issue_author_url = url_for(:controller => 'users', :action => 'show', :id => issue.author_id, :token => @token.value)
+ @project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id, :token => @token.value)
+ @user_url = url_for(my_account_url(user,:token => @token.value))
+
+ @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :anchor => "change-#{journal.id}", :token => @token.value)
+
+
+
+
# Watchers in cc
- cc = journal.watcher_recipients - recipients
+
+ cc = journal.watcher_recipients - journal.recipients
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
s << issue.subject
@issue = issue
@journal = journal
- @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
- mail :to => recipients,
- :cc => cc,
- :subject => s
+ # @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
+ mail(:to => recipients,
+ :cc => cc,
+ :subject => s)
+ end
+
+ def self.deliver_mailer(to,cc, subject)
+ mail :to => to,
+ :cc => cc,
+ :subject => subject
end
# 用户申请加入项目邮件通知
@@ -615,5 +660,15 @@ class Mailer < ActionMailer::Base
Rails.logger
end
-
+ def add_attachments(obj)
+ if email.attachments && email.attachments.any?
+ email.attachments.each do |attachment|
+ obj.attachments << Attachment.create(:container => obj,
+ :file => attachment.decoded,
+ :filename => attachment.filename,
+ :author => user,
+ :content_type => attachment.mime_type)
+ end
+ end
+ end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 735b80762..52619b038 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -380,7 +380,7 @@ class User < Principal
raise text
end
- # Returns the user who matches the given autologin +key+ or nil
+
def self.try_to_autologin(key)
user = Token.find_active_user('autologin', key, Setting.autologin.to_i)
if user
@@ -466,7 +466,11 @@ class User < Principal
User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password
end
end
+ def check_password1?(clear_password)
+ clear_password == hashed_password
+
+ end
# Generates a random salt and computes hashed_password for +clear_password+
# The hashed password is stored in the following form: SHA1(salt + SHA1(password))
def salt_password(clear_password)
diff --git a/app/views/bids/_homework.html.erb b/app/views/bids/_homework.html.erb
index db1f555d3..e107e50b3 100644
--- a/app/views/bids/_homework.html.erb
+++ b/app/views/bids/_homework.html.erb
@@ -36,6 +36,7 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'homework_attach/praise_alert') %>');
showModal('ajax-modal', '480px');
$('#ajax-modal').css('height','240px');
+ $('#ajax-modal').siblings().remove();
$('#ajax-modal').before("" +
"");
$('#ajax-modal').parent().css("top","").css("left","").css("width","511");
diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb
index dd2de21b7..aa43b9194 100644
--- a/app/views/layouts/mailer.html.erb
+++ b/app/views/layouts/mailer.html.erb
@@ -1,33 +1,46 @@
+Trustie项目邮件
+
+
+
+
-
-<%= yield %>
-
-
+
diff --git a/app/views/mailer/_issue.html.erb b/app/views/mailer/_issue.html.erb
index f0dc88d8b..5979877a3 100644
--- a/app/views/mailer/_issue.html.erb
+++ b/app/views/mailer/_issue.html.erb
@@ -1,15 +1,42 @@
-<%= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %>
-
+
+
+
+ <%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url) %>
+ 在
+ <%= link_to(h("#{@issue.project.name}"),@project_url) %>中有了一个与您相关的最新活动,请您关注!
+
-- <%=l(:field_author)%>: <%=h issue.author %>
-- <%=l(:field_status)%>: <%=h issue.status %>
-- <%=l(:field_priority)%>: <%=h issue.priority %>
-- <%=l(:field_assigned_to)%>: <%=h issue.assigned_to %>
-- <%=l(:field_category)%>: <%=h issue.category %>
-- <%=l(:field_fixed_version)%>: <%=h issue.fixed_version %>
-<% issue.custom_field_values.each do |c| %>
- - <%=h c.custom_field.name %>: <%=h show_value(c) %>
-<% end %>
-
+
标题:<%= link_to(issue.subject, issue_url) %>
+
来源:<%= issue.project.name %>| 项目<%= issue.tracker.name%>
+
内容:
+ <%= issue.description %>
+
+
-<%= textilizable(issue, :description, :only_path => false) %>
+ <% unless @issue.attachments.nil? %>
+ 附件:
+
+ <% @issue.attachments.each do |attach| %>
+ <%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false) %>
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
+
+<%# issue.custom_field_values.each do |c| %>
+
diff --git a/app/views/mailer/_issue.text.erb b/app/views/mailer/_issue.text.erb
index 7ab8acfeb..ae80a3fe0 100644
--- a/app/views/mailer/_issue.text.erb
+++ b/app/views/mailer/_issue.text.erb
@@ -1,13 +1,19 @@
-<%= "#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}" %>
-<%= issue_url %>
-* <%=l(:field_author)%>: <%= issue.author %>
-* <%=l(:field_status)%>: <%= issue.status %>
-* <%=l(:field_priority)%>: <%= issue.priority %>
-* <%=l(:field_assigned_to)%>: <%= issue.assigned_to %>
-* <%=l(:field_category)%>: <%= issue.category %>
-* <%=l(:field_fixed_version)%>: <%= issue.fixed_version %>
-<% issue.custom_field_values.each do |c| %>* <%= c.custom_field.name %>: <%= show_value(c) %>
-<% end -%>
-----------------------------------------
-<%= issue.description %>
+ <%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url) %>
+ 在
+ <%= link_to(h("#{@issue.project.name}"),@project_url) %>中有了一个与您相关的最新活动,请您关注!
+标题:<%= link_to(issue.subject, issue_url) %>
+ 来源:<%= issue.project.name %>| 项目缺陷<
+ 内容:
+ <%= issue.description %>
+ <% unless @issue.attachments.nil? %>
+ 附件:
+
+
+ <% @issue.attachments.each do |attach| %>
+ <%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false) %><%= l(:label_added) %>
+ <% end %>
+ <% end %>
+
+
+ <%= link_to( "我要回复", issue_url) %>
diff --git a/app/views/mailer/issue_add.html.erb b/app/views/mailer/issue_add.html.erb
index 8c9da02da..f51dad121 100644
--- a/app/views/mailer/issue_add.html.erb
+++ b/app/views/mailer/issue_add.html.erb
@@ -1,3 +1,8 @@
-<%= l(:text_issue_added, :id => "##{@issue.project_index}", :author => h(@issue.author)) %>
-
-<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
+
+
+
+ <%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
+
+
+
+
diff --git a/app/views/mailer/issue_add.text.erb b/app/views/mailer/issue_add.text.erb
index dbba47d49..b50a39260 100644
--- a/app/views/mailer/issue_add.text.erb
+++ b/app/views/mailer/issue_add.text.erb
@@ -1,4 +1,2 @@
-<%= l(:text_issue_added, :id => "##{@issue.project_index}", :author => @issue.author) %>
-----------------------------------------
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %>
diff --git a/app/views/mailer/issue_edit.html.erb b/app/views/mailer/issue_edit.html.erb
index be7076cb6..3cbd1b02a 100644
--- a/app/views/mailer/issue_edit.html.erb
+++ b/app/views/mailer/issue_edit.html.erb
@@ -1,11 +1,13 @@
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
-<% details_to_strings(@journal.details, false, :only_path => false).each do |string| %>
- - <%= string %>
+<% details_to_strings(@journal.details, false, :only_path => false, :token => @token.value).each do |string| %>
+ <% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %>
+ - <%= string %>
+ <% end %>
<% end %>
-<%= textilizable(@journal, :notes, :only_path => false) %>
+<%= l(:field_content)%>:<%= @journal.notes %>
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
diff --git a/app/views/mailer/issue_edit.text.erb b/app/views/mailer/issue_edit.text.erb
index 45b8d3ecf..5b93b6fe0 100644
--- a/app/views/mailer/issue_edit.text.erb
+++ b/app/views/mailer/issue_edit.text.erb
@@ -1,11 +1,13 @@
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => @journal.user) %>
-<% details_to_strings(@journal.details, true).each do |string| -%>
-<%= string %>
+<% details_to_strings(@journal.details, true, :token => @token.value).each do |string| -%>
+ <% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %>
+ <%= string %>
+ <% end %>
<% end -%>
<% if @journal.notes? -%>
-<%= @journal.notes %>
+ <%= l(:field_content)%>:<%= @journal.notes %>
<% end -%>
----------------------------------------
diff --git a/app/views/my/account.html.erb b/app/views/my/account.html.erb
index ebdab208d..597229369 100644
--- a/app/views/my/account.html.erb
+++ b/app/views/my/account.html.erb
@@ -123,7 +123,7 @@
-
+