Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14761963
D17402.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
38 KB
Referenced Files
None
Subscribers
None
D17402.diff
View Options
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
@@ -2012,7 +2012,16 @@
'PhabricatorBadgesAwardController' => 'applications/badges/controller/PhabricatorBadgesAwardController.php',
'PhabricatorBadgesAwardQuery' => 'applications/badges/query/PhabricatorBadgesAwardQuery.php',
'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php',
+ 'PhabricatorBadgesBadgeAwardTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php',
+ 'PhabricatorBadgesBadgeDescriptionTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php',
+ 'PhabricatorBadgesBadgeFlavorTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php',
+ 'PhabricatorBadgesBadgeIconTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeIconTransaction.php',
'PhabricatorBadgesBadgeNameNgrams' => 'applications/badges/storage/PhabricatorBadgesBadgeNameNgrams.php',
+ 'PhabricatorBadgesBadgeNameTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php',
+ 'PhabricatorBadgesBadgeQualityTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeQualityTransaction.php',
+ 'PhabricatorBadgesBadgeRevokeTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php',
+ 'PhabricatorBadgesBadgeStatusTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeStatusTransaction.php',
+ 'PhabricatorBadgesBadgeTransactionType' => 'applications/badges/xaction/PhabricatorBadgesBadgeTransactionType.php',
'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php',
'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php',
'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php',
@@ -6954,7 +6963,16 @@
'PhabricatorConduitResultInterface',
'PhabricatorNgramsInterface',
),
+ 'PhabricatorBadgesBadgeAwardTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeDescriptionTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeFlavorTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeIconTransaction' => 'PhabricatorBadgesBadgeTransactionType',
'PhabricatorBadgesBadgeNameNgrams' => 'PhabricatorSearchNgrams',
+ 'PhabricatorBadgesBadgeNameTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeQualityTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeRevokeTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeStatusTransaction' => 'PhabricatorBadgesBadgeTransactionType',
+ 'PhabricatorBadgesBadgeTransactionType' => 'PhabricatorModularTransactionType',
'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController',
'PhabricatorBadgesController' => 'PhabricatorController',
'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability',
@@ -6980,7 +6998,7 @@
'PhabricatorBadgesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorBadgesSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
'PhabricatorBadgesSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhabricatorBadgesTransaction' => 'PhabricatorApplicationTransaction',
+ 'PhabricatorBadgesTransaction' => 'PhabricatorModularTransaction',
'PhabricatorBadgesTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorBadgesTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorBadgesViewController' => 'PhabricatorBadgesProfileController',
diff --git a/src/applications/badges/controller/PhabricatorBadgesArchiveController.php b/src/applications/badges/controller/PhabricatorBadgesArchiveController.php
--- a/src/applications/badges/controller/PhabricatorBadgesArchiveController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesArchiveController.php
@@ -32,7 +32,8 @@
$xactions = array();
$xactions[] = id(new PhabricatorBadgesTransaction())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_STATUS)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeStatusTransaction::TRANSACTIONTYPE)
->setNewValue($new_status);
id(new PhabricatorBadgesEditor())
diff --git a/src/applications/badges/controller/PhabricatorBadgesAwardController.php b/src/applications/badges/controller/PhabricatorBadgesAwardController.php
--- a/src/applications/badges/controller/PhabricatorBadgesAwardController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesAwardController.php
@@ -37,7 +37,8 @@
foreach ($badges as $badge) {
$xactions = array();
$xactions[] = id(new PhabricatorBadgesTransaction())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_AWARD)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE)
->setNewValue($award_phids);
$editor = id(new PhabricatorBadgesEditor())
diff --git a/src/applications/badges/controller/PhabricatorBadgesEditRecipientsController.php b/src/applications/badges/controller/PhabricatorBadgesEditRecipientsController.php
--- a/src/applications/badges/controller/PhabricatorBadgesEditRecipientsController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesEditRecipientsController.php
@@ -37,7 +37,8 @@
}
$xactions[] = id(new PhabricatorBadgesTransaction())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_AWARD)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE)
->setNewValue($award_phids);
$editor = id(new PhabricatorBadgesEditor())
diff --git a/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php b/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
--- a/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
@@ -34,7 +34,8 @@
if ($request->isFormPost()) {
$xactions = array();
$xactions[] = id(new PhabricatorBadgesTransaction())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_REVOKE)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeRevokeTransaction::TRANSACTIONTYPE)
->setNewValue(array($remove_phid));
$editor = id(new PhabricatorBadgesEditor())
diff --git a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
--- a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
@@ -86,20 +86,24 @@
->setLabel(pht('Name'))
->setDescription(pht('Badge name.'))
->setConduitTypeDescription(pht('New badge name.'))
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_NAME)
- ->setValue($object->getName()),
+ ->setTransactionType(
+ PhabricatorBadgesBadgeNameTransaction::TRANSACTIONTYPE)
+ ->setValue($object->getName())
+ ->setIsRequired(true),
id(new PhabricatorTextEditField())
->setKey('flavor')
->setLabel(pht('Flavor text'))
->setDescription(pht('Short description of the badge.'))
->setConduitTypeDescription(pht('New badge flavor.'))
->setValue($object->getFlavor())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_FLAVOR),
+ ->setTransactionType(
+ PhabricatorBadgesBadgeFlavorTransaction::TRANSACTIONTYPE),
id(new PhabricatorIconSetEditField())
->setKey('icon')
->setLabel(pht('Icon'))
->setIconSet(new PhabricatorBadgesIconSet())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_ICON)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeIconTransaction::TRANSACTIONTYPE)
->setConduitDescription(pht('Change the badge icon.'))
->setConduitTypeDescription(pht('New badge icon.'))
->setValue($object->getIcon()),
@@ -109,14 +113,16 @@
->setDescription(pht('Color and rarity of the badge.'))
->setConduitTypeDescription(pht('New badge quality.'))
->setValue($object->getQuality())
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_QUALITY)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeQualityTransaction::TRANSACTIONTYPE)
->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()),
id(new PhabricatorRemarkupEditField())
->setKey('description')
->setLabel(pht('Description'))
->setDescription(pht('Badge long description.'))
->setConduitTypeDescription(pht('New badge description.'))
- ->setTransactionType(PhabricatorBadgesTransaction::TYPE_DESCRIPTION)
+ ->setTransactionType(
+ PhabricatorBadgesBadgeDescriptionTransaction::TRANSACTIONTYPE)
->setValue($object->getDescription()),
);
}
diff --git a/src/applications/badges/editor/PhabricatorBadgesEditor.php b/src/applications/badges/editor/PhabricatorBadgesEditor.php
--- a/src/applications/badges/editor/PhabricatorBadgesEditor.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditor.php
@@ -11,22 +11,20 @@
return pht('Badges');
}
+ public function getCreateObjectTitle($author, $object) {
+ return pht('%s created this badge.', $author);
+ }
+
+ public function getCreateObjectTitleForFeed($author, $object) {
+ return pht('%s created %s.', $author, $object);
+ }
+
protected function supportsSearch() {
return true;
}
public function getTransactionTypes() {
$types = parent::getTransactionTypes();
-
- $types[] = PhabricatorBadgesTransaction::TYPE_NAME;
- $types[] = PhabricatorBadgesTransaction::TYPE_FLAVOR;
- $types[] = PhabricatorBadgesTransaction::TYPE_DESCRIPTION;
- $types[] = PhabricatorBadgesTransaction::TYPE_ICON;
- $types[] = PhabricatorBadgesTransaction::TYPE_STATUS;
- $types[] = PhabricatorBadgesTransaction::TYPE_QUALITY;
- $types[] = PhabricatorBadgesTransaction::TYPE_AWARD;
- $types[] = PhabricatorBadgesTransaction::TYPE_REVOKE;
-
$types[] = PhabricatorTransactions::TYPE_COMMENT;
$types[] = PhabricatorTransactions::TYPE_EDGE;
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
@@ -34,159 +32,6 @@
return $types;
}
- protected function getCustomTransactionOldValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
- switch ($xaction->getTransactionType()) {
- case PhabricatorBadgesTransaction::TYPE_NAME:
- return $object->getName();
- case PhabricatorBadgesTransaction::TYPE_FLAVOR:
- return $object->getFlavor();
- case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
- return $object->getDescription();
- case PhabricatorBadgesTransaction::TYPE_ICON:
- return $object->getIcon();
- case PhabricatorBadgesTransaction::TYPE_QUALITY:
- return (int)$object->getQuality();
- case PhabricatorBadgesTransaction::TYPE_STATUS:
- return $object->getStatus();
- case PhabricatorBadgesTransaction::TYPE_AWARD:
- $award_phids = mpull($object->getAwards(), 'getRecipientPHID');
- return $award_phids;
- case PhabricatorBadgesTransaction::TYPE_REVOKE:
- return null;
- }
-
- return parent::getCustomTransactionOldValue($object, $xaction);
- }
-
- protected function getCustomTransactionNewValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorBadgesTransaction::TYPE_NAME:
- case PhabricatorBadgesTransaction::TYPE_FLAVOR:
- case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
- case PhabricatorBadgesTransaction::TYPE_ICON:
- case PhabricatorBadgesTransaction::TYPE_STATUS:
- case PhabricatorBadgesTransaction::TYPE_AWARD:
- case PhabricatorBadgesTransaction::TYPE_REVOKE:
- return $xaction->getNewValue();
- case PhabricatorBadgesTransaction::TYPE_QUALITY:
- return (int)$xaction->getNewValue();
- }
-
- return parent::getCustomTransactionNewValue($object, $xaction);
- }
-
- protected function applyCustomInternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- $type = $xaction->getTransactionType();
- switch ($type) {
- case PhabricatorBadgesTransaction::TYPE_NAME:
- $object->setName($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_FLAVOR:
- $object->setFlavor($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
- $object->setDescription($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_ICON:
- $object->setIcon($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_QUALITY:
- $object->setQuality($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_STATUS:
- $object->setStatus($xaction->getNewValue());
- return;
- case PhabricatorBadgesTransaction::TYPE_AWARD:
- case PhabricatorBadgesTransaction::TYPE_REVOKE:
- return;
- }
-
- return parent::applyCustomInternalTransaction($object, $xaction);
- }
-
- protected function applyCustomExternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- $type = $xaction->getTransactionType();
- switch ($type) {
- case PhabricatorBadgesTransaction::TYPE_NAME:
- case PhabricatorBadgesTransaction::TYPE_FLAVOR:
- case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
- case PhabricatorBadgesTransaction::TYPE_ICON:
- case PhabricatorBadgesTransaction::TYPE_STATUS:
- case PhabricatorBadgesTransaction::TYPE_QUALITY:
- return;
- case PhabricatorBadgesTransaction::TYPE_REVOKE:
- $revoked_recipient_phids = $xaction->getNewValue();
- $awards = $object->getAwards();
- $awards = mpull($awards, null, 'getRecipientPHID');
-
- foreach ($revoked_recipient_phids as $phid) {
- $awards[$phid]->delete();
- }
- $object->attachAwards($awards);
- return;
- case PhabricatorBadgesTransaction::TYPE_AWARD:
- $recipient_phids = $xaction->getNewValue();
- $awards = $object->getAwards();
- $awards = mpull($awards, null, 'getRecipientPHID');
-
- foreach ($recipient_phids as $phid) {
- $award = idx($awards, $phid);
- if (!$award) {
- $award = PhabricatorBadgesAward::initializeNewBadgesAward(
- $this->getActor(),
- $object,
- $phid);
- $award->save();
- $awards[] = $award;
- }
- }
- $object->attachAwards($awards);
- return;
- }
-
- return parent::applyCustomExternalTransaction($object, $xaction);
- }
-
- protected function validateTransaction(
- PhabricatorLiskDAO $object,
- $type,
- array $xactions) {
-
- $errors = parent::validateTransaction($object, $type, $xactions);
-
- switch ($type) {
- case PhabricatorBadgesTransaction::TYPE_NAME:
- $missing = $this->validateIsEmptyTextField(
- $object->getName(),
- $xactions);
-
- if ($missing) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Required'),
- pht('Badge name is required.'),
- nonempty(last($xactions), null));
-
- $error->setIsMissingFieldError(true);
- $errors[] = $error;
- }
- break;
- }
-
- return $errors;
- }
-
protected function shouldSendMail(
PhabricatorLiskDAO $object,
array $xactions) {
diff --git a/src/applications/badges/storage/PhabricatorBadgesTransaction.php b/src/applications/badges/storage/PhabricatorBadgesTransaction.php
--- a/src/applications/badges/storage/PhabricatorBadgesTransaction.php
+++ b/src/applications/badges/storage/PhabricatorBadgesTransaction.php
@@ -1,16 +1,7 @@
<?php
final class PhabricatorBadgesTransaction
- extends PhabricatorApplicationTransaction {
-
- const TYPE_NAME = 'badges:name';
- const TYPE_DESCRIPTION = 'badges:description';
- const TYPE_QUALITY = 'badges:quality';
- const TYPE_ICON = 'badges:icon';
- const TYPE_STATUS = 'badges:status';
- const TYPE_FLAVOR = 'badges:flavor';
- const TYPE_AWARD = 'badges:award';
- const TYPE_REVOKE = 'badges:revoke';
+ extends PhabricatorModularTransaction {
const MAILTAG_DETAILS = 'badges:details';
const MAILTAG_COMMENT = 'badges:comment';
@@ -28,209 +19,8 @@
return new PhabricatorBadgesTransactionComment();
}
-
- public function getTitle() {
- $author_phid = $this->getAuthorPHID();
- $object_phid = $this->getObjectPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case PhabricatorTransactions::TYPE_CREATE:
- return pht(
- '%s created this badge.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_NAME:
- if ($old === null) {
- return pht(
- '%s created this badge.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s renamed this badge from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $old,
- $new);
- }
- break;
- case self::TYPE_FLAVOR:
- if ($old === null) {
- return pht(
- '%s set the flavor text for this badge.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s updated the flavor text for this badge.',
- $this->renderHandleLink($author_phid));
- }
- break;
- case self::TYPE_DESCRIPTION:
- if ($old === null) {
- return pht(
- '%s set the description for this badge.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s updated the description for this badge.',
- $this->renderHandleLink($author_phid));
- }
- break;
- case self::TYPE_STATUS:
- switch ($new) {
- case PhabricatorBadgesBadge::STATUS_ACTIVE:
- return pht(
- '%s activated this badge.',
- $this->renderHandleLink($author_phid));
- case PhabricatorBadgesBadge::STATUS_ARCHIVED:
- return pht(
- '%s archived this badge.',
- $this->renderHandleLink($author_phid));
- }
- break;
- case self::TYPE_ICON:
- if ($old === null) {
- return pht(
- '%s set the icon for this badge as "%s".',
- $this->renderHandleLink($author_phid),
- $new);
- } else {
- $set = new PhabricatorBadgesIconSet();
-
- $icon_old = $set->getIconLabel($old);
- $icon_new = $set->getIconLabel($new);
-
- return pht(
- '%s updated the icon for this badge from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $icon_old,
- $icon_new);
- }
- break;
- case self::TYPE_QUALITY:
- $qual_new = PhabricatorBadgesQuality::getQualityName($new);
- $qual_old = PhabricatorBadgesQuality::getQualityName($old);
- if ($old === null) {
- return pht(
- '%s set the quality for this badge as "%s".',
- $this->renderHandleLink($author_phid),
- $qual_new);
- } else {
- return pht(
- '%s updated the quality for this badge from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $qual_old,
- $qual_new);
- }
- break;
- case self::TYPE_AWARD:
- if (!is_array($new)) {
- $new = array();
- }
- $handles = $this->renderHandleList($new);
- return pht(
- '%s awarded this badge to %s recipient(s): %s.',
- $this->renderHandleLink($author_phid),
- new PhutilNumber(count($new)),
- $handles);
- case self::TYPE_REVOKE:
- if (!is_array($new)) {
- $new = array();
- }
- $handles = $this->renderHandleList($new);
- return pht(
- '%s revoked this badge from %s recipient(s): %s.',
- $this->renderHandleLink($author_phid),
- new PhutilNumber(count($new)),
- $handles);
- }
-
- return parent::getTitle();
- }
-
- public function getTitleForFeed() {
- $author_phid = $this->getAuthorPHID();
- $object_phid = $this->getObjectPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case self::TYPE_NAME:
- if ($old === null) {
- return pht(
- '%s created %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
-
- } else {
- return pht(
- '%s renamed %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- }
- break;
- case self::TYPE_FLAVOR:
- return pht(
- '%s updated the flavor text for %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- case self::TYPE_ICON:
- return pht(
- '%s updated the icon for %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- case self::TYPE_QUALITY:
- return pht(
- '%s updated the quality level for %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- case self::TYPE_DESCRIPTION:
- return pht(
- '%s updated the description for %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- case self::TYPE_STATUS:
- switch ($new) {
- case PhabricatorBadgesBadge::STATUS_ACTIVE:
- return pht(
- '%s activated %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- case PhabricatorBadgesBadge::STATUS_ARCHIVED:
- return pht(
- '%s archived %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid));
- }
- break;
- case self::TYPE_AWARD:
- if (!is_array($new)) {
- $new = array();
- }
- $handles = $this->renderHandleList($new);
- return pht(
- '%s awarded %s to %s recipient(s): %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid),
- new PhutilNumber(count($new)),
- $handles);
- case self::TYPE_REVOKE:
- if (!is_array($new)) {
- $new = array();
- }
- $handles = $this->renderHandleList($new);
- return pht(
- '%s revoked %s from %s recipient(s): %s.',
- $this->renderHandleLink($author_phid),
- $this->renderHandleLink($object_phid),
- new PhutilNumber(count($new)),
- $handles);
- }
-
- return parent::getTitleForFeed();
+ public function getBaseTransactionClass() {
+ return 'PhabricatorBadgesBadgeTransactionType';
}
public function getMailTags() {
@@ -240,14 +30,16 @@
case PhabricatorTransactions::TYPE_COMMENT:
$tags[] = self::MAILTAG_COMMENT;
break;
- case self::TYPE_NAME:
- case self::TYPE_DESCRIPTION:
- case self::TYPE_FLAVOR:
- case self::TYPE_ICON:
- case self::TYPE_STATUS:
- case self::TYPE_QUALITY:
+ case PhabricatorBadgesBadgeNameTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeDescriptionTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeFlavorTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeIconTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeStatusTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeQualityTransaction::TRANSACTIONTYPE:
$tags[] = self::MAILTAG_DETAILS;
break;
+ case PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE:
+ case PhabricatorBadgesBadgeRevokeTransaction::TRANSACTIONTYPE:
default:
$tags[] = self::MAILTAG_OTHER;
break;
@@ -255,49 +47,4 @@
return $tags;
}
-
- public function shouldHide() {
- $old = $this->getOldValue();
- switch ($this->getTransactionType()) {
- case self::TYPE_DESCRIPTION:
- return ($old === null);
- }
- return parent::shouldHide();
- }
-
- public function hasChangeDetails() {
- switch ($this->getTransactionType()) {
- case self::TYPE_DESCRIPTION:
- return ($this->getOldValue() !== null);
- }
-
- return parent::hasChangeDetails();
- }
-
- public function renderChangeDetails(PhabricatorUser $viewer) {
- return $this->renderTextCorpusChangeDetails(
- $viewer,
- $this->getOldValue(),
- $this->getNewValue());
- }
-
- public function getRequiredHandlePHIDs() {
- $phids = parent::getRequiredHandlePHIDs();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case self::TYPE_AWARD:
- case self::TYPE_REVOKE:
- $new = $this->getNewValue();
- if (!is_array($new)) {
- $new = array();
- }
- foreach ($new as $phid) {
- $phids[] = $phid;
- }
- break;
- }
-
- return $phids;
- }
}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php
@@ -0,0 +1,62 @@
+<?php
+
+final class PhabricatorBadgesBadgeAwardTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.award';
+
+ public function generateOldValue($object) {
+ return mpull($object->getAwards(), 'getRecipientPHID');
+ }
+
+ public function applyExternalEffects($object, $value) {
+ $awards = $object->getAwards();
+ $awards = mpull($awards, null, 'getRecipientPHID');
+
+ foreach ($value as $phid) {
+ $award = idx($awards, $phid);
+ if (!$award) {
+ $award = PhabricatorBadgesAward::initializeNewBadgesAward(
+ $this->getActor(),
+ $object,
+ $phid);
+ $award->save();
+ $awards[] = $award;
+ }
+ }
+ $object->attachAwards($awards);
+ return;
+ }
+
+ public function getTitle() {
+ $new = $this->getNewValue();
+ if (!is_array($new)) {
+ $new = array();
+ }
+ $handles = $this->renderHandleList($new);
+ return pht(
+ '%s awarded this badge to %s recipient(s): %s.',
+ $this->renderAuthor(),
+ new PhutilNumber(count($new)),
+ $handles);
+ }
+
+ public function getTitleForFeed() {
+ $new = $this->getNewValue();
+ if (!is_array($new)) {
+ $new = array();
+ }
+ $handles = $this->renderHandleList($new);
+ return pht(
+ '%s awarded %s to %s recipient(s): %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ new PhutilNumber(count($new)),
+ $handles);
+ }
+
+ public function getIcon() {
+ return 'fa-user-plus';
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php
@@ -0,0 +1,57 @@
+<?php
+
+final class PhabricatorBadgesBadgeDescriptionTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.description';
+
+ public function generateOldValue($object) {
+ return $object->getDescription();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setDescription($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s updated the badge description.',
+ $this->renderAuthor());
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s updated the badge description for %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function getMailDiffSectionHeader() {
+ return pht('CHANGES TO BADGE DESCRIPTION');
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+
+ return id(new PhabricatorApplicationTransactionTextDiffDetailView())
+ ->setViewer($viewer)
+ ->setOldText($this->getOldValue())
+ ->setNewText($this->getNewValue());
+ }
+
+ public function newRemarkupChanges() {
+ $changes = array();
+
+ $changes[] = $this->newRemarkupChange()
+ ->setOldValue($this->getOldValue())
+ ->setNewValue($this->getNewValue());
+
+ return $changes;
+ }
+
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php
@@ -0,0 +1,33 @@
+<?php
+
+final class PhabricatorBadgesBadgeFlavorTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.flavor';
+
+ public function generateOldValue($object) {
+ return $object->getFlavor();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setFlavor($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s updated the flavor from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s updated %s flavor text from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeIconTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeIconTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeIconTransaction.php
@@ -0,0 +1,56 @@
+<?php
+
+final class PhabricatorBadgesBadgeIconTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.icon';
+
+ public function generateOldValue($object) {
+ return $object->getIcon();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIcon($value);
+ }
+
+ public function shouldHide() {
+ if ($this->isCreateTransaction()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function getTitle() {
+ $old = $this->getIconLabel($this->getOldValue());
+ $new = $this->getIconLabel($this->getNewValue());
+
+ return pht(
+ '%s changed the badge icon from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderValue($old),
+ $this->renderValue($new));
+ }
+
+ public function getTitleForFeed() {
+ $old = $this->getIconLabel($this->getOldValue());
+ $new = $this->getIconLabel($this->getNewValue());
+
+ return pht(
+ '%s changed the badge icon for %s from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ $this->renderValue($old),
+ $this->renderValue($new));
+ }
+
+ private function getIconLabel($icon) {
+ $set = new PhabricatorBadgesIconSet();
+ return $set->getIconLabel($icon);
+ }
+
+ public function getIcon() {
+ return $this->getNewValue();
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php
@@ -0,0 +1,44 @@
+<?php
+
+final class PhabricatorBadgesBadgeNameTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.name';
+
+ public function generateOldValue($object) {
+ return $object->getName();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setName($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s renamed this badge from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s renamed %s badge %s to %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
+ $errors[] = $this->newRequiredError(
+ pht('Badges must have a name.'));
+ }
+
+ return $errors;
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeQualityTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeQualityTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeQualityTransaction.php
@@ -0,0 +1,70 @@
+<?php
+
+final class PhabricatorBadgesBadgeQualityTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.quality';
+
+ public function generateOldValue($object) {
+ return $object->getQuality();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setQuality($value);
+ }
+
+ public function shouldHide() {
+ if ($this->isCreateTransaction()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function getTitle() {
+ $old = $this->getQualityLabel($this->getOldValue());
+ $new = $this->getQualityLabel($this->getNewValue());
+
+ return pht(
+ '%s updated the quality from %s to %s.',
+ $this->renderAuthor(),
+ $old,
+ $new);
+ }
+
+ public function getTitleForFeed() {
+ $old = $this->getQualityLabel($this->getOldValue());
+ $new = $this->getQualityLabel($this->getNewValue());
+
+ return pht(
+ '%s updated %s quality from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ $new,
+ $old);
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ if ($this->isEmptyTextTransaction($object->getQuality(), $xactions)) {
+ $errors[] = $this->newRequiredError(
+ pht('Badge quality must be set.'));
+ }
+
+ $map = PhabricatorBadgesQuality::getQualityMap();
+ if (!$map[$object->getQuality()]) {
+ $errors[] = $this->newRequiredError(
+ pht('Badge quality is not valid.'));
+ }
+
+ return $errors;
+ }
+
+ private function getQualityLabel($quality) {
+ $map = PhabricatorBadgesQuality::getQualityMap();
+ $name = $map[$quality]['name'];
+ return $this->renderValue($name);
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php
@@ -0,0 +1,54 @@
+<?php
+
+final class PhabricatorBadgesBadgeRevokeTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badge.revoke';
+
+ public function generateOldValue($object) {
+ return null;
+ }
+
+ public function applyExternalEffects($object, $value) {
+ $awards = $object->getAwards();
+ $awards = mpull($awards, null, 'getRecipientPHID');
+
+ foreach ($value as $phid) {
+ $awards[$phid]->delete();
+ }
+ $object->attachAwards($awards);
+ return;
+ }
+
+ public function getTitle() {
+ $new = $this->getNewValue();
+ if (!is_array($new)) {
+ $new = array();
+ }
+ $handles = $this->renderHandleList($new);
+ return pht(
+ '%s revoked this badge from %s recipient(s): %s.',
+ $this->renderAuthor(),
+ new PhutilNumber(count($new)),
+ $handles);
+ }
+
+ public function getTitleForFeed() {
+ $new = $this->getNewValue();
+ if (!is_array($new)) {
+ $new = array();
+ }
+ $handles = $this->renderHandleList($new);
+ return pht(
+ '%s revoked %s from %s recipient(s): %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ new PhutilNumber(count($new)),
+ $handles);
+ }
+
+ public function getIcon() {
+ return 'fa-user-times';
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeStatusTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeStatusTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeStatusTransaction.php
@@ -0,0 +1,50 @@
+<?php
+
+final class PhabricatorBadgesBadgeStatusTransaction
+ extends PhabricatorBadgesBadgeTransactionType {
+
+ const TRANSACTIONTYPE = 'badges.status';
+
+ public function generateOldValue($object) {
+ return $object->getStatus();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setStatus($value);
+ }
+
+ public function getTitle() {
+ if ($this->getNewValue() == PhabricatorBadgesBadge::STATUS_ARCHIVED) {
+ return pht(
+ '%s disabled this badge.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s enabled this badge.',
+ $this->renderAuthor());
+ }
+ }
+
+ public function getTitleForFeed() {
+ if ($this->getNewValue() == PhabricatorBadgesBadge::STATUS_ARCHIVED) {
+ return pht(
+ '%s disabled the badge %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ } else {
+ return pht(
+ '%s enabled the badge %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ }
+ }
+
+ public function getIcon() {
+ if ($this->getNewValue() == PhabricatorBadgesBadge::STATUS_ARCHIVED) {
+ return 'fa-ban';
+ } else {
+ return 'fa-check';
+ }
+ }
+
+}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeTransactionType.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeTransactionType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeTransactionType.php
@@ -0,0 +1,4 @@
+<?php
+
+abstract class PhabricatorBadgesBadgeTransactionType
+ extends PhabricatorModularTransactionType {}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 24, 4:03 AM (9 h, 34 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7036665
Default Alt Text
D17402.diff (38 KB)
Attached To
Mode
D17402: Modular Transactions for Badges
Attached
Detach File
Event Timeline
Log In to Comment