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

Switch File deletion to use ModularTransactions

Summary: Fixes T12587. Adds a new `PhabricatorFileDeleteTransaction` that enqueues `File` delete tasks.

Test Plan:
- hack `PhabricatorFileQuery` to ignore isDeleted state
- stop daemons
- upload a file, delete it from the UI
- check that the DB has updated isDeleted = 1
- check timeline rendering in `File` detail view
- start daemons
- confirm rows are deleted from DB

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin, thoughtpolice

Maniphest Tasks: T12587

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

+61 -7
+2
src/__phutil_library_map__.php
··· 2764 2764 'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php', 2765 2765 'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php', 2766 2766 'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php', 2767 + 'PhabricatorFileDeleteTransaction' => 'applications/files/xaction/PhabricatorFileDeleteTransaction.php', 2767 2768 'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php', 2768 2769 'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php', 2769 2770 'PhabricatorFileEditEngine' => 'applications/files/editor/PhabricatorFileEditEngine.php', ··· 7931 7932 'PhabricatorFileDAO' => 'PhabricatorLiskDAO', 7932 7933 'PhabricatorFileDataController' => 'PhabricatorFileController', 7933 7934 'PhabricatorFileDeleteController' => 'PhabricatorFileController', 7935 + 'PhabricatorFileDeleteTransaction' => 'PhabricatorFileTransactionType', 7934 7936 'PhabricatorFileDropUploadController' => 'PhabricatorFileController', 7935 7937 'PhabricatorFileEditController' => 'PhabricatorFileController', 7936 7938 'PhabricatorFileEditEngine' => 'PhabricatorEditEngine',
+11 -7
src/applications/files/controller/PhabricatorFileDeleteController.php
··· 26 26 } 27 27 28 28 if ($request->isFormPost()) { 29 - // Mark the file for deletion, save it, and schedule a worker to 30 - // sweep by later and pick it up. 31 - $file->setIsDeleted(true)->save(); 29 + $xactions = array(); 32 30 33 - PhabricatorWorker::scheduleTask( 34 - 'FileDeletionWorker', 35 - array('objectPHID' => $file->getPHID()), 36 - array('priority' => PhabricatorWorker::PRIORITY_BULK)); 31 + $xactions[] = id(new PhabricatorFileTransaction()) 32 + ->setTransactionType(PhabricatorFileDeleteTransaction::TRANSACTIONTYPE) 33 + ->setNewValue(true); 34 + 35 + id(new PhabricatorFileEditor()) 36 + ->setActor($viewer) 37 + ->setContentSourceFromRequest($request) 38 + ->setContinueOnNoEffect(true) 39 + ->setContinueOnMissingFields(true) 40 + ->applyTransactions($file, $xactions); 37 41 38 42 return id(new AphrontRedirectResponse())->setURI('/file/'); 39 43 }
+3
src/applications/files/storage/PhabricatorFile.php
··· 41 41 const METADATA_STORAGE = 'storage'; 42 42 const METADATA_INTEGRITY = 'integrity'; 43 43 44 + const STATUS_ACTIVE = 'active'; 45 + const STATUS_DELETED = 'deleted'; 46 + 44 47 protected $name; 45 48 protected $mimeType; 46 49 protected $byteSize;
+45
src/applications/files/xaction/PhabricatorFileDeleteTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorFileDeleteTransaction 4 + extends PhabricatorFileTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'file:delete'; 7 + 8 + public function generateOldValue($object) { 9 + return PhabricatorFile::STATUS_ACTIVE; 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $file = $object; 14 + // Mark the file for deletion, save it, and schedule a worker to 15 + // sweep by later and pick it up. 16 + $file->setIsDeleted(true); 17 + 18 + PhabricatorWorker::scheduleTask( 19 + 'FileDeletionWorker', 20 + array('objectPHID' => $file->getPHID()), 21 + array('priority' => PhabricatorWorker::PRIORITY_BULK)); 22 + } 23 + 24 + public function getIcon() { 25 + return 'fa-ban'; 26 + } 27 + 28 + public function getColor() { 29 + return 'red'; 30 + } 31 + 32 + public function getTitle() { 33 + return pht( 34 + '%s deleted this file.', 35 + $this->renderAuthor()); 36 + } 37 + 38 + public function getTitleForFeed() { 39 + return pht( 40 + '%s deleted %s.', 41 + $this->renderAuthor(), 42 + $this->renderObject()); 43 + } 44 + 45 + }