Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
3cd036e3
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3cd036e3
编写于
2月 07, 2015
作者:
D
Dmitriy Zaporozhets
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'notification_email'
Conflicts: db/schema.rb
上级
49d67213
9dbd7e5a
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
123 addition
and
42 deletion
+123
-42
CHANGELOG
CHANGELOG
+1
-0
app/controllers/admin/users_controller.rb
app/controllers/admin/users_controller.rb
+3
-0
app/controllers/profiles/emails_controller.rb
app/controllers/profiles/emails_controller.rb
+3
-0
app/controllers/profiles/notifications_controller.rb
app/controllers/profiles/notifications_controller.rb
+20
-2
app/mailers/emails/profile.rb
app/mailers/emails/profile.rb
+3
-3
app/mailers/emails/projects.rb
app/mailers/emails/projects.rb
+1
-1
app/mailers/notify.rb
app/mailers/notify.rb
+1
-1
app/models/user.rb
app/models/user.rb
+18
-0
app/views/profiles/emails/index.html.haml
app/views/profiles/emails/index.html.haml
+5
-1
app/views/profiles/notifications/show.html.haml
app/views/profiles/notifications/show.html.haml
+48
-31
db/migrate/20150206222854_add_notification_email_to_user.rb
db/migrate/20150206222854_add_notification_email_to_user.rb
+11
-0
db/schema.rb
db/schema.rb
+2
-1
spec/mailers/notify_spec.rb
spec/mailers/notify_spec.rb
+7
-2
未找到文件。
CHANGELOG
浏览文件 @
3cd036e3
...
...
@@ -61,6 +61,7 @@ v 7.8.0
- API: Access groups with their path (Julien Bianchi)
- Added link to milestone and keeping resource context on smaller viewports for issues and merge requests (Jason Blanchard)
-
- Allow notification email to be set separately from primary email.
-
- API: Add support for editing an existing project (Mika Mäenpää and Hannes Rosenögger)
-
...
...
app/controllers/admin/users_controller.rb
浏览文件 @
3cd036e3
...
...
@@ -102,6 +102,9 @@ class Admin::UsersController < Admin::ApplicationController
email
=
user
.
emails
.
find
(
params
[
:email_id
])
email
.
destroy
user
.
set_notification_email
user
.
save
if
user
.
notification_email_changed?
respond_to
do
|
format
|
format
.
html
{
redirect_to
:back
,
notice:
"Successfully removed email."
}
format
.
js
{
render
nothing:
true
}
...
...
app/controllers/profiles/emails_controller.rb
浏览文件 @
3cd036e3
...
...
@@ -18,6 +18,9 @@ class Profiles::EmailsController < ApplicationController
@email
=
current_user
.
emails
.
find
(
params
[
:id
])
@email
.
destroy
current_user
.
set_notification_email
current_user
.
save
if
current_user
.
notification_email_changed?
respond_to
do
|
format
|
format
.
html
{
redirect_to
profile_emails_url
}
format
.
js
{
render
nothing:
true
}
...
...
app/controllers/profiles/notifications_controller.rb
浏览文件 @
3cd036e3
...
...
@@ -2,6 +2,7 @@ class Profiles::NotificationsController < ApplicationController
layout
'profile'
def
show
@user
=
current_user
@notification
=
current_user
.
notification
@project_members
=
current_user
.
project_members
@group_members
=
current_user
.
group_members
...
...
@@ -11,8 +12,7 @@ class Profiles::NotificationsController < ApplicationController
type
=
params
[
:notification_type
]
@saved
=
if
type
==
'global'
current_user
.
notification_level
=
params
[
:notification_level
]
current_user
.
save
current_user
.
update_attributes
(
user_params
)
elsif
type
==
'group'
users_group
=
current_user
.
group_members
.
find
(
params
[
:notification_id
])
users_group
.
notification_level
=
params
[
:notification_level
]
...
...
@@ -22,5 +22,23 @@ class Profiles::NotificationsController < ApplicationController
project_member
.
notification_level
=
params
[
:notification_level
]
project_member
.
save
end
respond_to
do
|
format
|
format
.
html
do
if
@saved
flash
[
:notice
]
=
"Notification settings saved"
else
flash
[
:alert
]
=
"Failed to save new settings"
end
redirect_to
:back
end
format
.
js
end
end
def
user_params
params
.
require
(
:user
).
permit
(
:notification_email
,
:notification_level
)
end
end
app/mailers/emails/profile.rb
浏览文件 @
3cd036e3
...
...
@@ -4,20 +4,20 @@ module Emails
@user
=
User
.
find
(
user_id
)
@target_url
=
user_url
(
@user
)
@token
=
token
mail
(
to:
@user
.
email
,
subject:
subject
(
"Account was created for you"
))
mail
(
to:
@user
.
notification_
email
,
subject:
subject
(
"Account was created for you"
))
end
def
new_email_email
(
email_id
)
@email
=
Email
.
find
(
email_id
)
@user
=
@email
.
user
mail
(
to:
@user
.
email
,
subject:
subject
(
"Email was added to your account"
))
mail
(
to:
@user
.
notification_
email
,
subject:
subject
(
"Email was added to your account"
))
end
def
new_ssh_key_email
(
key_id
)
@key
=
Key
.
find
(
key_id
)
@user
=
@key
.
user
@target_url
=
user_url
(
@user
)
mail
(
to:
@user
.
email
,
subject:
subject
(
"SSH key was added to your account"
))
mail
(
to:
@user
.
notification_
email
,
subject:
subject
(
"SSH key was added to your account"
))
end
end
end
app/mailers/emails/projects.rb
浏览文件 @
3cd036e3
...
...
@@ -12,7 +12,7 @@ module Emails
@user
=
User
.
find
user_id
@project
=
Project
.
find
project_id
@target_url
=
project_url
(
@project
)
mail
(
to:
@user
.
email
,
mail
(
to:
@user
.
notification_
email
,
subject:
subject
(
"Project was moved"
))
end
...
...
app/mailers/notify.rb
浏览文件 @
3cd036e3
...
...
@@ -60,7 +60,7 @@ class Notify < ActionMailer::Base
# Returns a String containing the User's email address.
def
recipient
(
recipient_id
)
if
recipient
=
User
.
find
(
recipient_id
)
recipient
.
email
recipient
.
notification_
email
end
end
...
...
app/models/user.rb
浏览文件 @
3cd036e3
...
...
@@ -43,6 +43,7 @@
# website_url :string(255) default(""), not null
# last_credential_check_at :datetime
# github_access_token :string(255)
# notification_email :string(255)
#
require
'carrierwave/orm/activerecord'
...
...
@@ -115,6 +116,7 @@ class User < ActiveRecord::Base
#
validates
:name
,
presence:
true
validates
:email
,
presence:
true
,
email:
{
strict_mode:
true
},
uniqueness:
true
validates
:notification_email
,
presence:
true
,
email:
{
strict_mode:
true
}
validates
:bio
,
length:
{
maximum:
255
},
allow_blank:
true
validates
:projects_limit
,
presence:
true
,
numericality:
{
greater_than_or_equal_to:
0
}
validates
:username
,
...
...
@@ -128,10 +130,12 @@ class User < ActiveRecord::Base
validate
:namespace_uniq
,
if:
->
(
user
)
{
user
.
username_changed?
}
validate
:avatar_type
,
if:
->
(
user
)
{
user
.
avatar_changed?
}
validate
:unique_email
,
if:
->
(
user
)
{
user
.
email_changed?
}
validate
:owns_notification_email
,
if:
->
(
user
)
{
user
.
notification_email_changed?
}
validates
:avatar
,
file_size:
{
maximum:
200
.
kilobytes
.
to_i
}
before_validation
:generate_password
,
on: :create
before_validation
:sanitize_attrs
before_validation
:set_notification_email
,
if:
->
(
user
)
{
user
.
email_changed?
}
before_save
:ensure_authentication_token
after_save
:ensure_namespace_correct
...
...
@@ -285,6 +289,10 @@ class User < ActiveRecord::Base
self
.
errors
.
add
(
:email
,
'has already been taken'
)
if
Email
.
exists?
(
email:
self
.
email
)
end
def
owns_notification_email
self
.
errors
.
add
(
:notification_email
,
"is not an email you own"
)
unless
self
.
all_emails
.
include?
(
self
.
notification_email
)
end
# Groups user has access to
def
authorized_groups
@authorized_groups
||=
begin
...
...
@@ -430,6 +438,12 @@ class User < ActiveRecord::Base
end
end
def
set_notification_email
if
self
.
notification_email
.
blank?
||
!
self
.
all_emails
.
include?
(
self
.
notification_email
)
self
.
notification_email
=
self
.
email
end
end
def
requires_ldap_check?
if
!
Gitlab
.
config
.
ldap
.
enabled
false
...
...
@@ -503,6 +517,10 @@ class User < ActiveRecord::Base
end
end
def
all_emails
[
self
.
email
,
*
self
.
emails
.
map
(
&
:email
)]
end
def
hook_attrs
{
name:
name
,
...
...
app/views/profiles/emails/index.html.haml
浏览文件 @
3cd036e3
...
...
@@ -3,7 +3,11 @@
%p
.light
Your
%b
Primary Email
will be used for account notifications, avatar detection and web based operations, such as edits and merges.
will be used for avatar detection and web based operations, such as edits and merges.
%br
Your
%b
Notification Email
will be used for account notifications.
%br
All email addresses will be used to identify your commits.
...
...
app/views/profiles/notifications/show.html.haml
浏览文件 @
3cd036e3
%h3
.page-title
Notifications settings
%p
.light
GitLab uses the email specified in your profile for notifications
These are your global notification settings.
%hr
=
form_tag
profile_notifications_path
,
method: :put
,
remote:
true
,
class:
'update-notifications form-horizontal global-notifications-form'
do
=
form_for
@user
,
url:
profile_notifications_path
,
method: :put
,
html:
{
class:
'update-notifications form-horizontal global-notifications-form'
}
do
|
f
|
-
if
@user
.
errors
.
any?
%div
.alert.alert-danger
%ul
-
@user
.
errors
.
full_messages
.
each
do
|
msg
|
%li
=
msg
=
hidden_field_tag
:notification_type
,
'global'
=
label_tag
:notification_level
,
'Notification level'
,
class:
'control-label'
.col-sm-10
.radio
=
label_tag
nil
,
class:
''
do
=
radio_button_tag
:notification_level
,
Notification
::
N_DISABLED
,
@notification
.
disabled?
,
class:
'trigger-submit'
.level-title
Disabled
%p
You will not get any notifications via email
.radio
=
label_tag
nil
,
class:
''
do
=
radio_button_tag
:notification_level
,
Notification
::
N_MENTION
,
@notification
.
mention?
,
class:
'trigger-submit'
.level-title
Mention
%p
You will receive notifications only for comments in which you were @mentioned
.radio
=
label_tag
nil
,
class:
''
do
=
radio_button_tag
:notification_level
,
Notification
::
N_PARTICIPATING
,
@notification
.
participating?
,
class:
'trigger-submit'
.level-title
Participating
%p
You will only receive notifications from related resources (e.g. from your commits or assigned issues)
.radio
=
label_tag
nil
,
class:
''
do
=
radio_button_tag
:notification_level
,
Notification
::
N_WATCH
,
@notification
.
watch?
,
class:
'trigger-submit'
.level-title
Watch
%p
You will receive all notifications from projects in which you participate
.form-group
=
f
.
label
:notification_email
,
class:
"control-label"
.col-sm-10
=
f
.
select
:notification_email
,
@user
.
all_emails
,
{
include_blank:
false
},
class:
"form-control"
.form-group
=
f
.
label
:notification_level
,
class:
'control-label'
.col-sm-10
.radio
=
f
.
label
:notification_level
,
value:
Notification
::
N_DISABLED
do
=
f
.
radio_button
:notification_level
,
Notification
::
N_DISABLED
.level-title
Disabled
%p
You will not get any notifications via email
.radio
=
f
.
label
:notification_level
,
value:
Notification
::
N_MENTION
do
=
f
.
radio_button
:notification_level
,
Notification
::
N_MENTION
.level-title
Mention
%p
You will receive notifications only for comments in which you were @mentioned
.radio
=
f
.
label
:notification_level
,
value:
Notification
::
N_PARTICIPATING
do
=
f
.
radio_button
:notification_level
,
Notification
::
N_PARTICIPATING
.level-title
Participating
%p
You will only receive notifications from related resources (e.g. from your commits or assigned issues)
.radio
=
f
.
label
:notification_level
,
value:
Notification
::
N_WATCH
do
=
f
.
radio_button
:notification_level
,
Notification
::
N_WATCH
.level-title
Watch
%p
You will receive all notifications from projects in which you participate
.form-actions
=
f
.
submit
'Save changes'
,
class:
"btn btn-save"
.clearfix
%hr
...
...
db/migrate/20150206222854_add_notification_email_to_user.rb
0 → 100644
浏览文件 @
3cd036e3
class
AddNotificationEmailToUser
<
ActiveRecord
::
Migration
def
up
add_column
:users
,
:notification_email
,
:string
execute
"UPDATE users SET notification_email = email"
end
def
down
remove_column
:users
,
:notification_email
end
end
db/schema.rb
浏览文件 @
3cd036e3
...
...
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
version:
20150206
18141
4
)
do
ActiveRecord
::
Schema
.
define
(
version:
20150206
22285
4
)
do
# These are extensions that must be enabled in order to support this database
enable_extension
"plpgsql"
...
...
@@ -448,6 +448,7 @@ ActiveRecord::Schema.define(version: 20150206181414) do
t
.
datetime
"last_credential_check_at"
t
.
string
"github_access_token"
t
.
string
"gitlab_access_token"
t
.
string
"notification_email"
end
add_index
"users"
,
[
"admin"
],
name:
"index_users_on_admin"
,
using: :btree
...
...
spec/mailers/notify_spec.rb
浏览文件 @
3cd036e3
...
...
@@ -9,9 +9,14 @@ describe Notify do
let
(
:recipient
)
{
create
(
:user
,
email:
'recipient@example.com'
)
}
let
(
:project
)
{
create
(
:project
)
}
before
(
:each
)
do
email
=
recipient
.
emails
.
create
(
email:
"notifications@example.com"
)
recipient
.
update_attribute
(
:notification_email
,
email
.
email
)
end
shared_examples
'a multiple recipients email'
do
it
'is sent to the given recipient'
do
should
deliver_to
recipient
.
email
should
deliver_to
recipient
.
notification_
email
end
end
...
...
@@ -441,7 +446,7 @@ describe Notify do
end
it
'is sent to the given recipient'
do
should
deliver_to
recipient
.
email
should
deliver_to
recipient
.
notification_
email
end
it
'contains the message from the note'
do
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录