Commit f6c482c0 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

User can create group

parent d9027df5
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 ...@@ -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 ...@@ -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 @@ ...@@ -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
......
%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
...@@ -17,7 +17,7 @@ ...@@ -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 @@ ...@@ -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.
.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 @@ ...@@ -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 @@ ...@@ -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 ...@@ -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
......
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 ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment