false, ) + parent::getConfiguration(); } public static function loadAllForPackages(array $packages) { assert_instances_of($packages, 'PhabricatorOwnersPackage'); if (!$packages) { return array(); } return id(new PhabricatorOwnersOwner())->loadAllWhere( 'packageID IN (%Ls)', mpull($packages, 'getID')); } // Loads all user phids affiliated with a set of packages. This includes both // user owners and all members of any project owners public static function loadAffiliatedUserPHIDs(array $package_ids) { if (!$package_ids) { return array(); } $owners = id(new PhabricatorOwnersOwner())->loadAllWhere( 'packageID IN (%Ls)', $package_ids); $all_phids = phid_group_by_type(mpull($owners, 'getUserPHID')); $user_phids = idx($all_phids, PhabricatorPHIDConstants::PHID_TYPE_USER, array()); $users_in_project_phids = array(); if (idx($all_phids, PhabricatorPHIDConstants::PHID_TYPE_PROJ)) { $users_in_project_phids = mpull( id(new PhabricatorProjectAffiliation())->loadAllWhere( 'projectPHID IN (%Ls)', idx($all_phids, PhabricatorPHIDConstants::PHID_TYPE_PROJ, array())), 'getUserPHID'); } return array_unique(array_merge($users_in_project_phids, $user_phids)); } // Loads all affiliated packages for a user. This includes packages owned by // any project the user is a member of. public static function loadAffiliatedPackages($user_phid) { $query = new PhabricatorProjectQuery(); $query->setMembers(array($user_phid)); $query->withStatus(PhabricatorProjectQuery::STATUS_ACTIVE); $projects = $query->execute(); $phids = mpull($projects, 'getPHID') + array($user_phid); return id(new PhabricatorOwnersOwner())->loadAllWhere( 'userPHID in (%Ls)', $phids); } }