[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class DifferentialCommentPreviewController 4 extends DifferentialController { 5 6 private $id; 7 8 public function willProcessRequest(array $data) { 9 $this->id = $data['id']; 10 } 11 12 public function processRequest() { 13 $request = $this->getRequest(); 14 $viewer = $request->getUser(); 15 16 $revision = id(new DifferentialRevisionQuery()) 17 ->setViewer($viewer) 18 ->withIDs(array($this->id)) 19 ->executeOne(); 20 if (!$revision) { 21 return new Aphront404Response(); 22 } 23 24 $type_comment = PhabricatorTransactions::TYPE_COMMENT; 25 $type_action = DifferentialTransaction::TYPE_ACTION; 26 $type_edge = PhabricatorTransactions::TYPE_EDGE; 27 $type_subscribers = PhabricatorTransactions::TYPE_SUBSCRIBERS; 28 29 $xactions = array(); 30 31 $action = $request->getStr('action'); 32 switch ($action) { 33 case DifferentialAction::ACTION_COMMENT: 34 case DifferentialAction::ACTION_ADDREVIEWERS: 35 case DifferentialAction::ACTION_ADDCCS: 36 break; 37 default: 38 $xactions[] = id(new DifferentialTransaction()) 39 ->setTransactionType($type_action) 40 ->setNewValue($action); 41 break; 42 } 43 44 $edge_reviewer = PhabricatorEdgeConfig::TYPE_DREV_HAS_REVIEWER; 45 46 $reviewers = $request->getStrList('reviewers'); 47 if (DifferentialAction::allowReviewers($action) && $reviewers) { 48 $faux_edges = array(); 49 foreach ($reviewers as $phid) { 50 $faux_edges[$phid] = array( 51 'src' => $revision->getPHID(), 52 'type' => $edge_reviewer, 53 'dst' => $phid, 54 ); 55 } 56 57 $xactions[] = id(new DifferentialTransaction()) 58 ->setTransactionType($type_edge) 59 ->setMetadataValue('edge:type', $edge_reviewer) 60 ->setOldValue(array()) 61 ->setNewValue($faux_edges); 62 } 63 64 $ccs = $request->getStrList('ccs'); 65 if ($ccs) { 66 $xactions[] = id(new DifferentialTransaction()) 67 ->setTransactionType($type_subscribers) 68 ->setOldValue(array()) 69 ->setNewValue(array_fuse($ccs)); 70 } 71 72 // Add a comment transaction if there's nothing, so we'll generate a 73 // nonempty result. 74 if (strlen($request->getStr('content')) || !$xactions) { 75 $xactions[] = id(new DifferentialTransaction()) 76 ->setTransactionType($type_comment) 77 ->attachComment( 78 id(new ManiphestTransactionComment()) 79 ->setContent($request->getStr('content'))); 80 } 81 82 foreach ($xactions as $xaction) { 83 $xaction->setAuthorPHID($viewer->getPHID()); 84 } 85 86 $engine = new PhabricatorMarkupEngine(); 87 $engine->setViewer($request->getUser()); 88 foreach ($xactions as $xaction) { 89 if ($xaction->hasComment()) { 90 $engine->addObject( 91 $xaction->getComment(), 92 PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); 93 } 94 } 95 $engine->process(); 96 97 $phids = mpull($xactions, 'getRequiredHandlePHIDs'); 98 $phids = array_mergev($phids); 99 100 $handles = id(new PhabricatorHandleQuery()) 101 ->setViewer($viewer) 102 ->withPHIDs($phids) 103 ->execute(); 104 105 foreach ($xactions as $xaction) { 106 $xaction->setHandles($handles); 107 } 108 109 $view = id(new DifferentialTransactionView()) 110 ->setUser($viewer) 111 ->setTransactions($xactions) 112 ->setIsPreview(true); 113 114 $metadata = array( 115 'reviewers' => $reviewers, 116 'ccs' => $ccs, 117 ); 118 if ($action != DifferentialAction::ACTION_COMMENT) { 119 $metadata['action'] = $action; 120 } 121 122 $draft_key = 'differential-comment-'.$this->id; 123 $draft = id(new PhabricatorDraft()) 124 ->setAuthorPHID($viewer->getPHID()) 125 ->setDraftKey($draft_key) 126 ->setDraft($request->getStr('content')) 127 ->setMetadata($metadata) 128 ->replaceOrDelete(); 129 if ($draft->isDeleted()) { 130 DifferentialDraft::deleteHasDraft( 131 $viewer->getPHID(), 132 $revision->getPHID(), 133 $draft_key); 134 } else { 135 DifferentialDraft::markHasDraft( 136 $viewer->getPHID(), 137 $revision->getPHID(), 138 $draft_key); 139 } 140 141 return id(new AphrontAjaxResponse()) 142 ->setContent((string)phutil_implode_html('', $view->buildEvents())); 143 } 144 145 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |