Project

General

Profile

Defect #28180 ยป 0001-Ignore-archived-project-memberships-when-calculating.patch

Gregor Schmidt, 2018-02-12 14:25

View differences:

app/models/query.rb
319 319
          " INNER JOIN #{table_name_prefix}queries_roles#{table_name_suffix} qr on qr.query_id = q.id" +
320 320
          " INNER JOIN #{MemberRole.table_name} mr ON mr.role_id = qr.role_id" +
321 321
          " INNER JOIN #{Member.table_name} m ON m.id = mr.member_id AND m.user_id = ?" +
322
          " INNER JOIN #{Project.table_name} p ON p.id = m.project_id AND p.status <> ?" +
322 323
          " WHERE q.project_id IS NULL OR q.project_id = m.project_id))" +
323 324
        " OR #{table_name}.user_id = ?",
324
        VISIBILITY_PUBLIC, VISIBILITY_ROLES, user.id, user.id)
325
        VISIBILITY_PUBLIC, VISIBILITY_ROLES, user.id, Project::STATUS_ARCHIVED, user.id)
325 326
    elsif user.logged?
326 327
      scope.where("#{table_name}.visibility = ? OR #{table_name}.user_id = ?", VISIBILITY_PUBLIC, user.id)
327 328
    else
......
340 341
      if project
341 342
        (user.roles_for_project(project) & roles).any?
342 343
      else
343
        Member.where(:user_id => user.id).joins(:roles).where(:member_roles => {:role_id => roles.map(&:id)}).any?
344
        user.memberships.joins(:member_roles).where(:member_roles => {:role_id => roles.map(&:id)}).any?
344 345
      end
345 346
    else
346 347
      user == self.user
test/unit/query_test.rb
1790 1790

  
1791 1791
    assert q.visible?(User.find(1))
1792 1792
    assert IssueQuery.visible(User.find(1)).find_by_id(q.id)
1793

  
1794
    # Should ignore archived project memberships
1795
    Project.find(1).archive
1796
    assert !q.visible?(User.find(3))
1797
    assert_nil IssueQuery.visible(User.find(3)).find_by_id(q.id)
1793 1798
  end
1794 1799

  
1795 1800
  def test_query_with_private_visibility_should_be_visible_to_owner
    (1-1/1)