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 @@ -1934,6 +1934,7 @@ 'PhabricatorBoardLayoutEngine' => 'applications/project/engine/PhabricatorBoardLayoutEngine.php', 'PhabricatorBoardRenderingEngine' => 'applications/project/engine/PhabricatorBoardRenderingEngine.php', 'PhabricatorBoardResponseEngine' => 'applications/project/engine/PhabricatorBoardResponseEngine.php', + 'PhabricatorBoolEditField' => 'applications/transactions/editfield/PhabricatorBoolEditField.php', 'PhabricatorBot' => 'infrastructure/daemon/bot/PhabricatorBot.php', 'PhabricatorBotChannel' => 'infrastructure/daemon/bot/target/PhabricatorBotChannel.php', 'PhabricatorBotDebugLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotDebugLogHandler.php', @@ -4426,7 +4427,7 @@ 'ConduitAPIRequest' => 'Phobject', 'ConduitAPIResponse' => 'Phobject', 'ConduitApplicationNotInstalledException' => 'ConduitMethodNotFoundException', - 'ConduitBoolParameterType' => 'ConduitListParameterType', + 'ConduitBoolParameterType' => 'ConduitParameterType', 'ConduitCall' => 'Phobject', 'ConduitCallTestCase' => 'PhabricatorTestCase', 'ConduitColumnsParameterType' => 'ConduitParameterType', @@ -6363,6 +6364,7 @@ 'PhabricatorBoardLayoutEngine' => 'Phobject', 'PhabricatorBoardRenderingEngine' => 'Phobject', 'PhabricatorBoardResponseEngine' => 'Phobject', + 'PhabricatorBoolEditField' => 'PhabricatorEditField', 'PhabricatorBot' => 'PhabricatorDaemon', 'PhabricatorBotChannel' => 'PhabricatorBotTarget', 'PhabricatorBotDebugLogHandler' => 'PhabricatorBotHandler', diff --git a/src/applications/conduit/parametertype/ConduitBoolParameterType.php b/src/applications/conduit/parametertype/ConduitBoolParameterType.php --- a/src/applications/conduit/parametertype/ConduitBoolParameterType.php +++ b/src/applications/conduit/parametertype/ConduitBoolParameterType.php @@ -1,7 +1,7 @@ setConduitDescription(pht('Change the default text encoding.')) ->setConduitTypeDescription(pht('New text encoding.')) ->setValue($object->getDetail('encoding')), + id(new PhabricatorBoolEditField()) + ->setKey('allowDangerousChanges') + ->setLabel(pht('Allow Dangerous Changes')) + ->setIsCopyable(true) + ->setIsConduitOnly(true) + ->setTransactionType(PhabricatorRepositoryTransaction::TYPE_DANGEROUS) + ->setDescription(pht('Permit dangerous changes to be made.')) + ->setConduitDescription(pht('Allow or prevent dangerous changes.')) + ->setConduitTypeDescription(pht('New protection setting.')) + ->setValue($object->shouldAllowDangerousChanges()), id(new PhabricatorSelectEditField()) ->setKey('status') ->setLabel(pht('Status')) diff --git a/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php --- a/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php +++ b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php @@ -26,6 +26,7 @@ $activate_uri = $repository->getPathURI('edit/activate/'); $delete_uri = $repository->getPathURI('edit/delete/'); $encoding_uri = $repository->getPathURI('edit/encoding/'); + $dangerous_uri = $repository->getPathURI('edit/dangerous/'); if ($repository->isTracked()) { $activate_icon = 'fa-pause'; @@ -35,6 +36,17 @@ $activate_label = pht('Activate Repository'); } + $should_dangerous = $repository->shouldAllowDangerousChanges(); + if ($should_dangerous) { + $dangerous_icon = 'fa-shield'; + $dangerous_name = pht('Prevent Dangerous Changes'); + $can_dangerous = $can_edit; + } else { + $dangerous_icon = 'fa-bullseye'; + $dangerous_name = pht('Allow Dangerous Changes'); + $can_dangerous = ($can_edit && $repository->canAllowDangerousChanges()); + } + return array( id(new PhabricatorActionView()) ->setIcon('fa-pencil') @@ -49,6 +61,12 @@ ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit), id(new PhabricatorActionView()) + ->setIcon($dangerous_icon) + ->setName($dangerous_name) + ->setHref($dangerous_uri) + ->setDisabled(!$can_dangerous) + ->setWorkflow(true), + id(new PhabricatorActionView()) ->setHref($activate_uri) ->setIcon($activate_icon) ->setName($activate_label) @@ -110,6 +128,20 @@ } $view->addProperty(pht('Encoding'), $encoding); + $can_dangerous = $repository->canAllowDangerousChanges(); + if (!$can_dangerous) { + $dangerous = phutil_tag('em', array(), pht('Not Preventable')); + } else { + $should_dangerous = $repository->shouldAllowDangerousChanges(); + if ($should_dangerous) { + $dangerous = pht('Allowed'); + } else { + $dangerous = pht('Not Allowed'); + } + } + + $view->addProperty(pht('Dangerous Changes'), $dangerous); + return $view; } diff --git a/src/applications/transactions/editfield/PhabricatorBoolEditField.php b/src/applications/transactions/editfield/PhabricatorBoolEditField.php new file mode 100644 --- /dev/null +++ b/src/applications/transactions/editfield/PhabricatorBoolEditField.php @@ -0,0 +1,23 @@ +setOptions( + array( + '0' => pht('False'), + '1' => pht('True'), + )); + } + + protected function newHTTPParameterType() { + return new AphrontBoolHTTPParameterType(); + } + + protected function newConduitParameterType() { + return new ConduitBoolParameterType(); + } + +}