[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorTokenGivenEditor 4 extends PhabricatorEditor { 5 6 private $contentSource; 7 8 public function setContentSource(PhabricatorContentSource $content_source) { 9 $this->contentSource = $content_source; 10 return $this; 11 } 12 13 public function getContentSource() { 14 return $this->contentSource; 15 } 16 17 public function addToken($object_phid, $token_phid) { 18 $token = $this->validateToken($token_phid); 19 $object = $this->validateObject($object_phid); 20 $current_token = $this->loadCurrentToken($object); 21 22 $actor = $this->requireActor(); 23 24 $token_given = id(new PhabricatorTokenGiven()) 25 ->setAuthorPHID($actor->getPHID()) 26 ->setObjectPHID($object->getPHID()) 27 ->setTokenPHID($token->getPHID()); 28 29 $token_given->openTransaction(); 30 31 if ($current_token) { 32 $this->executeDeleteToken($object, $current_token); 33 } 34 35 $token_given->save(); 36 37 queryfx( 38 $token_given->establishConnection('w'), 39 'INSERT INTO %T (objectPHID, tokenCount) VALUES (%s, 1) 40 ON DUPLICATE KEY UPDATE tokenCount = tokenCount + 1', 41 id(new PhabricatorTokenCount())->getTableName(), 42 $object->getPHID()); 43 44 $token_given->saveTransaction(); 45 46 $current_token_phid = null; 47 if ($current_token) { 48 $current_token_phid = $current_token->getTokenPHID(); 49 } 50 51 $this->publishTransaction( 52 $object, 53 $current_token_phid, 54 $token->getPHID()); 55 56 $subscribed_phids = $object->getUsersToNotifyOfTokenGiven(); 57 if ($subscribed_phids) { 58 $related_phids = $subscribed_phids; 59 $related_phids[] = $actor->getPHID(); 60 61 $story_type = 'PhabricatorTokenGivenFeedStory'; 62 $story_data = array( 63 'authorPHID' => $actor->getPHID(), 64 'tokenPHID' => $token->getPHID(), 65 'objectPHID' => $object->getPHID(), 66 ); 67 68 id(new PhabricatorFeedStoryPublisher()) 69 ->setStoryType($story_type) 70 ->setStoryData($story_data) 71 ->setStoryTime(time()) 72 ->setStoryAuthorPHID($actor->getPHID()) 73 ->setRelatedPHIDs($related_phids) 74 ->setPrimaryObjectPHID($object->getPHID()) 75 ->setSubscribedPHIDs($subscribed_phids) 76 ->publish(); 77 } 78 79 return $token_given; 80 } 81 82 public function deleteToken($object_phid) { 83 $object = $this->validateObject($object_phid); 84 $token_given = $this->loadCurrentToken($object); 85 if (!$token_given) { 86 return; 87 } 88 89 $this->executeDeleteToken($object, $token_given); 90 $this->publishTransaction( 91 $object, 92 $token_given->getTokenPHID(), 93 null); 94 } 95 96 private function executeDeleteToken( 97 PhabricatorTokenReceiverInterface $object, 98 PhabricatorTokenGiven $token_given) { 99 100 $token_given->openTransaction(); 101 $token_given->delete(); 102 103 queryfx( 104 $token_given->establishConnection('w'), 105 'INSERT INTO %T (objectPHID, tokenCount) VALUES (%s, 0) 106 ON DUPLICATE KEY UPDATE tokenCount = tokenCount - 1', 107 id(new PhabricatorTokenCount())->getTableName(), 108 $object->getPHID()); 109 $token_given->saveTransaction(); 110 } 111 112 private function validateToken($token_phid) { 113 $token = id(new PhabricatorTokenQuery()) 114 ->setViewer($this->requireActor()) 115 ->withPHIDs(array($token_phid)) 116 ->executeOne(); 117 118 if (!$token) { 119 throw new Exception(pht('No such token "%s"!', $token_phid)); 120 } 121 122 return $token; 123 } 124 125 private function validateObject($object_phid) { 126 $object = id(new PhabricatorObjectQuery()) 127 ->setViewer($this->requireActor()) 128 ->withPHIDs(array($object_phid)) 129 ->executeOne(); 130 131 if (!$object) { 132 throw new Exception(pht('No such object "%s"!', $object_phid)); 133 } 134 135 return $object; 136 } 137 138 private function loadCurrentToken(PhabricatorTokenReceiverInterface $object) { 139 return id(new PhabricatorTokenGiven())->loadOneWhere( 140 'authorPHID = %s AND objectPHID = %s', 141 $this->requireActor()->getPHID(), 142 $object->getPHID()); 143 } 144 145 146 private function publishTransaction( 147 PhabricatorTokenReceiverInterface $object, 148 $old_token_phid, 149 $new_token_phid) { 150 151 if (!($object instanceof PhabricatorApplicationTransactionInterface)) { 152 return; 153 } 154 155 $actor = $this->requireActor(); 156 157 $xactions = array(); 158 $xactions[] = id($object->getApplicationTransactionTemplate()) 159 ->setTransactionType(PhabricatorTransactions::TYPE_TOKEN) 160 ->setOldValue($old_token_phid) 161 ->setNewValue($new_token_phid); 162 163 $editor = $object->getApplicationTransactionEditor() 164 ->setActor($actor) 165 ->setContentSource($this->getContentSource()) 166 ->setContinueOnNoEffect(true) 167 ->setContinueOnMissingFields(true); 168 169 $editor->applyTransactions( 170 $object->getApplicationTransactionObject(), 171 $xactions); 172 } 173 174 }
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 |