1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-24 07:42:40 +01:00
phorge-phorge/src/applications/project/edge
epriestley 26ba4e8717 Materialize parent project memberships
Summary:
Ref T10010. Subprojects have the following general membership rule: if you are a member of a subproject ("Engineering > Backend"), you are also a member of the parent project.

It would be unreasonably difficult to implement this rule directly in SQL when querying `withMemberPHIDs()`, because we'd have to do an arbitrarily large number of arbitrarily deep joins, or fetch and then requery a lot of data.

Instead, introduce "materailized members", which are just a copy of all the effective members of a project. When a subproject has a membership change, we go recompute the effective membership of all the parent projects. Then we can just JOIN to satisfy `withMemberPHIDs()`.

Having this process avialable will also be useful in the future, when a project's membership might be defined by some external source.

Also make milestones mostly work like we'd expect them to with respect to membership and visibility.

Test Plan:
  - Added and executed unit tests.
  - Changed project members, verified materialized members populated correctly in the database.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10010

Differential Revision: https://secure.phabricator.com/D14863
2015-12-23 14:39:09 -08:00
..
PhabricatorProjectMaterializedMemberEdgeType.php Materialize parent project memberships 2015-12-23 14:39:09 -08:00
PhabricatorProjectMemberOfProjectEdgeType.php Migrate Project edges to subclass PhabricatorEdgeType 2015-01-02 10:10:59 +11:00
PhabricatorProjectObjectHasProjectEdgeType.php Maniphest - remove references to deprecated transaction type TYPE_PROJECTS from code 2014-12-18 14:17:16 -08:00
PhabricatorProjectProjectHasMemberEdgeType.php Migrate Project edges to subclass PhabricatorEdgeType 2015-01-02 10:10:59 +11:00
PhabricatorProjectProjectHasObjectEdgeType.php Modernize Project/Object edges 2014-07-17 15:42:19 -07:00