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

Differential - return a better response for validation error cases

Summary: Fixes T6989. Basically return a nice dialogue like we do for "NoEffect" transactions. This is a little prettier than the other dialogue was. Also, stop adding TYPE_EDGE as a transaction type as we end up having it 2x, which then makes the error get validated 2x.

Test Plan: tried to add myself as a reviewer and got a nice error message.

Reviewers: chad, epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T6989

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

+54 -3
+2
src/__phutil_library_map__.php
··· 1290 1290 'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php', 1291 1291 'PhabricatorApplicationTransactionValidationError' => 'applications/transactions/error/PhabricatorApplicationTransactionValidationError.php', 1292 1292 'PhabricatorApplicationTransactionValidationException' => 'applications/transactions/exception/PhabricatorApplicationTransactionValidationException.php', 1293 + 'PhabricatorApplicationTransactionValidationResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php', 1293 1294 'PhabricatorApplicationTransactionValueController' => 'applications/transactions/controller/PhabricatorApplicationTransactionValueController.php', 1294 1295 'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php', 1295 1296 'PhabricatorApplicationUninstallController' => 'applications/meta/controller/PhabricatorApplicationUninstallController.php', ··· 4476 4477 'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType', 4477 4478 'PhabricatorApplicationTransactionValidationError' => 'Phobject', 4478 4479 'PhabricatorApplicationTransactionValidationException' => 'Exception', 4480 + 'PhabricatorApplicationTransactionValidationResponse' => 'AphrontProxyResponse', 4479 4481 'PhabricatorApplicationTransactionValueController' => 'PhabricatorApplicationTransactionController', 4480 4482 'PhabricatorApplicationTransactionView' => 'AphrontView', 4481 4483 'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController',
+3 -2
src/applications/differential/controller/DifferentialCommentSaveController.php
··· 127 127 ->setCancelURI($revision_uri) 128 128 ->setException($ex); 129 129 } catch (PhabricatorApplicationTransactionValidationException $ex) { 130 - // TODO: Provide a nice Response for rendering these in a clean way. 131 - throw $ex; 130 + return id(new PhabricatorApplicationTransactionValidationResponse()) 131 + ->setCancelURI($revision_uri) 132 + ->setException($ex); 132 133 } 133 134 134 135 $user = $request->getUser();
-1
src/applications/differential/editor/DifferentialTransactionEditor.php
··· 55 55 $types = parent::getTransactionTypes(); 56 56 57 57 $types[] = PhabricatorTransactions::TYPE_COMMENT; 58 - $types[] = PhabricatorTransactions::TYPE_EDGE; 59 58 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 60 59 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 61 60
+49
src/applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationTransactionValidationResponse 4 + extends AphrontProxyResponse { 5 + 6 + private $viewer; 7 + private $exception; 8 + private $cancelURI; 9 + 10 + public function setCancelURI($cancel_uri) { 11 + $this->cancelURI = $cancel_uri; 12 + return $this; 13 + } 14 + 15 + public function setException( 16 + PhabricatorApplicationTransactionValidationException $exception) { 17 + $this->exception = $exception; 18 + return $this; 19 + } 20 + 21 + protected function buildProxy() { 22 + return new AphrontDialogResponse(); 23 + } 24 + 25 + public function reduceProxyResponse() { 26 + $request = $this->getRequest(); 27 + 28 + $ex = $this->exception; 29 + $title = pht('Validation Errors'); 30 + 31 + $dialog = id(new AphrontDialogView()) 32 + ->setUser($request->getUser()) 33 + ->setTitle($title); 34 + 35 + $list = array(); 36 + foreach ($ex->getErrors() as $error) { 37 + $list[] = phutil_tag( 38 + 'li', 39 + array(), 40 + $error->getMessage()); 41 + } 42 + 43 + $dialog->appendChild(phutil_tag('ul', array(), $list)); 44 + $dialog->addCancelButton($this->cancelURI); 45 + 46 + return $this->getProxy()->setDialog($dialog); 47 + } 48 + 49 + }