Path: blob/master/src/applications/owners/xaction/PhabricatorOwnersPackageOwnersTransaction.php
12256 views
<?php12final class PhabricatorOwnersPackageOwnersTransaction3extends PhabricatorOwnersPackageTransactionType {45const TRANSACTIONTYPE = 'owners.owners';67public function generateOldValue($object) {8$phids = mpull($object->getOwners(), 'getUserPHID');9$phids = array_values($phids);10return $phids;11}1213public function generateNewValue($object, $value) {14$phids = array_unique($value);15$phids = array_values($phids);16return $phids;17}1819public function applyExternalEffects($object, $value) {20$old = $this->generateOldValue($object);21$new = $value;2223$owners = $object->getOwners();24$owners = mpull($owners, null, 'getUserPHID');2526$rem = array_diff($old, $new);27foreach ($rem as $phid) {28if (isset($owners[$phid])) {29$owners[$phid]->delete();30unset($owners[$phid]);31}32}3334$add = array_diff($new, $old);35foreach ($add as $phid) {36$owners[$phid] = id(new PhabricatorOwnersOwner())37->setPackageID($object->getID())38->setUserPHID($phid)39->save();40}4142// TODO: Attach owners here43}4445public function getTitle() {46$old = $this->getOldValue();47$new = $this->getNewValue();4849$add = array_diff($new, $old);50$rem = array_diff($old, $new);51if ($add && !$rem) {52return pht(53'%s added %s owner(s): %s.',54$this->renderAuthor(),55count($add),56$this->renderHandleList($add));57} else if ($rem && !$add) {58return pht(59'%s removed %s owner(s): %s.',60$this->renderAuthor(),61count($rem),62$this->renderHandleList($rem));63} else {64return pht(65'%s changed %s package owner(s), added %s: %s; removed %s: %s.',66$this->renderAuthor(),67count($add) + count($rem),68count($add),69$this->renderHandleList($add),70count($rem),71$this->renderHandleList($rem));72}73}7475}767778