Path: blob/master/src/applications/badges/controller/PhabricatorBadgesAwardController.php
12256 views
<?php12final class PhabricatorBadgesAwardController3extends PhabricatorBadgesController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();7$id = $request->getURIData('id');89$user = id(new PhabricatorPeopleQuery())10->setViewer($viewer)11->withIDs(array($id))12->executeOne();13if (!$user) {14return new Aphront404Response();15}1617$view_uri = '/people/badges/'.$user->getID().'/';1819if ($request->isFormPost()) {20$badge_phids = $request->getArr('badgePHIDs');21$badges = id(new PhabricatorBadgesQuery())22->setViewer($viewer)23->withPHIDs($badge_phids)24->requireCapabilities(25array(26PhabricatorPolicyCapability::CAN_EDIT,27PhabricatorPolicyCapability::CAN_VIEW,28))29->execute();30if (!$badges) {31return new Aphront404Response();32}33$award_phids = array($user->getPHID());3435foreach ($badges as $badge) {36$xactions = array();37$xactions[] = id(new PhabricatorBadgesTransaction())38->setTransactionType(39PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE)40->setNewValue($award_phids);4142$editor = id(new PhabricatorBadgesEditor())43->setActor($viewer)44->setContentSourceFromRequest($request)45->setContinueOnNoEffect(true)46->setContinueOnMissingFields(true)47->applyTransactions($badge, $xactions);48}4950return id(new AphrontRedirectResponse())51->setURI($view_uri);52}5354$form = id(new AphrontFormView())55->setUser($viewer)56->appendControl(57id(new AphrontFormTokenizerControl())58->setLabel(pht('Badge'))59->setName('badgePHIDs')60->setDatasource(61id(new PhabricatorBadgesDatasource())62->setParameters(63array(64'recipientPHID' => $user->getPHID(),65))));6667$dialog = $this->newDialog()68->setTitle(pht('Award Badge'))69->appendForm($form)70->addCancelButton($view_uri)71->addSubmitButton(pht('Award'));7273return $dialog;74}7576}777879