Page MenuHomePhabricator

D17692.id.diff
No OneTemporary

D17692.id.diff

diff --git a/src/applications/phortune/__tests__/PhabricatorPhortuneTestCase.php b/src/applications/phortune/__tests__/PhabricatorPhortuneTestCase.php
--- a/src/applications/phortune/__tests__/PhabricatorPhortuneTestCase.php
+++ b/src/applications/phortune/__tests__/PhabricatorPhortuneTestCase.php
@@ -21,6 +21,23 @@
1,
count($accounts),
pht('Creation of default account for users with no accounts.'));
+
+ // Reload the account. The user should be able to view and edit it, and
+ // should be a member.
+
+ $account = head($accounts);
+ $account = id(new PhortuneAccountQuery())
+ ->setViewer($user)
+ ->withPHIDs(array($account->getPHID()))
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
+
+ $this->assertEqual(true, ($account instanceof PhortuneAccount));
+ $this->assertEqual(array($user->getPHID()), $account->getMemberPHIDs());
}
}
diff --git a/src/applications/phortune/editor/PhortuneAccountEditor.php b/src/applications/phortune/editor/PhortuneAccountEditor.php
--- a/src/applications/phortune/editor/PhortuneAccountEditor.php
+++ b/src/applications/phortune/editor/PhortuneAccountEditor.php
@@ -28,48 +28,49 @@
$errors = parent::validateTransaction($object, $type, $xactions);
+ $viewer = $this->requireActor();
+
switch ($type) {
case PhabricatorTransactions::TYPE_EDGE:
foreach ($xactions as $xaction) {
switch ($xaction->getMetadataValue('edge:type')) {
case PhortuneAccountHasMemberEdgeType::EDGECONST:
- $actor_phid = $this->requireActor()->getPHID();
- $new = $xaction->getNewValue();
$old = $object->getMemberPHIDs();
+ $new = $this->getPHIDTransactionNewValue($xaction, $old);
- // Check if user is trying to not set themselves on creation
- if (!$old) {
- $set = idx($new, '+', array());
- $actor_set = false;
- foreach ($set as $phid) {
- if ($actor_phid == $phid) {
- $actor_set = true;
- }
- }
- if (!$actor_set) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht('You can not remove yourself as an account manager.'),
- $xaction);
- $errors[] = $error;
+ $old = array_fuse($old);
+ $new = array_fuse($new);
+ foreach ($new as $new_phid) {
+ if (isset($old[$new_phid])) {
+ continue;
}
- }
- // Check if user is trying to remove themselves on edit
- $set = idx($new, '-', array());
- foreach ($set as $phid) {
- if ($actor_phid == $phid) {
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($new_phid))
+ ->executeOne();
+ if (!$user) {
$error = new PhabricatorApplicationTransactionValidationError(
$type,
pht('Invalid'),
- pht('You can not remove yourself as an account manager.'),
- $xaction);
+ pht(
+ 'Account managers must be valid users, "%s" is not.',
+ $new_phid));
$errors[] = $error;
-
+ continue;
}
}
+
+ $actor_phid = $this->getActingAsPHID();
+ if (!isset($new[$actor_phid])) {
+ $error = new PhabricatorApplicationTransactionValidationError(
+ $type,
+ pht('Invalid'),
+ pht('You can not remove yourself as an account manager.'),
+ $xaction);
+ $errors[] = $error;
+ }
break;
}
}

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 18, 3:20 PM (2 d, 17 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7658507
Default Alt Text
D17692.id.diff (4 KB)

Event Timeline