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

Make badges searchable by name

Summary: Closes T10690

Test Plan: Open Badges application, go to Advanced Search, search for a badge by its name and see result.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin

Maniphest Tasks: T10690

Differential Revision: https://secure.phabricator.com/D15656

+78 -20
+11
resources/sql/autopatches/20160406.badges.ngrams.php
··· 1 + <?php 2 + 3 + $table = new PhabricatorBadgesBadge(); 4 + 5 + foreach (new LiskMigrationIterator($table) as $badge) { 6 + PhabricatorSearchWorker::queueDocumentForIndexing( 7 + $badge->getPHID(), 8 + array( 9 + 'force' => true, 10 + )); 11 + }
+7
resources/sql/autopatches/20160406.badges.ngrams.sql
··· 1 + CREATE TABLE {$NAMESPACE}_badges.badges_badgename_ngrams ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + objectID INT UNSIGNED NOT NULL, 4 + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, 5 + KEY `key_object` (objectID), 6 + KEY `key_ngram` (ngram, objectID) 7 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+3
src/__phutil_library_map__.php
··· 1874 1874 'PhabricatorBadgesAwardController' => 'applications/badges/controller/PhabricatorBadgesAwardController.php', 1875 1875 'PhabricatorBadgesAwardQuery' => 'applications/badges/query/PhabricatorBadgesAwardQuery.php', 1876 1876 'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php', 1877 + 'PhabricatorBadgesBadgeNameNgrams' => 'applications/badges/storage/PhabricatorBadgesBadgeNameNgrams.php', 1877 1878 'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php', 1878 1879 'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php', 1879 1880 'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php', ··· 6253 6254 'PhabricatorFlaggableInterface', 6254 6255 'PhabricatorDestructibleInterface', 6255 6256 'PhabricatorConduitResultInterface', 6257 + 'PhabricatorNgramsInterface', 6256 6258 ), 6259 + 'PhabricatorBadgesBadgeNameNgrams' => 'PhabricatorSearchNgrams', 6257 6260 'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController', 6258 6261 'PhabricatorBadgesController' => 'PhabricatorController', 6259 6262 'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability',
+4
src/applications/badges/editor/PhabricatorBadgesEditor.php
··· 11 11 return pht('Badges'); 12 12 } 13 13 14 + protected function supportsSearch() { 15 + return true; 16 + } 17 + 14 18 public function getTransactionTypes() { 15 19 $types = parent::getTransactionTypes(); 16 20
+14 -4
src/applications/badges/query/PhabricatorBadgesQuery.php
··· 36 36 return $this; 37 37 } 38 38 39 + public function withNameNgrams($ngrams) { 40 + return $this->withNgramsConstraint( 41 + id(new PhabricatorBadgesBadgeNameNgrams()), 42 + $ngrams); 43 + } 44 + 39 45 public function needRecipients($need_recipients) { 40 46 $this->needRecipients = $need_recipients; 41 47 return $this; ··· 45 51 return $this->loadStandardPage($this->newResultObject()); 46 52 } 47 53 54 + protected function getPrimaryTableAlias() { 55 + return 'badges'; 56 + } 57 + 48 58 public function newResultObject() { 49 59 return new PhabricatorBadgesBadge(); 50 60 } ··· 73 83 if ($this->ids !== null) { 74 84 $where[] = qsprintf( 75 85 $conn, 76 - 'id IN (%Ld)', 86 + 'badges.id IN (%Ld)', 77 87 $this->ids); 78 88 } 79 89 80 90 if ($this->phids !== null) { 81 91 $where[] = qsprintf( 82 92 $conn, 83 - 'phid IN (%Ls)', 93 + 'badges.phid IN (%Ls)', 84 94 $this->phids); 85 95 } 86 96 87 97 if ($this->qualities !== null) { 88 98 $where[] = qsprintf( 89 99 $conn, 90 - 'quality IN (%Ls)', 100 + 'badges.quality IN (%Ls)', 91 101 $this->qualities); 92 102 } 93 103 94 104 if ($this->statuses !== null) { 95 105 $where[] = qsprintf( 96 106 $conn, 97 - 'status IN (%Ls)', 107 + 'badges.status IN (%Ls)', 98 108 $this->statuses); 99 109 } 100 110
+8 -14
src/applications/badges/query/PhabricatorBadgesSearchEngine.php
··· 15 15 return new PhabricatorBadgesQuery(); 16 16 } 17 17 18 - public function buildSavedQueryFromRequest(AphrontRequest $request) { 19 - $saved = new PhabricatorSavedQuery(); 20 - 21 - $saved->setParameter( 22 - 'statuses', 23 - $this->readListFromRequest($request, 'statuses')); 24 - 25 - $saved->setParameter( 26 - 'qualities', 27 - $this->readListFromRequest($request, 'qualities')); 28 - 29 - return $saved; 30 - } 31 - 32 18 protected function buildCustomSearchFields() { 33 19 return array( 20 + id(new PhabricatorSearchTextField()) 21 + ->setLabel(pht('Name Contains')) 22 + ->setKey('name') 23 + ->setDescription(pht('Search for badges by name substring.')), 34 24 id(new PhabricatorSearchCheckboxesField()) 35 25 ->setKey('qualities') 36 26 ->setLabel(pht('Quality')) ··· 53 43 54 44 if ($map['qualities']) { 55 45 $query->withQualities($map['qualities']); 46 + } 47 + 48 + if ($map['name'] !== null) { 49 + $query->withNameNgrams($map['name']); 56 50 } 57 51 58 52 return $query;
+13 -2
src/applications/badges/storage/PhabricatorBadgesBadge.php
··· 8 8 PhabricatorTokenReceiverInterface, 9 9 PhabricatorFlaggableInterface, 10 10 PhabricatorDestructibleInterface, 11 - PhabricatorConduitResultInterface { 11 + PhabricatorConduitResultInterface, 12 + PhabricatorNgramsInterface { 12 13 13 14 protected $name; 14 15 protected $flavor; ··· 59 60 return array( 60 61 self::CONFIG_AUX_PHID => true, 61 62 self::CONFIG_COLUMN_SCHEMA => array( 62 - 'name' => 'text255', 63 + 'name' => 'sort255', 63 64 'flavor' => 'text255', 64 65 'description' => 'text', 65 66 'icon' => 'text255', ··· 223 224 224 225 public function getConduitSearchAttachments() { 225 226 return array(); 227 + } 228 + 229 + /* -( PhabricatorNgramInterface )------------------------------------------ */ 230 + 231 + 232 + public function newNgrams() { 233 + return array( 234 + id(new PhabricatorBadgesBadgeNameNgrams()) 235 + ->setValue($this->getName()), 236 + ); 226 237 } 227 238 228 239 }
+18
src/applications/badges/storage/PhabricatorBadgesBadgeNameNgrams.php
··· 1 + <?php 2 + 3 + final class PhabricatorBadgesBadgeNameNgrams 4 + extends PhabricatorSearchNgrams { 5 + 6 + public function getNgramKey() { 7 + return 'badgename'; 8 + } 9 + 10 + public function getColumnName() { 11 + return 'name'; 12 + } 13 + 14 + public function getApplicationName() { 15 + return 'badges'; 16 + } 17 + 18 + }