Project

General

Profile

Feature #594 » subproject_no_level.diff

Jérémie HATTAT, 2008-09-12 15:17

View differences:

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
    (1-1/1)