User can create group
This commit is contained in:
parent
d9027df5b5
commit
f6c482c06f
12 changed files with 117 additions and 31 deletions
|
@ -1,12 +1,30 @@
|
||||||
class GroupsController < ApplicationController
|
class GroupsController < ApplicationController
|
||||||
respond_to :html
|
respond_to :html
|
||||||
layout 'group'
|
layout 'group', except: [:new, :create]
|
||||||
|
|
||||||
before_filter :group
|
before_filter :group, except: [:new, :create]
|
||||||
before_filter :projects
|
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :authorize_read_group!
|
before_filter :authorize_read_group!, except: [:new, :create]
|
||||||
|
|
||||||
|
# Load group projects
|
||||||
|
before_filter :projects, except: [:new, :create]
|
||||||
|
|
||||||
|
def new
|
||||||
|
@group = Group.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@group = Group.new(params[:group])
|
||||||
|
@group.path = @group.name.dup.parameterize if @group.name
|
||||||
|
@group.owner = current_user
|
||||||
|
|
||||||
|
if @group.save
|
||||||
|
redirect_to @group, notice: 'Group was successfully created.'
|
||||||
|
else
|
||||||
|
render action: "new"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
|
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
|
||||||
|
|
|
@ -39,7 +39,12 @@ module TabHelper
|
||||||
# Returns a list item element String
|
# Returns a list item element String
|
||||||
def nav_link(options = {}, &block)
|
def nav_link(options = {}, &block)
|
||||||
if path = options.delete(:path)
|
if path = options.delete(:path)
|
||||||
c, a, _ = path.split('#')
|
if path.respond_to?(:each)
|
||||||
|
c = path.map { |p| p.split('#').first }
|
||||||
|
a = path.map { |p| p.split('#').last }
|
||||||
|
else
|
||||||
|
c, a, _ = path.split('#')
|
||||||
|
end
|
||||||
else
|
else
|
||||||
c = options.delete(:controller)
|
c = options.delete(:controller)
|
||||||
a = options.delete(:action)
|
a = options.delete(:action)
|
||||||
|
|
|
@ -220,7 +220,7 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_create_group?
|
def can_create_group?
|
||||||
is_admin?
|
can_create_project?
|
||||||
end
|
end
|
||||||
|
|
||||||
def abilities
|
def abilities
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
(#{groups.count})
|
(#{groups.count})
|
||||||
- if current_user.can_create_group?
|
- if current_user.can_create_group?
|
||||||
%span.right
|
%span.right
|
||||||
= link_to new_admin_group_path, class: "btn very_small info" do
|
= link_to new_group_path, class: "btn very_small info" do
|
||||||
%i.icon-plus
|
%i.icon-plus
|
||||||
New Group
|
New Group
|
||||||
%ul.well-list
|
%ul.well-list
|
||||||
|
|
21
app/views/groups/new.html.haml
Normal file
21
app/views/groups/new.html.haml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
%h3.page_title New Group
|
||||||
|
%hr
|
||||||
|
= form_for @group do |f|
|
||||||
|
- if @group.errors.any?
|
||||||
|
.alert-message.block-message.error
|
||||||
|
%span= @group.errors.full_messages.first
|
||||||
|
.clearfix
|
||||||
|
= f.label :name do
|
||||||
|
Group name is
|
||||||
|
.input
|
||||||
|
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||||
|
|
||||||
|
= f.submit 'Create group', class: "btn primary"
|
||||||
|
%hr
|
||||||
|
.padded
|
||||||
|
%ul
|
||||||
|
%li Group is kind of directory for several projects
|
||||||
|
%li All created groups are private
|
||||||
|
%li People within a group see only projects they have access to
|
||||||
|
%li All projects of group will be stored in group directory
|
||||||
|
%li You will be able to move existing projects into group
|
|
@ -17,7 +17,7 @@
|
||||||
= link_to new_project_path, title: "Create New Project", class: 'has_bottom_tooltip', 'data-original-title' => 'New project' do
|
= link_to new_project_path, title: "Create New Project", class: 'has_bottom_tooltip', 'data-original-title' => 'New project' do
|
||||||
%i.icon-plus
|
%i.icon-plus
|
||||||
%li
|
%li
|
||||||
= link_to profile_path, title: "Your Profile", class: 'has_bottom_tooltip', 'data-original-title' => 'Your profile' do
|
= link_to profile_path, title: "My Profile", class: 'has_bottom_tooltip', 'data-original-title' => 'Your profile' do
|
||||||
%i.icon-user
|
%i.icon-user
|
||||||
%li.separator
|
%li.separator
|
||||||
%li
|
%li
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
%span Namespace
|
%span Namespace
|
||||||
.input
|
.input
|
||||||
= f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'}
|
= f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'}
|
||||||
|
- elsif current_user.can_create_group?
|
||||||
|
.clearfix
|
||||||
|
.input.light
|
||||||
|
Need a group for several projects?
|
||||||
|
= link_to new_group_path, class: "btn very_small" do
|
||||||
|
Create a group
|
||||||
%hr
|
%hr
|
||||||
%p.padded
|
%p.padded
|
||||||
New projects are private by default. You choose who can see the project and commit to repository.
|
New projects are private by default. You choose who can see the project and commit to repository.
|
||||||
|
|
23
app/views/users/_profile.html.haml
Normal file
23
app/views/users/_profile.html.haml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.ui-box
|
||||||
|
%h5.title
|
||||||
|
Profile
|
||||||
|
%ul.well-list
|
||||||
|
%li
|
||||||
|
%strong Email
|
||||||
|
%span.right= mail_to @user.email
|
||||||
|
- unless @user.skype.blank?
|
||||||
|
%li
|
||||||
|
%strong Skype
|
||||||
|
%span.right= @user.skype
|
||||||
|
- unless @user.linkedin.blank?
|
||||||
|
%li
|
||||||
|
%strong LinkedIn
|
||||||
|
%span.right= @user.linkedin
|
||||||
|
- unless @user.twitter.blank?
|
||||||
|
%li
|
||||||
|
%strong Twitter
|
||||||
|
%span.right= @user.twitter
|
||||||
|
- unless @user.bio.blank?
|
||||||
|
%li
|
||||||
|
%strong Bio
|
||||||
|
%span.right= @user.bio
|
|
@ -3,6 +3,11 @@
|
||||||
%h3.page_title
|
%h3.page_title
|
||||||
= image_tag gravatar_icon(@user.email, 90), class: "avatar s90"
|
= image_tag gravatar_icon(@user.email, 90), class: "avatar s90"
|
||||||
= @user.name
|
= @user.name
|
||||||
|
- if @user == current_user
|
||||||
|
.right
|
||||||
|
= link_to profile_path, class: 'btn small' do
|
||||||
|
%i.icon-edit
|
||||||
|
Edit Profile
|
||||||
%br
|
%br
|
||||||
%small @#{@user.username}
|
%small @#{@user.username}
|
||||||
%br
|
%br
|
||||||
|
@ -12,26 +17,5 @@
|
||||||
%h5 Recent events
|
%h5 Recent events
|
||||||
= render @events
|
= render @events
|
||||||
.span4
|
.span4
|
||||||
.ui-box
|
= render 'profile'
|
||||||
%h5.title Profile
|
|
||||||
%ul.well-list
|
|
||||||
%li
|
|
||||||
%strong Email
|
|
||||||
%span.right= mail_to @user.email
|
|
||||||
- unless @user.skype.blank?
|
|
||||||
%li
|
|
||||||
%strong Skype
|
|
||||||
%span.right= @user.skype
|
|
||||||
- unless @user.linkedin.blank?
|
|
||||||
%li
|
|
||||||
%strong LinkedIn
|
|
||||||
%span.right= @user.linkedin
|
|
||||||
- unless @user.twitter.blank?
|
|
||||||
%li
|
|
||||||
%strong Twitter
|
|
||||||
%span.right= @user.twitter
|
|
||||||
- unless @user.bio.blank?
|
|
||||||
%li
|
|
||||||
%strong Bio
|
|
||||||
%span.right= @user.bio
|
|
||||||
= render 'projects'
|
= render 'projects'
|
||||||
|
|
|
@ -112,7 +112,7 @@ Gitlab::Application.routes.draw do
|
||||||
#
|
#
|
||||||
# Groups Area
|
# Groups Area
|
||||||
#
|
#
|
||||||
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show] do
|
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show, :new, :create] do
|
||||||
member do
|
member do
|
||||||
get :issues
|
get :issues
|
||||||
get :merge_requests
|
get :merge_requests
|
||||||
|
|
11
features/group/create_group.feature
Normal file
11
features/group/create_group.feature
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Feature: Groups
|
||||||
|
Background:
|
||||||
|
Given I sign in as a user
|
||||||
|
|
||||||
|
Scenario: Create a group from dasboard
|
||||||
|
Given I have group with projects
|
||||||
|
And I visit dashboard page
|
||||||
|
When I click new group link
|
||||||
|
And submit form with new group info
|
||||||
|
Then I should be redirected to group page
|
||||||
|
And I should see newly created group
|
|
@ -64,6 +64,24 @@ class Groups < Spinach::FeatureSteps
|
||||||
author: current_user
|
author: current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
When 'I click new group link' do
|
||||||
|
click_link "New Group"
|
||||||
|
end
|
||||||
|
|
||||||
|
And 'submit form with new group info' do
|
||||||
|
fill_in 'group_name', :with => 'Samurai'
|
||||||
|
click_button "Create group"
|
||||||
|
end
|
||||||
|
|
||||||
|
Then 'I should see newly created group' do
|
||||||
|
page.should have_content "Samurai"
|
||||||
|
page.should have_content "You will only see events from projects in this group"
|
||||||
|
end
|
||||||
|
|
||||||
|
Then 'I should be redirected to group page' do
|
||||||
|
current_path.should == group_path(Group.last)
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def current_group
|
def current_group
|
||||||
|
|
Loading…
Reference in a new issue