@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<?php
2
3final class PhabricatorProjectCoverController
4 extends PhabricatorProjectController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8
9 $request->validateCSRF();
10
11 $board_phid = $request->getStr('boardPHID');
12 $object_phid = $request->getStr('objectPHID');
13 $file_phid = $request->getStr('filePHID');
14
15 $object = id(new ManiphestTaskQuery())
16 ->setViewer($viewer)
17 ->withPHIDs(array($object_phid))
18 ->requireCapabilities(
19 array(
20 PhabricatorPolicyCapability::CAN_VIEW,
21 PhabricatorPolicyCapability::CAN_EDIT,
22 ))
23 ->executeOne();
24 if (!$object) {
25 return new Aphront404Response();
26 }
27
28 $file = id(new PhabricatorFileQuery())
29 ->setViewer($viewer)
30 ->withPHIDs(array($file_phid))
31 ->executeOne();
32 if (!$file) {
33 return new Aphront404Response();
34 }
35
36 $xactions = array();
37
38 // Set the new Cover Image.
39 $xactions[] = id(new ManiphestTransaction())
40 ->setTransactionType(ManiphestTaskCoverImageTransaction::TRANSACTIONTYPE)
41 ->setNewValue($file->getPHID());
42
43 $editor = id(new ManiphestTransactionEditor())
44 ->setActor($viewer)
45 ->setContinueOnMissingFields(true)
46 ->setContinueOnNoEffect(true)
47 ->setContentSourceFromRequest($request);
48
49 $editor->applyTransactions($object, $xactions);
50
51 return $this->newCardResponse($board_phid, $object_phid);
52 }
53
54}