Use project owner if no namespace. Restyled team page
This commit is contained in:
parent
8bf340f568
commit
eb3e07a509
13 changed files with 96 additions and 79 deletions
|
@ -94,6 +94,7 @@
|
|||
}
|
||||
|
||||
input[type="text"] {
|
||||
@extend .monospace;
|
||||
border: 1px solid #BBB;
|
||||
box-shadow: none;
|
||||
margin-left: -1px;
|
||||
|
|
|
@ -18,7 +18,7 @@ class Ability
|
|||
# Rules based on role in project
|
||||
if project.master_access_for?(user)
|
||||
# TODO: replace with master rules.
|
||||
# Only allow project administration for owners
|
||||
# Only allow project administration for namespace owners
|
||||
rules << project_admin_rules
|
||||
|
||||
elsif project.dev_access_for?(user)
|
||||
|
@ -31,15 +31,20 @@ class Ability
|
|||
rules << project_guest_rules
|
||||
end
|
||||
|
||||
# If user own project namespace (Ex. group owner or account owner)
|
||||
if project.namespace && project.namespace.owner == user
|
||||
rules << project_admin_rules
|
||||
if project.namespace
|
||||
# If user own project namespace
|
||||
# (Ex. group owner or account owner)
|
||||
if project.namespace.owner == user
|
||||
rules << project_admin_rules
|
||||
end
|
||||
else
|
||||
# For compatibility with global projects
|
||||
# use projects.owner_id
|
||||
if project.owner == user
|
||||
rules << project_admin_rules
|
||||
end
|
||||
end
|
||||
|
||||
# If user was set as direct project owner
|
||||
if project.owner == user
|
||||
rules << project_admin_rules
|
||||
end
|
||||
|
||||
rules.flatten
|
||||
end
|
||||
|
|
|
@ -292,4 +292,8 @@ class Project < ActiveRecord::Base
|
|||
merge_requests
|
||||
end
|
||||
end
|
||||
|
||||
def namespace_owner
|
||||
namespace.try(:owner)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -24,10 +24,6 @@
|
|||
= f.label :namespace_id
|
||||
.input= f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'}
|
||||
|
||||
.clearfix
|
||||
= f.label :owner_id
|
||||
.input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
|
||||
|
||||
- if project.repo_exists?
|
||||
.clearfix
|
||||
= f.label :default_branch, "Default Branch"
|
||||
|
|
|
@ -25,6 +25,15 @@
|
|||
Name:
|
||||
%td
|
||||
= @project.name
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
Namespace:
|
||||
%td
|
||||
- if @project.namespace
|
||||
= @project.namespace.human_name
|
||||
- else
|
||||
Global
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
|
@ -34,7 +43,7 @@
|
|||
%tr
|
||||
%td
|
||||
%b
|
||||
Owner:
|
||||
Created by:
|
||||
%td
|
||||
= @project.owner_name || '(deleted)'
|
||||
%tr
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
= image_tag gravatar_icon(user.email, 16), class: "avatar s16"
|
||||
%strong= user.name
|
||||
%span.cgray= user.email
|
||||
- if @project
|
||||
- if @project.owner == user
|
||||
%span.btn.btn-small.disabled.right Project Owner
|
||||
- else
|
||||
- if @group.owner == user
|
||||
%span.btn.btn-small.disabled.right Group Owner
|
||||
- if @group.owner == user
|
||||
%span.btn.btn-small.disabled.right Group Owner
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
%body{class: "#{app_theme} project"}
|
||||
= render "layouts/flash"
|
||||
= render "layouts/head_panel", title: @project.name
|
||||
= render 'shared/no_ssh'
|
||||
- if can?(current_user, :download_code, @project)
|
||||
= render 'shared/no_ssh'
|
||||
.container
|
||||
%ul.main_menu
|
||||
= nav_link(html_options: {class: "home #{project_tab_class}"}) do
|
||||
|
|
|
@ -1,30 +1,33 @@
|
|||
= render 'clone_panel'
|
||||
|
||||
%div.git-empty
|
||||
%h4 Git global setup:
|
||||
%pre.dark
|
||||
= preserve do
|
||||
git config --global user.name "#{current_user.name}"
|
||||
git config --global user.email "#{current_user.email}"
|
||||
%fieldset
|
||||
%legend Git global setup:
|
||||
%pre.dark
|
||||
= preserve do
|
||||
git config --global user.name "#{current_user.name}"
|
||||
git config --global user.email "#{current_user.email}"
|
||||
|
||||
%h4.prepend-top-20 Create Repository
|
||||
%pre.dark
|
||||
= preserve do
|
||||
mkdir #{@project.path}
|
||||
cd #{@project.path}
|
||||
git init
|
||||
touch README
|
||||
git add README
|
||||
git commit -m 'first commit'
|
||||
git remote add origin #{@project.url_to_repo}
|
||||
git push -u origin master
|
||||
%fieldset
|
||||
%legend Create Repository
|
||||
%pre.dark
|
||||
= preserve do
|
||||
mkdir #{@project.path}
|
||||
cd #{@project.path}
|
||||
git init
|
||||
touch README
|
||||
git add README
|
||||
git commit -m 'first commit'
|
||||
git remote add origin #{@project.url_to_repo}
|
||||
git push -u origin master
|
||||
|
||||
%h4.prepend-top-20 Existing Git Repo?
|
||||
%pre.dark
|
||||
= preserve do
|
||||
cd existing_git_repo
|
||||
git remote add origin #{@project.url_to_repo}
|
||||
git push -u origin master
|
||||
%fieldset
|
||||
%legend Existing Git Repo?
|
||||
%pre.dark
|
||||
= preserve do
|
||||
cd existing_git_repo
|
||||
git remote add origin #{@project.url_to_repo}
|
||||
git push -u origin master
|
||||
|
||||
- if can? current_user, :admin_project, @project
|
||||
.prepend-top-20
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.input-prepend.project_clone_holder
|
||||
%button{class: "btn active", :"data-clone" => @project.ssh_url_to_repo} SSH
|
||||
%button{class: "btn", :"data-clone" => @project.http_url_to_repo}= Gitlab.config.web_protocol.upcase
|
||||
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
|
||||
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select input-xxlarge"
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
- user = member.user
|
||||
- allow_admin = can? current_user, :admin_project, @project
|
||||
%tr{id: dom_id(member), class: "team_member_row user_#{user.id}"}
|
||||
%td.span6
|
||||
= link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
|
||||
= image_tag gravatar_icon(user.email, 40), class: "avatar s32"
|
||||
= link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
|
||||
%strong= truncate(user.name, lenght: 40)
|
||||
%br
|
||||
%small.cgray= user.email
|
||||
%li.wll{id: dom_id(member), class: "team_member_row user_#{user.id}"}
|
||||
.row
|
||||
.span6
|
||||
= link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
|
||||
= image_tag gravatar_icon(user.email, 40), class: "avatar s32"
|
||||
= link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
|
||||
%strong= truncate(user.name, lenght: 40)
|
||||
%br
|
||||
%small.cgray= user.email
|
||||
|
||||
%td.span5
|
||||
.right
|
||||
- if current_user == user
|
||||
%span.btn.disabled This is you!
|
||||
- if @project.owner == user
|
||||
%span.btn.disabled.success Owner
|
||||
- elsif user.blocked
|
||||
%span.btn.disabled.blocked Blocked
|
||||
- elsif allow_admin
|
||||
= 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
|
||||
%i.icon-minus.icon-white
|
||||
.span5.right
|
||||
- if allow_admin
|
||||
.left
|
||||
= form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|
|
||||
= f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
|
||||
.right
|
||||
- if current_user == user
|
||||
%span.btn.disabled This is you!
|
||||
- if @project.namespace_owner == user
|
||||
%span.btn.disabled.success Owner
|
||||
- elsif user.blocked
|
||||
%span.btn.disabled.blocked Blocked
|
||||
- elsif allow_admin
|
||||
= 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
|
||||
%i.icon-minus.icon-white
|
||||
|
||||
- if allow_admin
|
||||
= form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|
|
||||
= f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
- grouper_project_members(@project).each do |access, members|
|
||||
%table.low
|
||||
%thead
|
||||
%tr
|
||||
%th.span7
|
||||
= Project.access_options.key(access).pluralize
|
||||
%th
|
||||
%tbody
|
||||
%fieldset
|
||||
%legend
|
||||
= Project.access_options.key(access).pluralize
|
||||
%small= members.size
|
||||
%ul.unstyled
|
||||
- members.each do |up|
|
||||
= render(partial: 'team_members/show', locals: {member: up})
|
||||
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
= render "projects/project_head"
|
||||
%h3.page_title
|
||||
Team Members
|
||||
%small (#{@project.users_projects.count})
|
||||
|
||||
- if can? current_user, :admin_team_member, @project
|
||||
%p.slead
|
||||
(#{@project.users_projects.count})
|
||||
%small
|
||||
Read more about project permissions
|
||||
%strong= link_to "here", help_permissions_path, class: "vlink"
|
||||
|
||||
- if can? current_user, :admin_team_member, @project
|
||||
%span.right
|
||||
= link_to import_project_team_members_path(@project), class: "btn small grouped", title: "Import team from another project" do
|
||||
Import team from another project
|
||||
= link_to new_project_team_member_path(@project), class: "btn success small grouped", title: "New Team Member" do
|
||||
New Team Member
|
||||
%hr
|
||||
|
||||
.clearfix
|
||||
= render partial: "team_members/team", locals: {project: @project}
|
||||
|
||||
.clearfix
|
||||
%div.team-table
|
||||
= render partial: "team_members/team", locals: {project: @project}
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
= nav_link(controller: :tree) do
|
||||
= link_to 'Source', project_tree_path(@project, @ref)
|
||||
%li.right
|
||||
= render "shared/clone_panel"
|
||||
= render "shared/clone_panel"
|
||||
|
|
Loading…
Reference in a new issue