Admin area improved
This commit is contained in:
parent
a769204ff4
commit
cc043f32d8
|
@ -7,5 +7,5 @@
|
|||
*= require jquery-ui/jquery.tagify
|
||||
*= require chosen
|
||||
*= require_self
|
||||
*= require common
|
||||
*= require main
|
||||
*/
|
||||
|
|
|
@ -1,50 +1,3 @@
|
|||
@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;
|
||||
|
||||
@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";
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
||||
|
||||
/** CODE HIGHTLIGHT **/
|
||||
@import "highlight.css.scss";
|
||||
@import "highlight.black.css.scss";
|
||||
-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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
#issue_assignee_id {
|
||||
width:300px;
|
||||
}
|
64
app/assets/stylesheets/main.scss
Normal file
64
app/assets/stylesheets/main.scss
Normal file
|
@ -0,0 +1,64 @@
|
|||
@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";
|
||||
|
||||
|
|
@ -201,3 +201,7 @@ input.git_clone_url {
|
|||
width:60px;
|
||||
}
|
||||
}
|
||||
|
||||
#issue_assignee_id {
|
||||
width:300px;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
= 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();
|
||||
})
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
%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 => ""
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%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"
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
- 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,28 +70,9 @@
|
|||
%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 }
|
||||
.actions
|
||||
= 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
|
||||
|
||||
:css
|
||||
form select {
|
||||
width:150px;
|
||||
|
|
|
@ -1,33 +1,23 @@
|
|||
= 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] }
|
||||
|
||||
.span-6
|
||||
%b Project Access:
|
||||
.span-6
|
||||
.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 Repository Access:
|
||||
.span-6
|
||||
.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 {
|
||||
|
|
|
@ -1,6 +1,19 @@
|
|||
= 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'
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
- @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"
|
|
@ -1,6 +0,0 @@
|
|||
%h1 New team member
|
||||
|
||||
= render 'form'
|
||||
|
||||
%br
|
||||
= link_to 'Back', admin_team_members_path
|
|
@ -1,26 +0,0 @@
|
|||
#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
|
|
@ -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"
|
||||
- if @admin_user.new_record?
|
||||
= link_to 'Cancel', admin_users_path, :class => "btn"
|
||||
- else
|
||||
= link_to 'Cancel', admin_user_path(@admin_user), :class => "btn"
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
%h3= @admin_user.name
|
||||
%hr
|
||||
= render 'form'
|
||||
|
||||
%br
|
||||
= link_to 'Back', admin_users_path, :class => ""
|
||||
|
|
||||
= link_to 'Show', [:admin, @admin_user], :class => ""
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
%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"
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
%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,18 +43,14 @@
|
|||
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.round-borders
|
||||
%table.zebra-striped
|
||||
%tr
|
||||
%thead
|
||||
%th Name
|
||||
%th Added
|
||||
%th Project Access
|
||||
%th Repository Access
|
||||
%th
|
||||
|
@ -60,10 +60,40 @@
|
|||
- project = tm.project
|
||||
%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
|
||||
%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"
|
||||
|
||||
= form_tag team_update_admin_user_path(@admin_user), :class => "bulk_import", :method => :put do
|
||||
%table
|
||||
%thead
|
||||
%tr
|
||||
%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"
|
||||
|
|
9
app/views/kaminari/_first_page.html.haml
Normal file
9
app/views/kaminari/_first_page.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
-# 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
|
8
app/views/kaminari/_gap.html.haml
Normal file
8
app/views/kaminari/_gap.html.haml
Normal file
|
@ -0,0 +1,8 @@
|
|||
-# 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')
|
9
app/views/kaminari/_last_page.html.haml
Normal file
9
app/views/kaminari/_last_page.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
-# 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}
|
9
app/views/kaminari/_next_page.html.haml
Normal file
9
app/views/kaminari/_next_page.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
-# 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
|
10
app/views/kaminari/_page.html.haml
Normal file
10
app/views/kaminari/_page.html.haml
Normal file
|
@ -0,0 +1,10 @@
|
|||
-# 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}
|
17
app/views/kaminari/_paginator.html.haml
Normal file
17
app/views/kaminari/_paginator.html.haml
Normal file
|
@ -0,0 +1,17 @@
|
|||
-# 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?
|
9
app/views/kaminari/_prev_page.html.haml
Normal file
9
app/views/kaminari/_prev_page.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
-# 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
|
|
@ -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"}"
|
||||
|
|
|
@ -4,8 +4,16 @@
|
|||
You can create at least
|
||||
= current_user.projects_limit
|
||||
projects. Click on button to add a new one
|
||||
.alert-actions
|
||||
= link_to new_project_path, :class => "btn small" do
|
||||
New Project
|
||||
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
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -28,5 +28,6 @@
|
|||
= f.label :twitter
|
||||
.input= f.text_field :twitter
|
||||
|
||||
.actions
|
||||
= f.submit 'Save', :class => "primary btn"
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
||||
|
|
Loading…
Reference in a new issue