protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case ManiphestTransaction::TYPE_PRIORITY:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return (int) $object->getPriority();
         case ManiphestTransaction::TYPE_STATUS:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getStatus();
         case ManiphestTransaction::TYPE_TITLE:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getTitle();
         case ManiphestTransaction::TYPE_DESCRIPTION:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getDescription();
         case ManiphestTransaction::TYPE_OWNER:
             return nonempty($object->getOwnerPHID(), null);
         case ManiphestTransaction::TYPE_PROJECT_COLUMN:
             // These are pre-populated.
             return $xaction->getOldValue();
         case ManiphestTransaction::TYPE_SUBPRIORITY:
             return $object->getSubpriority();
         case ManiphestTransaction::TYPE_MERGED_INTO:
         case ManiphestTransaction::TYPE_MERGED_FROM:
             return null;
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorProjectTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorProjectTransaction::TYPE_SLUGS:
             $slugs = $object->getSlugs();
             $slugs = mpull($slugs, 'getSlug', 'getSlug');
             unset($slugs[$object->getPrimarySlug()]);
             return array_keys($slugs);
         case PhabricatorProjectTransaction::TYPE_STATUS:
             return $object->getStatus();
         case PhabricatorProjectTransaction::TYPE_IMAGE:
             return $object->getProfileImagePHID();
         case PhabricatorProjectTransaction::TYPE_ICON:
             return $object->getIcon();
         case PhabricatorProjectTransaction::TYPE_COLOR:
             return $object->getColor();
         case PhabricatorProjectTransaction::TYPE_LOCKED:
             return (int) $object->getIsMembershipLocked();
         case PhabricatorProjectTransaction::TYPE_PARENT:
         case PhabricatorProjectTransaction::TYPE_MILESTONE:
             return null;
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorProjectTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorProjectTransaction::TYPE_SLUGS:
             $slugs = $object->getSlugs();
             $slugs = mpull($slugs, 'getSlug', 'getSlug');
             unset($slugs[$object->getPrimarySlug()]);
             return array_keys($slugs);
         case PhabricatorProjectTransaction::TYPE_STATUS:
             return $object->getStatus();
         case PhabricatorProjectTransaction::TYPE_IMAGE:
             return $object->getProfileImagePHID();
         case PhabricatorProjectTransaction::TYPE_ICON:
             return $object->getIcon();
         case PhabricatorProjectTransaction::TYPE_COLOR:
             return $object->getColor();
         case PhabricatorProjectTransaction::TYPE_LOCKED:
             return (int) $object->getIsMembershipLocked();
         case PhabricatorProjectTransaction::TYPE_HASWORKBOARD:
             return (int) $object->getHasWorkboard();
         case PhabricatorProjectTransaction::TYPE_PARENT:
         case PhabricatorProjectTransaction::TYPE_MILESTONE:
             return null;
         case PhabricatorProjectTransaction::TYPE_DEFAULT_SORT:
             return $object->getDefaultWorkboardSort();
         case PhabricatorProjectTransaction::TYPE_DEFAULT_FILTER:
             return $object->getDefaultWorkboardFilter();
         case PhabricatorProjectTransaction::TYPE_BACKGROUND:
             return $object->getWorkboardBackgroundColor();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case FundBackerTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorProjectColumnTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorProjectColumnTransaction::TYPE_STATUS:
             return $object->getStatus();
         case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
             return $object->getPointLimit();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case FundInitiativeTransaction::TYPE_NAME:
             return $object->getName();
         case FundInitiativeTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case FundInitiativeTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PonderQuestionTransaction::TYPE_TITLE:
             return $object->getTitle();
         case PonderQuestionTransaction::TYPE_CONTENT:
             return $object->getContent();
         case PonderQuestionTransaction::TYPE_ANSWERS:
             return mpull($object->getAnswers(), 'getPHID');
         case PonderQuestionTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhameBlogTransaction::TYPE_NAME:
             return $object->getName();
         case PhameBlogTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PhameBlogTransaction::TYPE_DOMAIN:
             return $object->getDomain();
         case PhameBlogTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorPasteTransaction::TYPE_CONTENT:
             return $object->getFilePHID();
         case PhabricatorPasteTransaction::TYPE_TITLE:
             return $object->getTitle();
         case PhabricatorPasteTransaction::TYPE_LANGUAGE:
             return $object->getLanguage();
         case PhabricatorPasteTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorBadgesTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorBadgesTransaction::TYPE_FLAVOR:
             return $object->getFlavor();
         case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PhabricatorBadgesTransaction::TYPE_ICON:
             return $object->getIcon();
         case PhabricatorBadgesTransaction::TYPE_QUALITY:
             return $object->getQuality();
         case PhabricatorBadgesTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PholioTransactionType::TYPE_NAME:
             return $object->getName();
         case PholioTransactionType::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PholioTransactionType::TYPE_STATUS:
             return $object->getStatus();
         case PholioTransactionType::TYPE_IMAGE_FILE:
             $images = $object->getImages();
             return mpull($images, 'getPHID');
         case PholioTransactionType::TYPE_IMAGE_NAME:
             $name = null;
             $phid = null;
             $image = $this->getImageForXaction($object, $xaction);
             if ($image) {
                 $name = $image->getName();
                 $phid = $image->getPHID();
             }
             return array($phid => $name);
         case PholioTransactionType::TYPE_IMAGE_DESCRIPTION:
             $description = null;
             $phid = null;
             $image = $this->getImageForXaction($object, $xaction);
             if ($image) {
                 $description = $image->getDescription();
                 $phid = $image->getPHID();
             }
             return array($phid => $description);
         case PholioTransactionType::TYPE_IMAGE_REPLACE:
             $raw = $xaction->getNewValue();
             return $raw->getReplacesImagePHID();
         case PholioTransactionType::TYPE_IMAGE_SEQUENCE:
             $sequence = null;
             $phid = null;
             $image = $this->getImageForXaction($object, $xaction);
             if ($image) {
                 $sequence = $image->getSequence();
                 $phid = $image->getPHID();
             }
             return array($phid => $sequence);
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case ManiphestTransaction::TYPE_PRIORITY:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return (int) $object->getPriority();
         case ManiphestTransaction::TYPE_STATUS:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getStatus();
         case ManiphestTransaction::TYPE_TITLE:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getTitle();
         case ManiphestTransaction::TYPE_DESCRIPTION:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getDescription();
         case ManiphestTransaction::TYPE_OWNER:
             return nonempty($object->getOwnerPHID(), null);
         case ManiphestTransaction::TYPE_SUBPRIORITY:
             return $object->getSubpriority();
         case ManiphestTransaction::TYPE_COVER_IMAGE:
             return $object->getCoverImageFilePHID();
         case ManiphestTransaction::TYPE_POINTS:
             $points = $object->getPoints();
             if ($points !== null) {
                 $points = (double) $points;
             }
             return $points;
         case ManiphestTransaction::TYPE_MERGED_INTO:
         case ManiphestTransaction::TYPE_MERGED_FROM:
             return null;
         case ManiphestTransaction::TYPE_PARENT:
         case PhabricatorTransactions::TYPE_COLUMNS:
             return null;
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case FundInitiativeTransaction::TYPE_NAME:
             return $object->getName();
         case FundInitiativeTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case FundInitiativeTransaction::TYPE_RISKS:
             return $object->getRisks();
         case FundInitiativeTransaction::TYPE_STATUS:
             return $object->getStatus();
         case FundInitiativeTransaction::TYPE_BACKER:
         case FundInitiativeTransaction::TYPE_REFUND:
             return null;
         case FundInitiativeTransaction::TYPE_MERCHANT:
             return $object->getMerchantPHID();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorOwnersPackageTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
             $phids = mpull($object->getOwners(), 'getUserPHID');
             $phids = array_values($phids);
             return $phids;
         case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
             return (int) $object->getAuditingEnabled();
         case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
             $paths = $object->getPaths();
             return mpull($paths, 'getRef');
         case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorProjectTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorProjectTransaction::TYPE_SLUGS:
             $slugs = $object->getSlugs();
             $slugs = mpull($slugs, 'getSlug', 'getSlug');
             unset($slugs[$object->getPrimarySlug()]);
             return $slugs;
         case PhabricatorProjectTransaction::TYPE_STATUS:
             return $object->getStatus();
         case PhabricatorProjectTransaction::TYPE_IMAGE:
             return $object->getProfileImagePHID();
         case PhabricatorProjectTransaction::TYPE_ICON:
             return $object->getIcon();
         case PhabricatorProjectTransaction::TYPE_COLOR:
             return $object->getColor();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorDashboardTransaction::TYPE_NAME:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getName();
         case PhabricatorDashboardTransaction::TYPE_STATUS:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getStatus();
         case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
             if ($this->getIsNewObject()) {
                 return null;
             }
             $layout_config = $object->getLayoutConfigObject();
             return $layout_config->getLayoutMode();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorBadgesTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorBadgesTransaction::TYPE_FLAVOR:
             return $object->getFlavor();
         case PhabricatorBadgesTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PhabricatorBadgesTransaction::TYPE_ICON:
             return $object->getIcon();
         case PhabricatorBadgesTransaction::TYPE_QUALITY:
             return $object->getQuality();
         case PhabricatorBadgesTransaction::TYPE_STATUS:
             return $object->getStatus();
         case PhabricatorBadgesTransaction::TYPE_AWARD:
             $award_phids = mpull($object->getAwards(), 'getRecipientPHID');
             return $award_phids;
         case PhabricatorBadgesTransaction::TYPE_REVOKE:
             return null;
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhameBlogTransaction::TYPE_NAME:
             return $object->getName();
         case PhameBlogTransaction::TYPE_SUBTITLE:
             return $object->getSubtitle();
         case PhameBlogTransaction::TYPE_DESCRIPTION:
             return $object->getDescription();
         case PhameBlogTransaction::TYPE_FULLDOMAIN:
             return $object->getDomainFullURI();
         case PhameBlogTransaction::TYPE_PARENTSITE:
             return $object->getParentSite();
         case PhameBlogTransaction::TYPE_PARENTDOMAIN:
             return $object->getParentDomain();
         case PhameBlogTransaction::TYPE_PROFILEIMAGE:
             return $object->getProfileImagePHID();
         case PhameBlogTransaction::TYPE_HEADERIMAGE:
             return $object->getHeaderImagePHID();
         case PhameBlogTransaction::TYPE_STATUS:
             return $object->getStatus();
     }
 }
 protected function applyCustomInternalTransaction(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW;
     $status_revision = ArcanistDifferentialRevisionStatus::NEEDS_REVISION;
     $status_plan = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED;
     switch ($xaction->getTransactionType()) {
         case PhabricatorTransactions::TYPE_VIEW_POLICY:
             $object->setViewPolicy($xaction->getNewValue());
             return;
         case PhabricatorTransactions::TYPE_EDIT_POLICY:
             $object->setEditPolicy($xaction->getNewValue());
             return;
         case PhabricatorTransactions::TYPE_SUBSCRIBERS:
         case PhabricatorTransactions::TYPE_COMMENT:
         case DifferentialTransaction::TYPE_INLINE:
             return;
         case PhabricatorTransactions::TYPE_EDGE:
             return;
         case DifferentialTransaction::TYPE_UPDATE:
             if (!$this->getIsCloseByCommit() && ($object->getStatus() == $status_revision || $object->getStatus() == $status_plan)) {
                 $object->setStatus($status_review);
             }
             $diff = $this->requireDiff($xaction->getNewValue());
             $object->setLineCount($diff->getLineCount());
             $object->setRepositoryPHID($diff->getRepositoryPHID());
             $object->setArcanistProjectPHID($diff->getArcanistProjectPHID());
             $object->attachActiveDiff($diff);
             // TODO: Update the `diffPHID` once we add that.
             return;
         case DifferentialTransaction::TYPE_ACTION:
             switch ($xaction->getNewValue()) {
                 case DifferentialAction::ACTION_RESIGN:
                 case DifferentialAction::ACTION_ACCEPT:
                 case DifferentialAction::ACTION_REJECT:
                     // These have no direct effects, and affect review status only
                     // indirectly by altering reviewers with TYPE_EDGE transactions.
                     return;
                 case DifferentialAction::ACTION_ABANDON:
                     $object->setStatus(ArcanistDifferentialRevisionStatus::ABANDONED);
                     return;
                 case DifferentialAction::ACTION_RETHINK:
                     $object->setStatus($status_plan);
                     return;
                 case DifferentialAction::ACTION_RECLAIM:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_REOPEN:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_REQUEST:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_CLOSE:
                     $object->setStatus(ArcanistDifferentialRevisionStatus::CLOSED);
                     return;
                 case DifferentialAction::ACTION_CLAIM:
                     $object->setAuthorPHID($this->getActingAsPHID());
                     return;
             }
             break;
     }
     return parent::applyCustomInternalTransaction($object, $xaction);
 }
 protected function applyCustomInternalTransaction(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW;
     $status_revision = ArcanistDifferentialRevisionStatus::NEEDS_REVISION;
     $status_plan = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED;
     $status_abandoned = ArcanistDifferentialRevisionStatus::ABANDONED;
     switch ($xaction->getTransactionType()) {
         case DifferentialTransaction::TYPE_INLINE:
             return;
         case DifferentialTransaction::TYPE_UPDATE:
             if (!$this->getIsCloseByCommit()) {
                 switch ($object->getStatus()) {
                     case $status_revision:
                     case $status_plan:
                     case $status_abandoned:
                         $object->setStatus($status_review);
                         break;
                 }
             }
             $diff = $this->requireDiff($xaction->getNewValue());
             $object->setLineCount($diff->getLineCount());
             if ($this->repositoryPHIDOverride !== false) {
                 $object->setRepositoryPHID($this->repositoryPHIDOverride);
             } else {
                 $object->setRepositoryPHID($diff->getRepositoryPHID());
             }
             $object->attachActiveDiff($diff);
             // TODO: Update the `diffPHID` once we add that.
             return;
         case DifferentialTransaction::TYPE_ACTION:
             switch ($xaction->getNewValue()) {
                 case DifferentialAction::ACTION_RESIGN:
                 case DifferentialAction::ACTION_ACCEPT:
                 case DifferentialAction::ACTION_REJECT:
                     // These have no direct effects, and affect review status only
                     // indirectly by altering reviewers with TYPE_EDGE transactions.
                     return;
                 case DifferentialAction::ACTION_ABANDON:
                     $object->setStatus(ArcanistDifferentialRevisionStatus::ABANDONED);
                     return;
                 case DifferentialAction::ACTION_RETHINK:
                     $object->setStatus($status_plan);
                     return;
                 case DifferentialAction::ACTION_RECLAIM:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_REOPEN:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_REQUEST:
                     $object->setStatus($status_review);
                     return;
                 case DifferentialAction::ACTION_CLOSE:
                     $object->setStatus(ArcanistDifferentialRevisionStatus::CLOSED);
                     return;
                 case DifferentialAction::ACTION_CLAIM:
                     $object->setAuthorPHID($this->getActingAsPHID());
                     return;
                 default:
                     throw new Exception(pht('Differential action "%s" is not a valid action!', $xaction->getNewValue()));
             }
             break;
     }
     return parent::applyCustomInternalTransaction($object, $xaction);
 }