@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
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 138 lines 3.3 kB view raw
1<?php 2 3final class PhabricatorPasteContentTransaction 4 extends PhabricatorPasteTransactionType { 5 6 const TRANSACTIONTYPE = 'paste.create'; 7 8 private $filePHID; 9 10 public function generateOldValue($object) { 11 return $object->getFilePHID(); 12 } 13 14 public function applyInternalEffects($object, $value) { 15 $object->setFilePHID($value); 16 } 17 18 public function extractFilePHIDs($object, $value) { 19 $file_phid = $this->getFilePHID($object, $value); 20 return array($file_phid); 21 } 22 23 public function validateTransactions($object, array $xactions) { 24 if ($object->getFilePHID() || $xactions) { 25 return array(); 26 } 27 28 $error = $this->newError( 29 pht('Required'), 30 pht('You must provide content to create a paste.')); 31 $error->setIsMissingFieldError(true); 32 33 return array($error); 34 } 35 36 public function generateNewValue($object, $value) { 37 return $this->getFilePHID($object, $value); 38 } 39 40 private function getFilePHID($object, $value) { 41 if ($this->filePHID === null) { 42 $this->filePHID = $this->newFilePHID($object, $value); 43 } 44 45 return $this->filePHID; 46 } 47 48 private function newFilePHID($object, $value) { 49 // If this transaction does not really change the paste content, return 50 // the current file PHID so this transaction no-ops. 51 $old_content = $object->getRawContent(); 52 if ($value === $old_content) { 53 $file_phid = $object->getFilePHID(); 54 if ($file_phid) { 55 return $file_phid; 56 } 57 } 58 59 $editor = $this->getEditor(); 60 $actor = $editor->getActor(); 61 62 $file = $this->newFileForPaste($actor, $value); 63 64 return $file->getPHID(); 65 } 66 67 private function newFileForPaste(PhabricatorUser $actor, $data) { 68 $editor = $this->getEditor(); 69 70 $file_name = $editor->getNewPasteTitle(); 71 if (!strlen($file_name)) { 72 $file_name = 'raw-paste-data.txt'; 73 } 74 75 return PhabricatorFile::newFromFileData( 76 $data, 77 array( 78 'name' => $file_name, 79 'mime-type' => 'text/plain; charset=utf-8', 80 'authorPHID' => $actor->getPHID(), 81 'viewPolicy' => PhabricatorPolicies::POLICY_NOONE, 82 )); 83 } 84 85 public function getIcon() { 86 return 'fa-plus'; 87 } 88 89 public function getTitle() { 90 return pht( 91 '%s edited the content of this paste.', 92 $this->renderAuthor()); 93 } 94 95 public function getTitleForFeed() { 96 return pht( 97 '%s edited %s.', 98 $this->renderAuthor(), 99 $this->renderObject()); 100 } 101 102 public function hasChangeDetailView() { 103 return true; 104 } 105 106 public function getMailDiffSectionHeader() { 107 return pht('CHANGES TO PASTE CONTENT'); 108 } 109 110 public function newChangeDetailView() { 111 $viewer = $this->getViewer(); 112 113 $old = $this->getOldValue(); 114 $new = $this->getNewValue(); 115 116 $files = id(new PhabricatorFileQuery()) 117 ->setViewer($viewer) 118 ->withPHIDs(array($old, $new)) 119 ->execute(); 120 $files = mpull($files, null, 'getPHID'); 121 122 $old_text = ''; 123 if (idx($files, $old)) { 124 $old_text = $files[$old]->loadFileData(); 125 } 126 127 $new_text = ''; 128 if (idx($files, $new)) { 129 $new_text = $files[$new]->loadFileData(); 130 } 131 132 return id(new PhabricatorApplicationTransactionTextDiffDetailView()) 133 ->setViewer($viewer) 134 ->setOldText($old_text) 135 ->setNewText($new_text); 136 } 137 138}