Abstracted the Group concept behind a Team api.
[gitorious:mainline.git] / app / controllers / groups_controller.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012 Gitorious AS
4 #   Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
5 #
6 #   This program is free software: you can redistribute it and/or modify
7 #   it under the terms of the GNU Affero General Public License as published by
8 #   the Free Software Foundation, either version 3 of the License, or
9 #   (at your option) any later version.
10 #
11 #   This program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU Affero General Public License for more details.
15 #
16 #   You should have received a copy of the GNU Affero General Public License
17 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #++
19
20 class GroupsController < ApplicationController
21   before_filter :login_required, :except => [:index, :show]
22   before_filter :find_group_and_ensure_group_adminship, :only => [:edit, :update, :avatar]
23   renders_in_global_context
24
25   def index
26     @groups = paginate(:action => "index") do
27       Team.paginate_all(params[:page])
28     end
29   end
30
31   def show
32     @group = Team.find_by_name!(params[:id])
33     @mainlines = filter(@group.repositories.mainlines)
34     @clones = filter(@group.repositories.clones)
35     @projects = filter(@group.projects)
36     @memberships = @group.memberships.find(:all, :include => [:user, :role])
37
38     @events = paginate(:action => "show", :id => params[:id]) do
39       filter_paginated(params[:page], 30) do |page|
40         @group.events(page)
41       end
42     end
43   end
44
45   def new
46     @group = Team.new_group
47   end
48
49   def edit
50   end
51
52   def update
53     Team.update_group(@group, params[:group][:description], params[:group][:avatar])
54     redirect_to group_path(@group)
55     rescue ActiveRecord::RecordInvalid
56       render :action => 'edit'
57   end
58
59   def create
60     @group = Team.create_group(params[:group], current_user)
61     flash[:success] = I18n.t "groups_controller.group_created"
62     redirect_to group_path(@group)
63   rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotFound
64     render :action => "new"
65   end
66
67   def destroy
68     begin
69       Team.destroy_group(params[:id], current_user)
70       flash[:success] = "The team was deleted"
71       redirect_to groups_path
72     rescue Team::DestroyGroupError => e
73       flash[:error] = e.message
74       redirect_to group_path(params[:id])
75     end
76   end
77
78   # DELETE avatar
79   def avatar
80     Team.delete_avatar(@group)
81     flash[:success] = "The team image was deleted"
82     redirect_to group_path(@group)
83   end
84
85   # TODO: Remove? Don't thing it's used
86   # def auto_complete_for_project_slug
87   #   @projects = filter(Project.find(:all,
88   #     :conditions => ['LOWER(slug) LIKE ?', "%#{params[:project][:slug].downcase}%"],
89   #     :limit => 10))
90   #   render :layout => false
91   # end
92
93   protected
94   def find_group_and_ensure_group_adminship
95     @group = Team.find_by_name!(params[:id])
96     unless admin?(current_user, @group)
97       access_denied and return
98     end
99   end
100 end