Feature #2963 » 04-parent_project_set_by_manager-0.4.0.patch
| app/controllers/projects_controller.rb | ||
|---|---|---|
| 75 | 75 |
else |
| 76 | 76 |
@project.enabled_module_names = params[:enabled_modules] |
| 77 | 77 |
if @project.save |
| 78 |
@project.set_parent!(params[:project]['parent_id']) if User.current.admin? && params[:project].has_key?('parent_id')
|
|
| 78 |
@project.set_parent!(params[:project]['parent_id']) if user_allowed_to_change_parent?(@project) && params[:project].has_key?('parent_id')
|
|
| 79 | 79 |
# Add current user as a project member if he is not admin |
| 80 | 80 |
unless User.current.admin? |
| 81 | 81 |
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first |
| ... | ... | |
| 155 | 155 |
if request.post? |
| 156 | 156 |
@project.attributes = params[:project] |
| 157 | 157 |
if @project.save |
| 158 |
@project.set_parent!(params[:project]['parent_id']) if User.current.admin? && params[:project].has_key?('parent_id')
|
|
| 158 |
@project.set_parent!(params[:project]['parent_id']) if user_allowed_to_change_parent?(@project) && params[:project].has_key?('parent_id')
|
|
| 159 | 159 |
flash[:notice] = l(:notice_successful_update) |
| 160 | 160 |
redirect_to :action => 'settings', :id => @project |
| 161 | 161 |
else |
| app/helpers/projects_helper.rb | ||
|---|---|---|
| 68 | 68 |
end |
| 69 | 69 |
s |
| 70 | 70 |
end |
| 71 | ||
| 72 |
def user_allowed_to_change_parent?(project) |
|
| 73 |
if project.id == nil |
|
| 74 |
return User.current.allowed_to?(:add_project, nil, :global => true) |
|
| 75 |
end |
|
| 76 | ||
| 77 |
User.current.allowed_to?(:add_project, project) && (!project.parent || User.current.allowed_to?(:add_project, project.parent)) |
|
| 78 |
end |
|
| 71 | 79 |
end |
| app/models/project.rb | ||
|---|---|---|
| 196 | 196 |
|
| 197 | 197 |
# Returns an array of projects the project can be moved to |
| 198 | 198 |
def possible_parents |
| 199 |
@possible_parents ||= (Project.active.find(:all) - self_and_descendants)
|
|
| 199 |
@possible_parents ||= (find_allowed_projects - self_and_descendants)
|
|
| 200 | 200 |
end |
| 201 | 201 |
|
| 202 | 202 |
# Sets the parent of the project |
| ... | ... | |
| 404 | 404 |
def allowed_actions |
| 405 | 405 |
@actions_allowed ||= allowed_permissions.inject([]) { |actions, permission| actions += Redmine::AccessControl.allowed_actions(permission) }.flatten
|
| 406 | 406 |
end |
| 407 | ||
| 408 |
def find_allowed_projects |
|
| 409 |
Project.active.find(:all).find_all { |p| User.current.allowed_to?(:add_project, p) }
|
|
| 410 |
end |
|
| 407 | 411 |
end |
| app/views/projects/_form.rhtml | ||
|---|---|---|
| 4 | 4 |
<!--[form:project]--> |
| 5 | 5 |
<p><%= f.text_field :name, :required => true %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p> |
| 6 | 6 | |
| 7 |
<% if User.current.admin? && !@project.possible_parents.empty? %>
|
|
| 7 |
<% if user_allowed_to_change_parent?(@project) && !@project.possible_parents.empty? %>
|
|
| 8 | 8 |
<p><label><%= l(:field_parent) %></label><%= parent_project_select_tag(@project) %></p> |
| 9 | 9 |
<% end %> |
| 10 | 10 | |
- « Previous
- 1
- 2
- Next »