BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
41bbbb6d
Commit
41bbbb6d
authored
Apr 03, 2013
by
Andrey Kumanyaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update model methods
parent
7af16bbb
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
43 additions
and
104 deletions
+43
-104
users_controller.rb
app/controllers/admin/users_controller.rb
+1
-1
group.rb
app/models/group.rb
+1
-0
issue.rb
app/models/issue.rb
+3
-13
key.rb
app/models/key.rb
+2
-2
milestone.rb
app/models/milestone.rb
+1
-4
project.rb
app/models/project.rb
+5
-3
user.rb
app/models/user.rb
+30
-81
No files found.
app/controllers/admin/users_controller.rb
View file @
41bbbb6d
...
@@ -14,7 +14,7 @@ class Admin::UsersController < Admin::ApplicationController
...
@@ -14,7 +14,7 @@ class Admin::UsersController < Admin::ApplicationController
@not_in_projects
=
@not_in_projects
.
without_user
(
admin_user
)
if
admin_user
.
authorized_projects
.
present?
@not_in_projects
=
@not_in_projects
.
without_user
(
admin_user
)
if
admin_user
.
authorized_projects
.
present?
# Projects he already own or joined
# Projects he already own or joined
@projects
=
admin_user
.
authorized_projects
.
where
(
'projects.id in (?)'
,
admin_user
.
authorized_projects
.
map
(
&
:id
))
@projects
=
admin_user
.
authorized_projects
end
end
def
team_update
def
team_update
...
...
app/models/group.rb
View file @
41bbbb6d
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
#
#
class
Group
<
Namespace
class
Group
<
Namespace
def
add_users_to_project_teams
(
user_ids
,
project_access
)
def
add_users_to_project_teams
(
user_ids
,
project_access
)
UsersProject
.
add_users_into_projects
(
UsersProject
.
add_users_into_projects
(
projects
.
map
(
&
:id
),
projects
.
map
(
&
:id
),
...
...
app/models/issue.rb
View file @
41bbbb6d
...
@@ -25,19 +25,9 @@ class Issue < ActiveRecord::Base
...
@@ -25,19 +25,9 @@ class Issue < ActiveRecord::Base
acts_as_taggable_on
:labels
acts_as_taggable_on
:labels
class
<<
self
scope
:cared
,
->
(
user
)
{
where
(
assignee_id:
user
)
}
def
cared
(
user
)
scope
:authored
,
->
(
user
)
{
where
(
author_id:
user
)
}
where
(
'assignee_id = :user'
,
user:
user
.
id
)
scope
:open_for
,
->
(
user
)
{
opened
.
assigned
(
user
)
}
end
def
authored
(
user
)
where
(
'author_id = :user'
,
user:
user
.
id
)
end
def
open_for
(
user
)
opened
.
assigned
(
user
)
end
end
state_machine
:state
,
initial: :opened
do
state_machine
:state
,
initial: :opened
do
event
:close
do
event
:close
do
...
...
app/models/key.rb
View file @
41bbbb6d
...
@@ -23,7 +23,7 @@ class Key < ActiveRecord::Base
...
@@ -23,7 +23,7 @@ class Key < ActiveRecord::Base
before_validation
:strip_white_space
before_validation
:strip_white_space
validates
:title
,
presence:
true
,
length:
{
within:
0
..
255
}
validates
:title
,
presence:
true
,
length:
{
within:
0
..
255
}
validates
:key
,
presence:
true
,
length:
{
within:
0
..
5000
},
format:
{
:with
=>
/ssh-.{3} /
},
uniqueness:
true
validates
:key
,
presence:
true
,
length:
{
within:
0
..
5000
},
format:
{
with:
/ssh-.{3} /
},
uniqueness:
true
validate
:fingerprintable_key
validate
:fingerprintable_key
delegate
:name
,
:email
,
to: :user
,
prefix:
true
delegate
:name
,
:email
,
to: :user
,
prefix:
true
...
@@ -48,7 +48,7 @@ class Key < ActiveRecord::Base
...
@@ -48,7 +48,7 @@ class Key < ActiveRecord::Base
end
end
def
is_deploy_key
def
is_deploy_key
!!
project_id
project
.
present?
end
end
# projects that has this key
# projects that has this key
...
...
app/models/milestone.rb
View file @
41bbbb6d
...
@@ -19,6 +19,7 @@ class Milestone < ActiveRecord::Base
...
@@ -19,6 +19,7 @@ class Milestone < ActiveRecord::Base
belongs_to
:project
belongs_to
:project
has_many
:issues
has_many
:issues
has_many
:merge_requests
has_many
:merge_requests
has_many
:participants
,
through: :issues
,
source: :assignee
scope
:active
,
->
{
with_state
(
:active
)
}
scope
:active
,
->
{
with_state
(
:active
)
}
scope
:closed
,
->
{
with_state
(
:closed
)
}
scope
:closed
,
->
{
with_state
(
:closed
)
}
...
@@ -48,10 +49,6 @@ class Milestone < ActiveRecord::Base
...
@@ -48,10 +49,6 @@ class Milestone < ActiveRecord::Base
end
end
end
end
def
participants
User
.
where
(
id:
issues
.
pluck
(
:assignee_id
))
end
def
open_items_count
def
open_items_count
self
.
issues
.
opened
.
count
+
self
.
merge_requests
.
opened
.
count
self
.
issues
.
opened
.
count
+
self
.
merge_requests
.
opened
.
count
end
end
...
...
app/models/project.rb
View file @
41bbbb6d
...
@@ -87,11 +87,12 @@ class Project < ActiveRecord::Base
...
@@ -87,11 +87,12 @@ class Project < ActiveRecord::Base
# Scopes
# Scopes
scope
:without_user
,
->
(
user
)
{
where
(
"id NOT IN (:ids)"
,
ids:
user
.
authorized_projects
.
map
(
&
:id
)
)
}
scope
:without_user
,
->
(
user
)
{
where
(
"id NOT IN (:ids)"
,
ids:
user
.
authorized_projects
.
map
(
&
:id
)
)
}
scope
:not_in_group
,
->
(
group
)
{
where
(
"id NOT IN (:ids)"
,
ids:
group
.
project_ids
)
}
scope
:without_team
,
->
(
team
)
{
team
.
projects
.
present?
?
where
(
"id NOT IN (:ids)"
,
ids:
team
.
projects
.
map
(
&
:
id
))
:
scoped
}
scope
:without_team
,
->
(
team
)
{
team
.
projects
.
present?
?
where
(
"id NOT IN (:ids)"
,
ids:
team
.
projects
.
map
(
&
:
id
))
:
scoped
}
scope
:not_in_group
,
->
(
group
)
{
where
(
"id NOT IN (:ids)"
,
ids:
group
.
project_ids
)
}
scope
:in_team
,
->
(
team
)
{
where
(
"id IN (:ids)"
,
ids:
team
.
projects
.
map
(
&
:id
))
}
scope
:in_team
,
->
(
team
)
{
where
(
"id IN (:ids)"
,
ids:
team
.
projects
.
map
(
&
:id
))
}
scope
:in_namespace
,
->
(
namespace
)
{
where
(
namespace_id:
namespace
.
id
)
}
scope
:in_namespace
,
->
(
namespace
)
{
where
(
namespace_id:
namespace
.
id
)
}
scope
:sorted_by_activity
,
->
()
{
order
(
"(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC"
)
}
scope
:in_group_namespace
,
->
{
joins
(
:group
)
}
scope
:sorted_by_activity
,
->
{
order
(
"(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC"
)
}
scope
:personal
,
->
(
user
)
{
where
(
namespace_id:
user
.
namespace_id
)
}
scope
:personal
,
->
(
user
)
{
where
(
namespace_id:
user
.
namespace_id
)
}
scope
:joined
,
->
(
user
)
{
where
(
"namespace_id != ?"
,
user
.
namespace_id
)
}
scope
:joined
,
->
(
user
)
{
where
(
"namespace_id != ?"
,
user
.
namespace_id
)
}
scope
:public_only
,
->
{
where
(
public:
true
)
}
scope
:public_only
,
->
{
where
(
public:
true
)
}
...
@@ -156,7 +157,8 @@ class Project < ActiveRecord::Base
...
@@ -156,7 +157,8 @@ class Project < ActiveRecord::Base
unless
creator
.
can_create_project?
unless
creator
.
can_create_project?
errors
[
:limit_reached
]
<<
(
"Your own projects limit is
#{
creator
.
projects_limit
}
! Please contact administrator to increase it"
)
errors
[
:limit_reached
]
<<
(
"Your own projects limit is
#{
creator
.
projects_limit
}
! Please contact administrator to increase it"
)
end
end
rescue
rescue
=>
ex
errors
[
:base
]
<<
ex
.
message
errors
[
:base
]
<<
(
"Can't check your ability to create project"
)
errors
[
:base
]
<<
(
"Can't check your ability to create project"
)
end
end
...
...
app/models/user.rb
View file @
41bbbb6d
...
@@ -59,11 +59,10 @@ class User < ActiveRecord::Base
...
@@ -59,11 +59,10 @@ class User < ActiveRecord::Base
#
#
# Namespace for personal projects
# Namespace for personal projects
has_one
:namespace
,
has_one
:namespace
,
dependent: :destroy
,
foreign_key: :owner_id
,
class_name:
"Namespace"
,
conditions:
'type IS NULL'
dependent: :destroy
,
foreign_key: :owner_id
,
# Namespaces (owned groups and own namespace)
class_name:
"Namespace"
,
has_many
:namespaces
,
foreign_key: :owner_id
conditions:
'type IS NULL'
# Profile
# Profile
has_many
:keys
,
dependent: :destroy
has_many
:keys
,
dependent: :destroy
...
@@ -72,15 +71,11 @@ class User < ActiveRecord::Base
...
@@ -72,15 +71,11 @@ class User < ActiveRecord::Base
has_many
:groups
,
class_name:
"Group"
,
foreign_key: :owner_id
has_many
:groups
,
class_name:
"Group"
,
foreign_key: :owner_id
# Teams
# Teams
has_many
:own_teams
,
has_many
:own_teams
,
dependent: :destroy
,
class_name:
"UserTeam"
,
foreign_key: :owner_id
class_name:
"UserTeam"
,
has_many
:user_team_user_relationships
,
dependent: :destroy
foreign_key: :owner_id
,
has_many
:user_teams
,
through: :user_team_user_relationships
dependent: :destroy
has_many
:user_team_user_relationships
,
dependent: :destroy
has_many
:user_teams
,
through: :user_team_user_relationships
has_many
:user_team_project_relationships
,
through: :user_teams
has_many
:user_team_project_relationships
,
through: :user_teams
has_many
:team_projects
,
through: :user_team_project_relationships
has_many
:team_projects
,
through: :user_team_project_relationships
# Projects
# Projects
has_many
:users_projects
,
dependent: :destroy
has_many
:users_projects
,
dependent: :destroy
...
@@ -88,14 +83,14 @@ class User < ActiveRecord::Base
...
@@ -88,14 +83,14 @@ class User < ActiveRecord::Base
has_many
:notes
,
dependent: :destroy
,
foreign_key: :author_id
has_many
:notes
,
dependent: :destroy
,
foreign_key: :author_id
has_many
:merge_requests
,
dependent: :destroy
,
foreign_key: :author_id
has_many
:merge_requests
,
dependent: :destroy
,
foreign_key: :author_id
has_many
:events
,
dependent: :destroy
,
foreign_key: :author_id
,
class_name:
"Event"
has_many
:events
,
dependent: :destroy
,
foreign_key: :author_id
,
class_name:
"Event"
has_many
:recent_events
,
foreign_key: :author_id
,
class_name:
"Event"
,
order:
"id DESC"
has_many
:assigned_issues
,
dependent: :destroy
,
foreign_key: :assignee_id
,
class_name:
"Issue"
has_many
:assigned_issues
,
dependent: :destroy
,
foreign_key: :assignee_id
,
class_name:
"Issue"
has_many
:assigned_merge_requests
,
dependent: :destroy
,
foreign_key: :assignee_id
,
class_name:
"MergeRequest"
has_many
:assigned_merge_requests
,
dependent: :destroy
,
foreign_key: :assignee_id
,
class_name:
"MergeRequest"
has_many
:projects
,
through: :users_projects
has_many
:
recent_events
,
has_many
:
personal_projects
,
through: :namespace
,
source: :projects
class_name:
"Event"
,
has_many
:projects
,
through: :users_projects
foreign_key: :author_id
,
has_many
:own_projects
,
foreign_key: :creator_id
order:
"id DESC"
has_many
:owned_projects
,
through: :namespaces
,
source: :projects
#
#
# Validations
# Validations
...
@@ -109,9 +104,7 @@ class User < ActiveRecord::Base
...
@@ -109,9 +104,7 @@ class User < ActiveRecord::Base
format:
{
with:
Gitlab
::
Regex
.
username_regex
,
format:
{
with:
Gitlab
::
Regex
.
username_regex
,
message:
"only letters, digits & '_' '-' '.' allowed. Letter should be first"
}
message:
"only letters, digits & '_' '-' '.' allowed. Letter should be first"
}
validates
:notification_level
,
validates
:notification_level
,
inclusion:
{
in:
Notification
.
notification_levels
},
presence:
true
inclusion:
{
in:
Notification
.
notification_levels
},
presence:
true
validate
:namespace_uniq
,
if:
->
(
user
)
{
user
.
username_changed?
}
validate
:namespace_uniq
,
if:
->
(
user
)
{
user
.
username_changed?
}
...
@@ -145,6 +138,9 @@ class User < ActiveRecord::Base
...
@@ -145,6 +138,9 @@ class User < ActiveRecord::Base
scope
:alphabetically
,
->
{
order
(
'name ASC'
)
}
scope
:alphabetically
,
->
{
order
(
'name ASC'
)
}
scope
:in_team
,
->
(
team
){
where
(
id:
team
.
member_ids
)
}
scope
:in_team
,
->
(
team
){
where
(
id:
team
.
member_ids
)
}
scope
:not_in_team
,
->
(
team
){
where
(
'users.id NOT IN (:ids)'
,
ids:
team
.
member_ids
)
}
scope
:not_in_team
,
->
(
team
){
where
(
'users.id NOT IN (:ids)'
,
ids:
team
.
member_ids
)
}
scope
:not_in_project
,
->
(
project
)
{
project
.
users
.
present?
?
where
(
"id not in (:ids)"
,
ids:
project
.
users
.
map
(
&
:
id
)
)
:
scoped
}
scope
:without_projects
,
->
{
where
(
'id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)'
)
}
scope
:potential_team_members
,
->
(
team
)
{
team
.
members
.
any?
?
active
.
not_in_team
(
team
)
:
active
}
scope
:potential_team_members
,
->
(
team
)
{
team
.
members
.
any?
?
active
.
not_in_team
(
team
)
:
active
}
#
#
...
@@ -171,18 +167,6 @@ class User < ActiveRecord::Base
...
@@ -171,18 +167,6 @@ class User < ActiveRecord::Base
end
end
end
end
def
not_in_project
(
project
)
if
project
.
users
.
present?
where
(
"id not in (:ids)"
,
ids:
project
.
users
.
map
(
&
:id
)
)
else
scoped
end
end
def
without_projects
where
(
'id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)'
)
end
def
create_from_omniauth
(
auth
,
ldap
=
false
)
def
create_from_omniauth
(
auth
,
ldap
=
false
)
gitlab_auth
.
create_from_omniauth
(
auth
,
ldap
)
gitlab_auth
.
create_from_omniauth
(
auth
,
ldap
)
end
end
...
@@ -229,56 +213,36 @@ class User < ActiveRecord::Base
...
@@ -229,56 +213,36 @@ class User < ActiveRecord::Base
end
end
end
end
# Namespaces user has access to
def
namespaces
namespaces
=
[]
# Add user account namespace
namespaces
<<
self
.
namespace
if
self
.
namespace
# Add groups you can manage
namespaces
+=
groups
.
all
namespaces
end
# Groups where user is an owner
# Groups where user is an owner
def
owned_groups
def
owned_groups
groups
groups
end
end
def
owned_teams
own_teams
end
# Groups user has access to
# Groups user has access to
def
authorized_groups
def
authorized_groups
@authorized_groups
||=
begin
@group_ids
||=
(
groups
.
pluck
(
:id
)
+
authorized_projects
.
pluck
(
:namespace_id
))
groups
=
Group
.
where
(
id:
self
.
authorized_projects
.
pluck
(
:namespace_id
)).
all
Group
.
where
(
id:
@group_ids
)
groups
=
groups
+
self
.
groups
groups
.
uniq
end
end
end
# Projects user has access to
# Projects user has access to
def
authorized_projects
def
authorized_projects
project_ids
=
users_projects
.
pluck
(
:project_id
)
@project_ids
||=
(
owned_projects
.
pluck
(
:id
)
+
projects
.
pluck
(
:id
)).
uniq
project_ids
=
project_ids
|
owned_projects
.
pluck
(
:id
)
Project
.
where
(
id:
@project_ids
)
Project
.
where
(
id:
project_ids
)
end
end
# Projects in user namespace
def
authorized_teams
def
personal_projects
@team_ids
||=
(
user_teams
.
pluck
(
:id
)
+
own_teams
.
pluck
(
:id
)).
uniq
Project
.
personal
(
self
)
UserTeam
.
where
(
id:
@team_ids
)
end
# Projects where user is an owner
def
owned_projects
Project
.
where
(
"(projects.namespace_id IN (:namespaces)) OR
(projects.namespace_id IS NULL AND projects.creator_id = :user_id)"
,
namespaces:
namespaces
.
map
(
&
:id
),
user_id:
self
.
id
)
end
end
# Team membership in authorized projects
# Team membership in authorized projects
def
tm_in_authorized_projects
def
tm_in_authorized_projects
UsersProject
.
where
(
project_id:
authorized_projects
.
map
(
&
:id
),
user_id:
self
.
id
)
UsersProject
.
where
(
project_id:
authorized_projects
.
map
(
&
:id
),
user_id:
self
.
id
)
end
end
def
is_admin?
def
is_admin?
...
@@ -344,28 +308,13 @@ class User < ActiveRecord::Base
...
@@ -344,28 +308,13 @@ class User < ActiveRecord::Base
end
end
def
several_namespaces?
def
several_namespaces?
namespaces
.
size
>
1
namespaces
.
many?
end
end
def
namespace_id
def
namespace_id
namespace
.
try
:id
namespace
.
try
:id
end
end
def
authorized_teams
@authorized_teams
||=
begin
ids
=
[]
ids
<<
UserTeam
.
with_member
(
self
).
pluck
(
'user_teams.id'
)
ids
<<
UserTeam
.
created_by
(
self
).
pluck
(
'user_teams.id'
)
ids
.
flatten
UserTeam
.
where
(
id:
ids
)
end
end
def
owned_teams
UserTeam
.
where
(
owner_id:
self
.
id
)
end
def
name_with_username
def
name_with_username
"
#{
name
}
(
#{
username
}
)"
"
#{
name
}
(
#{
username
}
)"
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment