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

Move workboard card edits to EditEngine in Maniphest

Summary: Ref T9908. This drives workboard card edits through the new stuff. Bit of copy-paste but the old one will get deleted soon.

Test Plan:
- Edited some cards.
- Changed priority on a priority-sorted board, saw proper re-sort
- Removed board project, saw card vanish properly.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T9908

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

+103 -9
+3
src/applications/maniphest/controller/ManiphestTaskEditProController.php
··· 6 6 return id(new ManiphestEditEngine()) 7 7 ->setController($this) 8 8 ->addContextParameter('ungrippable') 9 + ->addContextParameter('responseType') 10 + ->addContextParameter('columnPHID') 11 + ->addContextParameter('order') 9 12 ->buildResponse(); 10 13 } 11 14
+99 -8
src/applications/maniphest/editor/ManiphestEditEngine.php
··· 193 193 AphrontRequest $request, 194 194 $object, 195 195 array $xactions) { 196 - $viewer = $this->getViewer(); 197 - $controller = $this->getController(); 198 196 199 197 if ($request->isAjax()) { 200 - 201 198 // Reload the task to make sure we pick up the final task state. 199 + $viewer = $this->getViewer(); 202 200 $task = id(new ManiphestTaskQuery()) 203 201 ->setViewer($viewer) 204 202 ->withIDs(array($object->getID())) ··· 206 204 ->needProjectPHIDs(true) 207 205 ->executeOne(); 208 206 209 - $payload = array( 210 - 'tasks' => $controller->renderSingleTask($task), 211 - 'data' => array(), 212 - ); 207 + switch ($request->getStr('responseType')) { 208 + case 'card': 209 + return $this->buildCardResponse($task); 210 + default: 211 + return $this->buildListResponse($task); 212 + } 213 213 214 - return id(new AphrontAjaxResponse())->setContent($payload); 215 214 } 216 215 217 216 return parent::newEditResponse(); 218 217 } 218 + 219 + private function buildListResponse(ManiphestTask $task) { 220 + $controller = $this->getController(); 221 + 222 + $payload = array( 223 + 'tasks' => $controller->renderSingleTask($task), 224 + 'data' => array(), 225 + ); 226 + 227 + return id(new AphrontAjaxResponse())->setContent($payload); 228 + } 229 + 230 + private function buildCardResponse(ManiphestTask $task) { 231 + $controller = $this->getController(); 232 + $request = $controller->getRequest(); 233 + $viewer = $request->getViewer(); 234 + 235 + $column_phid = $request->getStr('columnPHID'); 236 + $order = $request->getStr('order'); 237 + 238 + $column = id(new PhabricatorProjectColumnQuery()) 239 + ->setViewer($viewer) 240 + ->withPHIDs(array($column_phid)) 241 + ->executeOne(); 242 + if (!$column) { 243 + return new Aphront404Response(); 244 + } 245 + 246 + // If the workboard's project has been removed from the card's project 247 + // list, we are going to remove it from the board completely. 248 + $project_map = array_fuse($task->getProjectPHIDs()); 249 + $remove_card = empty($project_map[$column->getProjectPHID()]); 250 + 251 + $positions = id(new PhabricatorProjectColumnPositionQuery()) 252 + ->setViewer($viewer) 253 + ->withColumns(array($column)) 254 + ->execute(); 255 + $task_phids = mpull($positions, 'getObjectPHID'); 256 + 257 + $column_tasks = id(new ManiphestTaskQuery()) 258 + ->setViewer($viewer) 259 + ->withPHIDs($task_phids) 260 + ->execute(); 261 + 262 + if ($order == PhabricatorProjectColumn::ORDER_NATURAL) { 263 + // TODO: This is a little bit awkward, because PHP and JS use 264 + // slightly different sort order parameters to achieve the same 265 + // effect. It would be good to unify this a bit at some point. 266 + $sort_map = array(); 267 + foreach ($positions as $position) { 268 + $sort_map[$position->getObjectPHID()] = array( 269 + -$position->getSequence(), 270 + $position->getID(), 271 + ); 272 + } 273 + } else { 274 + $sort_map = mpull( 275 + $column_tasks, 276 + 'getPrioritySortVector', 277 + 'getPHID'); 278 + } 279 + 280 + $data = array( 281 + 'removeFromBoard' => $remove_card, 282 + 'sortMap' => $sort_map, 283 + ); 284 + 285 + // TODO: This should just use HandlePool once we get through the EditEngine 286 + // transition. 287 + $owner = null; 288 + if ($task->getOwnerPHID()) { 289 + $owner = id(new PhabricatorHandleQuery()) 290 + ->setViewer($viewer) 291 + ->withPHIDs(array($task->getOwnerPHID())) 292 + ->executeOne(); 293 + } 294 + 295 + $tasks = id(new ProjectBoardTaskCard()) 296 + ->setViewer($viewer) 297 + ->setTask($task) 298 + ->setOwner($owner) 299 + ->setCanEdit(true) 300 + ->getItem(); 301 + 302 + $payload = array( 303 + 'tasks' => $tasks, 304 + 'data' => $data, 305 + ); 306 + 307 + return id(new AphrontAjaxResponse())->setContent($payload); 308 + } 309 + 219 310 220 311 }
+1 -1
src/applications/project/view/ProjectBoardTaskCard.php
··· 66 66 ->setName(pht('Edit')) 67 67 ->setIcon('fa-pencil') 68 68 ->addSigil('edit-project-card') 69 - ->setHref('/maniphest/task/edit/'.$task->getID().'/')) 69 + ->setHref('/maniphest/editpro/'.$task->getID().'/')) 70 70 ->setBarColor($bar_color); 71 71 72 72 if ($owner) {