Project

General

Profile

Feature #17747 » private_role_redmine_3.2ter.patch

Wim DePreter, 2016-03-16 10:56

View differences:

app/controllers/reports_controller.rb (working copy)
24 24
    @versions = @project.shared_versions.sort
25 25
    @priorities = IssuePriority.all.reverse
26 26
    @categories = @project.issue_categories
27
    @assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort
28
    @authors = @project.users.sort
27
## begin patch private role
28
    #@assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort
29
    @assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users.visible).sort
30
    #@authors = @project.users.sort
31
    @authors = @project.users.visible.sort
32
## end patch private role
29 33
    @subprojects = @project.descendants.visible
30 34

  
31 35
    @issues_by_tracker = Issue.by_tracker(@project)
......
63 67
      @report_title = l(:field_category)
64 68
    when "assigned_to"
65 69
      @field = "assigned_to_id"
66
      @rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort
70
## begin patch private role
71
      #@rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort
72
      @rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).visible.sort
73
## end patch private role
67 74
      @data = Issue.by_assigned_to(@project)
68 75
      @report_title = l(:field_assigned_to)
69 76
    when "author"
70 77
      @field = "author_id"
71
      @rows = @project.users.sort
78
## begin patch private role
79
      #@rows = @project.users.sort
80
      @rows = @project.users.visible.sort
81
## end patch private role
72 82
      @data = Issue.by_author(@project)
73 83
      @report_title = l(:field_author)
74 84
    when "subproject"
app/controllers/users_controller.rb (working copy)
63 63

  
64 64
  def show
65 65
    unless @user.visible?
66
      render_404
66
## begin patch private role (revert revision 13584 - if user with private role (or non-member?) acts on issue, user should be visible)
67
       #render_404
68
       render_403
69
## end patch private role
67 70
      return
68 71
    end
69 72

  
app/models/principal.rb (working copy)
54 54
        active
55 55
      else
56 56
        # self and members of visible projects
57
        active.where("#{table_name}.id = ? OR #{table_name}.id IN (SELECT user_id FROM #{Member.table_name} WHERE project_id IN (?))",
57
## begin patch private role
58
        #active.where("#{table_name}.id = ? OR #{table_name}.id IN (SELECT user_id FROM #{Member.table_name} WHERE project_id IN (?))",
59
        active.where("#{table_name}.id = ? OR #{table_name}.id IN (" +
60
          "SELECT m.user_id FROM #{Member.table_name} m" +
61
          " INNER JOIN #{MemberRole.table_name} mr ON m.id = mr.member_id" +
62
          " INNER JOIN #{Role.table_name} r ON mr.role_id = r.id" +
63
          " WHERE m.project_id IN (?) AND r.name NOT LIKE 'private.%')",
64
## end patch private role
58 65
          user.id, user.visible_project_ids
59 66
        )
60 67
      end
app/models/project.rb (working copy)
479 479
  # Returns a hash of project users grouped by role
480 480
  def users_by_role
481 481
    members.includes(:user, :roles).inject({}) do |h, m|
482
      m.roles.each do |r|
482
## begin patch private role
483
      #m.roles.each do |r|
484
      m.roles.non_private.each do |r|
485
## end patch private role
483 486
        h[r] ||= []
484 487
        h[r] << m.user
485 488
      end
......
510 513

  
511 514
    @assignable_users ||= Principal.
512 515
      active.
516
## begin patch private role
517
      visible.
518
## end patch private role
513 519
      joins(:members => :roles).
514 520
      where(:type => types, :members => {:project_id => id}, :roles => {:assignable => true}).
515 521
      uniq.
app/models/role.rb (working copy)
50 50
  ]
51 51

  
52 52
  scope :sorted, lambda { order(:builtin, :position) }
53
  scope :givable, lambda { order(:position).where(:builtin => 0) }
53
## begin patch private role
54
  #scope :givable, lambda { order(:position).where(:builtin => 0) }
55
  scope :givable, lambda {
56
    if User.current.admin?
57
      order(:position).where(:builtin => 0)
58
    else
59
      order(:position).non_private.where(:builtin => 0)
60
    end
61
  }
62

  
63
  scope :non_private, lambda { 
64
    if User.current.admin?
65
      all
66
    else
67
      all.where("#{table_name}.name NOT LIKE 'private.%'")
68
    end
69
  }
70
## end patch private role
71

  
54 72
  scope :builtin, lambda { |*args|
55 73
    compare = (args.first == true ? 'not' : '')
56 74
    where("#{compare} builtin = 0")
(4-4/5)