members_controller.rb
125 lines
| 3.5 KiB
| text/x-ruby
|
RubyLexer
|
r6776 | # Redmine - project management software | ||
|
r10939 | # Copyright (C) 2006-2013 Jean-Philippe Lang | ||
|
r330 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r6776 | # | ||
|
r330 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r6776 | # | ||
|
r330 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
|
r2 | class MembersController < ApplicationController | ||
|
r3483 | model_object Member | ||
|
r8678 | before_filter :find_model_object, :except => [:index, :create, :autocomplete] | ||
before_filter :find_project_from_association, :except => [:index, :create, :autocomplete] | ||||
before_filter :find_project_by_project_id, :only => [:index, :create, :autocomplete] | ||||
|
r714 | before_filter :authorize | ||
|
r8678 | accept_api_auth :index, :show, :create, :update, :destroy | ||
def index | ||||
@offset, @limit = api_offset_and_limit | ||||
@member_count = @project.member_principals.count | ||||
|
r10909 | @member_pages = Paginator.new @member_count, @limit, params['page'] | ||
@offset ||= @member_pages.offset | ||||
|
r8678 | @members = @project.member_principals.all( | ||
:order => "#{Member.table_name}.id", | ||||
:limit => @limit, | ||||
:offset => @offset | ||||
) | ||||
respond_to do |format| | ||||
format.html { head 406 } | ||||
format.api | ||||
end | ||||
end | ||||
def show | ||||
respond_to do |format| | ||||
format.html { head 406 } | ||||
format.api | ||||
end | ||||
end | ||||
|
r2 | |||
|
r8669 | def create | ||
|
r2546 | members = [] | ||
|
r9012 | if params[:membership] | ||
if params[:membership][:user_ids] | ||||
attrs = params[:membership].dup | ||||
user_ids = attrs.delete(:user_ids) | ||||
user_ids.each do |user_id| | ||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id) | ||||
end | ||||
else | ||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id]) | ||||
|
r2546 | end | ||
|
r9012 | @project.members << members | ||
|
r2546 | end | ||
|
r8678 | |||
|
r714 | respond_to do |format| | ||
|
r10754 | format.html { redirect_to_settings_in_projects } | ||
|
r9875 | format.js { @members = members } | ||
format.api { | ||||
@member = members.first | ||||
if @member.valid? | ||||
|
r8678 | render :action => 'show', :status => :created, :location => membership_url(@member) | ||
|
r9875 | else | ||
render_validation_errors(@member) | ||||
end | ||||
} | ||||
|
r714 | end | ||
end | ||||
|
r6776 | |||
|
r8669 | def update | ||
if params[:membership] | ||||
@member.role_ids = params[:membership][:role_ids] | ||||
end | ||||
|
r8678 | saved = @member.save | ||
respond_to do |format| | ||||
|
r10754 | format.html { redirect_to_settings_in_projects } | ||
|
r9875 | format.js | ||
|
r8678 | format.api { | ||
if saved | ||||
|
r9792 | render_api_ok | ||
|
r8678 | else | ||
render_validation_errors(@member) | ||||
end | ||||
} | ||||
|
r178 | end | ||
end | ||||
|
r330 | |||
|
r178 | def destroy | ||
|
r8669 | if request.delete? && @member.deletable? | ||
|
r2755 | @member.destroy | ||
end | ||||
respond_to do |format| | ||||
|
r10754 | format.html { redirect_to_settings_in_projects } | ||
|
r9875 | format.js | ||
|
r8678 | format.api { | ||
if @member.destroyed? | ||||
|
r9792 | render_api_ok | ||
|
r8678 | else | ||
head :unprocessable_entity | ||||
end | ||||
} | ||||
|
r505 | end | ||
|
r330 | end | ||
|
r6776 | |||
|
r8669 | def autocomplete | ||
|
r10970 | respond_to do |format| | ||
format.js | ||||
end | ||||
|
r2549 | end | ||
|
r10754 | |||
private | ||||
def redirect_to_settings_in_projects | ||||
redirect_to settings_project_path(@project, :tab => 'members') | ||||
end | ||||
|
r2 | end | ||