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

Modularize dashboard layout modes (one column, two columns, etc)

Summary:
Depends on D20405. Ref T13272. Currently, the `PhabricatorDashboardLayoutConfig` class uses a lot of `switch()` statements to define layout modes.

Although I'm not planning to add thousands of new layout modes, this (and upcoming changes) can be made substantially cleaner by using a standard modular approach.

(This doesn't fully remove `PhabricatorDashboardLayoutConfig` yet, but that will happen soon.)

Test Plan: Edited a dashboard, saw the same layout modes as before.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13272

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

+181 -12
+12
src/__phutil_library_map__.php
··· 2910 2910 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', 2911 2911 'PhabricatorDashboardApplicationInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardApplicationInstallWorkflow.php', 2912 2912 'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php', 2913 + 'PhabricatorDashboardColumn' => 'applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php', 2913 2914 'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php', 2914 2915 'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php', 2915 2916 'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php', ··· 2919 2920 'PhabricatorDashboardEditController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php', 2920 2921 'PhabricatorDashboardEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardEditEngine.php', 2921 2922 'PhabricatorDashboardFavoritesInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardFavoritesInstallWorkflow.php', 2923 + 'PhabricatorDashboardFullLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php', 2924 + 'PhabricatorDashboardHalfLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php', 2922 2925 'PhabricatorDashboardHomeInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardHomeInstallWorkflow.php', 2923 2926 'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php', 2924 2927 'PhabricatorDashboardIconTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardIconTransaction.php', ··· 2926 2929 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php', 2927 2930 'PhabricatorDashboardInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardInstallWorkflow.php', 2928 2931 'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php', 2932 + 'PhabricatorDashboardLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php', 2929 2933 'PhabricatorDashboardLayoutTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php', 2930 2934 'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php', 2931 2935 'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php', 2932 2936 'PhabricatorDashboardNameTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardNameTransaction.php', 2933 2937 'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php', 2934 2938 'PhabricatorDashboardObjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardObjectInstallWorkflow.php', 2939 + 'PhabricatorDashboardOneThirdLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php', 2935 2940 'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php', 2936 2941 'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelArchiveController.php', 2937 2942 'PhabricatorDashboardPanelContainerIndexEngineExtension' => 'applications/dashboard/engineextension/PhabricatorDashboardPanelContainerIndexEngineExtension.php', ··· 3006 3011 'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php', 3007 3012 'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php', 3008 3013 'PhabricatorDashboardTransactionType' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardTransactionType.php', 3014 + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php', 3009 3015 'PhabricatorDashboardViewController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php', 3010 3016 'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php', 3011 3017 'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php', ··· 8904 8910 'PhabricatorDashboardApplication' => 'PhabricatorApplication', 8905 8911 'PhabricatorDashboardApplicationInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', 8906 8912 'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController', 8913 + 'PhabricatorDashboardColumn' => 'Phobject', 8907 8914 'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController', 8908 8915 'PhabricatorDashboardController' => 'PhabricatorController', 8909 8916 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', ··· 8913 8920 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', 8914 8921 'PhabricatorDashboardEditEngine' => 'PhabricatorEditEngine', 8915 8922 'PhabricatorDashboardFavoritesInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', 8923 + 'PhabricatorDashboardFullLayoutMode' => 'PhabricatorDashboardLayoutMode', 8924 + 'PhabricatorDashboardHalfLayoutMode' => 'PhabricatorDashboardLayoutMode', 8916 8925 'PhabricatorDashboardHomeInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', 8917 8926 'PhabricatorDashboardIconSet' => 'PhabricatorIconSet', 8918 8927 'PhabricatorDashboardIconTransaction' => 'PhabricatorDashboardTransactionType', ··· 8920 8929 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', 8921 8930 'PhabricatorDashboardInstallWorkflow' => 'Phobject', 8922 8931 'PhabricatorDashboardLayoutConfig' => 'Phobject', 8932 + 'PhabricatorDashboardLayoutMode' => 'Phobject', 8923 8933 'PhabricatorDashboardLayoutTransaction' => 'PhabricatorDashboardTransactionType', 8924 8934 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', 8925 8935 'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController', 8926 8936 'PhabricatorDashboardNameTransaction' => 'PhabricatorDashboardTransactionType', 8927 8937 'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams', 8928 8938 'PhabricatorDashboardObjectInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', 8939 + 'PhabricatorDashboardOneThirdLayoutMode' => 'PhabricatorDashboardLayoutMode', 8929 8940 'PhabricatorDashboardPanel' => array( 8930 8941 'PhabricatorDashboardDAO', 8931 8942 'PhabricatorApplicationTransactionInterface', ··· 9015 9026 'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor', 9016 9027 'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 9017 9028 'PhabricatorDashboardTransactionType' => 'PhabricatorModularTransactionType', 9029 + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'PhabricatorDashboardLayoutMode', 9018 9030 'PhabricatorDashboardViewController' => 'PhabricatorDashboardProfileController', 9019 9031 'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec', 9020 9032 'PhabricatorDataNotAttachedException' => 'Exception',
+3 -2
src/applications/dashboard/editor/PhabricatorDashboardEditEngine.php
··· 67 67 } 68 68 69 69 protected function buildCustomEditFields($object) { 70 + $layout_options = PhabricatorDashboardLayoutMode::getLayoutModeMap(); 71 + 70 72 $fields = array( 71 73 id(new PhabricatorTextEditField()) 72 74 ->setKey('name') ··· 96 98 ->setConduitTypeDescription(pht('New dashboard layout mode.')) 97 99 ->setTransactionType( 98 100 PhabricatorDashboardLayoutTransaction::TRANSACTIONTYPE) 99 - ->setOptions( 100 - PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions()) 101 + ->setOptions($layout_options) 101 102 ->setValue($object->getRawLayoutMode()), 102 103 ); 103 104
+27
src/applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardColumn 4 + extends Phobject { 5 + 6 + private $columnKey; 7 + private $classes = array(); 8 + 9 + public function setColumnKey($column_key) { 10 + $this->columnKey = $column_key; 11 + return $this; 12 + } 13 + 14 + public function getColumnKey() { 15 + return $this->columnKey; 16 + } 17 + 18 + public function addClass($class) { 19 + $this->classes[] = $class; 20 + return $this; 21 + } 22 + 23 + public function getClasses() { 24 + return $this->classes; 25 + } 26 + 27 + }
+23
src/applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardFullLayoutMode 4 + extends PhabricatorDashboardLayoutMode { 5 + 6 + const LAYOUTMODE = 'layout-mode-full'; 7 + 8 + public function getLayoutModeOrder() { 9 + return 0; 10 + } 11 + 12 + public function getLayoutModeName() { 13 + return pht('One Column: 100%%'); 14 + } 15 + 16 + public function getLayoutModeColumns() { 17 + return array( 18 + $this->newColumn() 19 + ->setColumnKey('main'), 20 + ); 21 + } 22 + 23 + }
+27
src/applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardHalfLayoutMode 4 + extends PhabricatorDashboardLayoutMode { 5 + 6 + const LAYOUTMODE = 'layout-mode-half-and-half'; 7 + 8 + public function getLayoutModeOrder() { 9 + return 500; 10 + } 11 + 12 + public function getLayoutModeName() { 13 + return pht('Two Columns: 50%%/50%%'); 14 + } 15 + 16 + public function getLayoutModeColumns() { 17 + return array( 18 + $this->newColumn() 19 + ->setColumnKey('left') 20 + ->addClass('half'), 21 + $this->newColumn() 22 + ->setColumnKey('right') 23 + ->addClass('half'), 24 + ); 25 + } 26 + 27 + }
-9
src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php
··· 107 107 return $class; 108 108 } 109 109 110 - public static function getLayoutModeSelectOptions() { 111 - return array( 112 - self::MODE_FULL => pht('One full-width column'), 113 - self::MODE_HALF_AND_HALF => pht('Two columns, 1/2 and 1/2'), 114 - self::MODE_THIRD_AND_THIRDS => pht('Two columns, 1/3 and 2/3'), 115 - self::MODE_THIRDS_AND_THIRD => pht('Two columns, 2/3 and 1/3'), 116 - ); 117 - } 118 - 119 110 public static function newFromDictionary(array $dict) { 120 111 $layout_config = id(new PhabricatorDashboardLayoutConfig()) 121 112 ->setLayoutMode(idx($dict, 'layoutMode', self::MODE_FULL));
+34
src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorDashboardLayoutMode 4 + extends Phobject { 5 + 6 + final public function getLayoutModeKey() { 7 + return $this->getPhobjectClassConstant('LAYOUTMODE', 32); 8 + } 9 + 10 + public function getLayoutModeOrder() { 11 + return 1000; 12 + } 13 + 14 + abstract public function getLayoutModeName(); 15 + abstract public function getLayoutModeColumns(); 16 + 17 + final protected function newColumn() { 18 + return new PhabricatorDashboardColumn(); 19 + } 20 + 21 + final public static function getAllLayoutModes() { 22 + return id(new PhutilClassMapQuery()) 23 + ->setAncestorClass(__CLASS__) 24 + ->setUniqueMethod('getLayoutModeKey') 25 + ->setSortMethod('getLayoutModeOrder') 26 + ->execute(); 27 + } 28 + 29 + final public static function getLayoutModeMap() { 30 + $modes = self::getAllLayoutModes(); 31 + return mpull($modes, 'getLayoutModeName', 'getLayoutModeKey'); 32 + } 33 + 34 + }
+27
src/applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardOneThirdLayoutMode 4 + extends PhabricatorDashboardLayoutMode { 5 + 6 + const LAYOUTMODE = 'layout-mode-third-and-thirds'; 7 + 8 + public function getLayoutModeOrder() { 9 + return 700; 10 + } 11 + 12 + public function getLayoutModeName() { 13 + return pht('Two Columns: 33%%/66%%'); 14 + } 15 + 16 + public function getLayoutModeColumns() { 17 + return array( 18 + $this->newColumn() 19 + ->setColumnKey('left') 20 + ->addClass('third'), 21 + $this->newColumn() 22 + ->setColumnKey('right') 23 + ->addClass('thirds'), 24 + ); 25 + } 26 + 27 + }
+27
src/applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardTwoThirdsLayoutMode 4 + extends PhabricatorDashboardLayoutMode { 5 + 6 + const LAYOUTMODE = 'layout-mode-thirds-and-third'; 7 + 8 + public function getLayoutModeOrder() { 9 + return 600; 10 + } 11 + 12 + public function getLayoutModeName() { 13 + return pht('Two Columns: 66%%/33%%'); 14 + } 15 + 16 + public function getLayoutModeColumns() { 17 + return array( 18 + $this->newColumn() 19 + ->setColumnKey('left') 20 + ->addClass('thirds'), 21 + $this->newColumn() 22 + ->setColumnKey('right') 23 + ->addClass('third'), 24 + ); 25 + } 26 + 27 + }
+1 -1
src/applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php
··· 26 26 public function validateTransactions($object, array $xactions) { 27 27 $errors = array(); 28 28 29 - $mode_map = PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions(); 29 + $mode_map = PhabricatorDashboardLayoutMode::getLayoutModeMap(); 30 30 31 31 $old_value = $object->getRawLayoutMode(); 32 32 foreach ($xactions as $xaction) {