changeset 1270:b2f7f52a164d redmine-2.2-integration

Fix project members page: update editlist partial following changes to project member settings partial; update mailer class and templates; make editlist forms not be remote (we just reload page)
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 02 May 2013 16:24:09 +0100
parents 5e4f04bd7a1e
children 052ea7c838f6
files app/controllers/members_controller.rb app/models/mailer.rb app/views/mailer/added_to_project.html.erb app/views/mailer/added_to_project.text.erb app/views/mailer/member_added_to_project.html.erb app/views/mailer/member_added_to_project.text.erb app/views/members/_editlist.html.erb
diffstat 7 files changed, 47 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/app/controllers/members_controller.rb	Thu May 02 15:43:31 2013 +0100
+++ b/app/controllers/members_controller.rb	Thu May 02 16:24:09 2013 +0100
@@ -61,14 +61,14 @@
           members << @new_member
 
           # send notification to member
-          Mailer.deliver_added_to_project(@new_member, @project)
+          Mailer.member_added_to_project(@new_member, @project).deliver
         end
       else
         @new_member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
         members << @new_member
         
         # send notification to member
-        Mailer.deliver_added_to_project(@new_member, @project)
+        Mailer.member_added_to_project(@new_member, @project).deliver
       end
 
       @project.members << members
@@ -76,7 +76,7 @@
     end
 
     respond_to do |format|
-      format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
+      format.html { redirect_to :action => 'index', :project_id => @project }
       format.js { @members = members }
       format.api {
         @member = members.first
@@ -95,7 +95,7 @@
     end
     saved = @member.save
     respond_to do |format|
-      format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
+      format.html { redirect_to :action => 'index', :project_id => @project }
       format.js
       format.api {
         if saved
@@ -112,7 +112,7 @@
       @member.destroy
     end
     respond_to do |format|
-      format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
+      format.html { redirect_to :action => 'index', :project_id => @project }
       format.js
       format.api {
         if @member.destroyed?
--- a/app/models/mailer.rb	Thu May 02 15:43:31 2013 +0100
+++ b/app/models/mailer.rb	Thu May 02 16:24:09 2013 +0100
@@ -27,31 +27,32 @@
     { :host => Setting.host_name, :protocol => Setting.protocol }
   end
 
-  # todo: luisf: 2Aug2012 - refactor...
-  def added_to_project(member, project)
+  # Builds a Mail::Message object used to email the specified member
+  # that he was added to a project
+  #
+  # Example:
+  #   member_added_to_project(member, project) => Mail::Message object
+  #   Mailer.member_added_to_project(member, project) => sends an email to the registered member
+  def member_added_to_project(member, project)
+
     principal = Principal.find(member.user_id)
 
+    users = []
     if principal.type == "User"
-      user = User.find(member.user_id)
-      user_add_to_project(user, project) 
+      users = [User.find(member.user_id)]
     else
       users = Principal.find(member.user_id).users      
-      users.map {|user| user_add_to_project(user, project) }      
     end
-  end
 
-  # Builds a tmail object used to email the specified user that he was added to a project
-  #
-  # Example:
-  #   user_add_to_project(user, project) => tmail object
-  #   Mailer.deliver_add_to_project(user, project) => sends an email to the registered user
-  def user_add_to_project(user, project)        
-    set_language_if_valid user.language
-    recipients user.mail
-    subject l(:mail_subject_added_to_project, Setting.app_title)
-    body :project_url => url_for(:controller => 'projects', :action => 'show', :id => project.id),
-        :project_name => project.name
-    render_multipart('added_to_project', body)
+    users.map do |user|
+
+      set_language_if_valid user.language
+      @project_url = url_for(:controller => 'projects', :action => 'show', :id => project.id)
+      @project_name = project.name
+      mail :to => user.mail,
+        :subject => l(:mail_subject_added_to_project, Setting.app_title)
+
+    end
   end
   
   # Builds a Mail::Message object used to email recipients of the added issue.
--- a/app/views/mailer/added_to_project.html.erb	Thu May 02 15:43:31 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<p><%= l(:notice_added_to_project, :project_name => @project_name) %></p>
-<p><%= l(:notice_project_homepage, :project_url => @project_url) %></p>
-
--- a/app/views/mailer/added_to_project.text.erb	Thu May 02 15:43:31 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-<%= l(:notice_added_to_project, :project_name => @project_name) %>
-<%= l(:notice_project_homepage, :project_url => @project_url)  %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/mailer/member_added_to_project.html.erb	Thu May 02 16:24:09 2013 +0100
@@ -0,0 +1,3 @@
+<p><%= l(:notice_added_to_project, :project_name => @project_name) %></p>
+<p><%= l(:notice_project_homepage, :project_url => @project_url) %></p>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/mailer/member_added_to_project.text.erb	Thu May 02 16:24:09 2013 +0100
@@ -0,0 +1,2 @@
+<%= l(:notice_added_to_project, :project_name => @project_name) %>
+<%= l(:notice_project_homepage, :project_url => @project_url)  %>
--- a/app/views/members/_editlist.html.erb	Thu May 02 15:43:31 2013 +0100
+++ b/app/views/members/_editlist.html.erb	Thu May 02 16:24:09 2013 +0100
@@ -17,23 +17,26 @@
           <td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td>
           <td class="roles">
             <span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span>
-            <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member},
-      			 :method => :post, :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %>
+	    <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member),
+                                         :method => :put,
+                                         :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }}
+              ) do |f| %>
             <p><% roles.each do |role| %>
-              <label><%= check_box_tag 'member[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br />
+              <label><%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br />
              <% end %></p>
-        <%= hidden_field_tag 'member[role_ids][]', '' %>
+        <%= hidden_field_tag 'membership[role_ids][]', '' %>
         <p><%= submit_tag l(:button_change), :class => "small" %>
-        <%= link_to_function l(:button_cancel), "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;" %></p>
+        <%= link_to_function l(:button_cancel),
+                             "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;"
+             %></p>
     <% end %>
   </td>
   <td class="buttons">
-      <%= link_to_function l(:button_edit), "$('member-#{member.id}-roles').hide(); $('member-#{member.id}-roles-form').show(); return false;", :class => 'icon icon-edit' %>
-      <%= link_to_remote(l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member},                                              
-                                              :method => :post,
-                                              :confirm => (!User.current.admin? && member.include?(User.current) ? l(:text_own_membership_delete_confirmation) : nil)
-                                            }, :title => l(:button_delete),
-                                               :class => 'icon icon-del') if member.deletable? %>
+      <%= link_to_function l(:button_edit),
+                           "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;",
+                           :class => 'icon icon-edit' %>
+      <%= delete_link membership_path(member),
+                      :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %>
   </td>
 	</tr>
 <% end; reset_cycle %>
@@ -47,28 +50,21 @@
 <% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %>
 
 <% if roles.any? && principals.any? %>
-  <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
-									   :loading => '$(\'member-add-submit\').disable();',
-									   :complete => 'if($(\'member-add-submit\')) $(\'member-add-submit\').enable();') do |f| %>
+ <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :method => :post}) do |f| %>
     <h3><%=l(:label_member_new)%></h3>
     
 		<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
-		<%= observe_field(:principal_search,
-                 :frequency => 0.5,
-                 :update => :principals,
-                 :url => { :controller => 'members', :action => 'autocomplete_for_member', :id => @project },
-                 :with => 'q')
-                  %>
+		<%= javascript_tag "observeSearchfield('principal_search', 'principals', '#{ escape_javascript autocomplete_project_memberships_path(@project) }')" %>
 
 		<div id="principals">
 		<% if params[:q] && params[:q].length > 1 %>
-  		  <%= principals_check_box_tags 'member[user_ids][]', @principals %>
+  		  <%= principals_check_box_tags 'membership[user_ids][]', @principals %>
 		<% end %>
 		</div>
 		
     <p><%= l(:label_set_role_plural) %>:</p>
     <% roles.each do |role| %>
-    	<label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %> </label><div style="margin-left: 2em; margin-bottom: 0.5em"><i><%=l( 'label_' + role.name.downcase + "_description").to_sym %></i></div>
+    	<label><%= check_box_tag 'membership[role_ids][]', role.id %> <%=h role %> </label><div style="margin-left: 2em; margin-bottom: 0.5em"><i><%=l( 'label_' + role.name.downcase + "_description").to_sym %></i></div>
    	<% end %>
    	
     <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>