@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
at recaptime-dev/main 148 lines 4.6 kB view raw
1<?php 2 3final class PhabricatorProjectColumnHideController 4 extends PhabricatorProjectBoardController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 $id = $request->getURIData('id'); 9 $project_id = $request->getURIData('projectID'); 10 11 $project = id(new PhabricatorProjectQuery()) 12 ->setViewer($viewer) 13 ->requireCapabilities( 14 array( 15 PhabricatorPolicyCapability::CAN_VIEW, 16 PhabricatorPolicyCapability::CAN_EDIT, 17 )) 18 ->withIDs(array($project_id)) 19 ->executeOne(); 20 21 if (!$project) { 22 return new Aphront404Response(); 23 } 24 $this->setProject($project); 25 26 $column = id(new PhabricatorProjectColumnQuery()) 27 ->setViewer($viewer) 28 ->withIDs(array($id)) 29 ->requireCapabilities( 30 array( 31 PhabricatorPolicyCapability::CAN_VIEW, 32 PhabricatorPolicyCapability::CAN_EDIT, 33 )) 34 ->executeOne(); 35 if (!$column) { 36 return new Aphront404Response(); 37 } 38 39 $column_phid = $column->getPHID(); 40 41 $view_uri = $project->getWorkboardURI(); 42 $view_uri = new PhutilURI($view_uri); 43 foreach ($request->getPassthroughRequestData() as $key => $value) { 44 $view_uri->replaceQueryParam($key, $value); 45 } 46 47 if ($column->isDefaultColumn()) { 48 return $this->newDialog() 49 ->setTitle(pht('Can Not Hide Default Column')) 50 ->appendParagraph( 51 pht('You can not hide the default/backlog column on a board.')) 52 ->addCancelButton($view_uri, pht('Okay')); 53 } 54 55 $proxy = $column->getProxy(); 56 57 if ($request->isFormPost()) { 58 if ($proxy) { 59 if ($proxy->isArchived()) { 60 $new_status = PhabricatorProjectStatus::STATUS_ACTIVE; 61 } else { 62 $new_status = PhabricatorProjectStatus::STATUS_ARCHIVED; 63 } 64 65 $xactions = array(); 66 67 $xactions[] = id(new PhabricatorProjectTransaction()) 68 ->setTransactionType( 69 PhabricatorProjectStatusTransaction::TRANSACTIONTYPE) 70 ->setNewValue($new_status); 71 72 id(new PhabricatorProjectTransactionEditor()) 73 ->setActor($viewer) 74 ->setContentSourceFromRequest($request) 75 ->setContinueOnNoEffect(true) 76 ->setContinueOnMissingFields(true) 77 ->applyTransactions($proxy, $xactions); 78 } else { 79 if ($column->isHidden()) { 80 $new_status = PhabricatorProjectColumn::STATUS_ACTIVE; 81 } else { 82 $new_status = PhabricatorProjectColumn::STATUS_HIDDEN; 83 } 84 85 $type_status = 86 PhabricatorProjectColumnStatusTransaction::TRANSACTIONTYPE; 87 88 $xactions = array( 89 id(new PhabricatorProjectColumnTransaction()) 90 ->setTransactionType($type_status) 91 ->setNewValue($new_status), 92 ); 93 94 $editor = id(new PhabricatorProjectColumnTransactionEditor()) 95 ->setActor($viewer) 96 ->setContinueOnNoEffect(true) 97 ->setContinueOnMissingFields(true) 98 ->setContentSourceFromRequest($request) 99 ->applyTransactions($column, $xactions); 100 } 101 102 return id(new AphrontRedirectResponse())->setURI($view_uri); 103 } 104 105 if ($proxy) { 106 if ($column->isHidden()) { 107 $title = pht('Activate and Show Column'); 108 $body = pht( 109 'This column is hidden because it represents an archived '. 110 'subproject. Do you want to activate the subproject so the '. 111 'column is visible again?'); 112 $button = pht('Activate Subproject'); 113 } else { 114 $title = pht('Archive and Hide Column'); 115 $body = pht( 116 'This column is visible because it represents an active '. 117 'subproject. Do you want to hide the column by archiving the '. 118 'subproject?'); 119 $button = pht('Archive Subproject'); 120 } 121 } else { 122 if ($column->isHidden()) { 123 $title = pht('Show Column'); 124 $body = pht('Are you sure you want to show this column?'); 125 $button = pht('Show Column'); 126 } else { 127 $title = pht('Hide Column'); 128 $body = pht( 129 'Are you sure you want to hide this column? It will no longer '. 130 'appear on the workboard.'); 131 $button = pht('Hide Column'); 132 } 133 } 134 135 $dialog = $this->newDialog() 136 ->setWidth(AphrontDialogView::WIDTH_FORM) 137 ->setTitle($title) 138 ->appendChild($body) 139 ->addCancelButton($view_uri) 140 ->addSubmitButton($button); 141 142 foreach ($request->getPassthroughRequestData() as $key => $value) { 143 $dialog->addHiddenInput($key, $value); 144 } 145 146 return $dialog; 147 } 148}