@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+199 -68
+32
resources/sql/autopatches/20160330.badges.migratequality.sql
··· 1 + /* Change quality from color to int */ 2 + 3 + UPDATE {$NAMESPACE}_badges.badges_badge 4 + SET quality = 140 5 + WHERE quality = 'grey'; 6 + 7 + UPDATE {$NAMESPACE}_badges.badges_badge 8 + SET quality = 120 9 + WHERE quality = 'white'; 10 + 11 + UPDATE {$NAMESPACE}_badges.badges_badge 12 + SET quality = 100 13 + WHERE quality = 'green'; 14 + 15 + UPDATE {$NAMESPACE}_badges.badges_badge 16 + SET quality = 80 17 + WHERE quality = 'blue'; 18 + 19 + UPDATE {$NAMESPACE}_badges.badges_badge 20 + SET quality = 60 21 + WHERE quality = 'indigo'; 22 + 23 + UPDATE {$NAMESPACE}_badges.badges_badge 24 + SET quality = 40 25 + WHERE quality = 'orange'; 26 + 27 + UPDATE {$NAMESPACE}_badges.badges_badge 28 + SET quality = 20 29 + WHERE quality = 'yellow'; 30 + 31 + ALTER TABLE {$NAMESPACE}_badges.badges_badge 32 + MODIFY quality INT UNSIGNED NOT NULL;
+59
resources/sql/autopatches/20160330.badges.qualityxaction.mig.sql
··· 1 + /* Migrate old badge quality transactions */ 2 + 3 + UPDATE {$NAMESPACE}_badges.badges_transaction 4 + SET oldValue = 140 5 + WHERE oldValue = '"grey"' AND transactionType = 'badges:quality'; 6 + 7 + UPDATE {$NAMESPACE}_badges.badges_transaction 8 + SET oldValue = 120 9 + WHERE oldValue = '"white"' AND transactionType = 'badges:quality'; 10 + 11 + UPDATE {$NAMESPACE}_badges.badges_transaction 12 + SET oldValue = 100 13 + WHERE oldValue = '"green"' AND transactionType = 'badges:quality'; 14 + 15 + UPDATE {$NAMESPACE}_badges.badges_transaction 16 + SET oldValue = 80 17 + WHERE oldValue = '"blue"' AND transactionType = 'badges:quality'; 18 + 19 + UPDATE {$NAMESPACE}_badges.badges_transaction 20 + SET oldValue = 60 21 + WHERE oldValue = '"indigo"' AND transactionType = 'badges:quality'; 22 + 23 + UPDATE {$NAMESPACE}_badges.badges_transaction 24 + SET oldValue = 40 25 + WHERE oldValue = '"orange"' AND transactionType = 'badges:quality'; 26 + 27 + UPDATE {$NAMESPACE}_badges.badges_transaction 28 + SET oldValue = 20 29 + WHERE oldValue = '"yellow"' AND transactionType = 'badges:quality'; 30 + 31 + 32 + 33 + UPDATE {$NAMESPACE}_badges.badges_transaction 34 + SET newValue = 140 35 + WHERE newValue = '"grey"' AND transactionType = 'badges:quality'; 36 + 37 + UPDATE {$NAMESPACE}_badges.badges_transaction 38 + SET newValue = 120 39 + WHERE newValue = '"white"' AND transactionType = 'badges:quality'; 40 + 41 + UPDATE {$NAMESPACE}_badges.badges_transaction 42 + SET newValue = 100 43 + WHERE newValue = '"green"' AND transactionType = 'badges:quality'; 44 + 45 + UPDATE {$NAMESPACE}_badges.badges_transaction 46 + SET newValue = 80 47 + WHERE newValue = '"blue"' AND transactionType = 'badges:quality'; 48 + 49 + UPDATE {$NAMESPACE}_badges.badges_transaction 50 + SET newValue = 60 51 + WHERE newValue = '"indigo"' AND transactionType = 'badges:quality'; 52 + 53 + UPDATE {$NAMESPACE}_badges.badges_transaction 54 + SET newValue = 40 55 + WHERE newValue = '"orange"' AND transactionType = 'badges:quality'; 56 + 57 + UPDATE {$NAMESPACE}_badges.badges_transaction 58 + SET newValue = 20 59 + WHERE newValue = '"yellow"' AND transactionType = 'badges:quality';
+2
src/__phutil_library_map__.php
··· 1880 1880 'PhabricatorBadgesListController' => 'applications/badges/controller/PhabricatorBadgesListController.php', 1881 1881 'PhabricatorBadgesMailReceiver' => 'applications/badges/mail/PhabricatorBadgesMailReceiver.php', 1882 1882 'PhabricatorBadgesPHIDType' => 'applications/badges/phid/PhabricatorBadgesPHIDType.php', 1883 + 'PhabricatorBadgesQuality' => 'applications/badges/constants/PhabricatorBadgesQuality.php', 1883 1884 'PhabricatorBadgesQuery' => 'applications/badges/query/PhabricatorBadgesQuery.php', 1884 1885 'PhabricatorBadgesRecipientsListView' => 'applications/badges/view/PhabricatorBadgesRecipientsListView.php', 1885 1886 'PhabricatorBadgesRemoveRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php', ··· 6245 6246 'PhabricatorBadgesListController' => 'PhabricatorBadgesController', 6246 6247 'PhabricatorBadgesMailReceiver' => 'PhabricatorObjectMailReceiver', 6247 6248 'PhabricatorBadgesPHIDType' => 'PhabricatorPHIDType', 6249 + 'PhabricatorBadgesQuality' => 'Phobject', 6248 6250 'PhabricatorBadgesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 6249 6251 'PhabricatorBadgesRecipientsListView' => 'AphrontView', 6250 6252 'PhabricatorBadgesRemoveRecipientsController' => 'PhabricatorBadgesController',
+78
src/applications/badges/constants/PhabricatorBadgesQuality.php
··· 1 + <?php 2 + 3 + final class PhabricatorBadgesQuality 4 + extends Phobject { 5 + 6 + const POOR = 140; 7 + const COMMON = 120; 8 + const UNCOMMON = 100; 9 + const RARE = 80; 10 + const EPIC = 60; 11 + const LEGENDARY = 40; 12 + const HEIRLOOM = 20; 13 + 14 + const DEFAULT_QUALITY = 140; 15 + 16 + public static function getQualityName($quality) { 17 + $map = self::getQualityDictionary($quality); 18 + $default = pht('Unknown Quality ("%s")', $quality); 19 + return idx($map, 'name', $default); 20 + } 21 + 22 + public static function getQualityColor($quality) { 23 + $map = self::getQualityDictionary($quality); 24 + $default = 'grey'; 25 + return idx($map, 'color', $default); 26 + } 27 + 28 + private static function getQualityDictionary($quality) { 29 + $map = self::getQualityMap(); 30 + $default = array(); 31 + return idx($map, $quality, $default); 32 + } 33 + 34 + public static function getQualityMap() { 35 + return array( 36 + self::POOR => array( 37 + 'rarity' => 140, 38 + 'name' => pht('Poor'), 39 + 'color' => 'grey', 40 + ), 41 + self::COMMON => array( 42 + 'rarity' => 120, 43 + 'name' => pht('Common'), 44 + 'color' => 'white', 45 + ), 46 + self::UNCOMMON => array( 47 + 'rarity' => 100, 48 + 'name' => pht('Uncommon'), 49 + 'color' => 'green', 50 + ), 51 + self::RARE => array( 52 + 'rarity' => 80, 53 + 'name' => pht('Rare'), 54 + 'color' => 'blue', 55 + ), 56 + self::EPIC => array( 57 + 'rarity' => 60, 58 + 'name' => pht('Epic'), 59 + 'color' => 'indigo', 60 + ), 61 + self::LEGENDARY => array( 62 + 'rarity' => 40, 63 + 'name' => pht('Legendary'), 64 + 'color' => 'orange', 65 + ), 66 + self::HEIRLOOM => array( 67 + 'rarity' => 20, 68 + 'name' => pht('Heirloom'), 69 + 'color' => 'yellow', 70 + ), 71 + ); 72 + } 73 + 74 + public static function getDropdownQualityMap() { 75 + $map = self::getQualityMap(); 76 + return ipull($map, 'name'); 77 + } 78 + }
+3 -2
src/applications/badges/controller/PhabricatorBadgesViewController.php
··· 86 86 $view = id(new PHUIPropertyListView()) 87 87 ->setUser($viewer); 88 88 89 - $quality = idx($badge->getQualityNameMap(), $badge->getQuality()); 89 + $quality_name = PhabricatorBadgesQuality::getQualityName( 90 + $badge->getQuality()); 90 91 91 92 $view->addProperty( 92 93 pht('Quality'), 93 - $quality); 94 + $quality_name); 94 95 95 96 $view->addProperty( 96 97 pht('Icon'),
+1 -1
src/applications/badges/editor/PhabricatorBadgesEditEngine.php
··· 89 89 ->setLabel(pht('Quality')) 90 90 ->setValue($object->getQuality()) 91 91 ->setTransactionType(PhabricatorBadgesTransaction::TYPE_QUALITY) 92 - ->setOptions($object->getQualityNameMap()), 92 + ->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()), 93 93 id(new PhabricatorRemarkupEditField()) 94 94 ->setKey('description') 95 95 ->setLabel(pht('Description'))
+2 -1
src/applications/badges/editor/PhabricatorBadgesEditor.php
··· 66 66 case PhabricatorBadgesTransaction::TYPE_DESCRIPTION: 67 67 case PhabricatorBadgesTransaction::TYPE_ICON: 68 68 case PhabricatorBadgesTransaction::TYPE_STATUS: 69 - case PhabricatorBadgesTransaction::TYPE_QUALITY: 70 69 case PhabricatorBadgesTransaction::TYPE_AWARD: 71 70 case PhabricatorBadgesTransaction::TYPE_REVOKE: 72 71 return $xaction->getNewValue(); 72 + case PhabricatorBadgesTransaction::TYPE_QUALITY: 73 + return (int)$xaction->getNewValue(); 73 74 } 74 75 75 76 return parent::getCustomTransactionNewValue($object, $xaction);
+4 -5
src/applications/badges/query/PhabricatorBadgesSearchEngine.php
··· 34 34 id(new PhabricatorSearchCheckboxesField()) 35 35 ->setKey('qualities') 36 36 ->setLabel(pht('Quality')) 37 - ->setOptions( 38 - id(new PhabricatorBadgesBadge()) 39 - ->getQualityNameMap()), 37 + ->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()), 40 38 id(new PhabricatorSearchCheckboxesField()) 41 39 ->setKey('statuses') 42 40 ->setLabel(pht('Status')) ··· 110 108 111 109 $list = id(new PHUIObjectItemListView()); 112 110 foreach ($badges as $badge) { 111 + $quality_name = PhabricatorBadgesQuality::getQualityName( 112 + $badge->getQuality()); 113 113 114 - $quality = idx($badge->getQualityNameMap(), $badge->getQuality()); 115 114 $mini_badge = id(new PHUIBadgeMiniView()) 116 115 ->setHeader($badge->getName()) 117 116 ->setIcon($badge->getIcon()) ··· 121 120 ->setHeader($badge->getName()) 122 121 ->setBadge($mini_badge) 123 122 ->setHref('/badges/view/'.$badge->getID().'/') 124 - ->addAttribute($quality) 123 + ->addAttribute($quality_name) 125 124 ->addAttribute($badge->getFlavor()); 126 125 127 126 if ($badge->isArchived()) {
+2 -23
src/applications/badges/storage/PhabricatorBadgesBadge.php
··· 25 25 const STATUS_ARCHIVED = 'closed'; 26 26 27 27 const DEFAULT_ICON = 'fa-star'; 28 - const DEFAULT_QUALITY = 'green'; 29 - 30 - const POOR = 'grey'; 31 - const COMMON = 'white'; 32 - const UNCOMMON = 'green'; 33 - const RARE = 'blue'; 34 - const EPIC = 'indigo'; 35 - const LEGENDARY = 'orange'; 36 - const HEIRLOOM = 'yellow'; 37 28 38 29 public static function getStatusNameMap() { 39 30 return array( ··· 42 33 ); 43 34 } 44 35 45 - public static function getQualityNameMap() { 46 - return array( 47 - self::POOR => pht('Poor'), 48 - self::COMMON => pht('Common'), 49 - self::UNCOMMON => pht('Uncommon'), 50 - self::RARE => pht('Rare'), 51 - self::EPIC => pht('Epic'), 52 - self::LEGENDARY => pht('Legendary'), 53 - self::HEIRLOOM => pht('Heirloom'), 54 - ); 55 - } 56 - 57 36 public static function initializeNewBadge(PhabricatorUser $actor) { 58 37 $app = id(new PhabricatorApplicationQuery()) 59 38 ->setViewer($actor) ··· 67 46 68 47 return id(new PhabricatorBadgesBadge()) 69 48 ->setIcon(self::DEFAULT_ICON) 70 - ->setQuality(self::DEFAULT_QUALITY) 49 + ->setQuality(PhabricatorBadgesQuality::DEFAULT_QUALITY) 71 50 ->setCreatorPHID($actor->getPHID()) 72 51 ->setEditPolicy($edit_policy) 73 52 ->setStatus(self::STATUS_ACTIVE); ··· 81 60 'flavor' => 'text255', 82 61 'description' => 'text', 83 62 'icon' => 'text255', 84 - 'quality' => 'text255', 63 + 'quality' => 'uint32', 85 64 'status' => 'text32', 86 65 'mailKey' => 'bytes20', 87 66 ),
+2 -3
src/applications/badges/storage/PhabricatorBadgesTransaction.php
··· 111 111 $this->renderHandleLink($author_phid), 112 112 $new); 113 113 } else { 114 - $qual_map = PhabricatorBadgesBadge::getQualityNameMap(); 115 - $qual_new = idx($qual_map, $new, $new); 116 - $qual_old = idx($qual_map, $old, $old); 114 + $qual_new = PhabricatorBadgesQuality::getQualityName($new); 115 + $qual_old = PhabricatorBadgesQuality::getQualityName($old); 117 116 return pht( 118 117 '%s updated the quality for this badge from "%s" to "%s".', 119 118 $this->renderHandleLink($author_phid),
+3 -1
src/view/phui/PHUIBadgeMiniView.php
··· 48 48 $classes = array(); 49 49 $classes[] = 'phui-badge-mini'; 50 50 if ($this->quality) { 51 - $classes[] = 'phui-badge-mini-'.$this->quality; 51 + $quality_color = PhabricatorBadgesQuality::getQualityColor( 52 + $this->quality); 53 + $classes[] = 'phui-badge-mini-'.$quality_color; 52 54 } 53 55 54 56 return array(
+11 -32
src/view/phui/PHUIBadgeView.php
··· 10 10 private $subhead; 11 11 private $bylines = array(); 12 12 13 - // Yes, World of Warcraft Item Quality 14 - const POOR = 'grey'; 15 - const COMMON = 'white'; 16 - const UNCOMMON = 'green'; 17 - const RARE = 'blue'; 18 - const EPIC = 'indigo'; 19 - const LEGENDARY = 'orange'; 20 - const HEIRLOOM = 'yellow'; 21 - 22 - 23 13 public function setIcon($icon) { 24 14 $this->icon = $icon; 25 15 return $this; ··· 35 25 return $this; 36 26 } 37 27 28 + private function getQualityColor() { 29 + return PhabricatorBadgesQuality::getQualityColor($this->quality); 30 + } 31 + 32 + private function getQualityName() { 33 + return PhabricatorBadgesQuality::getQualityName($this->quality); 34 + } 35 + 38 36 public function setSource($source) { 39 37 $this->source = $source; 40 38 return $this; ··· 55 53 return $this; 56 54 } 57 55 58 - private function getQualityTitle() { 59 - 60 - switch ($this->quality) { 61 - case self::POOR: 62 - return pht('Poor'); 63 - case self::COMMON: 64 - return pht('Common'); 65 - case self::UNCOMMON: 66 - return pht('Uncommon'); 67 - case self::RARE: 68 - return pht('Rare'); 69 - case self::EPIC: 70 - return pht('Epic'); 71 - case self::LEGENDARY: 72 - return pht('Legendary'); 73 - case self::HEIRLOOM: 74 - return pht('Heirloom'); 75 - } 76 - } 77 - 78 56 protected function getTagName() { 79 57 return 'span'; 80 58 } ··· 86 64 $classes = array(); 87 65 $classes[] = 'phui-badge-view'; 88 66 if ($this->quality) { 89 - $classes[] = 'phui-badge-view-'.$this->quality; 67 + $color = $this->getQualityColor(); 68 + $classes[] = 'phui-badge-view-'.$color; 90 69 } 91 70 92 71 return array( ··· 131 110 ), 132 111 array($header, $subhead)); 133 112 134 - $quality = phutil_tag_div('phui-badge-quality', $this->getQualityTitle()); 113 + $quality = phutil_tag_div('phui-badge-quality', $this->getQualityName()); 135 114 $source = phutil_tag_div('phui-badge-source', $this->source); 136 115 137 116 $bylines = array();