diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2910,6 +2910,7 @@ 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', 'PhabricatorDashboardApplicationInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardApplicationInstallWorkflow.php', 'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php', + 'PhabricatorDashboardColumn' => 'applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php', 'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php', 'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php', 'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php', @@ -2919,6 +2920,8 @@ 'PhabricatorDashboardEditController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php', 'PhabricatorDashboardEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardEditEngine.php', 'PhabricatorDashboardFavoritesInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardFavoritesInstallWorkflow.php', + 'PhabricatorDashboardFullLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php', + 'PhabricatorDashboardHalfLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php', 'PhabricatorDashboardHomeInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardHomeInstallWorkflow.php', 'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php', 'PhabricatorDashboardIconTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardIconTransaction.php', @@ -2926,12 +2929,14 @@ 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php', 'PhabricatorDashboardInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardInstallWorkflow.php', 'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php', + 'PhabricatorDashboardLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php', 'PhabricatorDashboardLayoutTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php', 'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php', 'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php', 'PhabricatorDashboardNameTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardNameTransaction.php', 'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php', 'PhabricatorDashboardObjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardObjectInstallWorkflow.php', + 'PhabricatorDashboardOneThirdLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php', 'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php', 'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelArchiveController.php', 'PhabricatorDashboardPanelContainerIndexEngineExtension' => 'applications/dashboard/engineextension/PhabricatorDashboardPanelContainerIndexEngineExtension.php', @@ -3006,6 +3011,7 @@ 'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php', 'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php', 'PhabricatorDashboardTransactionType' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardTransactionType.php', + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php', 'PhabricatorDashboardViewController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php', 'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php', 'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php', @@ -8904,6 +8910,7 @@ 'PhabricatorDashboardApplication' => 'PhabricatorApplication', 'PhabricatorDashboardApplicationInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', 'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardColumn' => 'Phobject', 'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController', 'PhabricatorDashboardController' => 'PhabricatorController', 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', @@ -8913,6 +8920,8 @@ 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', 'PhabricatorDashboardEditEngine' => 'PhabricatorEditEngine', 'PhabricatorDashboardFavoritesInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', + 'PhabricatorDashboardFullLayoutMode' => 'PhabricatorDashboardLayoutMode', + 'PhabricatorDashboardHalfLayoutMode' => 'PhabricatorDashboardLayoutMode', 'PhabricatorDashboardHomeInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', 'PhabricatorDashboardIconSet' => 'PhabricatorIconSet', 'PhabricatorDashboardIconTransaction' => 'PhabricatorDashboardTransactionType', @@ -8920,12 +8929,14 @@ 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', 'PhabricatorDashboardInstallWorkflow' => 'Phobject', 'PhabricatorDashboardLayoutConfig' => 'Phobject', + 'PhabricatorDashboardLayoutMode' => 'Phobject', 'PhabricatorDashboardLayoutTransaction' => 'PhabricatorDashboardTransactionType', 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', 'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController', 'PhabricatorDashboardNameTransaction' => 'PhabricatorDashboardTransactionType', 'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams', 'PhabricatorDashboardObjectInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', + 'PhabricatorDashboardOneThirdLayoutMode' => 'PhabricatorDashboardLayoutMode', 'PhabricatorDashboardPanel' => array( 'PhabricatorDashboardDAO', 'PhabricatorApplicationTransactionInterface', @@ -9015,6 +9026,7 @@ 'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor', 'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'PhabricatorDashboardTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'PhabricatorDashboardLayoutMode', 'PhabricatorDashboardViewController' => 'PhabricatorDashboardProfileController', 'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec', 'PhabricatorDataNotAttachedException' => 'Exception', diff --git a/src/applications/dashboard/editor/PhabricatorDashboardEditEngine.php b/src/applications/dashboard/editor/PhabricatorDashboardEditEngine.php --- a/src/applications/dashboard/editor/PhabricatorDashboardEditEngine.php +++ b/src/applications/dashboard/editor/PhabricatorDashboardEditEngine.php @@ -67,6 +67,8 @@ } protected function buildCustomEditFields($object) { + $layout_options = PhabricatorDashboardLayoutMode::getLayoutModeMap(); + $fields = array( id(new PhabricatorTextEditField()) ->setKey('name') @@ -96,8 +98,7 @@ ->setConduitTypeDescription(pht('New dashboard layout mode.')) ->setTransactionType( PhabricatorDashboardLayoutTransaction::TRANSACTIONTYPE) - ->setOptions( - PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions()) + ->setOptions($layout_options) ->setValue($object->getRawLayoutMode()), ); diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php @@ -0,0 +1,27 @@ +columnKey = $column_key; + return $this; + } + + public function getColumnKey() { + return $this->columnKey; + } + + public function addClass($class) { + $this->classes[] = $class; + return $this; + } + + public function getClasses() { + return $this->classes; + } + +} diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php @@ -0,0 +1,23 @@ +newColumn() + ->setColumnKey('main'), + ); + } + +} diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php @@ -0,0 +1,27 @@ +newColumn() + ->setColumnKey('left') + ->addClass('half'), + $this->newColumn() + ->setColumnKey('right') + ->addClass('half'), + ); + } + +} diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php --- a/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php @@ -107,15 +107,6 @@ return $class; } - public static function getLayoutModeSelectOptions() { - return array( - self::MODE_FULL => pht('One full-width column'), - self::MODE_HALF_AND_HALF => pht('Two columns, 1/2 and 1/2'), - self::MODE_THIRD_AND_THIRDS => pht('Two columns, 1/3 and 2/3'), - self::MODE_THIRDS_AND_THIRD => pht('Two columns, 2/3 and 1/3'), - ); - } - public static function newFromDictionary(array $dict) { $layout_config = id(new PhabricatorDashboardLayoutConfig()) ->setLayoutMode(idx($dict, 'layoutMode', self::MODE_FULL)); diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php @@ -0,0 +1,34 @@ +getPhobjectClassConstant('LAYOUTMODE', 32); + } + + public function getLayoutModeOrder() { + return 1000; + } + + abstract public function getLayoutModeName(); + abstract public function getLayoutModeColumns(); + + final protected function newColumn() { + return new PhabricatorDashboardColumn(); + } + + final public static function getAllLayoutModes() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getLayoutModeKey') + ->setSortMethod('getLayoutModeOrder') + ->execute(); + } + + final public static function getLayoutModeMap() { + $modes = self::getAllLayoutModes(); + return mpull($modes, 'getLayoutModeName', 'getLayoutModeKey'); + } + +} diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php @@ -0,0 +1,27 @@ +newColumn() + ->setColumnKey('left') + ->addClass('third'), + $this->newColumn() + ->setColumnKey('right') + ->addClass('thirds'), + ); + } + +} diff --git a/src/applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php b/src/applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php new file mode 100644 --- /dev/null +++ b/src/applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php @@ -0,0 +1,27 @@ +newColumn() + ->setColumnKey('left') + ->addClass('thirds'), + $this->newColumn() + ->setColumnKey('right') + ->addClass('third'), + ); + } + +} diff --git a/src/applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php b/src/applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php --- a/src/applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php +++ b/src/applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php @@ -26,7 +26,7 @@ public function validateTransactions($object, array $xactions) { $errors = array(); - $mode_map = PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions(); + $mode_map = PhabricatorDashboardLayoutMode::getLayoutModeMap(); $old_value = $object->getRawLayoutMode(); foreach ($xactions as $xaction) {