diff --git a/resources/sql/autopatches/20160330.badges.migratequality.sql b/resources/sql/autopatches/20160330.badges.migratequality.sql new file mode 100644 index 0000000000..e86b6df1b8 --- /dev/null +++ b/resources/sql/autopatches/20160330.badges.migratequality.sql @@ -0,0 +1,32 @@ +/* Change quality from color to int */ + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 140 + WHERE quality = 'grey'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 120 + WHERE quality = 'white'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 100 + WHERE quality = 'green'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 80 + WHERE quality = 'blue'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 60 + WHERE quality = 'indigo'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 40 + WHERE quality = 'orange'; + +UPDATE {$NAMESPACE}_badges.badges_badge + SET quality = 20 + WHERE quality = 'yellow'; + +ALTER TABLE {$NAMESPACE}_badges.badges_badge + MODIFY quality INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160330.badges.qualityxaction.mig.sql b/resources/sql/autopatches/20160330.badges.qualityxaction.mig.sql new file mode 100644 index 0000000000..3079618f85 --- /dev/null +++ b/resources/sql/autopatches/20160330.badges.qualityxaction.mig.sql @@ -0,0 +1,59 @@ +/* Migrate old badge quality transactions */ + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 140 + WHERE oldValue = '"grey"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 120 + WHERE oldValue = '"white"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 100 + WHERE oldValue = '"green"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 80 + WHERE oldValue = '"blue"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 60 + WHERE oldValue = '"indigo"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 40 + WHERE oldValue = '"orange"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET oldValue = 20 + WHERE oldValue = '"yellow"' AND transactionType = 'badges:quality'; + + + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 140 + WHERE newValue = '"grey"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 120 + WHERE newValue = '"white"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 100 + WHERE newValue = '"green"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 80 + WHERE newValue = '"blue"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 60 + WHERE newValue = '"indigo"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 40 + WHERE newValue = '"orange"' AND transactionType = 'badges:quality'; + +UPDATE {$NAMESPACE}_badges.badges_transaction + SET newValue = 20 + WHERE newValue = '"yellow"' AND transactionType = 'badges:quality'; diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 134e2bbcbe..fafa0bdbe0 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1880,6 +1880,7 @@ phutil_register_library_map(array( 'PhabricatorBadgesListController' => 'applications/badges/controller/PhabricatorBadgesListController.php', 'PhabricatorBadgesMailReceiver' => 'applications/badges/mail/PhabricatorBadgesMailReceiver.php', 'PhabricatorBadgesPHIDType' => 'applications/badges/phid/PhabricatorBadgesPHIDType.php', + 'PhabricatorBadgesQuality' => 'applications/badges/constants/PhabricatorBadgesQuality.php', 'PhabricatorBadgesQuery' => 'applications/badges/query/PhabricatorBadgesQuery.php', 'PhabricatorBadgesRecipientsListView' => 'applications/badges/view/PhabricatorBadgesRecipientsListView.php', 'PhabricatorBadgesRemoveRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php', @@ -6245,6 +6246,7 @@ phutil_register_library_map(array( 'PhabricatorBadgesListController' => 'PhabricatorBadgesController', 'PhabricatorBadgesMailReceiver' => 'PhabricatorObjectMailReceiver', 'PhabricatorBadgesPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorBadgesQuality' => 'Phobject', 'PhabricatorBadgesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorBadgesRecipientsListView' => 'AphrontView', 'PhabricatorBadgesRemoveRecipientsController' => 'PhabricatorBadgesController', diff --git a/src/applications/badges/constants/PhabricatorBadgesQuality.php b/src/applications/badges/constants/PhabricatorBadgesQuality.php new file mode 100644 index 0000000000..8ab7f3b7d9 --- /dev/null +++ b/src/applications/badges/constants/PhabricatorBadgesQuality.php @@ -0,0 +1,78 @@ + array( + 'rarity' => 140, + 'name' => pht('Poor'), + 'color' => 'grey', + ), + self::COMMON => array( + 'rarity' => 120, + 'name' => pht('Common'), + 'color' => 'white', + ), + self::UNCOMMON => array( + 'rarity' => 100, + 'name' => pht('Uncommon'), + 'color' => 'green', + ), + self::RARE => array( + 'rarity' => 80, + 'name' => pht('Rare'), + 'color' => 'blue', + ), + self::EPIC => array( + 'rarity' => 60, + 'name' => pht('Epic'), + 'color' => 'indigo', + ), + self::LEGENDARY => array( + 'rarity' => 40, + 'name' => pht('Legendary'), + 'color' => 'orange', + ), + self::HEIRLOOM => array( + 'rarity' => 20, + 'name' => pht('Heirloom'), + 'color' => 'yellow', + ), + ); + } + + public static function getDropdownQualityMap() { + $map = self::getQualityMap(); + return ipull($map, 'name'); + } +} diff --git a/src/applications/badges/controller/PhabricatorBadgesViewController.php b/src/applications/badges/controller/PhabricatorBadgesViewController.php index 0f3077de0b..3e3d1ffbc6 100644 --- a/src/applications/badges/controller/PhabricatorBadgesViewController.php +++ b/src/applications/badges/controller/PhabricatorBadgesViewController.php @@ -86,11 +86,12 @@ final class PhabricatorBadgesViewController $view = id(new PHUIPropertyListView()) ->setUser($viewer); - $quality = idx($badge->getQualityNameMap(), $badge->getQuality()); + $quality_name = PhabricatorBadgesQuality::getQualityName( + $badge->getQuality()); $view->addProperty( pht('Quality'), - $quality); + $quality_name); $view->addProperty( pht('Icon'), diff --git a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php index 70cdd08d39..28f07a6dad 100644 --- a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php +++ b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php @@ -89,7 +89,7 @@ final class PhabricatorBadgesEditEngine ->setLabel(pht('Quality')) ->setValue($object->getQuality()) ->setTransactionType(PhabricatorBadgesTransaction::TYPE_QUALITY) - ->setOptions($object->getQualityNameMap()), + ->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()), id(new PhabricatorRemarkupEditField()) ->setKey('description') ->setLabel(pht('Description')) diff --git a/src/applications/badges/editor/PhabricatorBadgesEditor.php b/src/applications/badges/editor/PhabricatorBadgesEditor.php index af3def28c5..c8dc23df3d 100644 --- a/src/applications/badges/editor/PhabricatorBadgesEditor.php +++ b/src/applications/badges/editor/PhabricatorBadgesEditor.php @@ -66,10 +66,11 @@ final class PhabricatorBadgesEditor case PhabricatorBadgesTransaction::TYPE_DESCRIPTION: case PhabricatorBadgesTransaction::TYPE_ICON: case PhabricatorBadgesTransaction::TYPE_STATUS: - case PhabricatorBadgesTransaction::TYPE_QUALITY: case PhabricatorBadgesTransaction::TYPE_AWARD: case PhabricatorBadgesTransaction::TYPE_REVOKE: return $xaction->getNewValue(); + case PhabricatorBadgesTransaction::TYPE_QUALITY: + return (int)$xaction->getNewValue(); } return parent::getCustomTransactionNewValue($object, $xaction); diff --git a/src/applications/badges/query/PhabricatorBadgesSearchEngine.php b/src/applications/badges/query/PhabricatorBadgesSearchEngine.php index 4bad4d2c65..025ad3b53f 100644 --- a/src/applications/badges/query/PhabricatorBadgesSearchEngine.php +++ b/src/applications/badges/query/PhabricatorBadgesSearchEngine.php @@ -34,9 +34,7 @@ final class PhabricatorBadgesSearchEngine id(new PhabricatorSearchCheckboxesField()) ->setKey('qualities') ->setLabel(pht('Quality')) - ->setOptions( - id(new PhabricatorBadgesBadge()) - ->getQualityNameMap()), + ->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()), id(new PhabricatorSearchCheckboxesField()) ->setKey('statuses') ->setLabel(pht('Status')) @@ -110,8 +108,9 @@ final class PhabricatorBadgesSearchEngine $list = id(new PHUIObjectItemListView()); foreach ($badges as $badge) { + $quality_name = PhabricatorBadgesQuality::getQualityName( + $badge->getQuality()); - $quality = idx($badge->getQualityNameMap(), $badge->getQuality()); $mini_badge = id(new PHUIBadgeMiniView()) ->setHeader($badge->getName()) ->setIcon($badge->getIcon()) @@ -121,7 +120,7 @@ final class PhabricatorBadgesSearchEngine ->setHeader($badge->getName()) ->setBadge($mini_badge) ->setHref('/badges/view/'.$badge->getID().'/') - ->addAttribute($quality) + ->addAttribute($quality_name) ->addAttribute($badge->getFlavor()); if ($badge->isArchived()) { diff --git a/src/applications/badges/storage/PhabricatorBadgesBadge.php b/src/applications/badges/storage/PhabricatorBadgesBadge.php index 2959111dc4..c5b29df09d 100644 --- a/src/applications/badges/storage/PhabricatorBadgesBadge.php +++ b/src/applications/badges/storage/PhabricatorBadgesBadge.php @@ -25,15 +25,6 @@ final class PhabricatorBadgesBadge extends PhabricatorBadgesDAO const STATUS_ARCHIVED = 'closed'; const DEFAULT_ICON = 'fa-star'; - const DEFAULT_QUALITY = 'green'; - - const POOR = 'grey'; - const COMMON = 'white'; - const UNCOMMON = 'green'; - const RARE = 'blue'; - const EPIC = 'indigo'; - const LEGENDARY = 'orange'; - const HEIRLOOM = 'yellow'; public static function getStatusNameMap() { return array( @@ -42,18 +33,6 @@ final class PhabricatorBadgesBadge extends PhabricatorBadgesDAO ); } - public static function getQualityNameMap() { - return array( - self::POOR => pht('Poor'), - self::COMMON => pht('Common'), - self::UNCOMMON => pht('Uncommon'), - self::RARE => pht('Rare'), - self::EPIC => pht('Epic'), - self::LEGENDARY => pht('Legendary'), - self::HEIRLOOM => pht('Heirloom'), - ); - } - public static function initializeNewBadge(PhabricatorUser $actor) { $app = id(new PhabricatorApplicationQuery()) ->setViewer($actor) @@ -67,7 +46,7 @@ final class PhabricatorBadgesBadge extends PhabricatorBadgesDAO return id(new PhabricatorBadgesBadge()) ->setIcon(self::DEFAULT_ICON) - ->setQuality(self::DEFAULT_QUALITY) + ->setQuality(PhabricatorBadgesQuality::DEFAULT_QUALITY) ->setCreatorPHID($actor->getPHID()) ->setEditPolicy($edit_policy) ->setStatus(self::STATUS_ACTIVE); @@ -81,7 +60,7 @@ final class PhabricatorBadgesBadge extends PhabricatorBadgesDAO 'flavor' => 'text255', 'description' => 'text', 'icon' => 'text255', - 'quality' => 'text255', + 'quality' => 'uint32', 'status' => 'text32', 'mailKey' => 'bytes20', ), diff --git a/src/applications/badges/storage/PhabricatorBadgesTransaction.php b/src/applications/badges/storage/PhabricatorBadgesTransaction.php index 85c0bdce4a..f088c2d973 100644 --- a/src/applications/badges/storage/PhabricatorBadgesTransaction.php +++ b/src/applications/badges/storage/PhabricatorBadgesTransaction.php @@ -111,9 +111,8 @@ final class PhabricatorBadgesTransaction $this->renderHandleLink($author_phid), $new); } else { - $qual_map = PhabricatorBadgesBadge::getQualityNameMap(); - $qual_new = idx($qual_map, $new, $new); - $qual_old = idx($qual_map, $old, $old); + $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), diff --git a/src/view/phui/PHUIBadgeMiniView.php b/src/view/phui/PHUIBadgeMiniView.php index 21f455b4d6..4e058ed29d 100644 --- a/src/view/phui/PHUIBadgeMiniView.php +++ b/src/view/phui/PHUIBadgeMiniView.php @@ -48,7 +48,9 @@ final class PHUIBadgeMiniView extends AphrontTagView { $classes = array(); $classes[] = 'phui-badge-mini'; if ($this->quality) { - $classes[] = 'phui-badge-mini-'.$this->quality; + $quality_color = PhabricatorBadgesQuality::getQualityColor( + $this->quality); + $classes[] = 'phui-badge-mini-'.$quality_color; } return array( diff --git a/src/view/phui/PHUIBadgeView.php b/src/view/phui/PHUIBadgeView.php index 7e9f310843..7594b6cb30 100644 --- a/src/view/phui/PHUIBadgeView.php +++ b/src/view/phui/PHUIBadgeView.php @@ -10,16 +10,6 @@ final class PHUIBadgeView extends AphrontTagView { private $subhead; private $bylines = array(); - // Yes, World of Warcraft Item Quality - const POOR = 'grey'; - const COMMON = 'white'; - const UNCOMMON = 'green'; - const RARE = 'blue'; - const EPIC = 'indigo'; - const LEGENDARY = 'orange'; - const HEIRLOOM = 'yellow'; - - public function setIcon($icon) { $this->icon = $icon; return $this; @@ -35,6 +25,14 @@ final class PHUIBadgeView extends AphrontTagView { return $this; } + private function getQualityColor() { + return PhabricatorBadgesQuality::getQualityColor($this->quality); + } + + private function getQualityName() { + return PhabricatorBadgesQuality::getQualityName($this->quality); + } + public function setSource($source) { $this->source = $source; return $this; @@ -55,26 +53,6 @@ final class PHUIBadgeView extends AphrontTagView { return $this; } - private function getQualityTitle() { - - switch ($this->quality) { - case self::POOR: - return pht('Poor'); - case self::COMMON: - return pht('Common'); - case self::UNCOMMON: - return pht('Uncommon'); - case self::RARE: - return pht('Rare'); - case self::EPIC: - return pht('Epic'); - case self::LEGENDARY: - return pht('Legendary'); - case self::HEIRLOOM: - return pht('Heirloom'); - } - } - protected function getTagName() { return 'span'; } @@ -86,7 +64,8 @@ final class PHUIBadgeView extends AphrontTagView { $classes = array(); $classes[] = 'phui-badge-view'; if ($this->quality) { - $classes[] = 'phui-badge-view-'.$this->quality; + $color = $this->getQualityColor(); + $classes[] = 'phui-badge-view-'.$color; } return array( @@ -131,7 +110,7 @@ final class PHUIBadgeView extends AphrontTagView { ), array($header, $subhead)); - $quality = phutil_tag_div('phui-badge-quality', $this->getQualityTitle()); + $quality = phutil_tag_div('phui-badge-quality', $this->getQualityName()); $source = phutil_tag_div('phui-badge-source', $this->source); $bylines = array();