Feature #594 » subproject_no_level.diff
| redmine/app/controllers/projects_controller.rb 2008-09-11 08:57:41.546391600 +0200 | ||
|---|---|---|
| 65 | 65 |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
 | 
| 66 | 66 | @trackers = Tracker.all | 
| 67 | 67 | @root_projects = Project.find(:all, | 
| 68 |                                   :conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}",
 | |
| 68 |                                   :conditions => "status = #{Project::STATUS_ACTIVE}", | |
| 69 | 69 | :order => 'name') | 
| 70 | if @project != nil | |
| 71 | @root_projects = @root_projects - @project.fetch_all_subprojects_id_recursively() | |
| 72 | end | |
| 70 | 73 | @project = Project.new(params[:project]) | 
| 71 | 74 | if request.get? | 
| 72 | 75 | @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? | 
| ... | ... | |
| 108 | 111 |  | 
| 109 | 112 | def settings | 
| 110 | 113 | @root_projects = Project.find(:all, | 
| 111 |                                   :conditions => ["parent_id IS NULL AND status = #{Project::STATUS_ACTIVE} AND id <> ?", @project.id],
 | |
| 114 |                                   :conditions => ["status = #{Project::STATUS_ACTIVE} AND id <> ?", @project.id], | |
| 112 | 115 | :order => 'name') | 
| 116 | if @project != nil | |
| 117 | @root_projects = @root_projects - @project.fetch_all_subprojects_id_recursively() | |
| 118 | end | |
| 113 | 119 |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
 | 
| 114 | 120 | @issue_category ||= IssueCategory.new | 
| 115 | 121 | @member ||= @project.members.new | 
| redmine/app/models/project.rb 2008-09-11 16:27:18.421875000 +0200 | ||
|---|---|---|
| 71 | 71 | errors[:identifier].nil? && !(new_record? || identifier.blank?) | 
| 72 | 72 | end | 
| 73 | 73 |  | 
| 74 | def fetch_all_subprojects_recursively | |
| 75 | ret = Array.new | |
| 76 | if self.children.size > 0 | |
| 77 |       self.children.each { |subproject|
 | |
| 78 | ret << subproject | |
| 79 | ret += subproject.fetch_all_subprojects_recursively() | |
| 80 | } | |
| 81 | end | |
| 82 | return ret | |
| 83 | end | |
| 84 |  | |
| 85 | def fetch_all_subprojects_id_recursively | |
| 86 | ret = Array.new | |
| 87 | if self.children.size > 0 | |
| 88 |       self.children.each { |subproject|
 | |
| 89 | ret << subproject.id.to_s | |
| 90 | ret += subproject.fetch_all_subprojects_id_recursively() | |
| 91 | } | |
| 92 | end | |
| 93 | return ret | |
| 94 | end | |
| 95 |  | |
| 74 | 96 | def issues_with_subprojects(include_subprojects=false) | 
| 75 | 97 | conditions = nil | 
| 76 | 98 | if include_subprojects | 
| 77 |       ids = [id] + child_ids
 | |
| 99 |       ids = [id] + fetch_all_subprojects_id_recursively() | |
| 78 | 100 |       conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
 | 
| 79 | 101 | end | 
| 80 | 102 |     conditions ||= ["#{Project.table_name}.id = ?", id]
 | 
| ... | ... | |
| 247 | 269 |  | 
| 248 | 270 | protected | 
| 249 | 271 | def validate | 
| 250 | errors.add(parent_id, " must be a root project") if parent and parent.parent | |
| 251 |     errors.add_to_base("A project with subprojects can't be a subproject") if parent and children.size > 0
 | |
| 252 | 272 | errors.add(:identifier, :activerecord_error_invalid) if !identifier.blank? && identifier.match(/^\d*$/) | 
| 253 | 273 | end | 
| 254 | 274 |  | 
| redmine/app/models/query.rb 2008-09-11 08:52:04.204289400 +0200 | ||
|---|---|---|
| 269 | 269 | # main project only | 
| 270 | 270 | else | 
| 271 | 271 | # all subprojects | 
| 272 |           ids += project.child_ids
 | |
| 272 |           ids += project.fetch_all_subprojects_id_recursively() | |
| 273 | 273 | end | 
| 274 | 274 | elsif Setting.display_subprojects_issues? | 
| 275 |         ids += project.child_ids
 | |
| 275 |         ids += project.fetch_all_subprojects_id_recursively() | |
| 276 | 276 | end | 
| 277 | 277 |       project_clauses << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
 | 
| 278 | 278 | elsif project |