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

Generate expected schemata for Doorkeeper, Draft, Drydock, Feed

Summary:
Ref T1191. Notable:

- Allowed objects to remove default columns (some feed tables have no `id`).
- Added a "note" severity and moved all the charset stuff down to that to make progress more clear.

Test Plan:
Trying to make the whole thing blue...

{F205970}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T1191

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

+203 -9
+8
src/__phutil_library_map__.php
··· 570 570 'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php', 571 571 'DoorkeeperRemarkupRuleAsana' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleAsana.php', 572 572 'DoorkeeperRemarkupRuleJIRA' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleJIRA.php', 573 + 'DoorkeeperSchemaSpec' => 'applications/doorkeeper/storage/DoorkeeperSchemaSpec.php', 573 574 'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php', 574 575 'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php', 575 576 'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php', ··· 636 637 'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php', 637 638 'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php', 638 639 'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php', 640 + 'DrydockSchemaSpec' => 'applications/drydock/storage/DrydockSchemaSpec.php', 639 641 'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php', 640 642 'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php', 641 643 'FeedConduitAPIMethod' => 'applications/feed/conduit/FeedConduitAPIMethod.php', ··· 1514 1516 'PhabricatorDoorkeeperApplication' => 'applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php', 1515 1517 'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php', 1516 1518 'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php', 1519 + 'PhabricatorDraftSchemaSpec' => 'applications/draft/storage/PhabricatorDraftSchemaSpec.php', 1517 1520 'PhabricatorDrydockApplication' => 'applications/drydock/application/PhabricatorDrydockApplication.php', 1518 1521 'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php', 1519 1522 'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php', ··· 1574 1577 'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php', 1575 1578 'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/PhabricatorFeedPublicStreamController.php', 1576 1579 'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php', 1580 + 'PhabricatorFeedSchemaSpec' => 'applications/feed/storage/PhabricatorFeedSchemaSpec.php', 1577 1581 'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php', 1578 1582 'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php', 1579 1583 'PhabricatorFeedStoryAggregate' => 'applications/feed/story/PhabricatorFeedStoryAggregate.php', ··· 3373 3377 'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule', 3374 3378 'DoorkeeperRemarkupRuleAsana' => 'DoorkeeperRemarkupRule', 3375 3379 'DoorkeeperRemarkupRuleJIRA' => 'DoorkeeperRemarkupRule', 3380 + 'DoorkeeperSchemaSpec' => 'PhabricatorConfigSchemaSpec', 3376 3381 'DoorkeeperTagView' => 'AphrontView', 3377 3382 'DoorkeeperTagsController' => 'PhabricatorController', 3378 3383 'DrydockAllocatorWorker' => 'PhabricatorWorker', ··· 3451 3456 'DrydockResourceViewController' => 'DrydockResourceController', 3452 3457 'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface', 3453 3458 'DrydockSSHCommandInterface' => 'DrydockCommandInterface', 3459 + 'DrydockSchemaSpec' => 'PhabricatorConfigSchemaSpec', 3454 3460 'DrydockWebrootInterface' => 'DrydockInterface', 3455 3461 'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation', 3456 3462 'FeedConduitAPIMethod' => 'ConduitAPIMethod', ··· 4430 4436 'PhabricatorDoorkeeperApplication' => 'PhabricatorApplication', 4431 4437 'PhabricatorDraft' => 'PhabricatorDraftDAO', 4432 4438 'PhabricatorDraftDAO' => 'PhabricatorLiskDAO', 4439 + 'PhabricatorDraftSchemaSpec' => 'PhabricatorConfigSchemaSpec', 4433 4440 'PhabricatorDrydockApplication' => 'PhabricatorApplication', 4434 4441 'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants', 4435 4442 'PhabricatorEdgeCycleException' => 'Exception', ··· 4486 4493 'PhabricatorFeedManagementWorkflow' => 'PhabricatorManagementWorkflow', 4487 4494 'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController', 4488 4495 'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4496 + 'PhabricatorFeedSchemaSpec' => 'PhabricatorConfigSchemaSpec', 4489 4497 'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine', 4490 4498 'PhabricatorFeedStory' => array( 4491 4499 'PhabricatorPolicyInterface',
+3
src/applications/auth/storage/PhabricatorAuthProviderConfig.php
··· 31 31 ), 32 32 self::CONFIG_COLUMN_SCHEMA => array( 33 33 'isEnabled' => 'bool', 34 + 'providerClass' => 'text128', 35 + 'providerType' => 'text64', 36 + 'providerDomain' => 'text128', 34 37 'shouldAllowLogin' => 'bool', 35 38 'shouldAllowRegistration' => 'bool', 36 39 'shouldAllowLink' => 'bool',
+7
src/applications/config/controller/PhabricatorConfigDatabaseController.php
··· 688 688 case PhabricatorConfigStorageSchema::STATUS_OKAY: 689 689 $icon = 'fa-check-circle green'; 690 690 break; 691 + case PhabricatorConfigStorageSchema::STATUS_NOTE: 692 + $icon = 'fa-info-circle blue'; 693 + break; 691 694 case PhabricatorConfigStorageSchema::STATUS_WARN: 692 695 $icon = 'fa-exclamation-circle yellow'; 693 696 break; ··· 735 738 736 739 $status = PhabricatorConfigStorageSchema::getIssueStatus($issue); 737 740 switch ($status) { 741 + case PhabricatorConfigStorageSchema::STATUS_NOTE: 742 + $icon = PHUIStatusItemView::ICON_INFO; 743 + $color = 'blue'; 744 + break; 738 745 case PhabricatorConfigStorageSchema::STATUS_WARN: 739 746 $icon = PHUIStatusItemView::ICON_WARNING; 740 747 $color = 'yellow';
+4
src/applications/config/schema/PhabricatorConfigSchemaSpec.php
··· 74 74 $table = $this->newTable($table_name); 75 75 76 76 foreach ($columns as $name => $type) { 77 + if ($type === null) { 78 + continue; 79 + } 80 + 77 81 $details = $this->getDetailsForDataType($type); 78 82 list($column_type, $charset, $collation, $nullable) = $details; 79 83
+16 -3
src/applications/config/schema/PhabricatorConfigStorageSchema.php
··· 9 9 const ISSUE_COLUMNTYPE = 'columntype'; 10 10 const ISSUE_NULLABLE = 'nullable'; 11 11 const ISSUE_KEYCOLUMNS = 'keycolumns'; 12 + const ISSUE_SUBNOTE = 'subnote'; 12 13 const ISSUE_SUBWARN = 'subwarn'; 13 14 const ISSUE_SUBFAIL = 'subfail'; 14 15 15 16 const STATUS_OKAY = 'okay'; 17 + const STATUS_NOTE = 'note'; 16 18 const STATUS_WARN = 'warn'; 17 19 const STATUS_FAIL = 'fail'; 18 20 ··· 55 57 56 58 foreach ($this->getSubschemata() as $sub) { 57 59 switch ($sub->getStatus()) { 60 + case self::STATUS_NOTE: 61 + $issues[self::ISSUE_SUBNOTE] = self::ISSUE_SUBNOTE; 62 + break; 58 63 case self::STATUS_WARN: 59 64 $issues[self::ISSUE_SUBWARN] = self::ISSUE_SUBWARN; 60 65 break; ··· 104 109 return pht('Wrong Nullable Setting'); 105 110 case self::ISSUE_KEYCOLUMNS: 106 111 return pht('Key on Wrong Columns'); 112 + case self::ISSUE_SUBNOTE: 113 + return pht('Subschemata Have Notices'); 107 114 case self::ISSUE_SUBWARN: 108 115 return pht('Subschemata Have Warnings'); 109 116 case self::ISSUE_SUBFAIL: ··· 129 136 return pht('This schema has the wrong nullable setting.'); 130 137 case self::ISSUE_KEYCOLUMNS: 131 138 return pht('This schema is on the wrong columns.'); 139 + case self::ISSUE_SUBNOTE: 140 + return pht('Subschemata have setup notices.'); 132 141 case self::ISSUE_SUBWARN: 133 142 return pht('Subschemata have setup warnings.'); 134 143 case self::ISSUE_SUBFAIL: ··· 144 153 case self::ISSUE_SUBFAIL: 145 154 return self::STATUS_FAIL; 146 155 case self::ISSUE_SURPLUS: 147 - case self::ISSUE_CHARSET: 148 - case self::ISSUE_COLLATION: 149 156 case self::ISSUE_COLUMNTYPE: 150 157 case self::ISSUE_SUBWARN: 151 158 case self::ISSUE_KEYCOLUMNS: 152 159 case self::ISSUE_NULLABLE: 153 160 return self::STATUS_WARN; 161 + case self::ISSUE_SUBNOTE: 162 + case self::ISSUE_CHARSET: 163 + case self::ISSUE_COLLATION: 164 + return self::STATUS_NOTE; 154 165 default: 155 166 throw new Exception(pht('Unknown schema issue "%s"!', $issue)); 156 167 } ··· 159 170 public static function getStatusSeverity($status) { 160 171 switch ($status) { 161 172 case self::STATUS_FAIL: 162 - return 2; 173 + return 3; 163 174 case self::STATUS_WARN: 175 + return 2; 176 + case self::STATUS_NOTE: 164 177 return 1; 165 178 case self::STATUS_OKAY: 166 179 return 0;
+5 -1
src/applications/dashboard/storage/PhabricatorDashboard.php
··· 39 39 return array( 40 40 self::CONFIG_AUX_PHID => true, 41 41 self::CONFIG_SERIALIZATION => array( 42 - 'layoutConfig' => self::SERIALIZATION_JSON), 42 + 'layoutConfig' => self::SERIALIZATION_JSON, 43 + ), 44 + self::CONFIG_COLUMN_SCHEMA => array( 45 + 'name' => 'text255', 46 + ), 43 47 ) + parent::getConfiguration(); 44 48 } 45 49
+13
src/applications/dashboard/storage/PhabricatorDashboardInstall.php
··· 14 14 protected $applicationClass; 15 15 protected $dashboardPHID; 16 16 17 + public function getConfiguration() { 18 + return array( 19 + self::CONFIG_COLUMN_SCHEMA => array( 20 + 'applicationClass' => 'text64', 21 + ), 22 + self::CONFIG_KEY_SCHEMA => array( 23 + 'objectPHID' => array( 24 + 'columns' => array('objectPHID', 'applicationClass'), 25 + ), 26 + ), 27 + ) + parent::getConfiguration(); 28 + } 29 + 17 30 public static function getDashboard( 18 31 PhabricatorUser $viewer, 19 32 $object_phid,
+5
src/applications/dashboard/storage/PhabricatorDashboardPanel.php
··· 43 43 self::CONFIG_SERIALIZATION => array( 44 44 'properties' => self::SERIALIZATION_JSON, 45 45 ), 46 + self::CONFIG_COLUMN_SCHEMA => array( 47 + 'name' => 'text255', 48 + 'panelType' => 'text64', 49 + 'isArchived' => 'bool', 50 + ), 46 51 ) + parent::getConfiguration(); 47 52 } 48 53
+14
src/applications/doorkeeper/storage/DoorkeeperExternalObject.php
··· 19 19 self::CONFIG_SERIALIZATION => array( 20 20 'properties' => self::SERIALIZATION_JSON, 21 21 ), 22 + self::CONFIG_COLUMN_SCHEMA => array( 23 + 'objectKey' => 'bytes12', 24 + 'applicationType' => 'text32', 25 + 'applicationDomain' => 'text32', 26 + 'objectType' => 'text32', 27 + 'objectID' => 'text64', 28 + 'objectURI' => 'text128?', 29 + 'importerPHID' => 'phid?', 30 + ), 31 + self::CONFIG_KEY_SCHEMA => array( 32 + 'key_object' => array( 33 + 'columns' => array('objectKey'), 34 + ), 35 + ), 22 36 ) + parent::getConfiguration(); 23 37 } 24 38
+12
src/applications/doorkeeper/storage/DoorkeeperSchemaSpec.php
··· 1 + <?php 2 + 3 + final class DoorkeeperSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildLiskSchemata('DoorkeeperDAO'); 8 + 9 + $this->buildEdgeSchemata(new DoorkeeperExternalObject()); 10 + } 11 + 12 + }
+9
src/applications/draft/storage/PhabricatorDraft.php
··· 14 14 self::CONFIG_SERIALIZATION => array( 15 15 'metadata' => self::SERIALIZATION_JSON, 16 16 ), 17 + self::CONFIG_COLUMN_SCHEMA => array( 18 + 'draftKey' => 'text64', 19 + 'draft' => 'text', 20 + ), 21 + self::CONFIG_KEY_SCHEMA => array( 22 + 'authorPHID' => array( 23 + 'columns' => array('authorPHID', 'draftKey'), 24 + ), 25 + ), 17 26 ) + parent::getConfiguration(); 18 27 } 19 28
+10
src/applications/draft/storage/PhabricatorDraftSchemaSpec.php
··· 1 + <?php 2 + 3 + final class PhabricatorDraftSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildLiskSchemata('PhabricatorDraftDAO'); 8 + } 9 + 10 + }
+5 -1
src/applications/drydock/storage/DrydockBlueprint.php
··· 36 36 self::CONFIG_AUX_PHID => true, 37 37 self::CONFIG_SERIALIZATION => array( 38 38 'details' => self::SERIALIZATION_JSON, 39 - ) 39 + ), 40 + self::CONFIG_COLUMN_SCHEMA => array( 41 + 'className' => 'text255', 42 + 'blueprintName' => 'text255', 43 + ), 40 44 ) + parent::getConfiguration(); 41 45 } 42 46
+14
src/applications/drydock/storage/DrydockLease.php
··· 43 43 self::CONFIG_SERIALIZATION => array( 44 44 'attributes' => self::SERIALIZATION_JSON, 45 45 ), 46 + self::CONFIG_COLUMN_SCHEMA => array( 47 + 'status' => 'uint32', 48 + 'until' => 'epoch?', 49 + 'resourceType' => 'text128', 50 + 'taskID' => 'id?', 51 + 'ownerPHID' => 'phid?', 52 + 'resourceID' => 'id?', 53 + ), 54 + self::CONFIG_KEY_SCHEMA => array( 55 + 'key_phid' => null, 56 + 'phid' => array( 57 + 'columns' => array('phid'), 58 + ), 59 + ), 46 60 ) + parent::getConfiguration(); 47 61 } 48 62
+5
src/applications/drydock/storage/DrydockLog.php
··· 14 14 public function getConfiguration() { 15 15 return array( 16 16 self::CONFIG_TIMESTAMPS => false, 17 + self::CONFIG_COLUMN_SCHEMA => array( 18 + 'resourceID' => 'id?', 19 + 'leaseID' => 'id?', 20 + 'message' => 'text', 21 + ), 17 22 ) + parent::getConfiguration(); 18 23 } 19 24
+12
src/applications/drydock/storage/DrydockResource.php
··· 23 23 'attributes' => self::SERIALIZATION_JSON, 24 24 'capabilities' => self::SERIALIZATION_JSON, 25 25 ), 26 + self::CONFIG_COLUMN_SCHEMA => array( 27 + 'name' => 'text255', 28 + 'ownerPHID' => 'phid?', 29 + 'status' => 'uint32', 30 + 'type' => 'text64', 31 + ), 32 + self::CONFIG_KEY_SCHEMA => array( 33 + 'key_phid' => null, 34 + 'phid' => array( 35 + 'columns' => array('phid'), 36 + ), 37 + ), 26 38 ) + parent::getConfiguration(); 27 39 } 28 40
+14
src/applications/drydock/storage/DrydockSchemaSpec.php
··· 1 + <?php 2 + 3 + final class DrydockSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildLiskSchemata('DrydockDAO'); 8 + 9 + $this->buildTransactionSchema( 10 + new DrydockBlueprintTransaction()); 11 + 12 + } 13 + 14 + }
+10
src/applications/feed/storage/PhabricatorFeedSchemaSpec.php
··· 1 + <?php 2 + 3 + final class PhabricatorFeedSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildLiskSchemata('PhabricatorFeedDAO'); 8 + } 9 + 10 + }
+13
src/applications/feed/storage/PhabricatorFeedStoryData.php
··· 15 15 self::CONFIG_SERIALIZATION => array( 16 16 'storyData' => self::SERIALIZATION_JSON, 17 17 ), 18 + self::CONFIG_COLUMN_SCHEMA => array( 19 + 'chronologicalKey' => 'uint64', 20 + 'storyType' => 'text64', 21 + ), 22 + self::CONFIG_KEY_SCHEMA => array( 23 + 'key_phid' => null, 24 + 'phid' => array( 25 + 'columns' => array('phid'), 26 + ), 27 + 'chronologicalKey' => array( 28 + 'columns' => array('chronologicalKey'), 29 + ), 30 + ), 18 31 ) + parent::getConfiguration(); 19 32 } 20 33
+10
src/applications/feed/storage/PhabricatorFeedStoryReference.php
··· 9 9 return array( 10 10 self::CONFIG_IDS => self::IDS_MANUAL, 11 11 self::CONFIG_TIMESTAMPS => false, 12 + self::CONFIG_COLUMN_SCHEMA => array( 13 + 'chronologicalKey' => 'uint64', 14 + 'id' => null, 15 + ), 16 + self::CONFIG_KEY_SCHEMA => array( 17 + 'PRIMARY' => null, 18 + 'objectPHID' => array( 19 + 'columns' => array('objectPHID', 'chronologicalKey'), 20 + ), 21 + ), 12 22 ) + parent::getConfiguration(); 13 23 } 14 24
+11
src/applications/notification/storage/PhabricatorFeedStoryNotification.php
··· 11 11 return array( 12 12 self::CONFIG_IDS => self::IDS_MANUAL, 13 13 self::CONFIG_TIMESTAMPS => false, 14 + self::CONFIG_COLUMN_SCHEMA => array( 15 + 'chronologicalKey' => 'uint64', 16 + 'hasViewed' => 'bool', 17 + 'id' => null, 18 + ), 19 + self::CONFIG_KEY_SCHEMA => array( 20 + 'PRIMARY' => null, 21 + 'userPHID' => array( 22 + 'columns' => array('userPHID', 'chronologicalKey'), 23 + ), 24 + ), 14 25 ) + parent::getConfiguration(); 15 26 } 16 27
+3 -4
src/infrastructure/storage/lisk/LiskDAO.php
··· 1750 1750 $map = array(); 1751 1751 foreach ($this->getAllLiskProperties() as $property) { 1752 1752 // First, use types specified explicitly in the table configuration. 1753 - $type = idx($custom_map, $property); 1754 - if ($type) { 1755 - $map[$property] = $type; 1753 + if (array_key_exists($property, $custom_map)) { 1754 + $map[$property] = $custom_map[$property]; 1756 1755 continue; 1757 1756 } 1758 1757 ··· 1786 1785 } 1787 1786 1788 1787 // We don't know the type of this column. 1789 - $map[$property] = null; 1788 + $map[$property] = '<unknown>'; 1790 1789 } 1791 1790 1792 1791 return $map;