Path: blob/master/src/applications/badges/editor/PhabricatorBadgesEditor.php
12256 views
<?php12final class PhabricatorBadgesEditor3extends PhabricatorApplicationTransactionEditor {45public function getEditorApplicationClass() {6return 'PhabricatorBadgesApplication';7}89public function getEditorObjectsDescription() {10return pht('Badges');11}1213public function getCreateObjectTitle($author, $object) {14return pht('%s created this badge.', $author);15}1617public function getCreateObjectTitleForFeed($author, $object) {18return pht('%s created %s.', $author, $object);19}2021protected function supportsSearch() {22return true;23}2425public function getTransactionTypes() {26$types = parent::getTransactionTypes();27$types[] = PhabricatorTransactions::TYPE_COMMENT;28$types[] = PhabricatorTransactions::TYPE_EDGE;29$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;3031return $types;32}3334protected function shouldSendMail(35PhabricatorLiskDAO $object,36array $xactions) {37return true;38}3940public function getMailTagsMap() {41return array(42PhabricatorBadgesTransaction::MAILTAG_DETAILS =>43pht('Someone changes the badge\'s details.'),44PhabricatorBadgesTransaction::MAILTAG_COMMENT =>45pht('Someone comments on a badge.'),46PhabricatorBadgesTransaction::MAILTAG_OTHER =>47pht('Other badge activity not listed above occurs.'),48);49}5051protected function shouldPublishFeedStory(52PhabricatorLiskDAO $object,53array $xactions) {54return true;55}5657protected function expandTransactions(58PhabricatorLiskDAO $object,59array $xactions) {6061$actor = $this->getActor();62$actor_phid = $actor->getPHID();6364$results = parent::expandTransactions($object, $xactions);6566// Automatically subscribe the author when they create a badge.67if ($this->getIsNewObject()) {68if ($actor_phid) {69$results[] = id(new PhabricatorBadgesTransaction())70->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)71->setNewValue(72array(73'+' => array($actor_phid => $actor_phid),74));75}76}7778return $results;79}8081protected function buildReplyHandler(PhabricatorLiskDAO $object) {82return id(new PhabricatorBadgesReplyHandler())83->setMailReceiver($object);84}8586protected function buildMailTemplate(PhabricatorLiskDAO $object) {87$name = $object->getName();88$id = $object->getID();89$subject = pht('Badge %d: %s', $id, $name);9091return id(new PhabricatorMetaMTAMail())92->setSubject($subject);93}9495protected function getMailTo(PhabricatorLiskDAO $object) {96return array(97$object->getCreatorPHID(),98$this->requireActor()->getPHID(),99);100}101102protected function buildMailBody(103PhabricatorLiskDAO $object,104array $xactions) {105106$body = parent::buildMailBody($object, $xactions);107108$body->addLinkSection(109pht('BADGE DETAIL'),110PhabricatorEnv::getProductionURI('/badges/view/'.$object->getID().'/'));111return $body;112}113114protected function getMailSubjectPrefix() {115return pht('[Badge]');116}117118protected function applyFinalEffects(119PhabricatorLiskDAO $object,120array $xactions) {121122$badge_phid = $object->getPHID();123$user_phids = array();124$clear_everything = false;125126foreach ($xactions as $xaction) {127switch ($xaction->getTransactionType()) {128case PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE:129case PhabricatorBadgesBadgeRevokeTransaction::TRANSACTIONTYPE:130foreach ($xaction->getNewValue() as $user_phid) {131$user_phids[] = $user_phid;132}133break;134default:135$clear_everything = true;136break;137}138}139140if ($clear_everything) {141$awards = id(new PhabricatorBadgesAwardQuery())142->setViewer($this->getActor())143->withBadgePHIDs(array($badge_phid))144->execute();145foreach ($awards as $award) {146$user_phids[] = $award->getRecipientPHID();147}148}149150if ($user_phids) {151PhabricatorUserCache::clearCaches(152PhabricatorUserBadgesCacheType::KEY_BADGES,153$user_phids);154}155156return $xactions;157}158159}160161162