Merge branch 'szzh' into develop

dev_repository_hjq v20150123
sw 11 years ago
commit 9990845f31

2
.gitignore vendored

@ -4,6 +4,7 @@
/.bundle
*.swp
/config/database.yml
/config/configuration.yml
/files/*
/log/*
/tmp/*
@ -14,5 +15,4 @@
/db/schema.rb
/Gemfile.lock
/lib/plugins/acts_as_versioned/test/debug.log
/config/configuration.yml
.rbenv-gemsets

@ -18,7 +18,7 @@ gem "builder", "3.0.0"
gem 'acts-as-taggable-on', '2.4.1'
gem 'spreadsheet'
gem 'ruby-ole'
gem 'email_verifier'
#gem 'email_verifier'
group :development do
gem 'better_errors', path: 'lib/better_errors'

@ -273,6 +273,7 @@ class CoursesController < ApplicationController
if valid_attr.eql?('name')
faker.name = valid_value
faker.course_id = params[:course_id]
faker.valid?
req[:valid] = faker.errors[:name].blank?
req[:message] = faker.errors[:name]

@ -160,12 +160,15 @@ class ForumsController < ApplicationController
def create
@forum = Forum.new(params[:forum])
@forum.creator_id = User.current.id
if @forum.save
respond_to do |format|
respond_to do |format|
if @forum.save
format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
format.json { render json: @forum, status: :created, location: @forum }
else
format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
format.json { render json: @forum, status: :created, location: @forum }
end
else
respond_to do |format|
flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}"
format.html { render action: "new" }
format.json { render json: @forum.errors, status: :unprocessable_entity }

@ -47,6 +47,7 @@ class PollController < ApplicationController
:user_id => User.current.id,
:published_at => Time.now,
:closed_at => Time.now,
:show_result => 1,
:polls_description => ""
}
@poll = Poll.create option
@ -69,8 +70,8 @@ class PollController < ApplicationController
end
def update
@poll.polls_name = params[:polls_name].empty? ? l(:label_poll_title) : params[:polls_name]
@poll.polls_description = params[:polls_description].empty? ? l(:label_poll_description) : params[:polls_description]
@poll.polls_name = params[:polls_name]
@poll.polls_description = params[:polls_description]
if @poll.save
respond_to do |format|
format.js

@ -494,7 +494,7 @@ module ApplicationHelper
def principals_check_box_tags_ex(name, principals)
s = ''
principals.each do |principal|
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h principal.userInfo }</label>\n"
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id)}</label>\n"
end
s.html_safe
end

@ -112,7 +112,7 @@ module CoursesHelper
# end
#获取课程所有成员
def course_member course
def course_all_member course
course.members
end
# 学生人数计算

@ -12,11 +12,20 @@ class CourseGroup < ActiveRecord::Base
before_destroy :set_member_nil
attr_accessible :name
validates :name, :presence => true, :length => {:maximum => 20},
:uniqueness => {case_sensitive: false}
validates :name, :presence => true, :length => {:maximum => 20}
validate :unique_name_and_course
def set_member_nil
if self.members && self.members.count > 0
self.members.update_all("course_group_id = 0")
end
end
private
def unique_name_and_course
if CourseGroup.where("name=? and course_id=?", name, course_id).first
errors.add(:name, :groupname_repeat)
end
end
end

@ -18,7 +18,7 @@ class Forum < ActiveRecord::Base
acts_as_taggable
scope :by_join_date, order("created_at DESC")
after_create :send_email
def reset_counters!
self.class.reset_counters!(id)
end
@ -33,6 +33,11 @@ class Forum < ActiveRecord::Base
self.creator == user || user.admin?
end
def send_email
Thread.start do
Mailer.forum_add(self).deliver if Setting.notified_events.include?('forum_add')
end
end
# Updates topic_count, memo_count and last_memo_id attributes for +board_id+
def self.reset_counters!(forum_id)
forum_id = forum_id.to_i

@ -0,0 +1,8 @@
class ForumObserver < ActiveRecord::Observer
def after_create(forum)
Thread.start do
Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
end
end
end

@ -19,7 +19,8 @@ class IssueObserver < ActiveRecord::Observer
def after_create(issue)
Thread.start do
recipients = issue.recipients
# 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
recipients = issue.recipients - issue.watcher_recipients + issue.watcher_recipients
recipients.each do |rec|
Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added')
end

@ -24,7 +24,8 @@ class JournalObserver < ActiveRecord::Observer
(Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
)
Thread.start do
recipients = journal.recipients
# 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
recipients = journal.recipients - journal.watcher_recipients + journal.watcher_recipients
recipients.each do |rec|
Mailer.issue_edit(journal,rec).deliver

@ -26,7 +26,39 @@ class Mailer < ActionMailer::Base
def self.default_url_options
{ :host => Setting.host_name, :protocol => Setting.protocol }
end
# 贴吧新建贴吧发送邮件
# example Mailer.forum(forum).deliver
def forum_add(forum)
redmine_headers 'Forum' => forum.id
@forum = forum
@author = forum.creator
recipients = forum.creator.mail
# cc = wiki_content.page.wiki.watcher_recipients - recipients
@issue_author_url = url_for(user_activities_url(@author))
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => forum.id)
mail :to => recipients,:subject => "[ #{l(:label_forum)} : #{forum.name} #{l(:notice_successful_create)}]"
end
def forum_message_added(memo)
@memo = memo
redmine_headers 'Memo' => memo.id
@forum = memo.forum
@author = memo.author
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id)
@issue_author_url = url_for(user_activities_url(@author))
recipients ||= []
mems = memo.self_and_siblings
mems.each do |mem|
recipients << mem.author.mail unless recipients.include? mem.author.mail
end
# cc = wiki_content.page.wiki.watcher_recipients - recipients
@memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id)))
mail :to => recipients,:subject => "[ #{l(:label_message_plural)} : #{memo.subject} #{l(:label_memo_create_succ)}]"
end
# Builds a Mail::Message object used to email recipients of the added journals for message.
# 留言分为直接留言,和对留言人留言的回复
@ -39,7 +71,7 @@ class Mailer < ActionMailer::Base
@mail = journals_for_message.at_user if journals_for_message.at_user
@message = journals_for_message.notes
@title = "#@user #{t(:label_leave_your_message, :locale => 'zh')}"
@issue_author_url = url_for(user_activities_url(@user))
@url = case journals_for_message.jour.class.to_s.to_sym # 判断留言的对象所属类型
when :Bid
course_for_bid_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}")
@ -62,7 +94,7 @@ class Mailer < ActionMailer::Base
course = journals_for_message.jour
@author = journals_for_message.user
#课程的教师
@members = course_member journals_for_message.jour
@members = course_all_member journals_for_message.jour
#收件人邮箱
@recipients ||= []
@members.each do |teacher|
@ -118,10 +150,10 @@ class Mailer < ActionMailer::Base
@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|
@ -166,9 +198,8 @@ class Mailer < ActionMailer::Base
# Watchers in cc
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
@ -176,7 +207,7 @@ class Mailer < ActionMailer::Base
@journal = journal
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
mail(:to => recipients,
:cc => cc,
:subject => s)
end
@ -260,6 +291,7 @@ class Mailer < ActionMailer::Base
redmine_headers 'Project' => document.project.identifier
@author = User.current
@document = document
@issue_author_url = url_for(user_activities_url(@author))
@document_url = url_for(:controller => 'documents', :action => 'show', :id => document)
mail :to => document.recipients,
:subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
@ -275,6 +307,7 @@ class Mailer < ActionMailer::Base
added_to = ''
added_to_url = ''
@author = attachments.first.author
@issue_author_url = url_for(user_activities_url(@author))
case container.class.name
when 'Project'
added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container)
@ -282,7 +315,7 @@ class Mailer < ActionMailer::Base
recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Course'
added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container)
added_to = "#{l(:label_course)}: #{container}"
added_to = "#{l(:label_course)}: #{container.name}"
recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Version'
added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
@ -323,13 +356,27 @@ class Mailer < ActionMailer::Base
# news_added(news) => Mail::Message object
# Mailer.news_added(news).deliver => sends an email to the news' project recipients
def news_added(news)
redmine_headers 'Project' => news.project.identifier
@author = news.author
message_id news
@news = news
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
mail :to => news.recipients,
:subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
if news.project
redmine_headers 'Project' => news.project.identifier
@author = news.author
@issue_author_url = url_for(user_activities_url(@author))
message_id news
@news = news
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
mail :to => news.recipients,
:subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
elsif news.course
redmine_headers 'Course' => news.course.id
@author = news.author
@issue_author_url = url_for(user_activities_url(@author))
message_id news
@news = news
recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
mail :to => recipients,
:subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}"
end
end
# Builds a Mail::Message object used to email recipients of a news' project when a news comment is added.
@ -339,15 +386,30 @@ class Mailer < ActionMailer::Base
# Mailer.news_comment_added(comment) => sends an email to the news' project recipients
def news_comment_added(comment)
news = comment.commented
redmine_headers 'Project' => news.project.identifier
@author = comment.author
message_id comment
@news = news
@comment = comment
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
mail :to => news.recipients,
:cc => news.watcher_recipients,
:subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
if news.project
redmine_headers 'Project' => news.project.identifier
@author = comment.author
@issue_author_url = url_for(user_activities_url(@author))
message_id comment
@news = news
@comment = comment
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
mail :to => news.recipients,
:cc => news.watcher_recipients,
:subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
elsif news.course
redmine_headers 'Course' => news.course.id
@author = comment.author
@issue_author_url = url_for(user_activities_url(@author))
message_id comment
@news = news
@comment = comment
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
mail :to => recipients,
:subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}"
end
end
# Builds a Mail::Message object used to email the recipients of the specified message that was posted.
@ -356,18 +418,35 @@ class Mailer < ActionMailer::Base
# message_posted(message) => Mail::Message object
# Mailer.message_posted(message).deliver => sends an email to the recipients
def message_posted(message)
redmine_headers 'Project' => message.project.identifier,
'Topic-Id' => (message.parent_id || message.id)
@author = message.author
message_id message
references message.parent unless message.parent.nil?
recipients = message.recipients
cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
@message = message
@message_url = url_for(message.event_url)
mail :to => recipients,
:cc => cc,
:subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
if message.project
redmine_headers 'Project' => message.project.identifier,
'Topic-Id' => (message.parent_id || message.id)
@author = message.author
@issue_author_url = url_for(user_activities_url(@author))
message_id message
references message.parent unless message.parent.nil?
recipients = message.recipients
cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
@message = message
@message_url = url_for(message.event_url)
mail :to => recipients,
:cc => cc,
:subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
elsif message.course
redmine_headers 'Course' => message.course.id,
'Topic-Id' => (message.parent_id || message.id)
@author = message.author
@issue_author_url = url_for(user_activities_url(@author))
message_id message
references message.parent unless message.parent.nil?
recipients = message.course.notified_users.select { |user| user.allowed_to?(:view_files, message.course) }.collect { |u| u.mail }
cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
@message = message
@message_url = url_for(message.event_url)
mail :to => recipients,
:cc => cc,
:subject => "[#{message.board.course.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
end
end
# Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added.

@ -43,7 +43,7 @@ class Memo < ActiveRecord::Base
"parent_id",
"replies_count"
after_create :add_author_as_watcher, :reset_counters!#,:be_user_score -- 公共区发帖暂不计入得分
after_create :add_author_as_watcher, :reset_counters!, :sendmail#,:be_user_score -- 公共区发帖暂不计入得分
# after_update :update_memos_forum
after_destroy :reset_counters!#,:down_user_score -- 公共区发帖暂不计入得分
# after_create :send_notification
@ -54,6 +54,12 @@ class Memo < ActiveRecord::Base
# includes(:forum => ).where()
# }
def sendmail
thread1=Thread.new do
Mailer.forum_message_added(self).deliver if Setting.notified_events.include?('forum_message_added')
end
end
def cannot_reply_to_locked_topic
errors.add :base, l(:label_memo_locked) if root.locked? && self != root
end

@ -0,0 +1,8 @@
class MemoObserver < ActiveRecord::Observer
def after_create(memo)
thread1=Thread.new do
Mailer.forum_message_added(memo).deliver if Setting.notified_events.include?('forum_message_added')
end
end
end

@ -188,7 +188,7 @@ class User < Principal
validates_confirmation_of :password, :allow_nil => true
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
validate :validate_password_length
validates_email_realness_of :mail
#validates_email_realness_of :mail
before_create :set_mail_notification
before_save :update_hashed_password
before_destroy :remove_references_before_destroy

@ -56,18 +56,30 @@
<%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %>
</span>
</td>
<td style="width: 110px;">
<td style="width: 150px;">
<span style="float: right">
<% if User.current.logged? && is_cur_course_student(@course) %>
<% cur_user_homework = cur_user_homework_for_bid(bid) %>
<span class="span_wping">
<% if bid.open_anonymous_evaluation == 1 %>
<% case bid.comment_status %>
<% when 0 %>
<a>未开启匿评</a>
<% when 1 %>
<a>&nbsp;&nbsp;匿评中..&nbsp;&nbsp;</a>
<% when 2 %>
<a>&nbsp;&nbsp;匿评结束&nbsp;&nbsp;</a>
<% end %>
<% end%>
</span>
<% if cur_user_homework && cur_user_homework.empty? %>
<span class="span_wping">
<%= link_to l(:label_commit_homework),new_exercise_book_path(bid) %>
</span>
<% else %>
<span style="color: green; float: right">
<%= l(:lable_has_commit_homework)%>
</span>
<span class="span_wping">
<a>已&nbsp;提&nbsp;交</a>
</span>
<% end %>
<% end %>
<% if (User.current.admin?||User.current.allowed_to?(:as_teacher,@course)) %>

@ -29,7 +29,7 @@
<%= l(:label_tags_course_name) %>
<span class="required">*&nbsp;&nbsp;</span>
</label>
<input id="course_name" type="text" value="<%= @course.name %>" style="width:490px;size:60;" name = "course[name]" maxlength="100">
<input id="course_name" type="text" value="<%= @course.name %>" style="width:490px; size:60;" name = "course[name]" maxlength="100">
</p>
<%= f.fields_for @course do |m| %>
@ -38,7 +38,7 @@
<table>
<tr>
<td>
<span class="info" align="right" style="width: 90px; font-weight: bold ;margin-left:22px">
<span class="info" align="right" style="width: 90px; font-weight: bold ; margin-left:19px">
<%= l(:label_class_period) %>
<span class="required"> *&nbsp;&nbsp;</span>
</span>
@ -118,7 +118,7 @@
</label>
<input id="course_course_password" type="text" style="width:488px;margin-left: 10px;" value="<%= @course.password %>" size="60" name="course[password]"/>
</p>
<em class="info" style="margin-left:95px;">
<em class="info" style="margin-left:95px; padding-left: 5px;">
<%= l(:text_command) %>
</em>
<% end %>

@ -6,7 +6,8 @@
$.get(
'<%=valid_ajax_course_path%>',
{ valid: "name",
value: document.getElementById('group_name').value },
value: document.getElementById('group_name').value,
course_id: <%= @course.id %> },
function (data) {
if (!data.valid) {
alert(data.message);

@ -6,7 +6,7 @@
<%= labelled_form_for @course do |f| %>
<div class="box tabular">
<%= render :partial => 'course_form', :locals => { :f => f } %>
<span style="padding-left: 60px">
<span style="padding-left: 60px; margin-left: 36px">
<%= submit_tag l(:button_create), :class => "enterprise"%>
</span>
<!-- <%#= submit_tag l(:button_create_and_continue), :name => 'course_continue' %> -->

@ -22,7 +22,7 @@
</span>
</div>
<button name="button" class="f_l ml10" onclick="_file.click()" onmouseover="this.focus()" type="button" style="width:80px; height:26px;">上传文件</button>
<button name="button" class="f_l ml10" onclick="_file.click()" onmouseover="this.focus()" type="button" style="width:20%; height:26%;"><%= l(:label_browse)%></button>
<%= file_field_tag 'attachments[dummy][file]',
:id => '_file',
:class => 'file_selector',

@ -1,15 +1,15 @@
<div id="popbox_upload" style="margin-top: -30px;margin-left: -20px;margin-right: -10px;">
<div class="upload_con">
<h2>上传资源</h2>
<h2><%= l(:label_upload_files)%></h2>
<div class="upload_box">
<%= error_messages_for 'attachment' %>
<div id="network_issue" style="color: red; display: none;">上传出现错误,请您检查您的网络环境,并刷新页面重新上传。</div>
<div id="network_issue" style="color: red; display: none;"><%= l(:label_file_upload_error_messages)%></div>
<%= form_tag(course_files_path(course), :multipart => true,:remote => true,:method => :post,:name=>"upload_form") do %>
<label style="margin-top:3px;">文件浏览:</label>
<label style="margin-top:3px;"><%= l(:label_file_upload)%></label>
<%= render :partial => 'attachement_list',:locals => {:course => course} %>
<div class="cl"></div>
<a id="submit_resource" href="javascript:void(0);" class="upload_btn" onclick="submit_resource();">确&nbsp;&nbsp;认</a>
<a href="javascript:void(0);" class="upload_btn upload_btn_grey" onclick="closeModal();">取&nbsp;&nbsp;消</a>
<a id="submit_resource" href="javascript:void(0);" class="upload_btn" onclick="submit_resource();"><%= l(:button_confirm)%></a>
<a href="javascript:void(0);" class="upload_btn upload_btn_grey" onclick="closeModal();"><%= l(:button_cancel)%></a>
<% end %>
</div>

File diff suppressed because it is too large Load Diff

@ -305,7 +305,7 @@
.polls_btn a{font-size:14px; color:#444444;font-weight:bold;}
.polls_btn span{ color:#15bed1; font-size:12px; font-weight:normal;}
.polls_btn a{ float:left;}
.polls_n{float: left;background: #ff5d31;color: #fff;width: 12px;padding-left: 2px;height: 7px;padding-bottom: 5px;padding-top: 3px;margin-top: -4px;margin-left: 3px; }
.polls_n{float: left;background: #ff5d31;color: #fff;width: 32px;padding-left: 2px;height: 7px;padding-bottom: 5px;padding-top: 3px;margin-top: -4px;margin-left: 3px; }
.polls_n p{ margin-top:-4px;}
.cl{ clear:both; overflow:hidden; }
</style>
@ -313,7 +313,7 @@
<!--<a href="#">问卷调查<span >12</span></a>-->
<%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id)%>
<div class="polls_n">
<p>N</p>
<p>NEW</p>
</div>
<div class="cl"></div>
</div>

@ -10,37 +10,43 @@ body{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; back
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,ol{ margin:0; padding:0;}
div,img,tr,td,table{ border:0;}
table,tr,td{border:0;cellspacing:0; cellpadding:0;}
.mail{ width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; }
ol,ul,li{ list-style-type:none}
.cl{ clear:both; overflow:hidden; }
a{ text-decoration:none; }
a:hover{ text-decoration:underline; }
.cl{ clear:both; overflow:hidden; margin-top: 30px;}
.mail_box,ul,li{ list-style-type:none}
.mail{ width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; }
.mail a{color:#1b55a7; font-weight: bold; }
.mail_content{ margin-top:30px;}
.c_blue{ color:#1b55a7;}
.mail_box{ border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;}
.mail_box_p{ float:left; display: block; width:527px;}
a.mail_reply{ display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px;}
a:hover.mail_reply{ background:#06a9bc; text-decoration:none;}
.mail_fujian{ float:left; width:527px; display: block; }
.mail_fujian a{ font-weight:normal; font-size:12px;}
.mail_foot a{ font-size:12px; font-weight:normal;}
a{ text-decoration:none; }
a:hover{ text-decoration:underline; }
a.mail_reply{ display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px;}
a:hover.mail_reply{ background:#06a9bc; text-decoration:none;}
</style>
</head>
<body>
<div class="container">
<div class="mail">
<div class="mail_head">
<p>亲爱的Trustie用户您好</p>
<body style="font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal; margin:0; padding:0; border:0;">
<div class="container" style="margin:0; padding:0; border:0;">
<div class="mail" style="width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; margin:0; padding:0; border:0;">
<div class="mail_head" style="margin:0; padding:0; border:0;">
<p><%= l(:mail_issue_greetings)%></p>
</div><!--mail_head end-->
<%= yield %>
<hr />
<span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer).html_safe %></span><!--mail_foot end-->
<span class="footer" style="margin:0; padding:0;"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer).html_safe %></span><!--mail_foot end-->
</div>
</div>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save