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
|
||||
respond_to :html
|
||||
layout 'group'
|
||||
layout 'group', except: [:new, :create]
|
||||
|
||||
before_filter :group
|
||||
before_filter :projects
|
||||
before_filter :group, except: [:new, :create]
|
||||
|
||||
# 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
|
||||
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
|
||||
|
|
|
@ -39,7 +39,12 @@ module TabHelper
|
|||
# Returns a list item element String
|
||||
def nav_link(options = {}, &block)
|
||||
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
|
||||
c = options.delete(:controller)
|
||||
a = options.delete(:action)
|
||||
|
|
|
@ -220,7 +220,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def can_create_group?
|
||||
is_admin?
|
||||
can_create_project?
|
||||
end
|
||||
|
||||
def abilities
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
(#{groups.count})
|
||||
- if current_user.can_create_group?
|
||||
%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
|
||||
New Group
|
||||
%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
|
||||
%i.icon-plus
|
||||
%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
|
||||
%li.separator
|
||||
%li
|
||||
|
|
|
@ -15,6 +15,12 @@
|
|||
%span Namespace
|
||||
.input
|
||||
= 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
|
||||
%p.padded
|
||||
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
|
||||
= image_tag gravatar_icon(@user.email, 90), class: "avatar s90"
|
||||
= @user.name
|
||||
- if @user == current_user
|
||||
.right
|
||||
= link_to profile_path, class: 'btn small' do
|
||||
%i.icon-edit
|
||||
Edit Profile
|
||||
%br
|
||||
%small @#{@user.username}
|
||||
%br
|
||||
|
@ -12,26 +17,5 @@
|
|||
%h5 Recent events
|
||||
= render @events
|
||||
.span4
|
||||
.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
|
||||
= render 'profile'
|
||||
= render 'projects'
|
||||
|
|
|
@ -112,7 +112,7 @@ Gitlab::Application.routes.draw do
|
|||
#
|
||||
# Groups Area
|
||||
#
|
||||
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show] do
|
||||
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show, :new, :create] do
|
||||
member do
|
||||
get :issues
|
||||
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
|
||||
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
|
||||
|
||||
def current_group
|
||||
|
|
Loading…
Reference in a new issue