@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

Make Applications extend LiskDAO

Summary:
Ref T11476. This is a bit hacky, but makes `Application` extend `LiskDAO` so we can apply transactions to it with an `Editor` class.

Also fixes schema stuff so builds should produce a clean bill of health again.

This might only get you slightly further, yell if you run into more trouble.

Test Plan:
- Ran `bin/storage upgrade -f` and got no warnings.
- Browsed around, nothing exploded?

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T11476

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

+59 -12
+7
resources/sql/autopatches/20170419.app.01.table.sql
··· 1 + CREATE TABLE {$NAMESPACE}_application.application_application ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + phid VARBINARY(64) NOT NULL, 4 + dateCreated INT UNSIGNED NOT NULL, 5 + dateModified INT UNSIGNED NOT NULL, 6 + UNIQUE KEY `key_phid` (phid) 7 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+10 -1
src/__phutil_library_map__.php
··· 1838 1838 'PhabricatorAppSearchEngine' => 'applications/meta/query/PhabricatorAppSearchEngine.php', 1839 1839 'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php', 1840 1840 'PhabricatorApplicationApplicationPHIDType' => 'applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php', 1841 + 'PhabricatorApplicationApplicationTransaction' => 'applications/meta/storage/PhabricatorApplicationApplicationTransaction.php', 1842 + 'PhabricatorApplicationApplicationTransactionQuery' => 'applications/meta/query/PhabricatorApplicationApplicationTransactionQuery.php', 1841 1843 'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php', 1842 1844 'PhabricatorApplicationConfigurationPanel' => 'applications/meta/panel/PhabricatorApplicationConfigurationPanel.php', 1843 1845 'PhabricatorApplicationConfigurationPanelTestCase' => 'applications/meta/panel/__tests__/PhabricatorApplicationConfigurationPanelTestCase.php', ··· 1849 1851 'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php', 1850 1852 'PhabricatorApplicationProfileMenuItem' => 'applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php', 1851 1853 'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php', 1854 + 'PhabricatorApplicationSchemaSpec' => 'applications/meta/storage/PhabricatorApplicationSchemaSpec.php', 1852 1855 'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php', 1853 1856 'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php', 1854 1857 'PhabricatorApplicationSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorApplicationSearchEngineTestCase.php', ··· 1881 1884 'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionTemplatedCommentQuery.php', 1882 1885 'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php', 1883 1886 'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php', 1887 + 'PhabricatorApplicationTransactionType' => 'applications/meta/xactions/PhabricatorApplicationTransactionType.php', 1884 1888 'PhabricatorApplicationTransactionValidationError' => 'applications/transactions/error/PhabricatorApplicationTransactionValidationError.php', 1885 1889 'PhabricatorApplicationTransactionValidationException' => 'applications/transactions/exception/PhabricatorApplicationTransactionValidationException.php', 1886 1890 'PhabricatorApplicationTransactionValidationResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php', ··· 6847 6851 'PhabricatorAphrontViewTestCase' => 'PhabricatorTestCase', 6848 6852 'PhabricatorAppSearchEngine' => 'PhabricatorApplicationSearchEngine', 6849 6853 'PhabricatorApplication' => array( 6850 - 'Phobject', 6854 + 'PhabricatorLiskDAO', 6851 6855 'PhabricatorPolicyInterface', 6856 + 'PhabricatorApplicationTransactionInterface', 6852 6857 ), 6853 6858 'PhabricatorApplicationApplicationPHIDType' => 'PhabricatorPHIDType', 6859 + 'PhabricatorApplicationApplicationTransaction' => 'PhabricatorModularTransaction', 6860 + 'PhabricatorApplicationApplicationTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 6854 6861 'PhabricatorApplicationConfigOptions' => 'Phobject', 6855 6862 'PhabricatorApplicationConfigurationPanel' => 'Phobject', 6856 6863 'PhabricatorApplicationConfigurationPanelTestCase' => 'PhabricatorTestCase', ··· 6862 6869 'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController', 6863 6870 'PhabricatorApplicationProfileMenuItem' => 'PhabricatorProfileMenuItem', 6864 6871 'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 6872 + 'PhabricatorApplicationSchemaSpec' => 'PhabricatorConfigSchemaSpec', 6865 6873 'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController', 6866 6874 'PhabricatorApplicationSearchEngine' => 'Phobject', 6867 6875 'PhabricatorApplicationSearchEngineTestCase' => 'PhabricatorTestCase', ··· 6902 6910 'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery', 6903 6911 'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView', 6904 6912 'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType', 6913 + 'PhabricatorApplicationTransactionType' => 'PhabricatorModularTransactionType', 6905 6914 'PhabricatorApplicationTransactionValidationError' => 'Phobject', 6906 6915 'PhabricatorApplicationTransactionValidationException' => 'Exception', 6907 6916 'PhabricatorApplicationTransactionValidationResponse' => 'AphrontProxyResponse',
+25 -1
src/applications/base/PhabricatorApplication.php
··· 9 9 * @task meta Application Management 10 10 */ 11 11 abstract class PhabricatorApplication 12 - extends Phobject 12 + extends PhabricatorLiskDAO 13 13 implements 14 14 PhabricatorPolicyInterface, 15 15 PhabricatorApplicationTransactionInterface { ··· 26 26 self::GROUP_ADMIN => pht('Administration'), 27 27 self::GROUP_DEVELOPER => pht('Developer Tools'), 28 28 ); 29 + } 30 + 31 + final public function getApplicationName() { 32 + return 'application'; 33 + } 34 + 35 + final public function getTableName() { 36 + return 'application_application'; 37 + } 38 + 39 + final protected function getConfiguration() { 40 + return array( 41 + self::CONFIG_AUX_PHID => true, 42 + ) + parent::getConfiguration(); 43 + } 44 + 45 + final public function generatePHID() { 46 + return $this->getPHID(); 47 + } 48 + 49 + final public function save() { 50 + // When "save()" is called on applications, we just return without 51 + // actually writing anything to the database. 52 + return $this; 29 53 } 30 54 31 55
+7
src/applications/config/schema/PhabricatorConfigDatabaseSchema.php
··· 11 11 public function addTable(PhabricatorConfigTableSchema $table) { 12 12 $key = $table->getName(); 13 13 if (isset($this->tables[$key])) { 14 + 15 + if ($key == 'application_application') { 16 + // NOTE: This is a terrible hack to allow Application subclasses to 17 + // extend LiskDAO so we can apply transactions to them. 18 + return $this; 19 + } 20 + 14 21 throw new Exception( 15 22 pht('Trying to add duplicate table "%s"!', $key)); 16 23 }
-10
src/applications/meta/storage/PhabricatorApplicationApplicationTransactionComment.php
··· 1 - <?php 2 - 3 - final class PhabricatorApplicationApplicationTransactionComment 4 - extends PhabricatorApplicationTransactionComment { 5 - 6 - public function getApplicationTransactionObject() { 7 - return new PhabricatorApplicationApplicationTransaction(); 8 - } 9 - 10 - }
+10
src/applications/meta/storage/PhabricatorApplicationSchemaSpec.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildEdgeSchemata(new PhabricatorApplicationsApplication()); 8 + } 9 + 10 + }
src/applications/meta/xactions/PhabricatorApplicationApplicationTransaction.php src/applications/meta/storage/PhabricatorApplicationApplicationTransaction.php