From fa569c35d30e4c52fe497482de8f42c3fcc1e887 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Thu, 9 Mar 2017 11:30:03 -0800 Subject: [PATCH] Add award and revoke conduit calls to Badges Summary: Allow people to award and remove badges via conduit, but not from the standard badges form. Test Plan: Build a generator and generate awards. Didn't test the revoke yet. {F3857766} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12270 Differential Revision: https://secure.phabricator.com/D17482 --- src/__phutil_library_map__.php | 2 ++ .../editor/PhabricatorBadgesEditEngine.php | 17 +++++++++ ...habricatorBadgesAwardTestDataGenerator.php | 36 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 455dee187f..544b4f2b39 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2018,6 +2018,7 @@ phutil_register_library_map(array( 'PhabricatorBadgesAward' => 'applications/badges/storage/PhabricatorBadgesAward.php', 'PhabricatorBadgesAwardController' => 'applications/badges/controller/PhabricatorBadgesAwardController.php', 'PhabricatorBadgesAwardQuery' => 'applications/badges/query/PhabricatorBadgesAwardQuery.php', + 'PhabricatorBadgesAwardTestDataGenerator' => 'applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php', 'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php', 'PhabricatorBadgesBadgeAwardTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php', 'PhabricatorBadgesBadgeDescriptionTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php', @@ -7000,6 +7001,7 @@ phutil_register_library_map(array( ), 'PhabricatorBadgesAwardController' => 'PhabricatorBadgesController', 'PhabricatorBadgesAwardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorBadgesAwardTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorBadgesBadge' => array( 'PhabricatorBadgesDAO', 'PhabricatorPolicyInterface', diff --git a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php index 596e70cd13..e7a441343c 100644 --- a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php +++ b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php @@ -124,6 +124,23 @@ final class PhabricatorBadgesEditEngine ->setTransactionType( PhabricatorBadgesBadgeDescriptionTransaction::TRANSACTIONTYPE) ->setValue($object->getDescription()), + id(new PhabricatorUsersEditField()) + ->setKey('award') + ->setIsConduitOnly(true) + ->setDescription(pht('New badge award recipients.')) + ->setConduitTypeDescription(pht('New badge award recipients.')) + ->setTransactionType( + PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE) + ->setLabel(pht('Award Recipients')), + id(new PhabricatorUsersEditField()) + ->setKey('revoke') + ->setIsConduitOnly(true) + ->setDescription(pht('Revoke badge award recipients.')) + ->setConduitTypeDescription(pht('Revoke badge award recipients.')) + ->setTransactionType( + PhabricatorBadgesBadgeRevokeTransaction::TRANSACTIONTYPE) + ->setLabel(pht('Revoke Recipients')), + ); } diff --git a/src/applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php b/src/applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php new file mode 100644 index 0000000000..ba523a9000 --- /dev/null +++ b/src/applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php @@ -0,0 +1,36 @@ +loadRandomUser(); + $recipient = $this->loadRandomUser(); + $badge_phid = $this->loadRandomPHID(new PhabricatorBadgesBadge()); + + $xactions = array(); + + $xactions[] = array( + 'type' => 'award', + 'value' => array($recipient->getPHID()), + ); + + $params = array( + 'transactions' => $xactions, + 'objectIdentifier' => $badge_phid, + ); + + $result = id(new ConduitCall('badges.edit', $params)) + ->setUser($author) + ->execute(); + + return $result['object']['phid']; + } + +}