Path: blob/master/src/applications/maniphest/storage/ManiphestTransaction.php
12256 views
<?php12final class ManiphestTransaction3extends PhabricatorModularTransaction {45const MAILTAG_STATUS = 'maniphest-status';6const MAILTAG_OWNER = 'maniphest-owner';7const MAILTAG_PRIORITY = 'maniphest-priority';8const MAILTAG_CC = 'maniphest-cc';9const MAILTAG_PROJECTS = 'maniphest-projects';10const MAILTAG_COMMENT = 'maniphest-comment';11const MAILTAG_COLUMN = 'maniphest-column';12const MAILTAG_UNBLOCK = 'maniphest-unblock';13const MAILTAG_OTHER = 'maniphest-other';141516public function getApplicationName() {17return 'maniphest';18}1920public function getApplicationTransactionType() {21return ManiphestTaskPHIDType::TYPECONST;22}2324public function getApplicationTransactionCommentObject() {25return new ManiphestTransactionComment();26}2728public function getBaseTransactionClass() {29return 'ManiphestTaskTransactionType';30}3132public function shouldGenerateOldValue() {33switch ($this->getTransactionType()) {34case ManiphestTaskEdgeTransaction::TRANSACTIONTYPE:35case ManiphestTaskUnblockTransaction::TRANSACTIONTYPE:36return false;37}3839return parent::shouldGenerateOldValue();40}4142public function getRequiredHandlePHIDs() {43$phids = parent::getRequiredHandlePHIDs();4445$new = $this->getNewValue();46$old = $this->getOldValue();4748switch ($this->getTransactionType()) {49case ManiphestTaskOwnerTransaction::TRANSACTIONTYPE:50if ($new) {51$phids[] = $new;52}5354if ($old) {55$phids[] = $old;56}57break;58case ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE:59$phids[] = $new;60break;61case ManiphestTaskMergedFromTransaction::TRANSACTIONTYPE:62$phids = array_merge($phids, $new);63break;64case ManiphestTaskEdgeTransaction::TRANSACTIONTYPE:65$phids = array_mergev(66array(67$phids,68array_keys(nonempty($old, array())),69array_keys(nonempty($new, array())),70));71break;72case ManiphestTaskAttachTransaction::TRANSACTIONTYPE:73$old = nonempty($old, array());74$new = nonempty($new, array());75$phids = array_mergev(76array(77$phids,78array_keys(idx($new, 'FILE', array())),79array_keys(idx($old, 'FILE', array())),80));81break;82case ManiphestTaskUnblockTransaction::TRANSACTIONTYPE:83foreach (array_keys($new) as $phid) {84$phids[] = $phid;85}86break;87case ManiphestTaskStatusTransaction::TRANSACTIONTYPE:88$commit_phid = $this->getMetadataValue('commitPHID');89if ($commit_phid) {90$phids[] = $commit_phid;91}92break;93}9495return $phids;96}9798public function getActionName() {99$old = $this->getOldValue();100$new = $this->getNewValue();101switch ($this->getTransactionType()) {102case PhabricatorTransactions::TYPE_COLUMNS:103return pht('Changed Project Column');104}105106return parent::getActionName();107}108109public function getIcon() {110switch ($this->getTransactionType()) {111case PhabricatorTransactions::TYPE_COLUMNS:112return 'fa-columns';113}114115return parent::getIcon();116}117118119public function getTitle() {120$author_phid = $this->getAuthorPHID();121122$old = $this->getOldValue();123$new = $this->getNewValue();124125switch ($this->getTransactionType()) {126case PhabricatorTransactions::TYPE_SUBTYPE:127return pht(128'%s changed the subtype of this task from "%s" to "%s".',129$this->renderHandleLink($author_phid),130$this->renderSubtypeName($old),131$this->renderSubtypeName($new));132break;133}134135return parent::getTitle();136}137138public function getTitleForFeed() {139$author_phid = $this->getAuthorPHID();140$object_phid = $this->getObjectPHID();141142$old = $this->getOldValue();143$new = $this->getNewValue();144145switch ($this->getTransactionType()) {146case PhabricatorTransactions::TYPE_SUBTYPE:147return pht(148'%s changed the subtype of %s from "%s" to "%s".',149$this->renderHandleLink($author_phid),150$this->renderHandleLink($object_phid),151$this->renderSubtypeName($old),152$this->renderSubtypeName($new));153}154155return parent::getTitleForFeed();156}157158public function getMailTags() {159$tags = array();160switch ($this->getTransactionType()) {161case ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE:162case ManiphestTaskStatusTransaction::TRANSACTIONTYPE:163$tags[] = self::MAILTAG_STATUS;164break;165case ManiphestTaskOwnerTransaction::TRANSACTIONTYPE:166$tags[] = self::MAILTAG_OWNER;167break;168case PhabricatorTransactions::TYPE_SUBSCRIBERS:169$tags[] = self::MAILTAG_CC;170break;171case PhabricatorTransactions::TYPE_EDGE:172switch ($this->getMetadataValue('edge:type')) {173case PhabricatorProjectObjectHasProjectEdgeType::EDGECONST:174$tags[] = self::MAILTAG_PROJECTS;175break;176default:177$tags[] = self::MAILTAG_OTHER;178break;179}180break;181case ManiphestTaskPriorityTransaction::TRANSACTIONTYPE:182$tags[] = self::MAILTAG_PRIORITY;183break;184case ManiphestTaskUnblockTransaction::TRANSACTIONTYPE:185$tags[] = self::MAILTAG_UNBLOCK;186break;187case PhabricatorTransactions::TYPE_COLUMNS:188$tags[] = self::MAILTAG_COLUMN;189break;190case PhabricatorTransactions::TYPE_COMMENT:191$tags[] = self::MAILTAG_COMMENT;192break;193default:194$tags[] = self::MAILTAG_OTHER;195break;196}197return $tags;198}199200public function getNoEffectDescription() {201switch ($this->getTransactionType()) {202case ManiphestTaskStatusTransaction::TRANSACTIONTYPE:203return pht('The task already has the selected status.');204case ManiphestTaskOwnerTransaction::TRANSACTIONTYPE:205return pht('The task already has the selected owner.');206case ManiphestTaskPriorityTransaction::TRANSACTIONTYPE:207return pht('The task already has the selected priority.');208}209210return parent::getNoEffectDescription();211}212213public function renderSubtypeName($value) {214$object = $this->getObject();215$map = $object->newEditEngineSubtypeMap();216217if (!$map->isValidSubtype($value)) {218return $value;219}220221return $map->getSubtype($value)->getName();222}223224}225226227