public function getTitle()
 {
     $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 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_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:
             if ($old === null) {
                 return pht('%s set the quality for this badge as "%s".', $this->renderHandleLink($author_phid), $new);
             } else {
                 $qual_map = PhabricatorBadgesBadge::getQualityNameMap();
                 $qual_new = idx($qual_map, $new, $new);
                 $qual_old = idx($qual_map, $old, $old);
                 return pht('%s updated the quality for this badge from "%s" to "%s".', $this->renderHandleLink($author_phid), $qual_old, $qual_new);
             }
             break;
     }
     return parent::getTitle();
 }
 public function getTitle()
 {
     $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 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:
             if ($old === null) {
                 return pht('%s set the quality for this badge as "%s".', $this->renderHandleLink($author_phid), $new);
             } else {
                 $qual_new = PhabricatorBadgesQuality::getQualityName($new);
                 $qual_old = PhabricatorBadgesQuality::getQualityName($old);
                 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();
 }