@issues_by_version = {}
unless @selected_tracker_ids.empty?
@versions.each do |version|
- conditions = {:tracker_id => @selected_tracker_ids}
- if !@project.versions.include?(version)
- conditions.merge!(:project_id => project_ids)
- end
issues = version.fixed_issues.visible.find(:all,
:include => [:project, :status, :tracker, :priority],
- :conditions => conditions,
+ :conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
@issues_by_version[version] = issues
end
return @allowed_parents if @allowed_parents
@allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects))
@allowed_parents = @allowed_parents - self_and_descendants
- if User.current.allowed_to?(:add_project, nil, :global => true)
+ if User.current.allowed_to?(:add_project, nil, :global => true) || (!new_record? && parent.nil?)
@allowed_parents << nil
end
unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent)
end
end
- # fetch new changesets for all repositories
- # can be called periodically by an external script
+ # Fetches new changesets for all repositories of active projects
+ # Can be called periodically by an external script
# eg. ruby script/runner "Repository.fetch_changesets"
def self.fetch_changesets
- find(:all).each(&:fetch_changesets)
+ Project.active.has_module(:repository).find(:all, :include => :repository).each do |project|
+ if project.repository
+ project.repository.fetch_changesets
+ end
+ end
end
# scan changeset comments to find related and fixed issues for all repositories
<%= link_to_issue i %>
<% else %>
<span class="icon icon-package">
- <%= h("#{i.project} -") unless @project && @project == i.project %>
<%= link_to_version i %>
</span>
<% end %>
%>
<div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone"> </div>
<div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
- <%= h("#{i.project} -") unless @project && @project == i.project %>
- <strong><%=h i %></strong>
+ <strong><%= format_version_name i %></strong>
</div>
<% end %>
<% top = top + 20
assert Project.new.allowed_parents.compact.empty?
end
+ def test_allowed_parents_with_add_subprojects_permission
+ Role.find(1).remove_permission!(:add_project)
+ Role.find(1).add_permission!(:add_subprojects)
+ User.current = User.find(2)
+ # new project
+ assert !Project.new.allowed_parents.include?(nil)
+ assert Project.new.allowed_parents.include?(Project.find(1))
+ # existing root project
+ assert Project.find(1).allowed_parents.include?(nil)
+ # existing child
+ assert Project.find(3).allowed_parents.include?(Project.find(1))
+ assert !Project.find(3).allowed_parents.include?(nil)
+ end
+
+ def test_allowed_parents_with_add_project_permission
+ Role.find(1).add_permission!(:add_project)
+ Role.find(1).remove_permission!(:add_subprojects)
+ User.current = User.find(2)
+ # new project
+ assert Project.new.allowed_parents.include?(nil)
+ assert !Project.new.allowed_parents.include?(Project.find(1))
+ # existing root project
+ assert Project.find(1).allowed_parents.include?(nil)
+ # existing child
+ assert Project.find(3).allowed_parents.include?(Project.find(1))
+ assert Project.find(3).allowed_parents.include?(nil)
+ end
+
+ def test_allowed_parents_with_add_project_and_subprojects_permission
+ Role.find(1).add_permission!(:add_project)
+ Role.find(1).add_permission!(:add_subprojects)
+ User.current = User.find(2)
+ # new project
+ assert Project.new.allowed_parents.include?(nil)
+ assert Project.new.allowed_parents.include?(Project.find(1))
+ # existing root project
+ assert Project.find(1).allowed_parents.include?(nil)
+ # existing child
+ assert Project.find(3).allowed_parents.include?(Project.find(1))
+ assert Project.find(3).allowed_parents.include?(nil)
+ end
+
def test_users_by_role
users_by_role = Project.find(1).users_by_role
assert_kind_of Hash, users_by_role