Revision 1273:052ea7c838f6 app
| app/controllers/members_controller.rb | ||
|---|---|---|
| 61 | 61 |
members << @new_member |
| 62 | 62 |
|
| 63 | 63 |
# send notification to member |
| 64 |
Mailer.deliver_added_to_project(@new_member, @project)
|
|
| 64 |
Mailer.member_added_to_project(@new_member, @project).deliver
|
|
| 65 | 65 |
end |
| 66 | 66 |
else |
| 67 | 67 |
@new_member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id]) |
| 68 | 68 |
members << @new_member |
| 69 | 69 |
|
| 70 | 70 |
# send notification to member |
| 71 |
Mailer.deliver_added_to_project(@new_member, @project)
|
|
| 71 |
Mailer.member_added_to_project(@new_member, @project).deliver
|
|
| 72 | 72 |
end |
| 73 | 73 |
|
| 74 | 74 |
@project.members << members |
| ... | ... | |
| 76 | 76 |
end |
| 77 | 77 |
|
| 78 | 78 |
respond_to do |format| |
| 79 |
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
|
|
| 79 |
format.html { redirect_to :action => 'index', :project_id => @project }
|
|
| 80 | 80 |
format.js { @members = members }
|
| 81 | 81 |
format.api {
|
| 82 | 82 |
@member = members.first |
| ... | ... | |
| 95 | 95 |
end |
| 96 | 96 |
saved = @member.save |
| 97 | 97 |
respond_to do |format| |
| 98 |
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
|
|
| 98 |
format.html { redirect_to :action => 'index', :project_id => @project }
|
|
| 99 | 99 |
format.js |
| 100 | 100 |
format.api {
|
| 101 | 101 |
if saved |
| ... | ... | |
| 112 | 112 |
@member.destroy |
| 113 | 113 |
end |
| 114 | 114 |
respond_to do |format| |
| 115 |
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
|
|
| 115 |
format.html { redirect_to :action => 'index', :project_id => @project }
|
|
| 116 | 116 |
format.js |
| 117 | 117 |
format.api {
|
| 118 | 118 |
if @member.destroyed? |
| app/models/mailer.rb | ||
|---|---|---|
| 27 | 27 |
{ :host => Setting.host_name, :protocol => Setting.protocol }
|
| 28 | 28 |
end |
| 29 | 29 |
|
| 30 |
# todo: luisf: 2Aug2012 - refactor... |
|
| 31 |
def added_to_project(member, project) |
|
| 30 |
# Builds a Mail::Message object used to email the specified member |
|
| 31 |
# that he was added to a project |
|
| 32 |
# |
|
| 33 |
# Example: |
|
| 34 |
# member_added_to_project(member, project) => Mail::Message object |
|
| 35 |
# Mailer.member_added_to_project(member, project) => sends an email to the registered member |
|
| 36 |
def member_added_to_project(member, project) |
|
| 37 |
|
|
| 32 | 38 |
principal = Principal.find(member.user_id) |
| 33 | 39 |
|
| 40 |
users = [] |
|
| 34 | 41 |
if principal.type == "User" |
| 35 |
user = User.find(member.user_id) |
|
| 36 |
user_add_to_project(user, project) |
|
| 42 |
users = [User.find(member.user_id)] |
|
| 37 | 43 |
else |
| 38 | 44 |
users = Principal.find(member.user_id).users |
| 39 |
users.map {|user| user_add_to_project(user, project) }
|
|
| 40 | 45 |
end |
| 41 |
end |
|
| 42 | 46 |
|
| 43 |
# Builds a tmail object used to email the specified user that he was added to a project |
|
| 44 |
# |
|
| 45 |
# Example: |
|
| 46 |
# user_add_to_project(user, project) => tmail object |
|
| 47 |
# Mailer.deliver_add_to_project(user, project) => sends an email to the registered user |
|
| 48 |
def user_add_to_project(user, project) |
|
| 49 |
set_language_if_valid user.language |
|
| 50 |
recipients user.mail |
|
| 51 |
subject l(:mail_subject_added_to_project, Setting.app_title) |
|
| 52 |
body :project_url => url_for(:controller => 'projects', :action => 'show', :id => project.id), |
|
| 53 |
:project_name => project.name |
|
| 54 |
render_multipart('added_to_project', body)
|
|
| 47 |
users.map do |user| |
|
| 48 |
|
|
| 49 |
set_language_if_valid user.language |
|
| 50 |
@project_url = url_for(:controller => 'projects', :action => 'show', :id => project.id) |
|
| 51 |
@project_name = project.name |
|
| 52 |
mail :to => user.mail, |
|
| 53 |
:subject => l(:mail_subject_added_to_project, Setting.app_title) |
|
| 54 |
|
|
| 55 |
end |
|
| 55 | 56 |
end |
| 56 | 57 |
|
| 57 | 58 |
# Builds a Mail::Message object used to email recipients of the added issue. |
| app/views/mailer/added_to_project.html.erb | ||
|---|---|---|
| 1 |
<p><%= l(:notice_added_to_project, :project_name => @project_name) %></p> |
|
| 2 |
<p><%= l(:notice_project_homepage, :project_url => @project_url) %></p> |
|
| 3 |
|
|
| app/views/mailer/added_to_project.text.erb | ||
|---|---|---|
| 1 |
<%= l(:notice_added_to_project, :project_name => @project_name) %> |
|
| 2 |
<%= l(:notice_project_homepage, :project_url => @project_url) %> |
|
| app/views/mailer/member_added_to_project.html.erb | ||
|---|---|---|
| 1 |
<p><%= l(:notice_added_to_project, :project_name => @project_name) %></p> |
|
| 2 |
<p><%= l(:notice_project_homepage, :project_url => @project_url) %></p> |
|
| 3 |
|
|
| app/views/mailer/member_added_to_project.text.erb | ||
|---|---|---|
| 1 |
<%= l(:notice_added_to_project, :project_name => @project_name) %> |
|
| 2 |
<%= l(:notice_project_homepage, :project_url => @project_url) %> |
|
| app/views/members/_editlist.html.erb | ||
|---|---|---|
| 17 | 17 |
<td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td> |
| 18 | 18 |
<td class="roles"> |
| 19 | 19 |
<span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span>
|
| 20 |
<% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member},
|
|
| 21 |
:method => :post, :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %>
|
|
| 20 |
<%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member),
|
|
| 21 |
:method => :put, |
|
| 22 |
:html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }}
|
|
| 23 |
) do |f| %> |
|
| 22 | 24 |
<p><% roles.each do |role| %> |
| 23 |
<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 />
|
|
| 25 |
<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 />
|
|
| 24 | 26 |
<% end %></p> |
| 25 |
<%= hidden_field_tag 'member[role_ids][]', '' %> |
|
| 27 |
<%= hidden_field_tag 'membership[role_ids][]', '' %>
|
|
| 26 | 28 |
<p><%= submit_tag l(:button_change), :class => "small" %> |
| 27 |
<%= link_to_function l(:button_cancel), "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;" %></p>
|
|
| 29 |
<%= link_to_function l(:button_cancel), |
|
| 30 |
"$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;"
|
|
| 31 |
%></p> |
|
| 28 | 32 |
<% end %> |
| 29 | 33 |
</td> |
| 30 | 34 |
<td class="buttons"> |
| 31 |
<%= link_to_function l(:button_edit), "$('member-#{member.id}-roles').hide(); $('member-#{member.id}-roles-form').show(); return false;", :class => 'icon icon-edit' %>
|
|
| 32 |
<%= link_to_remote(l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member},
|
|
| 33 |
:method => :post, |
|
| 34 |
:confirm => (!User.current.admin? && member.include?(User.current) ? l(:text_own_membership_delete_confirmation) : nil) |
|
| 35 |
}, :title => l(:button_delete), |
|
| 36 |
:class => 'icon icon-del') if member.deletable? %> |
|
| 35 |
<%= link_to_function l(:button_edit), |
|
| 36 |
"$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;",
|
|
| 37 |
:class => 'icon icon-edit' %> |
|
| 38 |
<%= delete_link membership_path(member), |
|
| 39 |
:data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %>
|
|
| 37 | 40 |
</td> |
| 38 | 41 |
</tr> |
| 39 | 42 |
<% end; reset_cycle %> |
| ... | ... | |
| 47 | 50 |
<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %> |
| 48 | 51 |
|
| 49 | 52 |
<% if roles.any? && principals.any? %> |
| 50 |
<% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
|
|
| 51 |
:loading => '$(\'member-add-submit\').disable();', |
|
| 52 |
:complete => 'if($(\'member-add-submit\')) $(\'member-add-submit\').enable();') do |f| %> |
|
| 53 |
<%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :method => :post}) do |f| %>
|
|
| 53 | 54 |
<h3><%=l(:label_member_new)%></h3> |
| 54 | 55 |
|
| 55 | 56 |
<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p> |
| 56 |
<%= observe_field(:principal_search, |
|
| 57 |
:frequency => 0.5, |
|
| 58 |
:update => :principals, |
|
| 59 |
:url => { :controller => 'members', :action => 'autocomplete_for_member', :id => @project },
|
|
| 60 |
:with => 'q') |
|
| 61 |
%> |
|
| 57 |
<%= javascript_tag "observeSearchfield('principal_search', 'principals', '#{ escape_javascript autocomplete_project_memberships_path(@project) }')" %>
|
|
| 62 | 58 |
|
| 63 | 59 |
<div id="principals"> |
| 64 | 60 |
<% if params[:q] && params[:q].length > 1 %> |
| 65 |
<%= principals_check_box_tags 'member[user_ids][]', @principals %> |
|
| 61 |
<%= principals_check_box_tags 'membership[user_ids][]', @principals %>
|
|
| 66 | 62 |
<% end %> |
| 67 | 63 |
</div> |
| 68 | 64 |
|
| 69 | 65 |
<p><%= l(:label_set_role_plural) %>:</p> |
| 70 | 66 |
<% roles.each do |role| %> |
| 71 |
<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> |
|
| 67 |
<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>
|
|
| 72 | 68 |
<% end %> |
| 73 | 69 |
|
| 74 | 70 |
<p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p> |
| app/views/members/index.html.erb | ||
|---|---|---|
| 1 | 1 |
|
| 2 | 2 |
<h2><%=l(:label_member_plural)%></h2> |
| 3 | 3 |
|
| 4 |
<% editable = authorize_for('members', 'edit') %>
|
|
| 4 |
<% editable = authorize_for('members', 'update') %>
|
|
| 5 | 5 |
|
| 6 | 6 |
<div id="memberlist"> |
| 7 | 7 |
<% if editable %> |
| app/views/projects/settings/_overview.html.erb | ||
|---|---|---|
| 5 | 5 |
|
| 6 | 6 |
<div class="box tabular"> |
| 7 | 7 |
|
| 8 |
<p><%= l(:text_has_welcome_page_info, { :overview_link => link_to(l(:label_overview), { :controller => 'projects', :action => 'show' } ) } ) %></p>
|
|
| 8 |
<p><%= l(:text_has_welcome_page_info, { :overview_link => link_to(l(:label_overview), { :controller => 'projects', :action => 'show' } ) } ).html_safe %></p>
|
|
| 9 | 9 |
|
| 10 | 10 |
<% if @project.module_enabled? :wiki %> |
| 11 | 11 |
|
| ... | ... | |
| 13 | 13 |
|
| 14 | 14 |
<% else %> |
| 15 | 15 |
|
| 16 |
<p><%= l(:text_has_welcome_page_wiki_disabled, { :modules_link => link_to(l(:label_module_plural), { :controller => 'projects', :action => 'settings', :tab => 'modules' } ) } ) %></p>
|
|
| 16 |
<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>
|
|
| 17 | 17 |
|
| 18 | 18 |
<% end %> |
| 19 | 19 |
|
Also available in: Unified diff