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}