public static function loadPolicies(PhabricatorUser $viewer, PhabricatorPolicyInterface $object) { $results = array(); $map = array(); foreach ($object->getCapabilities() as $capability) { $map[$capability] = $object->getPolicy($capability); } $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->withPHIDs($map)->execute(); foreach ($map as $capability => $phid) { $results[$capability] = $policies[$phid]; } return $results; }
public static function renderPolicyDescriptions(PhabricatorUser $viewer, PhabricatorPolicyInterface $object) { $results = array(); $policies = null; $global = self::getGlobalPolicies(); $capabilities = $object->getCapabilities(); foreach ($capabilities as $capability) { $policy = $object->getPolicy($capability); if (!$policy) { continue; } if (isset($global[$policy])) { $results[$capability] = $global[$policy]->renderDescription(); continue; } if ($policies === null) { // This slightly overfetches data, but it shouldn't generally // be a problem. $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->setObject($object)->execute(); } $results[$capability] = $policies[$policy]->renderDescription(); } return $results; }