Page MenuHomePhabricator

D20927.diff
No OneTemporary

D20927.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -11690,6 +11690,7 @@
'PhabricatorUserEmail' => array(
'PhabricatorUserDAO',
'PhabricatorDestructibleInterface',
+ 'PhabricatorPolicyInterface',
),
'PhabricatorUserEmailTestCase' => 'PhabricatorTestCase',
'PhabricatorUserEmpowerTransaction' => 'PhabricatorUserTransactionType',
diff --git a/src/applications/people/phid/PhabricatorPeopleUserEmailPHIDType.php b/src/applications/people/phid/PhabricatorPeopleUserEmailPHIDType.php
--- a/src/applications/people/phid/PhabricatorPeopleUserEmailPHIDType.php
+++ b/src/applications/people/phid/PhabricatorPeopleUserEmailPHIDType.php
@@ -29,6 +29,12 @@
PhabricatorHandleQuery $query,
array $handles,
array $objects) {
+
+ foreach ($handles as $phid => $handle) {
+ $email = $objects[$phid];
+ $handle->setName($email->getAddress());
+ }
+
return null;
}
diff --git a/src/applications/people/query/PhabricatorPeopleUserEmailQuery.php b/src/applications/people/query/PhabricatorPeopleUserEmailQuery.php
--- a/src/applications/people/query/PhabricatorPeopleUserEmailQuery.php
+++ b/src/applications/people/query/PhabricatorPeopleUserEmailQuery.php
@@ -48,6 +48,32 @@
return $where;
}
+ protected function willLoadPage(array $page) {
+
+ $user_phids = mpull($page, 'getUserPHID');
+
+ $users = id(new PhabricatorPeopleQuery())
+ ->setViewer($this->getViewer())
+ ->setParentQuery($this)
+ ->withPHIDs($user_phids)
+ ->execute();
+ $users = mpull($users, null, 'getPHID');
+
+ foreach ($page as $key => $address) {
+ $user = idx($users, $address->getUserPHID());
+
+ if (!$user) {
+ unset($page[$key]);
+ $this->didRejectResult($address);
+ continue;
+ }
+
+ $address->attachUser($user);
+ }
+
+ return $page;
+ }
+
public function getQueryApplicationClass() {
return 'PhabricatorPeopleApplication';
}
diff --git a/src/applications/people/storage/PhabricatorUserEmail.php b/src/applications/people/storage/PhabricatorUserEmail.php
--- a/src/applications/people/storage/PhabricatorUserEmail.php
+++ b/src/applications/people/storage/PhabricatorUserEmail.php
@@ -6,7 +6,9 @@
*/
final class PhabricatorUserEmail
extends PhabricatorUserDAO
- implements PhabricatorDestructibleInterface {
+ implements
+ PhabricatorDestructibleInterface,
+ PhabricatorPolicyInterface {
protected $userPHID;
protected $address;
@@ -14,6 +16,8 @@
protected $isPrimary;
protected $verificationCode;
+ private $user = self::ATTACHABLE;
+
const MAX_ADDRESS_LENGTH = 128;
protected function getConfiguration() {
@@ -52,6 +56,15 @@
return parent::save();
}
+ public function attachUser(PhabricatorUser $user) {
+ $this->user = $user;
+ return $this;
+ }
+
+ public function getUser() {
+ return $this->assertAttached($this->user);
+ }
+
/* -( Domain Restrictions )------------------------------------------------ */
@@ -287,4 +300,28 @@
$this->delete();
}
+
+/* -( PhabricatorPolicyInterface )----------------------------------------- */
+
+ public function getCapabilities() {
+ return array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ );
+ }
+
+ public function getPolicy($capability) {
+ $user = $this->getUser();
+
+ if ($this->getIsSystemAgent() || $this->getIsMailingList()) {
+ return PhabricatorPolicies::POLICY_ADMIN;
+ }
+
+ return $user->getPHID();
+ }
+
+ public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
+ return false;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Tue, May 14, 12:11 AM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6277040
Default Alt Text
D20927.diff (3 KB)

Event Timeline