Something went wrong. Try again.
@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
Something went wrong. Try again.
2.2 kB · 73 lines
PHP
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374<?php
final class PhabricatorProjectBoardReloadController extends PhabricatorProjectBoardController {
public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer();
$response = $this->loadProject(); if ($response) { return $response; }
$order = $request->getStr('order'); if (!strlen($order)) { $order = PhabricatorProjectColumnNaturalOrder::ORDERKEY; }
$ordering = PhabricatorProjectColumnOrder::getOrderByKey($order); $ordering = id(clone $ordering) ->setViewer($viewer);
$project = $this->getProject(); $state = $this->getViewState(); $board_uri = $state->newWorkboardURI();
$layout_engine = $state->getLayoutEngine();
$board_phid = $project->getPHID();
$objects = $state->getObjects(); $objects = mpull($objects, null, 'getPHID');
try { $client_state = $request->getStr('state'); $client_state = phutil_json_decode($client_state); } catch (PhutilJSONParserException $ex) { $client_state = array(); }
// Figure out which objects need to be updated: either the client has an // out-of-date version of them (objects which have been edited); or they // exist on the client but not on the server (objects which have been // removed from the board); or they exist on the server but not on the // client (objects which have been added to the board).
$update_objects = array(); foreach ($objects as $object_phid => $object) {
// TODO: For now, this is always hard-coded. $object_version = 2;
$client_version = idx($client_state, $object_phid, 0); if ($object_version > $client_version) { $update_objects[$object_phid] = $object; } }
$update_phids = array_keys($update_objects); $visible_phids = array_keys($client_state);
$engine = id(new PhabricatorBoardResponseEngine()) ->setViewer($viewer) ->setBoardPHID($board_phid) ->setOrdering($ordering) ->setObjects($objects) ->setUpdatePHIDs($update_phids) ->setVisiblePHIDs($visible_phids);
return $engine->buildResponse(); }
}