Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Tatuya Kamada
gitlab-ce
Commits
cc043f32
Commit
cc043f32
authored
Feb 11, 2012
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Admin area improved
parent
a769204f
Changes
39
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
434 additions
and
334 deletions
+434
-334
app/assets/stylesheets/application.css
app/assets/stylesheets/application.css
+1
-1
app/assets/stylesheets/common.scss
app/assets/stylesheets/common.scss
+32
-59
app/assets/stylesheets/issues.css.scss
app/assets/stylesheets/issues.css.scss
+0
-3
app/assets/stylesheets/main.scss
app/assets/stylesheets/main.scss
+64
-0
app/assets/stylesheets/projects.css.scss
app/assets/stylesheets/projects.css.scss
+4
-0
app/assets/stylesheets/reset_bootstrap.scss
app/assets/stylesheets/reset_bootstrap.scss
+0
-35
app/assets/stylesheets/top_panel.scss
app/assets/stylesheets/top_panel.scss
+1
-0
app/controllers/admin/team_members_controller.rb
app/controllers/admin/team_members_controller.rb
+2
-26
app/controllers/admin/users_controller.rb
app/controllers/admin/users_controller.rb
+20
-0
app/models/project.rb
app/models/project.rb
+1
-0
app/models/users_project.rb
app/models/users_project.rb
+14
-0
app/views/admin/projects/_form.html.haml
app/views/admin/projects/_form.html.haml
+38
-8
app/views/admin/projects/edit.html.haml
app/views/admin/projects/edit.html.haml
+2
-6
app/views/admin/projects/index.html.haml
app/views/admin/projects/index.html.haml
+7
-7
app/views/admin/projects/show.html.haml
app/views/admin/projects/show.html.haml
+30
-30
app/views/admin/team_members/_form.html.haml
app/views/admin/team_members/_form.html.haml
+12
-22
app/views/admin/team_members/edit.html.haml
app/views/admin/team_members/edit.html.haml
+18
-5
app/views/admin/team_members/index.html.haml
app/views/admin/team_members/index.html.haml
+0
-28
app/views/admin/team_members/new.html.haml
app/views/admin/team_members/new.html.haml
+0
-6
app/views/admin/team_members/show.html.haml
app/views/admin/team_members/show.html.haml
+0
-26
app/views/admin/users/_form.html.haml
app/views/admin/users/_form.html.haml
+8
-6
app/views/admin/users/edit.html.haml
app/views/admin/users/edit.html.haml
+2
-5
app/views/admin/users/index.html.haml
app/views/admin/users/index.html.haml
+7
-5
app/views/admin/users/show.html.haml
app/views/admin/users/show.html.haml
+54
-24
app/views/kaminari/_first_page.html.haml
app/views/kaminari/_first_page.html.haml
+9
-0
app/views/kaminari/_gap.html.haml
app/views/kaminari/_gap.html.haml
+8
-0
app/views/kaminari/_last_page.html.haml
app/views/kaminari/_last_page.html.haml
+9
-0
app/views/kaminari/_next_page.html.haml
app/views/kaminari/_next_page.html.haml
+9
-0
app/views/kaminari/_page.html.haml
app/views/kaminari/_page.html.haml
+10
-0
app/views/kaminari/_paginator.html.haml
app/views/kaminari/_paginator.html.haml
+17
-0
app/views/kaminari/_prev_page.html.haml
app/views/kaminari/_prev_page.html.haml
+9
-0
app/views/layouts/_app_side.html.haml
app/views/layouts/_app_side.html.haml
+0
-3
app/views/layouts/_projects_side.html.haml
app/views/layouts/_projects_side.html.haml
+10
-18
app/views/layouts/admin.html.haml
app/views/layouts/admin.html.haml
+0
-1
app/views/profile/show.html.haml
app/views/profile/show.html.haml
+2
-1
config/routes.rb
config/routes.rb
+6
-2
spec/requests/admin/admin_projects_spec.rb
spec/requests/admin/admin_projects_spec.rb
+14
-1
spec/requests/admin/admin_users_spec.rb
spec/requests/admin/admin_users_spec.rb
+14
-0
spec/requests/admin/security_spec.rb
spec/requests/admin/security_spec.rb
+0
-6
No files found.
app/assets/stylesheets/application.css
View file @
cc043f32
...
...
@@ -7,5 +7,5 @@
*= require jquery-ui/jquery.tagify
*= require chosen
*= require_self
*= require
commo
n
*= require
mai
n
*/
app/assets/stylesheets/common.scss
View file @
cc043f32
@import
"bootstrap"
;
/** GITLAB colors **/
$text_color
:
#222
;
$lite_text_color
:
#666
;
$link_color
:
#111
;
$active_link_color
:
#2FA0BB
;
$active_bg_color
:
#79C3E0
;
$active_bd_color
:
#2FA0BB
;
$border_color
:
#CCC
;
$lite_border_color
:
#EEE
;
$min_app_width
:
980px
;
$max_app_width
:
980px
;
$app_padding
:
20px
;
$bg_color
:
#FFF
;
$styled_border_color
:
#2FA0BB
;
$color
:
"#4BB8D2"
;
$blue_link
:
"#2fa0bb"
;
/** MIXINS **/
@mixin
round-borders-bottom
(
$radius
)
{
border-top
:
1px
solid
#eaeaea
;
-moz-border-radius-bottomright
:
$radius
;
-moz-border-radius-bottomleft
:
$radius
;
border-bottom-right-radius
:
$radius
;
border-bottom-left-radius
:
$radius
;
-webkit-border-bottom-left-radius
:
$radius
;
-webkit-border-bottom-right-radius
:
$radius
;
}
@mixin
round-borders-top
(
$radius
)
{
border-top
:
1px
solid
#eaeaea
;
-moz-border-radius-topright
:
$radius
;
-moz-border-radius-topleft
:
$radius
;
border-top-right-radius
:
$radius
;
border-top-left-radius
:
$radius
;
-webkit-border-top-left-radius
:
$radius
;
-webkit-border-top-right-radius
:
$radius
;
}
@mixin
round-borders-all
(
$radius
)
{
border
:
1px
solid
#eaeaea
;
-moz-border-radius
:
$radius
;
-webkit-border-radius
:
$radius
;
border-radius
:
$radius
;
}
/** COLORS **/
.cgray
{
color
:gray
;
}
.cred
{
color
:
#D12F19
;
}
...
...
@@ -173,18 +126,38 @@ img.lil_av {
.author_link
{
color
:
$active_link_color
;
}
.entry
{
position
:
relative
;
padding
:
7px
15px
;
margin-bottom
:
18px
;
color
:
#404040
;
filter
:none
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0
.25
);
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0
.5
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
@import
"reset_bootstrap.scss"
;
@import
"top_panel.scss"
;
@import
"projects.css.scss"
;
@import
"commits.css.scss"
;
@import
"tree.scss"
;
@import
"issues.css.scss"
;
@import
"merge_requests.css.scss"
;
@import
"notes.css.scss"
;
@import
"login.scss"
;
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
/** CODE HIGHTLIGHT **/
@import
"highlight.css.scss"
;
@import
"highlight.black.css.scss"
;
background
:
#F1F1F1
;
border
:
1px
solid
#ccc
;
p
{
margin-bottom
:
0
;
img
{
position
:relative
;
top
:
3px
;
}
}
}
.widget
{
padding
:
20px
;
margin-bottom
:
20px
;
}
app/assets/stylesheets/issues.css.scss
deleted
100644 → 0
View file @
a769204f
#issue_assignee_id
{
width
:
300px
;
}
app/assets/stylesheets/main.scss
0 → 100644
View file @
cc043f32
@import
"bootstrap"
;
/** GITLAB colors **/
$text_color
:
#222
;
$lite_text_color
:
#666
;
$link_color
:
#111
;
$active_link_color
:
#2FA0BB
;
$active_bg_color
:
#79C3E0
;
$active_bd_color
:
#2FA0BB
;
$border_color
:
#CCC
;
$lite_border_color
:
#EEE
;
$min_app_width
:
980px
;
$max_app_width
:
980px
;
$app_padding
:
20px
;
$bg_color
:
#FFF
;
$styled_border_color
:
#2FA0BB
;
$color
:
"#4BB8D2"
;
$blue_link
:
"#2fa0bb"
;
/** MIXINS **/
@mixin
round-borders-bottom
(
$radius
)
{
border-top
:
1px
solid
#eaeaea
;
-moz-border-radius-bottomright
:
$radius
;
-moz-border-radius-bottomleft
:
$radius
;
border-bottom-right-radius
:
$radius
;
border-bottom-left-radius
:
$radius
;
-webkit-border-bottom-left-radius
:
$radius
;
-webkit-border-bottom-right-radius
:
$radius
;
}
@mixin
round-borders-top
(
$radius
)
{
border-top
:
1px
solid
#eaeaea
;
-moz-border-radius-topright
:
$radius
;
-moz-border-radius-topleft
:
$radius
;
border-top-right-radius
:
$radius
;
border-top-left-radius
:
$radius
;
-webkit-border-top-left-radius
:
$radius
;
-webkit-border-top-right-radius
:
$radius
;
}
@mixin
round-borders-all
(
$radius
)
{
border
:
1px
solid
#eaeaea
;
-moz-border-radius
:
$radius
;
-webkit-border-radius
:
$radius
;
border-radius
:
$radius
;
}
@import
"reset_bootstrap.scss"
;
@import
"common.scss"
;
@import
"top_panel.scss"
;
@import
"projects.css.scss"
;
@import
"commits.css.scss"
;
@import
"tree.scss"
;
@import
"merge_requests.css.scss"
;
@import
"notes.css.scss"
;
@import
"login.scss"
;
/** CODE HIGHTLIGHT **/
@import
"highlight.css.scss"
;
@import
"highlight.black.css.scss"
;
app/assets/stylesheets/projects.css.scss
View file @
cc043f32
...
...
@@ -201,3 +201,7 @@ input.git_clone_url {
width
:
60px
;
}
}
#issue_assignee_id
{
width
:
300px
;
}
app/assets/stylesheets/reset_bootstrap.scss
View file @
cc043f32
...
...
@@ -5,38 +5,3 @@ a {
color
:
$active_link_color
;
}
}
.entry
{
position
:
relative
;
padding
:
7px
15px
;
margin-bottom
:
18px
;
color
:
#404040
;
filter
:none
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0
.25
);
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0
.5
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0
.25
);
background
:
#F1F1F1
;
border
:
1px
solid
#ccc
;
p
{
margin-bottom
:
0
;
img
{
position
:relative
;
top
:
3px
;
}
}
}
.widget
{
padding
:
20px
;
margin-bottom
:
20px
;
}
app/assets/stylesheets/top_panel.scss
View file @
cc043f32
...
...
@@ -11,6 +11,7 @@ body header {
-moz-box-shadow
:
0
-1px
0
white
inset
;
-webkit-box-shadow
:
0
-1px
0
white
inset
;
z-index
:
10
;
height
:
60px
;
.wrapper
{
...
...
app/controllers/admin/team_members_controller.rb
View file @
cc043f32
...
...
@@ -3,39 +3,15 @@ class Admin::TeamMembersController < ApplicationController
before_filter
:authenticate_user!
before_filter
:authenticate_admin!
def
index
@admin_team_members
=
UsersProject
.
page
(
params
[
:page
]).
per
(
100
).
order
(
"project_id DESC"
)
end
def
show
@admin_team_member
=
UsersProject
.
find
(
params
[
:id
])
end
def
new
@admin_team_member
=
UsersProject
.
new
(
params
[
:team_member
])
end
def
edit
@admin_team_member
=
UsersProject
.
find
(
params
[
:id
])
end
def
create
@admin_team_member
=
UsersProject
.
new
(
params
[
:team_member
])
@admin_team_member
.
project_id
=
params
[
:team_member
][
:project_id
]
if
@admin_team_member
.
save
redirect_to
admin_team_member_path
(
@admin_team_member
),
notice:
'UsersProject was successfully created.'
else
render
action:
"new"
end
end
def
update
@admin_team_member
=
UsersProject
.
find
(
params
[
:id
])
@admin_team_member
.
project_id
=
params
[
:team_member
][
:project_id
]
if
@admin_team_member
.
update_attributes
(
params
[
:team_member
])
redirect_to
admin_team_member_path
(
@admin_team_member
),
notice:
'UsersProject
was successfully updated.'
redirect_to
[
:admin
,
@admin_team_member
.
project
],
notice:
'Project Access
was successfully updated.'
else
render
action:
"edit"
end
...
...
@@ -45,6 +21,6 @@ class Admin::TeamMembersController < ApplicationController
@admin_team_member
=
UsersProject
.
find
(
params
[
:id
])
@admin_team_member
.
destroy
redirect_to
admin_team_members_url
redirect_to
:back
end
end
app/controllers/admin/users_controller.rb
View file @
cc043f32
...
...
@@ -9,8 +9,28 @@ class Admin::UsersController < ApplicationController
def
show
@admin_user
=
User
.
find
(
params
[
:id
])
@projects
=
if
@admin_user
.
projects
.
empty?
Project
else
Project
.
without_user
(
@admin_user
)
end
.
all
end
def
team_update
@admin_user
=
User
.
find
(
params
[
:id
])
UsersProject
.
user_bulk_import
(
@admin_user
,
params
[
:project_ids
],
params
[
:project_access
],
params
[
:repo_access
]
)
redirect_to
[
:admin
,
@admin_user
],
notice:
'Teams were successfully updated.'
end
def
new
@admin_user
=
User
.
new
(
:projects_limit
=>
10
)
end
...
...
app/models/project.rb
View file @
cc043f32
...
...
@@ -53,6 +53,7 @@ class Project < ActiveRecord::Base
attr_protected
:private_flag
,
:owner_id
scope
:public_only
,
where
(
:private_flag
=>
false
)
scope
:without_user
,
lambda
{
|
user
|
where
(
"id not in (:ids)"
,
:ids
=>
user
.
projects
.
map
(
&
:id
)
)
}
def
self
.
active
joins
(
:issues
,
:notes
,
:merge_requests
).
order
(
"issues.created_at, notes.created_at, merge_requests.created_at DESC"
)
...
...
app/models/users_project.rb
View file @
cc043f32
...
...
@@ -27,6 +27,20 @@ class UsersProject < ActiveRecord::Base
end
end
def
self
.
user_bulk_import
(
user
,
project_ids
,
project_access
,
repo_access
)
UsersProject
.
transaction
do
project_ids
.
each
do
|
project_id
|
users_project
=
UsersProject
.
new
(
:repo_access
=>
repo_access
,
:project_access
=>
project_access
,
)
users_project
.
project_id
=
project_id
users_project
.
user_id
=
user
.
id
users_project
.
save
end
end
end
def
update_repository
Gitlabhq
::
GitHost
.
system
.
new
.
configure
do
|
c
|
c
.
update_project
(
project
.
path
,
project
)
...
...
app/views/admin/projects/_form.html.haml
View file @
cc043f32
=
form_for
[
:admin
,
@admin_project
]
do
|
f
|
-
if
@admin_project
.
errors
.
any?
#error_explanation
%h2
=
"
#{
pluralize
(
@admin_project
.
errors
.
count
,
"error"
)
}
prohibited this admin_project from being saved:"
.alert-message.block-message.error
%ul
-
@admin_project
.
errors
.
full_messages
.
each
do
|
msg
|
%li
=
msg
...
...
@@ -10,27 +9,58 @@
=
f
.
label
:name
.input
=
f
.
text_field
:name
.clearfix
=
f
.
label
:code
.input
=
f
.
text_field
:code
=
f
.
label
:path
do
Path
.input
.input-prepend
%span
.add-on
=
"git@
#{
GIT_HOST
[
"host"
]
}
:"
=
f
.
text_field
:path
,
:placeholder
=>
"example_project"
,
:disabled
=>
!
@admin_project
.
new_record?
.clearfix
=
f
.
label
:path
.input
=
f
.
text_field
:path
=
f
.
label
:code
do
Code
.input
.input-prepend
%span
.add-on
=
"http://
#{
GIT_HOST
[
"host"
]
}
/"
=
f
.
text_field
:code
,
:placeholder
=>
"example"
-
unless
@admin_project
.
new_record?
.clearfix
=
f
.
label
:owner_id
.input
=
f
.
select
:owner_id
,
User
.
all
.
map
{
|
user
|
[
user
.
name
,
user
.
id
]
}
-
unless
@admin_project
.
heads
.
empty?
.clearfix
=
f
.
label
:default_branch
,
"Default Branch"
.input
=
f
.
select
(
:default_branch
,
@admin_project
.
heads
.
map
(
&
:name
),
{},
:style
=>
"width:210px;"
)
.well
%h5
Features
.clearfix
=
f
.
label
:issues_enabled
,
"Issues"
.input
=
f
.
check_box
:issues_enabled
.clearfix
=
f
.
label
:merge_requests_enabled
,
"Merge Requests"
.input
=
f
.
check_box
:merge_requests_enabled
.clearfix
=
f
.
label
:wall_enabled
,
"Wall"
.input
=
f
.
check_box
:wall_enabled
.clearfix
=
f
.
label
:description
.input
=
f
.
text_area
:description
.input
=
f
.
text_area
:description
,
:class
=>
"xxlarge"
.clear
%br
.actions
=
f
.
submit
'Save'
,
:class
=>
"btn"
=
f
.
submit
'Save'
,
:class
=>
"btn primary"
=
link_to
'Cancel'
,
[
:admin
,
@admin_project
],
:class
=>
"btn"
=
link_to
'Destroy'
,
[
:admin
,
@admin_project
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:class
=>
"btn danger right"
:javascript
$
(
function
(){
taggifyForm
();
$
(
'
#project_owner_id
'
).
chosen
();
$
(
'
#project_default_branch
'
).
chosen
();
})
app/views/admin/projects/edit.html.haml
View file @
cc043f32
%h2
=
@admin_project
.
name
%h3
=
@admin_project
.
name
%hr
=
render
'form'
%br
=
link_to
'Back'
,
admin_projects_path
,
:class
=>
""
|
=
link_to
'Show'
,
[
:admin
,
@admin_project
],
:class
=>
""
app/views/admin/projects/index.html.haml
View file @
cc043f32
%table
%h3
Projects
=
link_to
'New Project'
,
new_admin_project_path
,
:class
=>
"btn small right"
%hr
%table
.zebra-striped
%thead
%th
Name
%th
Code
%th
Path
%th
Team Members
%th
Last Commit
...
...
@@ -11,12 +14,9 @@
-
@admin_projects
.
each
do
|
project
|
%tr
%td
=
link_to
project
.
name
,
[
:admin
,
project
]
%td
=
project
.
code
%td
=
project
.
path
%td
=
project
.
users_projects
.
count
%td
=
last_commit
(
project
)
%td
=
link_to
'Edit'
,
edit_admin_project_path
(
project
),
:id
=>
"edit_
#{
dom_id
(
project
)
}
"
%td
=
link_to
'Destroy'
,
[
:admin
,
project
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
%td
=
link_to
'Edit'
,
edit_admin_project_path
(
project
),
:id
=>
"edit_
#{
dom_id
(
project
)
}
"
,
:class
=>
"btn small"
%td
=
link_to
'Destroy'
,
[
:admin
,
project
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:class
=>
"btn small danger"
=
paginate
@admin_projects
=
link_to
'New Project'
,
new_admin_project_path
,
:class
=>
"btn"
app/views/admin/projects/show.html.haml
View file @
cc043f32
-
unless
notice
.
nil?
%p
#notice
=
notice
%h3
=
@admin_project
.
name
=
link_to
'Edit'
,
edit_admin_project_path
(
@admin_project
),
:class
=>
"btn right small"
%hr
%h2
=
@admin_project
.
name
%table
.round-borders
%table
.zebra-striped
%tr
%td
%b
...
...
@@ -29,14 +29,33 @@
Description:
%td
=
@admin_project
.
description
%tr
%td
{
:colspan
=>
2
}
=
link_to
'Edit'
,
edit_admin_project_path
(
@admin_project
),
:class
=>
"btn"
.span-14
%h2
Team
%h3
Team
%small
(
#{
@admin_project
.
users_projects
.
count
}
)
%hr
%table
.zebra-striped
%thead
%tr
%th
Name
%th
Project Access
%th
Repository Access
%th
-
@admin_project
.
users_projects
.
each
do
|
tm
|
%tr
%td
=
link_to
tm
.
user_name
,
admin_users_path
(
tm
.
user
)
%td
=
select_tag
:tm_project_access
,
options_for_select
(
Project
.
access_options
,
tm
.
project_access
),
:class
=>
"medium project-access-select"
,
:disabled
=>
:disabled
%td
=
select_tag
:tm_repo_access
,
options_for_select
(
Repository
.
access_options
,
tm
.
repo_access
),
:class
=>
"medium repo-access-select"
,
:disabled
=>
:disabled
%td
=
link_to
'Edit Access'
,
edit_admin_team_member_path
(
tm
),
:class
=>
"btn small"
%td
=
link_to
'Remove from team'
,
admin_team_member_path
(
tm
),
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:class
=>
"btn danger small"
=
form_tag
team_update_admin_project_path
(
@admin_project
),
:class
=>
"bulk_import"
,
:method
=>
:put
do
%table
...
...
@@ -51,27 +70,8 @@
%td
=
select_tag
:project_access
,
options_for_select
(
Project
.
access_options
),
:class
=>
"project-access-select"
%td
=
select_tag
:repo_access
,
options_for_select
(
Repository
.
access_options
),
:class
=>
"repo-access-select"
%tr
%td
{
:colspan
=>
3
}
=
submit_tag
'Add'
,
:class
=>
"btn primary"
%table
.round-borders
%thead
%tr
%th
Name
%th
Added
%th
Project Access
%th
Repository Access
%th
-
@admin_project
.
users_projects
.
each
do
|
tm
|
%tr
%td
=
link_to
tm
.
user_name
,
admin_team_member_path
(
tm
)
%td
=
time_ago_in_words
(
tm
.
updated_at
)
+
" ago"
%td
=
select_tag
:tm_project_access
,
options_for_select
(
Project
.
access_options
,
tm
.
project_access
),
:class
=>
"project-access-select"
,
:disabled
=>
:disabled
%td
=
select_tag
:tm_repo_access
,
options_for_select
(
Repository
.
access_options
,
tm
.
repo_access
),
:class
=>
"repo-access-select"
,
:disabled
=>
:disabled
%td
=
link_to
'Destroy'
,
admin_team_member_path
(
tm
),
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
.actions
=
submit_tag
'Add'
,
:class
=>
"btn primary"
:css
form
select
{
...
...
app/views/admin/team_members/_form.html.haml
View file @
cc043f32
=
form_for
@admin_team_member
,
:as
=>
:team_member
,
:url
=>
@admin_team_member
.
new_record?
?
admin_team_members_path
(
@admin_team_member
)
:
admin_team_member_path
(
@admin_team_member
)
do
|
f
|
=
form_for
@admin_team_member
,
:as
=>
:team_member
,
:url
=>
admin_team_member_path
(
@admin_team_member
)
do
|
f
|
-
if
@admin_team_member
.
errors
.
any?
#error_explanation
%h2
=
"
#{
pluralize
(
@admin_team_member
.
errors
.
count
,
"error"
)
}
prohibited this admin_project from being saved:"
.alert-message.block-message.error
%ul
-
@admin_team_member
.
errors
.
full_messages
.
each
do
|
msg
|
%li
=
msg
-
if
@admin_team_member
.
new_record?
.span-6
=
f
.
label
:user_id
.span-6
=
f
.
select
:user_id
,
User
.
all
.
map
{
|
user
|
[
user
.
name
,
user
.
id
]
}
.span-6
=
f
.
label
:project_id
.span-6
=
f
.
select
:project_id
,
Project
.
all
.
map
{
|
user
|
[
user
.
name
,
user
.
id
]
}
.clearfix
%label
Project Access:
.input
=
f
.
select
:project_access
,
options_for_select
(
Project
.
access_options
,
@admin_team_member
.
project_access
),
{},
:class
=>
"project-access-select"
.span-6
%b
Project Access:
.span-6
=
f
.
select
:project_access
,
options_for_select
(
Project
.
access_options
,
@admin_team_member
.
project_access
),
{},
:class
=>
"project-access-select"
.span-6
%b
Repository Access:
.span-6
=
f
.
select
:repo_access
,
options_for_select
(
Repository
.
access_options
,
@admin_team_member
.
repo_access
),
{},
:class
=>
"repo-access-select"
.clearfix
%label
Repository Access:
.input
=
f
.
select
:repo_access
,
options_for_select
(
Repository
.
access_options
,
@admin_team_member
.
repo_access
),
{},
:class
=>
"repo-access-select"
%br
.actions
=
f
.
submit
'Save'
,
:class
=>
"btn"
=
f
.
submit
'Save'
,
:class
=>
"btn primary"
=
link_to
'Cancel'
,
:back
,
:class
=>
"btn"
:css
form
select
{
...
...
app/views/admin/team_members/edit.html.haml
View file @
cc043f32
=
render
'form'
%h3
Edit access
%small
=
@admin_team_member
.
project
.
name
–
=
@admin_team_member
.
user_name
%br
=
link_to
'Show'
,
admin_team_member_path
(
@admin_team_member
)
\|
=
link_to
'Back'
,
admin_team_members_path
%hr
%table
.zebra-striped
%tr
%td
User:
%td
=
@admin_team_member
.
user_name
%tr
%td
Project:
%td
=
@admin_team_member
.
project
.
name
%tr
%td
Since:
%td
=
@admin_team_member
.
updated_at
.
stamp
(
"Nov 11, 2010"
)
=
render
'form'
app/views/admin/team_members/index.html.haml
deleted
100644 → 0
View file @
a769204f
-
@admin_team_members
.
group_by
(
&
:project
).
sort
.
each
do
|
project
,
members
|
%h3
=
link_to
project
.
name
,
[
:admin
,
project
]
%table
%thead
%th
Name
%th
Project Access
%th
Repo Access
%th
Added
%th
%th
-
members
.
each
do
|
tm
|
-
user
=
tm
.
user
%tr
%td
.span-6
=
link_to
tm
.
user_name
,
admin_team_member_path
(
tm
)
%br
%br
=
tm
.
user_email
%td
.span-3
=
select_tag
:project_access
,
options_for_select
(
Project
.
access_options
,
tm
.
project_access
),
:class
=>
"project-access-select"
,
:disabled
=>
:disabled
%td
.span-3
=
select_tag
:repo_access
,
options_for_select
(
Repository
.
access_options
,
tm
.
repo_access
),
:class
=>
"repo-access-select"
,
:disabled
=>
:disabled
%td
.span-3
=
time_ago_in_words
(
tm
.
updated_at
)
+
" ago"
%td
=
link_to
'Edit'
,
edit_admin_team_member_path
(
tm
),
:id
=>
"edit_
#{
dom_id
(
tm
)
}
"
%td
=
link_to
'Destroy'
,
admin_team_member_path
(
tm
),
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
%br
=
paginate
@admin_team_members
=
link_to
'New Team Member'
,
new_admin_team_member_path
,
:class
=>
"btn"
app/views/admin/team_members/new.html.haml
deleted
100644 → 0
View file @
a769204f
%h1
New team member
=
render
'form'
%br
=
link_to
'Back'
,
admin_team_members_path
app/views/admin/team_members/show.html.haml
deleted
100644 → 0
View file @
a769204f
#infoblock
%p
%b
Name:
=
@admin_team_member
.
user_name
%p
%b
Project:
=
@admin_team_member
.
project
.
name
%p
%b
Since:
=
@admin_team_member
.
updated_at
.
stamp
(
"Nov 11, 2010"
)
#infoblock
.span-6
%b
Project Access:
=
select_tag
:project_access
,
options_for_select
(
Project
.
access_options
,
@admin_team_member
.
project_access
),
:class
=>
"project-access-select"
,
:disabled
=>
true
%br
.span-6
%b
Repository Access:
=
select_tag
:repo_access
,
options_for_select
(
Repository
.
access_options
,
@admin_team_member
.
repo_access
),
:class
=>
"repo-access-select"
,
:disabled
=>
true
%br
=
link_to
'Edit'
,
edit_admin_team_member_path
(
@admin_project
)
\|
=
link_to
'Back'
,
admin_team_members_path
app/views/admin/users/_form.html.haml
View file @
cc043f32
...
...
@@ -18,9 +18,6 @@
.clearfix
=
f
.
label
:password_confirmation
.input
=
f
.
password_field
:password_confirmation
.clearfix
=
f
.
check_box
:admin
=
f
.
label
:admin
.clearfix
=
f
.
label
:projects_limit
...
...
@@ -35,8 +32,13 @@
.clearfix
=
f
.
label
:twitter
.input
=
f
.
text_field
:twitter
.clear
%br
.clearfix
=
f
.
label
:admin
do
=
f
.
check_box
:admin
%span
Administrator
.actions
=
f
.
submit
'Save'
,
:class
=>
"btn primary"
=
link_to
'Cancel'
,
admin_users_path
,
:class
=>
"btn"
-
if
@admin_user
.
new_record?
=
link_to
'Cancel'
,
admin_users_path
,
:class
=>
"btn"
-
else
=
link_to
'Cancel'
,
admin_user_path
(
@admin_user
),
:class
=>
"btn"
app/views/admin/users/edit.html.haml
View file @
cc043f32
%h3
=
@admin_user
.
name
%hr
=
render
'form'
%br
=
link_to
'Back'
,
admin_users_path
,
:class
=>
""
|
=
link_to
'Show'
,
[
:admin
,
@admin_user
],
:class
=>
""
app/views/admin/users/index.html.haml
View file @
cc043f32
%table
%h3
Users
=
link_to
'New User'
,
new_admin_user_path
,
:class
=>
"btn small right"
%hr
%table
.zebra-striped
%thead
%th
Admin
%th
Name
...
...
@@ -13,9 +17,7 @@
%td
=
link_to
user
.
name
,
[
:admin
,
user
]
%td
=
user
.
email
%td
=
user
.
users_projects
.
count
%td
=
link_to
'Edit'
,
edit_admin_user_path
(
user
),
:id
=>
"edit_
#{
dom_id
(
user
)
}
"
%td
=
link_to
'Destroy'
,
[
:admin
,
user
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
%td
=
link_to
'Edit'
,
edit_admin_user_path
(
user
),
:id
=>
"edit_
#{
dom_id
(
user
)
}
"
,
:class
=>
"btn small"
%td
=
link_to
'Destroy'
,
[
:admin
,
user
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:class
=>
"btn small danger"
=
paginate
@admin_users
%br
=
link_to
'New User'
,
new_admin_user_path
,
:class
=>
"btn"
app/views/admin/users/show.html.haml
View file @
cc043f32
%h2
=
@admin_user
.
name
%h3
=
@admin_user
.
name
=
link_to
'Edit'
,
edit_admin_user_path
(
@admin_user
),
:class
=>
"btn small right"
%table
.round-borders
%hr
%table
.zebra-striped
%tr
%td
%b
...
...
@@ -39,31 +43,57 @@
Twitter:
%td
=
@admin_user
.
twitter
%tr
%td
{
:colspan
=>
2
}
=
link_to
'Edit'
,
edit_admin_user_path
(
@admin_user
),
:class
=>
"btn"
.span-14
%h2
Projects
%h3
Projects
%hr
%table
.zebra-striped
%tr
%thead
%th
Name
%th
Project Access
%th
Repository Access
%th
%th
%table
.round-borders
-
@admin_user
.
users_projects
.
each
do
|
tm
|
-
project
=
tm
.
project
%tr
%thead
%th
Name
%th
Added
%th
Project Access
%th
Repository Access
%th
%th
%td
=
link_to
project
.
name
,
admin_project_path
(
project
)
%td
=
select_tag
:tm_project_access
,
options_for_select
(
Project
.
access_options
,
tm
.
project_access
),
:class
=>
"medium project-access-select"
,
:disabled
=>
:disabled
%td
=
select_tag
:tm_repo_access
,
options_for_select
(
Repository
.
access_options
,
tm
.
repo_access
),
:class
=>
"medium repo-access-select"
,
:disabled
=>
:disabled
%td
=
link_to
'Edit Access'
,
edit_admin_team_member_path
(
tm
),
:class
=>
"btn small"
%td
=
link_to
'Remove from team'
,
admin_team_member_path
(
tm
),
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:class
=>
"btn small danger"
-
@admin_user
.
users_projects
.
each
do
|
tm
|
-
project
=
tm
.
project
=
form_tag
team_update_admin_user_path
(
@admin_user
),
:class
=>
"bulk_import"
,
:method
=>
:put
do
%table
%thead
%tr
%td
=
link_to
project
.
name
,
admin_project_path
(
project
)
%td
=
time_ago_in_words
(
tm
.
updated_at
)
+
" ago"
%td
=
select_tag
:project_access
,
options_for_select
(
Project
.
access_options
,
tm
.
project_access
),
:class
=>
"project-access-select"
,
:disabled
=>
:disabled
%td
=
select_tag
:repo_access
,
options_for_select
(
Repository
.
access_options
,
tm
.
repo_access
),
:class
=>
"repo-access-select"
,
:disabled
=>
:disabled
%td
=
link_to
'Edit'
,
edit_admin_team_member_path
(
tm
)
%td
=
link_to
'Cancel'
,
admin_team_member_path
(
tm
),
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
%th
Projects
%th
Project Access:
%th
Repo Access:
%tr
%td
=
select_tag
:project_ids
,
options_from_collection_for_select
(
@projects
,
:id
,
:name
),
:multiple
=>
true
%td
=
select_tag
:project_access
,
options_for_select
(
Project
.
access_options
),
:class
=>
"project-access-select"
%td
=
select_tag
:repo_access
,
options_for_select
(
Repository
.
access_options
),
:class
=>
"repo-access-select"
.actions
=
submit_tag
'Add'
,
:class
=>
"btn primary"
:css
form
select
{
width
:
150px
;
}
#project_ids
{
width
:
300px
;
}
:javascript
$
(
'
select#project_ids
'
).
chosen
();
$
(
'
select#repo_access
'
).
chosen
();
$
(
'
select#project_access
'
).
chosen
();
=
link_to
'Add To Another Project'
,
new_admin_team_member_path
(
:team_member
=>
{
:user_id
=>
@admin_user
.
id
}),
:class
=>
"btn"
app/views/kaminari/_first_page.html.haml
0 → 100644
View file @
cc043f32
-# Link to the "First" page
-# available local variables
-# url: url to the first page
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span
.first
=
link_to_unless
current_page
.
first?
,
raw
(
t
'views.pagination.first'
),
url
,
:remote
=>
remote
app/views/kaminari/_gap.html.haml
0 → 100644
View file @
cc043f32
-# Non-link tag that stands for skipped pages...
-# available local variables
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span
.page.gap
=
raw
(
t
'views.pagination.truncate'
)
app/views/kaminari/_last_page.html.haml
0 → 100644
View file @
cc043f32
-# Link to the "Last" page
-# available local variables
-# url: url to the last page
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span
.last
=
link_to_unless
current_page
.
last?
,
raw
(
t
'views.pagination.last'
),
url
,
{
:remote
=>
remote
}
app/views/kaminari/_next_page.html.haml
0 → 100644
View file @
cc043f32
-# Link to the "Next" page
-# available local variables
-# url: url to the next page
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%li
.next
=
link_to_unless
current_page
.
last?
,
raw
(
t
'views.pagination.next'
),
url
,
:rel
=>
'next'
,
:remote
=>
remote
app/views/kaminari/_page.html.haml
0 → 100644
View file @
cc043f32
-# Link showing page number
-# available local variables
-# page: a page object for "this" page
-# url: url to this page
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%li
{
:class
=>
"page#{' active' if page.current?}"
}
=
link_to
page
,
url
,
{
:remote
=>
remote
,
:rel
=>
page
.
next?
?
'next'
:
page
.
prev?
?
'prev'
:
nil
}
app/views/kaminari/_paginator.html.haml
0 → 100644
View file @
cc043f32
-# The container tag
-# available local variables
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
-# paginator: the paginator that renders the pagination tags inside
=
paginator
.
render
do
%div
.pagination
%ul
=
prev_page_tag
unless
current_page
.
first?
-
each_page
do
|
page
|
-
if
page
.
left_outer?
||
page
.
right_outer?
||
page
.
inside_window?
=
page_tag
page
-
elsif
!
page
.
was_truncated?
=
gap_tag
=
next_page_tag
unless
current_page
.
last?
app/views/kaminari/_prev_page.html.haml
0 → 100644
View file @
cc043f32
-# Link to the "Previous" page
-# available local variables
-# url: url to the previous page
-# current_page: a page object for the currently displayed page
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%li
{
:class
=>
"prev"
}
=
link_to_unless
current_page
.
first?
,
raw
(
t
'views.pagination.previous'
),
url
,
:rel
=>
'prev'
,
:remote
=>
remote
app/views/layouts/_app_side.html.haml
View file @
cc043f32
...
...
@@ -4,7 +4,4 @@
=
link_to
"Projects"
,
projects_path
,
:class
=>
"
#{
"active"
if
current_page?
(
projects_path
)
}
"
=
link_to
"Issues"
,
dashboard_issues_path
,
:class
=>
"
#{
"active"
if
current_page?
(
dashboard_issues_path
)
}
"
,
:id
=>
"issues_slide"
=
link_to
"Requests"
,
dashboard_merge_requests_path
,
:class
=>
"
#{
"active"
if
current_page?
(
dashboard_merge_requests_path
)
}
"
,
:id
=>
"merge_requests_slide"
-
if
current_user
.
is_admin?
=
link_to
admin_root_path
,
:class
=>
"admin"
,
:title
=>
"Admin"
do
Admin
=
link_to
"Help"
,
help_path
,
:class
=>
"
#{
"active"
if
controller
.
controller_name
==
"help"
}
"
app/views/layouts/_projects_side.html.haml
View file @
cc043f32
...
...
@@ -4,8 +4,16 @@
You can create at least
=
current_user
.
projects_limit
projects. Click on button to add a new one
=
link_to
new_project_path
,
:class
=>
"btn small"
do
New Project
.alert-actions
=
link_to
new_project_path
,
:class
=>
"btn small"
do
New Project »
-
if
current_user
.
is_admin?
.alert-message.block-message.info
You have administrator privilegies. You can configure application following this button:
.alert-actions
=
link_to
admin_root_path
,
:class
=>
"btn small"
,
:title
=>
"Admin"
do
Visit Admin Area »
-
if
current_user
.
projects
.
count
>
0
%div
.entry
...
...
@@ -18,21 +26,5 @@
=
project
.
name
=
link_to
"More » "
,
projects_path
-#%h5
-#Your Issues:
-#%ul
-#- current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
-#%li
-#= link_to project_issue_path(issue.project, issue) do
-#= truncate issue.title
-#%h5
-#Your Merge Requests:
-#%ul
-#- current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
-#%li
-#= link_to project_merge_request_path(issue.project, issue) do
-#= truncate issue.title
app/views/layouts/admin.html.haml
View file @
cc043f32
...
...
@@ -10,7 +10,6 @@
%aside
=
link_to
"Users"
,
admin_users_path
,
:class
=>
controller
.
controller_name
==
"users"
?
"current"
:
nil
=
link_to
"Projects"
,
admin_projects_path
,
:class
=>
controller
.
controller_name
==
"projects"
?
"current"
:
nil
=
link_to
"Teams"
,
admin_team_members_path
,
:class
=>
controller
.
controller_name
==
"team_members"
?
"current"
:
nil
=
link_to
"Emails"
,
admin_emails_path
,
:class
=>
controller
.
controller_name
==
"mailer"
?
"current"
:
nil
=
link_to
"Resque"
,
"/info/resque"
...
...
app/views/profile/show.html.haml
View file @
cc043f32
...
...
@@ -28,5 +28,6 @@
=
f
.
label
:twitter
.input
=
f
.
text_field
:twitter
=
f
.
submit
'Save'
,
:class
=>
"primary btn"
.actions
=
f
.
submit
'Save'
,
:class
=>
"primary btn"
config/routes.rb
View file @
cc043f32
...
...
@@ -7,14 +7,18 @@ Gitlab::Application.routes.draw do
get
'help'
=>
'help#index'
namespace
:admin
do
resources
:users
resources
:users
do
member
do
put
:team_update
end
end
resources
:projects
,
:constraints
=>
{
:id
=>
/[^\/]+/
}
do
member
do
get
:team
put
:team_update
end
end
resources
:team_members
resources
:team_members
,
:only
=>
[
:edit
,
:update
,
:destroy
]
get
'emails'
,
:to
=>
'mailer#preview'
get
'mailer/preview_note'
get
'mailer/preview_user_new'
...
...
spec/requests/admin/admin_projects_spec.rb
View file @
cc043f32
...
...
@@ -18,7 +18,6 @@ describe "Admin::Projects" do
end
it
"should have projects list"
do
page
.
should
have_content
(
@project
.
code
)
page
.
should
have_content
(
@project
.
name
)
end
end
...
...
@@ -103,4 +102,18 @@ describe "Admin::Projects" do
page
.
should
have_content
(
@project
.
description
)
end
end
describe
"Add new team member"
do
before
do
@new_user
=
Factory
:user
visit
admin_project_path
(
@project
)
end
it
"should create new user"
do
select
@new_user
.
name
,
:from
=>
"user_ids"
expect
{
click_button
"Add"
}.
to
change
{
UsersProject
.
count
}.
by
(
1
)
page
.
should
have_content
@new_user
.
name
current_path
.
should
==
admin_project_path
(
@project
)
end
end
end
spec/requests/admin/admin_users_spec.rb
View file @
cc043f32
...
...
@@ -99,4 +99,18 @@ describe "Admin::Users" do
end
end
end
describe
"Add new project"
do
before
do
@new_project
=
Factory
:project
visit
admin_user_path
(
@user
)
end
it
"should create new user"
do
select
@new_project
.
name
,
:from
=>
"project_ids"
expect
{
click_button
"Add"
}.
to
change
{
UsersProject
.
count
}.
by
(
1
)
page
.
should
have_content
@new_project
.
name
current_path
.
should
==
admin_user_path
(
@user
)
end
end
end
spec/requests/admin/security_spec.rb
View file @
cc043f32
...
...
@@ -13,12 +13,6 @@ describe "Admin::Projects" do
it
{
admin_users_path
.
should
be_denied_for
:visitor
}
end
describe
"GET /admin/team_members"
do
it
{
admin_team_members_path
.
should
be_allowed_for
:admin
}
it
{
admin_team_members_path
.
should
be_denied_for
:user
}
it
{
admin_team_members_path
.
should
be_denied_for
:visitor
}
end
describe
"GET /admin/emails"
do
it
{
admin_emails_path
.
should
be_allowed_for
:admin
}
it
{
admin_emails_path
.
should
be_denied_for
:user
}
...
...
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