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

Add DoorkeeperExternalObject

Summary:
Ref T2852. This table holds data about external objects and allows us to write edges to them.

Objects are identified with an `<applicationType, applicationDomain, objectType, objectID>` tuple. For example, Asana tasks will be, e.g., `<asana, asana.com, asana:task, 93829279873>` or similar.

Test Plan: Ran storage upgrade.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2852

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

+140
+35
resources/sql/patches/20130622.doorkeeper.sql
··· 1 + CREATE TABLE {$NAMESPACE}_doorkeeper.doorkeeper_externalobject ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, 4 + objectKey CHAR(12) NOT NULL COLLATE utf8_bin, 5 + applicationType VARCHAR(32) NOT NULL COLLATE utf8_bin, 6 + applicationDomain VARCHAR(32) NOT NULL COLLATE utf8_bin, 7 + objectType VARCHAR(32) NOT NULL COLLATE utf8_bin, 8 + objectID VARCHAR(64) NOT NULL COLLATE utf8_bin, 9 + objectURI VARCHAR(128) COLLATE utf8_bin, 10 + importerPHID VARCHAR(64) COLLATE utf8_bin, 11 + properties LONGTEXT NOT NULL COLLATE utf8_bin, 12 + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, 13 + dateCreated INT UNSIGNED NOT NULL, 14 + dateModified INT UNSIGNED NOT NULL, 15 + UNIQUE KEY `key_phid` (phid), 16 + UNIQUE KEY `key_object` (objectKey), 17 + KEY `key_full` (applicationType, applicationDomain, objectType, objectID) 18 + ) ENGINE=InnoDB, COLLATE utf8_general_ci; 19 + 20 + CREATE TABLE {$NAMESPACE}_doorkeeper.edge ( 21 + src VARCHAR(64) NOT NULL COLLATE utf8_bin, 22 + type INT UNSIGNED NOT NULL COLLATE utf8_bin, 23 + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, 24 + dateCreated INT UNSIGNED NOT NULL, 25 + seq INT UNSIGNED NOT NULL, 26 + dataID INT UNSIGNED, 27 + PRIMARY KEY (src, type, dst), 28 + KEY (src, type, dateCreated, seq) 29 + ) ENGINE=InnoDB, COLLATE utf8_general_ci; 30 + 31 + CREATE TABLE {$NAMESPACE}_doorkeeper.edgedata ( 32 + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 33 + data LONGTEXT NOT NULL COLLATE utf8_bin 34 + ) ENGINE=InnoDB, COLLATE utf8_general_ci; 35 +
+8
src/__phutil_library_map__.php
··· 533 533 'DivinerRenderer' => 'applications/diviner/renderer/DivinerRenderer.php', 534 534 'DivinerStaticPublisher' => 'applications/diviner/publisher/DivinerStaticPublisher.php', 535 535 'DivinerWorkflow' => 'applications/diviner/workflow/DivinerWorkflow.php', 536 + 'DoorkeeperDAO' => 'applications/doorkeeper/storage/DoorkeeperDAO.php', 537 + 'DoorkeeperExternalObject' => 'applications/doorkeeper/storage/DoorkeeperExternalObject.php', 536 538 'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php', 537 539 'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php', 538 540 'DrydockBlueprint' => 'applications/drydock/blueprint/DrydockBlueprint.php', ··· 2404 2406 'DivinerRemarkupRuleSymbol' => 'PhutilRemarkupRule', 2405 2407 'DivinerStaticPublisher' => 'DivinerPublisher', 2406 2408 'DivinerWorkflow' => 'PhutilArgumentWorkflow', 2409 + 'DoorkeeperDAO' => 'PhabricatorLiskDAO', 2410 + 'DoorkeeperExternalObject' => 2411 + array( 2412 + 0 => 'DoorkeeperDAO', 2413 + 1 => 'PhabricatorPolicyInterface', 2414 + ), 2407 2415 'DrydockAllocatorWorker' => 'PhabricatorWorker', 2408 2416 'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface', 2409 2417 'DrydockCommandInterface' => 'DrydockInterface',
+9
src/applications/doorkeeper/storage/DoorkeeperDAO.php
··· 1 + <?php 2 + 3 + abstract class DoorkeeperDAO extends PhabricatorLiskDAO { 4 + 5 + public function getApplicationName() { 6 + return 'doorkeeper'; 7 + } 8 + 9 + }
+79
src/applications/doorkeeper/storage/DoorkeeperExternalObject.php
··· 1 + <?php 2 + 3 + final class DoorkeeperExternalObject extends DoorkeeperDAO 4 + implements PhabricatorPolicyInterface { 5 + 6 + protected $objectKey; 7 + protected $applicationType; 8 + protected $applicationDomain; 9 + protected $objectType; 10 + protected $objectID; 11 + protected $objectURI; 12 + protected $importerPHID; 13 + protected $properties = array(); 14 + protected $viewPolicy; 15 + 16 + public function getConfiguration() { 17 + return array( 18 + self::CONFIG_AUX_PHID => true, 19 + self::CONFIG_SERIALIZATION => array( 20 + 'properties' => self::SERIALIZATION_JSON, 21 + ), 22 + ) + parent::getConfiguration(); 23 + } 24 + 25 + public function generatePHID() { 26 + return PhabricatorPHID::generateNewPHID( 27 + PhabricatorPHIDConstants::PHID_TYPE_XOBJ); 28 + } 29 + 30 + public function getProperty($key, $default = null) { 31 + return idx($this->properties, $key, $default); 32 + } 33 + 34 + public function setProperty($key, $value) { 35 + $this->properties[$key] = $value; 36 + return $this; 37 + } 38 + 39 + public function getObjectKey() { 40 + $key = parent::getObjectKey(); 41 + if ($key === null) { 42 + $key = PhabricatorHash::digestForIndex( 43 + implode( 44 + ':', 45 + array( 46 + $this->getApplicationType(), 47 + $this->getApplicationDomain(), 48 + $this->getObjectType(), 49 + $this->getObjectID(), 50 + ))); 51 + } 52 + return $key; 53 + } 54 + 55 + public function save() { 56 + if (!$this->objectKey) { 57 + $this->objectKey = $this->getObjectKey(); 58 + } 59 + return parent::save(); 60 + } 61 + 62 + 63 + /* -( PhabricatorPolicyInterface )----------------------------------------- */ 64 + 65 + public function getCapabilities() { 66 + return array( 67 + PhabricatorPolicyCapability::CAN_VIEW, 68 + ); 69 + } 70 + 71 + public function getPolicy($capability) { 72 + return $this->viewPolicy; 73 + } 74 + 75 + public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { 76 + return false; 77 + } 78 + 79 + }
+1
src/applications/phid/PhabricatorPHIDConstants.php
··· 48 48 const PHID_TYPE_BOOK = 'BOOK'; 49 49 const PHID_TYPE_ATOM = 'ATOM'; 50 50 const PHID_TYPE_AUTH = 'AUTH'; 51 + const PHID_TYPE_XOBJ = 'XOBJ'; 51 52 52 53 const PHID_TYPE_VOID = 'VOID'; 53 54 const PHID_VOID = 'PHID-VOID-00000000000000000000';
+8
src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
··· 195 195 'type' => 'db', 196 196 'name' => 'auth', 197 197 ), 198 + 'db.doorkeeper' => array( 199 + 'type' => 'db', 200 + 'name' => 'doorkeeper', 201 + ), 198 202 '0000.legacy.sql' => array( 199 203 'type' => 'sql', 200 204 'name' => $this->getPatchPath('0000.legacy.sql'), ··· 1393 1397 '20130621.diffcommentunphid.sql' => array( 1394 1398 'type' => 'sql', 1395 1399 'name' => $this->getPatchPath('20130621.diffcommentunphid.sql'), 1400 + ), 1401 + '20130622.doorkeeper.sql' => array( 1402 + 'type' => 'sql', 1403 + 'name' => $this->getPatchPath('20130622.doorkeeper.sql'), 1396 1404 ), 1397 1405 ); 1398 1406 }