1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-26 15:30:58 +01:00

Converting badge quality property from color to an integer representation for later sorting purposes

Summary: Ref T9007

Test Plan: Create badges, update quality, search by quality without change of functionality.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin

Maniphest Tasks: T9007

Differential Revision: https://secure.phabricator.com/D15551
This commit is contained in:
lkassianik 2016-03-30 17:07:27 -07:00
parent d9bb66f610
commit 00425cac94
12 changed files with 199 additions and 68 deletions

View file

@ -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;

View file

@ -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';

View file

@ -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',

View file

@ -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');
}
}

View file

@ -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'),

View file

@ -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'))

View file

@ -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);

View file

@ -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()) {

View file

@ -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',
),

View file

@ -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),

View file

@ -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(

View file

@ -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();