This commit is contained in:
sw 2015-01-23 14:11:02 +08:00
commit 016f4f9a0d
15 changed files with 72 additions and 37 deletions

2
.gitignore vendored
View File

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

View File

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

View File

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

View File

@ -12,11 +12,20 @@ class CourseGroup < ActiveRecord::Base
before_destroy :set_member_nil before_destroy :set_member_nil
attr_accessible :name attr_accessible :name
validates :name, :presence => true, :length => {:maximum => 20}, validates :name, :presence => true, :length => {:maximum => 20}
:uniqueness => {case_sensitive: false} validate :unique_name_and_course
def set_member_nil def set_member_nil
if self.members && self.members.count > 0 if self.members && self.members.count > 0
self.members.update_all("course_group_id = 0") self.members.update_all("course_group_id = 0")
end end
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 end

View File

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

View File

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

View File

@ -147,13 +147,11 @@ class Mailer < ActionMailer::Base
@project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_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)) @user_url = url_for(my_account_url(user,:token => @token.value))
cc = nil
if recipients == issue.recipients[0]
cc = issue.watcher_recipients - issue.recipients
end
subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}" subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
mail(:to => recipients, mail(:to => recipients,
:cc => cc,
:subject => subject) :subject => subject)
end end
# issue.attachments.each do |attach| # issue.attachments.each do |attach|
@ -198,11 +196,7 @@ class Mailer < ActionMailer::Base
# Watchers in cc
cc = nil
if recipients == journal.recipients[0]
cc = journal.watcher_recipients - journal.recipients
end
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] " s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
s << "(#{issue.status.name}) " if journal.new_value_for('status_id') s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
@ -211,7 +205,7 @@ class Mailer < ActionMailer::Base
@journal = journal @journal = journal
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}") # @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
mail(:to => recipients, mail(:to => recipients,
:cc => cc,
:subject => s) :subject => s)
end end

View File

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

View File

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

View File

@ -1,7 +1,7 @@
<!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> --> <!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> -->
<p> <p>
<span class="c_blue" style="color:#1b55a7;"> <span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %> <%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_userin)%> </span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;"><%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %></span><%= l(:mail_issue_title_active)%></p> <span class="c_blue" style="color:#1b55a7;"><%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %></span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;"> <div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">

View File

@ -1,5 +1,5 @@
<%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url) %> <%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url) %>
<%= l(:mail_issue_title_userin)%> <%= l(:mail_issue_title_userin)%>
<%= link_to(h("#{@issue.project.name}"),@project_url) %><%= l(:mail_issue_title_active)%> <%= link_to(h("#{@issue.project.name}"),@project_url) %><%= l(:mail_issue_title_active)%>
<%= l(:mail_issue_subject)%><%= link_to(issue.subject, issue_url) %> <%= l(:mail_issue_subject)%><%= link_to(issue.subject, issue_url) %>

View File

@ -1,5 +1,5 @@
<em>尊敬的用户,<%= @user %>给你留言了:</em> <em>尊敬的用户,<%= @user %>给你留言了:</em>
<div><%= @message %></div> <div><%= @message %></div>
<h1>点击链接查看最新回复<%= link_to(@url, @url) %></h1> <p>点击链接查看最新回复<%= link_to(@url, @url) %>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h4><%= link_to(l(:lable_not_receive_mail),"http://" + Setting.host_name + "/my/account")%></h4> &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<%= link_to(l(:lable_not_receive_mail),"http://" + Setting.host_name + "/my/account")%></p>

View File

@ -1,10 +1,37 @@
<h1>
<% if @message.project %>
<%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %>
<% elsif @message.course %>
<%=h @message.board.course.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %>
<% end %>
</h1>
<em><%=h @message.author %></em>
<%= textilizable(@message, :content, :only_path => false) %> <p>
<span class="c_blue" style="color:#1b55a7;">
<%= h @message.author %>(<%= @message.author.show_name %>)
</span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;">
<% if @message.project %>
<%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% elsif @message.course %>
<%=h @message.board.course.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% end %>
</span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span><span style="float: left; width: 526px"> <%= link_to(h(@message.subject), @message_url, :style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
<% if @message.project %>
<span style="float: left; width: 526px"><%=h @message.board.project.name %> - <%=h @message.board.name %></span>
<% elsif @message.course %>
<span style="float: left; width: 526px"><%=h @message.board.course.name %> - <%=h @message.board.name %></span>
<% end %>
</li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @message.content %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(h(:mail_issue_reply), @message_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -87,12 +87,12 @@ default:
address: smtp.163.com address: smtp.126.com
port: 25 port: 25
domain: smtp.163.com domain: smtp.126.com
authentication: :plain authentication: :plain
user_name: mcb592@163.com user_name: "alanlong9278@126.com"
password: 'mcb1989822' password: 'alanlong8788786'
# Absolute path to the directory where attachments are stored. # Absolute path to the directory where attachments are stored.
# The default is the 'files' directory in your Redmine instance. # The default is the 'files' directory in your Redmine instance.

View File

@ -152,7 +152,7 @@ zh:
not_same_project: "不属于同一个项目" not_same_project: "不属于同一个项目"
circular_dependency: "此关联将导致循环依赖" circular_dependency: "此关联将导致循环依赖"
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
groupname_repeat: "该班名已存在"
actionview_instancetag_blank_option: 请选择 actionview_instancetag_blank_option: 请选择
@ -598,6 +598,7 @@ zh:
label_document_added: 文档已添加 label_document_added: 文档已添加
label_forum_message_added: 发帖成功 label_forum_message_added: 发帖成功
label_forum_add: 贴吧创建成功 label_forum_add: 贴吧创建成功
label_message_reply: 回帖人
label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。) label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。)
label_role: 角色 label_role: 角色
label_role_plural: 角色 label_role_plural: 角色