Commit eb3e07a509d360922ff52c3634be7770104b0994

Authored by Dmitriy Zaporozhets
1 parent 8bf340f5

Use project owner if no namespace. Restyled team page

app/assets/stylesheets/sections/projects.scss
@@ -94,6 +94,7 @@ @@ -94,6 +94,7 @@
94 } 94 }
95 95
96 input[type="text"] { 96 input[type="text"] {
  97 + @extend .monospace;
97 border: 1px solid #BBB; 98 border: 1px solid #BBB;
98 box-shadow: none; 99 box-shadow: none;
99 margin-left: -1px; 100 margin-left: -1px;
app/models/ability.rb
@@ -18,7 +18,7 @@ class Ability @@ -18,7 +18,7 @@ class Ability
18 # Rules based on role in project 18 # Rules based on role in project
19 if project.master_access_for?(user) 19 if project.master_access_for?(user)
20 # TODO: replace with master rules. 20 # TODO: replace with master rules.
21 - # Only allow project administration for owners 21 + # Only allow project administration for namespace owners
22 rules << project_admin_rules 22 rules << project_admin_rules
23 23
24 elsif project.dev_access_for?(user) 24 elsif project.dev_access_for?(user)
@@ -31,15 +31,20 @@ class Ability @@ -31,15 +31,20 @@ class Ability
31 rules << project_guest_rules 31 rules << project_guest_rules
32 end 32 end
33 33
34 - # If user own project namespace (Ex. group owner or account owner)  
35 - if project.namespace && project.namespace.owner == user  
36 - rules << project_admin_rules 34 + if project.namespace
  35 + # If user own project namespace
  36 + # (Ex. group owner or account owner)
  37 + if project.namespace.owner == user
  38 + rules << project_admin_rules
  39 + end
  40 + else
  41 + # For compatibility with global projects
  42 + # use projects.owner_id
  43 + if project.owner == user
  44 + rules << project_admin_rules
  45 + end
37 end 46 end
38 47
39 - # If user was set as direct project owner  
40 - if project.owner == user  
41 - rules << project_admin_rules  
42 - end  
43 48
44 rules.flatten 49 rules.flatten
45 end 50 end
app/models/project.rb
@@ -292,4 +292,8 @@ class Project &lt; ActiveRecord::Base @@ -292,4 +292,8 @@ class Project &lt; ActiveRecord::Base
292 merge_requests 292 merge_requests
293 end 293 end
294 end 294 end
  295 +
  296 + def namespace_owner
  297 + namespace.try(:owner)
  298 + end
295 end 299 end
app/views/admin/projects/_form.html.haml
@@ -24,10 +24,6 @@ @@ -24,10 +24,6 @@
24 = f.label :namespace_id 24 = f.label :namespace_id
25 .input= f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'} 25 .input= f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'}
26 26
27 - .clearfix  
28 - = f.label :owner_id  
29 - .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}  
30 -  
31 - if project.repo_exists? 27 - if project.repo_exists?
32 .clearfix 28 .clearfix
33 = f.label :default_branch, "Default Branch" 29 = f.label :default_branch, "Default Branch"
app/views/admin/projects/show.html.haml
@@ -28,13 +28,22 @@ @@ -28,13 +28,22 @@
28 %tr 28 %tr
29 %td 29 %td
30 %b 30 %b
  31 + Namespace:
  32 + %td
  33 + - if @project.namespace
  34 + = @project.namespace.human_name
  35 + - else
  36 + Global
  37 + %tr
  38 + %td
  39 + %b
31 Path: 40 Path:
32 %td 41 %td
33 %code= @project.path_to_repo 42 %code= @project.path_to_repo
34 %tr 43 %tr
35 %td 44 %td
36 %b 45 %b
37 - Owner: 46 + Created by:
38 %td 47 %td
39 = @project.owner_name || '(deleted)' 48 = @project.owner_name || '(deleted)'
40 %tr 49 %tr
app/views/groups/people.html.haml
@@ -15,10 +15,6 @@ @@ -15,10 +15,6 @@
15 = image_tag gravatar_icon(user.email, 16), class: "avatar s16" 15 = image_tag gravatar_icon(user.email, 16), class: "avatar s16"
16 %strong= user.name 16 %strong= user.name
17 %span.cgray= user.email 17 %span.cgray= user.email
18 - - if @project  
19 - - if @project.owner == user  
20 - %span.btn.btn-small.disabled.right Project Owner  
21 - - else  
22 - - if @group.owner == user  
23 - %span.btn.btn-small.disabled.right Group Owner 18 + - if @group.owner == user
  19 + %span.btn.btn-small.disabled.right Group Owner
24 20
app/views/layouts/project_resource.html.haml
@@ -4,7 +4,8 @@ @@ -4,7 +4,8 @@
4 %body{class: "#{app_theme} project"} 4 %body{class: "#{app_theme} project"}
5 = render "layouts/flash" 5 = render "layouts/flash"
6 = render "layouts/head_panel", title: @project.name 6 = render "layouts/head_panel", title: @project.name
7 - = render 'shared/no_ssh' 7 + - if can?(current_user, :download_code, @project)
  8 + = render 'shared/no_ssh'
8 .container 9 .container
9 %ul.main_menu 10 %ul.main_menu
10 = nav_link(html_options: {class: "home #{project_tab_class}"}) do 11 = nav_link(html_options: {class: "home #{project_tab_class}"}) do
app/views/projects/empty.html.haml
1 = render 'clone_panel' 1 = render 'clone_panel'
2 2
3 %div.git-empty 3 %div.git-empty
4 - %h4 Git global setup:  
5 - %pre.dark  
6 - = preserve do  
7 - git config --global user.name "#{current_user.name}"  
8 - git config --global user.email "#{current_user.email}" 4 + %fieldset
  5 + %legend Git global setup:
  6 + %pre.dark
  7 + = preserve do
  8 + git config --global user.name "#{current_user.name}"
  9 + git config --global user.email "#{current_user.email}"
9 10
10 - %h4.prepend-top-20 Create Repository  
11 - %pre.dark  
12 - = preserve do  
13 - mkdir #{@project.path}  
14 - cd #{@project.path}  
15 - git init  
16 - touch README  
17 - git add README  
18 - git commit -m 'first commit'  
19 - git remote add origin #{@project.url_to_repo}  
20 - git push -u origin master 11 + %fieldset
  12 + %legend Create Repository
  13 + %pre.dark
  14 + = preserve do
  15 + mkdir #{@project.path}
  16 + cd #{@project.path}
  17 + git init
  18 + touch README
  19 + git add README
  20 + git commit -m 'first commit'
  21 + git remote add origin #{@project.url_to_repo}
  22 + git push -u origin master
21 23
22 - %h4.prepend-top-20 Existing Git Repo?  
23 - %pre.dark  
24 - = preserve do  
25 - cd existing_git_repo  
26 - git remote add origin #{@project.url_to_repo}  
27 - git push -u origin master 24 + %fieldset
  25 + %legend Existing Git Repo?
  26 + %pre.dark
  27 + = preserve do
  28 + cd existing_git_repo
  29 + git remote add origin #{@project.url_to_repo}
  30 + git push -u origin master
28 31
29 - if can? current_user, :admin_project, @project 32 - if can? current_user, :admin_project, @project
30 .prepend-top-20 33 .prepend-top-20
app/views/shared/_clone_panel.html.haml
1 .input-prepend.project_clone_holder 1 .input-prepend.project_clone_holder
2 %button{class: "btn active", :"data-clone" => @project.ssh_url_to_repo} SSH 2 %button{class: "btn active", :"data-clone" => @project.ssh_url_to_repo} SSH
3 %button{class: "btn", :"data-clone" => @project.http_url_to_repo}= Gitlab.config.web_protocol.upcase 3 %button{class: "btn", :"data-clone" => @project.http_url_to_repo}= Gitlab.config.web_protocol.upcase
4 - = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" 4 + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select input-xxlarge"
app/views/team_members/_show.html.haml
1 - user = member.user 1 - user = member.user
2 - allow_admin = can? current_user, :admin_project, @project 2 - allow_admin = can? current_user, :admin_project, @project
3 -%tr{id: dom_id(member), class: "team_member_row user_#{user.id}"}  
4 - %td.span6  
5 - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do  
6 - = image_tag gravatar_icon(user.email, 40), class: "avatar s32"  
7 - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do  
8 - %strong= truncate(user.name, lenght: 40)  
9 - %br  
10 - %small.cgray= user.email 3 +%li.wll{id: dom_id(member), class: "team_member_row user_#{user.id}"}
  4 + .row
  5 + .span6
  6 + = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
  7 + = image_tag gravatar_icon(user.email, 40), class: "avatar s32"
  8 + = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
  9 + %strong= truncate(user.name, lenght: 40)
  10 + %br
  11 + %small.cgray= user.email
11 12
12 - %td.span5  
13 - .right  
14 - - if current_user == user  
15 - %span.btn.disabled This is you!  
16 - - if @project.owner == user  
17 - %span.btn.disabled.success Owner  
18 - - elsif user.blocked  
19 - %span.btn.disabled.blocked Blocked  
20 - - elsif allow_admin  
21 - = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do  
22 - %i.icon-minus.icon-white 13 + .span5.right
  14 + - if allow_admin
  15 + .left
  16 + = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|
  17 + = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
  18 + .right
  19 + - if current_user == user
  20 + %span.btn.disabled This is you!
  21 + - if @project.namespace_owner == user
  22 + %span.btn.disabled.success Owner
  23 + - elsif user.blocked
  24 + %span.btn.disabled.blocked Blocked
  25 + - elsif allow_admin
  26 + = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do
  27 + %i.icon-minus.icon-white
23 28
24 - - if allow_admin  
25 - = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|  
26 - = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"  
app/views/team_members/_team.html.haml
1 - grouper_project_members(@project).each do |access, members| 1 - grouper_project_members(@project).each do |access, members|
2 - %table.low  
3 - %thead  
4 - %tr  
5 - %th.span7  
6 - = Project.access_options.key(access).pluralize  
7 - %th  
8 - %tbody 2 + %fieldset
  3 + %legend
  4 + = Project.access_options.key(access).pluralize
  5 + %small= members.size
  6 + %ul.unstyled
9 - members.each do |up| 7 - members.each do |up|
10 = render(partial: 'team_members/show', locals: {member: up}) 8 = render(partial: 'team_members/show', locals: {member: up})
11 9
app/views/team_members/index.html.haml
1 = render "projects/project_head" 1 = render "projects/project_head"
2 %h3.page_title 2 %h3.page_title
3 Team Members 3 Team Members
4 - %small (#{@project.users_projects.count})  
5 -  
6 -- if can? current_user, :admin_team_member, @project  
7 - %p.slead 4 + (#{@project.users_projects.count})
  5 + %small
8 Read more about project permissions 6 Read more about project permissions
9 %strong= link_to "here", help_permissions_path, class: "vlink" 7 %strong= link_to "here", help_permissions_path, class: "vlink"
10 8
  9 + - if can? current_user, :admin_team_member, @project
11 %span.right 10 %span.right
12 = link_to import_project_team_members_path(@project), class: "btn small grouped", title: "Import team from another project" do 11 = link_to import_project_team_members_path(@project), class: "btn small grouped", title: "Import team from another project" do
13 Import team from another project 12 Import team from another project
14 = link_to new_project_team_member_path(@project), class: "btn success small grouped", title: "New Team Member" do 13 = link_to new_project_team_member_path(@project), class: "btn success small grouped", title: "New Team Member" do
15 New Team Member 14 New Team Member
  15 +%hr
  16 +
16 17
17 - .clearfix  
18 -= render partial: "team_members/team", locals: {project: @project} 18 +.clearfix
  19 +%div.team-table
  20 + = render partial: "team_members/team", locals: {project: @project}
app/views/tree/_head.html.haml
@@ -4,4 +4,4 @@ @@ -4,4 +4,4 @@
4 = nav_link(controller: :tree) do 4 = nav_link(controller: :tree) do
5 = link_to 'Source', project_tree_path(@project, @ref) 5 = link_to 'Source', project_tree_path(@project, @ref)
6 %li.right 6 %li.right
7 - = render "shared/clone_panel"  
8 \ No newline at end of file 7 \ No newline at end of file
  8 + = render "shared/clone_panel"