Fixed functionals
[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 = Team.memberships(@group)
37     @events = paginate(:action => "show", :id => params[:id]) do
38       filter_paginated(params[:page], 30) do |page|
39         Team.events(@group, page)
40       end
41     end
42   end
43
44   def new
45     @group = Team.new_group
46   end
47
48   def edit
49   end
50
51   def update
52     Team.update_group(@group, params)
53     redirect_to group_path(@group)
54     rescue ActiveRecord::RecordInvalid
55       render :action => 'edit'
56   end
57
58   def create
59     @group = Team.create_group(params, current_user)
60     flash[:success] = I18n.t "groups_controller.group_created"
61     redirect_to group_path(@group)
62   rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotFound
63     render :action => "new"
64   end
65
66   def destroy
67     begin
68       Team.destroy_group(params[:id], current_user)
69       flash[:success] = "The team was deleted"
70       redirect_to groups_path
71     rescue Team::DestroyGroupError => e
72       flash[:error] = e.message
73       redirect_to group_path(params[:id])
74     end
75   end
76
77   # DELETE avatar
78   def avatar
79     Team.delete_avatar(@group)
80     flash[:success] = "The team image was deleted"
81     redirect_to group_path(@group)
82   end
83
84   # TODO: Remove? Don't thing it's used
85   # def auto_complete_for_project_slug
86   #   @projects = filter(Project.find(:all,
87   #     :conditions => ['LOWER(slug) LIKE ?', "%#{params[:project][:slug].downcase}%"],
88   #     :limit => 10))
89   #   render :layout => false
90   # end
91
92   protected
93   def find_group_and_ensure_group_adminship
94     @group = Team.find_by_name!(params[:id])
95     unless admin?(current_user, @group)
96       access_denied and return
97     end
98   end
99 end