Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15443001
D15551.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
15 KB
Referenced Files
None
Subscribers
None
D15551.diff
View Options
diff --git a/resources/sql/autopatches/20160330.badges.migratequality.sql b/resources/sql/autopatches/20160330.badges.migratequality.sql
new file mode 100644
--- /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
--- /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
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1880,6 +1880,7 @@
'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 @@
'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
--- /dev/null
+++ b/src/applications/badges/constants/PhabricatorBadgesQuality.php
@@ -0,0 +1,78 @@
+<?php
+
+final class PhabricatorBadgesQuality
+ extends Phobject {
+
+ const POOR = 140;
+ const COMMON = 120;
+ const UNCOMMON = 100;
+ const RARE = 80;
+ const EPIC = 60;
+ const LEGENDARY = 40;
+ const HEIRLOOM = 20;
+
+ const DEFAULT_QUALITY = 140;
+
+ public static function getQualityName($quality) {
+ $map = self::getQualityDictionary($quality);
+ $default = pht('Unknown Quality ("%s")', $quality);
+ return idx($map, 'name', $default);
+ }
+
+ public static function getQualityColor($quality) {
+ $map = self::getQualityDictionary($quality);
+ $default = 'grey';
+ return idx($map, 'color', $default);
+ }
+
+ private static function getQualityDictionary($quality) {
+ $map = self::getQualityMap();
+ $default = array();
+ return idx($map, $quality, $default);
+ }
+
+ public static function getQualityMap() {
+ return array(
+ self::POOR => 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
--- a/src/applications/badges/controller/PhabricatorBadgesViewController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesViewController.php
@@ -86,11 +86,12 @@
$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
--- a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
@@ -89,7 +89,7 @@
->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
--- a/src/applications/badges/editor/PhabricatorBadgesEditor.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditor.php
@@ -66,10 +66,11 @@
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
--- a/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
+++ b/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
@@ -34,9 +34,7 @@
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 @@
$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 @@
->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
--- a/src/applications/badges/storage/PhabricatorBadgesBadge.php
+++ b/src/applications/badges/storage/PhabricatorBadgesBadge.php
@@ -25,15 +25,6 @@
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 @@
);
}
- 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 @@
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 @@
'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
--- a/src/applications/badges/storage/PhabricatorBadgesTransaction.php
+++ b/src/applications/badges/storage/PhabricatorBadgesTransaction.php
@@ -111,9 +111,8 @@
$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
--- a/src/view/phui/PHUIBadgeMiniView.php
+++ b/src/view/phui/PHUIBadgeMiniView.php
@@ -48,7 +48,9 @@
$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
--- a/src/view/phui/PHUIBadgeView.php
+++ b/src/view/phui/PHUIBadgeView.php
@@ -10,16 +10,6 @@
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 @@
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 @@
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 @@
$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 @@
),
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();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Mar 28, 1:41 AM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7379136
Default Alt Text
D15551.diff (15 KB)
Attached To
Mode
D15551: Converting badge quality property from color to an integer representation for later sorting purposes
Attached
Detach File
Event Timeline
Log In to Comment