Chris@0: # Redmine - project management software Chris@0: # Copyright (C) 2006-2009 Jean-Philippe Lang Chris@0: # Chris@0: # This program is free software; you can redistribute it and/or Chris@0: # modify it under the terms of the GNU General Public License Chris@0: # as published by the Free Software Foundation; either version 2 Chris@0: # of the License, or (at your option) any later version. Chris@0: # Chris@0: # This program is distributed in the hope that it will be useful, Chris@0: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@0: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@0: # GNU General Public License for more details. Chris@0: # Chris@0: # You should have received a copy of the GNU General Public License Chris@0: # along with this program; if not, write to the Free Software Chris@0: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@0: Chris@0: class GroupsController < ApplicationController Chris@0: layout 'admin' Chris@0: Chris@0: before_filter :require_admin Chris@0: Chris@0: helper :custom_fields Chris@0: Chris@0: # GET /groups Chris@0: # GET /groups.xml Chris@0: def index Chris@0: @groups = Group.find(:all, :order => 'lastname') Chris@0: Chris@0: respond_to do |format| Chris@0: format.html # index.html.erb Chris@0: format.xml { render :xml => @groups } Chris@0: end Chris@0: end Chris@0: Chris@0: # GET /groups/1 Chris@0: # GET /groups/1.xml Chris@0: def show Chris@0: @group = Group.find(params[:id]) Chris@0: Chris@0: respond_to do |format| Chris@0: format.html # show.html.erb Chris@0: format.xml { render :xml => @group } Chris@0: end Chris@0: end Chris@0: Chris@0: # GET /groups/new Chris@0: # GET /groups/new.xml Chris@0: def new Chris@0: @group = Group.new Chris@0: Chris@0: respond_to do |format| Chris@0: format.html # new.html.erb Chris@0: format.xml { render :xml => @group } Chris@0: end Chris@0: end Chris@0: Chris@0: # GET /groups/1/edit Chris@0: def edit Chris@0: @group = Group.find(params[:id], :include => :projects) Chris@0: end Chris@0: Chris@0: # POST /groups Chris@0: # POST /groups.xml Chris@0: def create Chris@0: @group = Group.new(params[:group]) Chris@0: Chris@0: respond_to do |format| Chris@0: if @group.save Chris@0: flash[:notice] = l(:notice_successful_create) Chris@0: format.html { redirect_to(groups_path) } Chris@0: format.xml { render :xml => @group, :status => :created, :location => @group } Chris@0: else Chris@0: format.html { render :action => "new" } Chris@0: format.xml { render :xml => @group.errors, :status => :unprocessable_entity } Chris@0: end Chris@0: end Chris@0: end Chris@0: Chris@0: # PUT /groups/1 Chris@0: # PUT /groups/1.xml Chris@0: def update Chris@0: @group = Group.find(params[:id]) Chris@0: Chris@0: respond_to do |format| Chris@0: if @group.update_attributes(params[:group]) Chris@0: flash[:notice] = l(:notice_successful_update) Chris@0: format.html { redirect_to(groups_path) } Chris@0: format.xml { head :ok } Chris@0: else Chris@0: format.html { render :action => "edit" } Chris@0: format.xml { render :xml => @group.errors, :status => :unprocessable_entity } Chris@0: end Chris@0: end Chris@0: end Chris@0: Chris@0: # DELETE /groups/1 Chris@0: # DELETE /groups/1.xml Chris@0: def destroy Chris@0: @group = Group.find(params[:id]) Chris@0: @group.destroy Chris@0: Chris@0: respond_to do |format| Chris@0: format.html { redirect_to(groups_url) } Chris@0: format.xml { head :ok } Chris@0: end Chris@0: end Chris@0: Chris@0: def add_users Chris@0: @group = Group.find(params[:id]) Chris@0: users = User.find_all_by_id(params[:user_ids]) Chris@0: @group.users << users if request.post? Chris@0: respond_to do |format| Chris@0: format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'users' } Chris@0: format.js { Chris@0: render(:update) {|page| Chris@0: page.replace_html "tab-content-users", :partial => 'groups/users' Chris@0: users.each {|user| page.visual_effect(:highlight, "user-#{user.id}") } Chris@0: } Chris@0: } Chris@0: end Chris@0: end Chris@0: Chris@0: def remove_user Chris@0: @group = Group.find(params[:id]) Chris@0: @group.users.delete(User.find(params[:user_id])) if request.post? Chris@0: respond_to do |format| Chris@0: format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'users' } Chris@0: format.js { render(:update) {|page| page.replace_html "tab-content-users", :partial => 'groups/users'} } Chris@0: end Chris@0: end Chris@0: Chris@0: def autocomplete_for_user Chris@0: @group = Group.find(params[:id]) Chris@0: @users = User.active.like(params[:q]).find(:all, :limit => 100) - @group.users Chris@0: render :layout => false Chris@0: end Chris@0: Chris@0: def edit_membership Chris@0: @group = Group.find(params[:id]) Chris@0: @membership = Member.edit_membership(params[:membership_id], params[:membership], @group) Chris@0: @membership.save if request.post? Chris@0: respond_to do |format| Chris@14: if @membership.valid? Chris@14: format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' } Chris@14: format.js { Chris@14: render(:update) {|page| Chris@14: page.replace_html "tab-content-memberships", :partial => 'groups/memberships' Chris@14: page.visual_effect(:highlight, "member-#{@membership.id}") Chris@14: } Chris@14: } Chris@14: else Chris@14: format.js { Chris@14: render(:update) {|page| Chris@14: page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', '))) Chris@14: } Chris@14: } Chris@14: end Chris@14: end Chris@0: end Chris@0: Chris@0: def destroy_membership Chris@0: @group = Group.find(params[:id]) Chris@0: Member.find(params[:membership_id]).destroy if request.post? Chris@0: respond_to do |format| Chris@0: format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' } Chris@0: format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'groups/memberships'} } Chris@0: end Chris@0: end Chris@0: end