Page MenuHomePhabricator

D15551.diff
No OneTemporary

D15551.diff

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

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)

Event Timeline