User can create group

This commit is contained in:
Dmitriy Zaporozhets 2013-01-24 17:47:09 +02:00
parent d9027df5b5
commit f6c482c06f
12 changed files with 117 additions and 31 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View 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"
&nbsp;
= 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

View File

@ -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

View File

@ -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.

View 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

View File

@ -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'

View File

@ -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

View 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

View File

@ -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