changeset 1273:052ea7c838f6 redmine-2.2-integration

Merge cannam's latest changes.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Thu, 09 May 2013 11:49:03 +0100
parents 248631c56bda (current diff) b2f7f52a164d (diff)
children 5ea1a213c7a5
files app/views/mailer/added_to_project.html.erb app/views/mailer/added_to_project.text.erb
diffstat 12 files changed, 57 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/app/controllers/members_controller.rb	Thu Apr 11 15:38:00 2013 +0100
+++ b/app/controllers/members_controller.rb	Thu May 09 11:49:03 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 Apr 11 15:38:00 2013 +0100
+++ b/app/models/mailer.rb	Thu May 09 11:49:03 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 Apr 11 15:38:00 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 Apr 11 15:38:00 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 09 11:49:03 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 09 11:49:03 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 Apr 11 15:38:00 2013 +0100
+++ b/app/views/members/_editlist.html.erb	Thu May 09 11:49:03 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>
--- a/app/views/members/index.html.erb	Thu Apr 11 15:38:00 2013 +0100
+++ b/app/views/members/index.html.erb	Thu May 09 11:49:03 2013 +0100
@@ -1,7 +1,7 @@
 
 <h2><%=l(:label_member_plural)%></h2> 
 
-<% editable = authorize_for('members', 'edit') %>
+<% editable = authorize_for('members', 'update') %>
 
 <div id="memberlist">
 <% if editable %>
--- a/app/views/projects/settings/_overview.html.erb	Thu Apr 11 15:38:00 2013 +0100
+++ b/app/views/projects/settings/_overview.html.erb	Thu May 09 11:49:03 2013 +0100
@@ -5,7 +5,7 @@
 
 <div class="box tabular">
 
-<p><%= l(:text_has_welcome_page_info, { :overview_link => link_to(l(:label_overview), { :controller => 'projects', :action => 'show' } ) } ) %></p>
+<p><%= l(:text_has_welcome_page_info, { :overview_link => link_to(l(:label_overview), { :controller => 'projects', :action => 'show' } ) } ).html_safe %></p>
 
 <% if @project.module_enabled? :wiki %>
 
@@ -13,7 +13,7 @@
 
 <% else %>
 
-<p><%= l(:text_has_welcome_page_wiki_disabled, { :modules_link => link_to(l(:label_module_plural), { :controller => 'projects', :action => 'settings', :tab => 'modules' } ) } ) %></p>
+<p><%= l(:text_has_welcome_page_wiki_disabled, { :modules_link => link_to(l(:label_module_plural), { :controller => 'projects', :action => 'settings', :tab => 'modules' } ) } ).html_safe %></p>
 
 <% end %>
 
--- a/config/locales/en.yml	Thu Apr 11 15:38:00 2013 +0100
+++ b/config/locales/en.yml	Thu May 09 11:49:03 2013 +0100
@@ -844,7 +844,7 @@
   label_added_time_by: "Added by %{author} %{age} ago"
   label_updated_time_by: "Updated by %{author} %{age} ago"
   label_updated_time: "Updated %{value} ago"
-  label_time_ago: "{{age}} ago"
+  label_time_ago: "%{age} ago"
   label_jump_to_a_project: Jump to a project...
   label_file_plural: Downloads
   label_changeset_plural: Changesets
@@ -1106,8 +1106,8 @@
   text_settings_repo_is_internal: Currently the repository hosted at this site is the primary repository for this project.
   text_settings_repo_is_external: Currently the repository hosted at this site is a read-only copy of an external repository.
   text_settings_repo_need_help: Please <a href="/projects/soundsoftware-site/wiki/Help">contact us</a> if you need help deciding how best to set this up.<br>We can also import complete revision history from other systems into a new primary repository for you if you wish.
-  text_has_welcome_page_info: <b>Welcome page</b><p>You can replace the standard {{overview_link}} page for this project with your own welcome page.<br>This page will be editable using the project Wiki.
-  text_has_welcome_page_wiki_disabled: <b>Note:</b> You must enable the Wiki module in the {{modules_link}} tab before you can create or edit this page.
+  text_has_welcome_page_info: <b>Welcome page</b><p>You can replace the standard %{overview_link} page for this project with your own welcome page.<br>This page will be editable using the project Wiki.
+  text_has_welcome_page_wiki_disabled: <b>Note:</b> You must enable the Wiki module in the %{modules_link} tab before you can create or edit this page.
   text_binary_data: Binary data
   text_data_too_large: Binary data, or file too large to display
 
@@ -1144,9 +1144,9 @@
 
   label_set_role_plural: Choose roles for new member
 
-  notice_added_to_project: 'You have been added to the project "{{project_name}}".'
-  notice_project_homepage: "You can visit the project using the following link: {{project_url}}"
-  mail_subject_added_to_project: "You've been added to a project on {{value}}"
+  notice_added_to_project: 'You have been added to the project "%{project_name}".'
+  notice_project_homepage: "You can visit the project using the following link: %{project_url}"
+  mail_subject_added_to_project: "You've been added to a project on %{value}"
   description_filter: Filter
   description_search: Searchfield
   description_choose_project: Projects
--- a/plugins/redmine_tags/app/views/projects/_tags_form.html.erb	Thu Apr 11 15:38:00 2013 +0100
+++ b/plugins/redmine_tags/app/views/projects/_tags_form.html.erb	Thu May 09 11:49:03 2013 +0100
@@ -1,7 +1,7 @@
 <%= labelled_fields_for :project, project do |f| -%>
 <div>
   <p id="project_tags"><%= f.text_field :tag_list, :label => :tags, :size => 60, :class => 'hol' %>
-    <em class="info"><%= l(:text_tags_info).html_safe %></em>
+    <em class="info"><%= l(:text_tags_search).html_safe %></em>
   </p>
   <div id="project_tag_candidates" class="autocomplete" style="margin-top: 0;"></div>
   <%= stylesheet_link_tag 'jquery.tagit.css', :plugin => 'redmine_tags' %>
--- a/public/themes/soundsoftware/stylesheets/application.css	Thu Apr 11 15:38:00 2013 +0100
+++ b/public/themes/soundsoftware/stylesheets/application.css	Thu May 09 11:49:03 2013 +0100
@@ -48,11 +48,6 @@
   margin-top: 1em;
 }
 
-h1 { margin:0 0 0 0; padding:0; font-size: 24px; }
-h2, #content h2, .wiki h1 { padding: 2px 10px 1px 0px; margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #3e442c; }
-h3, #content h3, .wiki h2 { font-size: 16px; padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #3e442c; }
-h4, #content h3, .wiki h3 { font-size: 14px; padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #3e442c; }
-
 .splitcontentleft p:first-child {
   margin-top: 0;
 }