diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index b854850..9bac8a7 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -65,13 +65,16 @@ class UsersController < ApplicationController
return
end
end
- render :layout => 'base'
+ respond_to do |format|
+ format.html { render :layout => 'base' }
+ format.xml { }
+ end
rescue ActiveRecord::RecordNotFound
render_404
end
- def add
+ def create
if request.get?
@user = User.new(:language => Setting.default_language)
else
@@ -81,16 +84,24 @@ class UsersController < ApplicationController
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
if @user.save
Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
- flash[:notice] = l(:notice_successful_create)
- redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} :
- {:controller => 'users', :action => 'edit', :id => @user})
+ respond_to do |format|
+ format.html {
+ flash[:notice] = l(:notice_successful_create)
+ redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} :
+ {:controller => 'users', :action => 'update', :id => @user})
+ }
+ format.xml { head :created, :location => url_for(:controller => 'users', :action => 'show', :id => @user.id) }
+ end
return
end
end
- @auth_sources = AuthSource.find(:all)
+ respond_to do |format|
+ format.html { @auth_sources = AuthSource.find(:all) }
+ format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
+ end
end
- def edit
+ def update
@user = User.find(params[:id])
if request.post?
@user.admin = params[:user][:admin] if params[:user][:admin]
@@ -112,10 +123,31 @@ class UsersController < ApplicationController
redirect_to :back
end
end
+ if request.put?
+ @user.admin = params[:user][:admin] if params[:user][:admin]
+ @user.login = params[:user][:login] if params[:user][:login]
+ if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
+ @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
+ end
+ @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
+ @user.attributes = params[:user]
+ # Was the account actived ? (do it before User#save clears the change)
+ was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
+ if @user.save
+ if was_activated
+ Mailer.deliver_account_activated(@user)
+ elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
+ Mailer.deliver_account_information(@user, params[:password])
+ end
+ head :ok
+ else
+ render :xml => @user.errors, :status => :unprocessable_entity
+ end
+ end
@auth_sources = AuthSource.find(:all)
@membership ||= Member.new
rescue ::ActionController::RedirectBackError
- redirect_to :controller => 'users', :action => 'edit', :id => @user
+ redirect_to :controller => 'users', :action => 'update', :id => @user
end
def edit_membership
diff --git a/app/views/users/add.rhtml b/app/views/users/add.rhtml
deleted file mode 100644
index 2e0743e..0000000
--- a/app/views/users/add.rhtml
+++ /dev/null
@@ -1,10 +0,0 @@
-
<%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%>
-
-<% labelled_tabular_form_for :user, @user, :url => { :action => "add" }, :html => { :class => nil } do |f| %>
- <%= render :partial => 'form', :locals => { :f => f } %>
-
-
- <%= submit_tag l(:button_create) %>
- <%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
-
-<% end %>
diff --git a/app/views/users/create.rhtml b/app/views/users/create.rhtml
new file mode 100644
index 0000000..0e7a333
--- /dev/null
+++ b/app/views/users/create.rhtml
@@ -0,0 +1,10 @@
+<%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%>
+
+<% labelled_tabular_form_for :user, @user, :url => { :action => "create" }, :html => { :class => nil } do |f| %>
+ <%= render :partial => 'form', :locals => { :f => f } %>
+
+
+ <%= submit_tag l(:button_create) %>
+ <%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
+
+<% end %>
diff --git a/app/views/users/edit.rhtml b/app/views/users/edit.rhtml
deleted file mode 100644
index f5538c1..0000000
--- a/app/views/users/edit.rhtml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %>
-<%= change_status_link(@user) %>
-
-
-<%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %>
-
-<%= render_tabs user_settings_tabs %>
-
-<% html_title(l(:label_user), @user.login, l(:label_administration)) -%>
diff --git a/app/views/users/index.rhtml b/app/views/users/index.rhtml
index 1b47028..e95bb8b 100644
--- a/app/views/users/index.rhtml
+++ b/app/views/users/index.rhtml
@@ -1,5 +1,5 @@
-<%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
+<%= link_to l(:label_user_new), {:action => 'create'}, :class => 'icon icon-add' %>
<%=l(:label_user_plural)%>
diff --git a/app/views/users/index.xml.builder b/app/views/users/index.xml.builder
new file mode 100644
index 0000000..6b3e977
--- /dev/null
+++ b/app/views/users/index.xml.builder
@@ -0,0 +1,16 @@
+xml.instruct!
+xml.users :type => 'array' do
+ @users.each do |user|
+ xml.user do
+ xml.id user.id
+ xml.login user.login
+ xml.firstname user.firstname
+ xml.lastname user.lastname
+ xml.mail user.mail
+ xml.admin user.admin
+ xml.created_on user.created_on
+ xml.last_login_on user.last_login_on
+ end
+ end
+end
+
diff --git a/app/views/users/show.xml.builder b/app/views/users/show.xml.builder
new file mode 100644
index 0000000..8f05fb5
--- /dev/null
+++ b/app/views/users/show.xml.builder
@@ -0,0 +1,17 @@
+xml.instruct!
+xml.user do
+ xml.id @user.id
+ xml.login @user.login
+ xml.firstname @user.firstname
+ xml.lastname @user.lastname
+ xml.mail @user.mail
+ xml.admin @user.admin
+ xml.created_on @user.created_on
+ xml.last_login_on @user.last_login_on
+ xml.projects do
+ @memberships.each do |membership|
+ xml.project :id => membership.id, :name => membership.project, :role => membership.roles.sort.collect(&:to_s).join(', '), :created_on => membership.created_on
+ end
+ end
+end
+
diff --git a/app/views/users/update.rhtml b/app/views/users/update.rhtml
new file mode 100644
index 0000000..f5538c1
--- /dev/null
+++ b/app/views/users/update.rhtml
@@ -0,0 +1,10 @@
+
+<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %>
+<%= change_status_link(@user) %>
+
+
+<%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %>
+
+<%= render_tabs user_settings_tabs %>
+
+<% html_title(l(:label_user), @user.login, l(:label_administration)) -%>
diff --git a/config/routes.rb b/config/routes.rb
index eab2157..a746211 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -143,17 +143,18 @@ ActionController::Routing::Routes.draw do |map|
users.with_options :conditions => {:method => :get} do |user_views|
user_views.connect 'users', :action => 'index'
user_views.connect 'users/:id', :action => 'show', :id => /\d+/
- user_views.connect 'users/new', :action => 'add'
- user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
+ user_views.connect 'users/new', :action => 'create'
+ user_views.connect 'users/:id/edit/:tab', :action => 'update', :tab => nil
end
users.with_options :conditions => {:method => :post} do |user_actions|
user_actions.connect 'users', :action => 'add'
- user_actions.connect 'users/new', :action => 'add'
- user_actions.connect 'users/:id/edit', :action => 'edit'
+ user_actions.connect 'users/new', :action => 'create'
+ user_actions.connect 'users/:id/edit', :action => 'update'
user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
end
+ users.connect 'users/:id.:format', :action => 'update', :conditions => {:method => :put}
end
# For nice "roadmap" in the url for the index action
@@ -178,6 +179,9 @@ ActionController::Routing::Routes.draw do |map|
project.resources :news, :shallow => true
end
+ map.resources :users, :member => { } do |user|
+ end
+
# Destroy uses a get request to prompt the user before the actual DELETE request
map.project_destroy_confirm 'projects/:id/destroy', :controller => 'projects', :action => 'destroy', :conditions => {:method => :get}